diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 406434df..2461b703 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,7 +7,7 @@ Build and test: services: - docker:dind before_script: - - apk add black=20.8_beta1-r0 py3-flake8 docker-compose make + - apk add black=20.8_beta1-r0 py3-flake8 py3-isort docker-compose make script: - cd contrib/docker - make build diff --git a/HACKING.md b/HACKING.md index bb0e9c93..f65807e8 100644 --- a/HACKING.md +++ b/HACKING.md @@ -113,26 +113,23 @@ All new Debsources code should be [PEP8][1] compliant and pass [pyflakes][2] validation. Before submitting patches, please make sure that the lines of code they touch conform to such requirements. -Additionally, `black` [3] is used to format Python source files. +Additionally, `black` [3] and `isort` [4] are used to format Python source +files. [1]: https://www.python.org/dev/peps/pep-0008/ [2]: https://pypi.python.org/pypi/pyflakes [3]: https://black.readthedocs.io/en/stable/ +[4]: https://pycqa.github.io/isort/ -If you develop on Debian(-based distros), a good way to check that this is the -case is: - - # apt-get install python-flake8 - $ flake8 file1.py file2.py ... - -You can check all Debsources Python source files black and flake8 compliance -with: +If you develop on Debian(-based distros), a good way to apply formatting and +check that everything is good is: + # apt-get install flake8 isort + $ python3 -m pip install --user black + $ make format $ make check -You can add a pre-commit hook to automatically test PEP8 compliance: +You can add a pre-commit hook to automatically test PEP8 compliance (might be +outdated): $ ln -s ../../contrib/git-pre-commit .git/hooks/pre-commit - -If you stumble upon Debsources source files that are not flake8-compliant, -patches that put them back in compliance are more than welcome (hint hint). diff --git a/Makefile b/Makefile index ec149b56..fa214ee6 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,8 @@ NOSE = nosetests3 FLAKE = flake8 --max-line-length 88 --ignore=E203,W503 # E203 (whitespace before ':') conflicts with black formatting # W503 (line break before binary operator), ditto -BLACK = black --check +BLACK = black +ISORT = isort --profile black --dont-follow-links -p debsources SRCDIR = lib/debsources BINDIR = bin @@ -32,7 +33,13 @@ test-coverage: check: $(FLAKE) $(SRCDIR)/ $(shell grep -H 'env python' $(BINDIR)/debsources-* | cut -f 1 -d :) + $(BLACK) --check $(SRCDIR) +# deactivated for now - until isort>=5 is available on Alpine Linux for CICD pipeline +# $(ISORT) --check $(SRCDIR) $(BINDIR) + +format: $(BLACK) $(SRCDIR) + $(ISORT) $(SRCDIR) $(BINDIR) test-online-app: contrib/test-online-app diff --git a/bin/debsources-bulk-insert-checksums b/bin/debsources-bulk-insert-checksums index 05ec01d1..f383fff6 100755 --- a/bin/debsources-bulk-insert-checksums +++ b/bin/debsources-bulk-insert-checksums @@ -12,16 +12,14 @@ # see the COPYING file at the top-level directory of this distribution and at # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from __future__ import absolute_import import argparse import logging -from sqlalchemy import create_engine, bindparam, LargeBinary +from sqlalchemy import LargeBinary, bindparam, create_engine from sqlalchemy.sql import text as sql_query -from debsources import mainlib -from debsources import fs_storage +from debsources import fs_storage, mainlib from debsources.plugins.hook_checksums import parse_checksums METADATA_SUFFIX = ".checksums" diff --git a/bin/debsources-bulk-insert-ctags b/bin/debsources-bulk-insert-ctags index 752f1d83..f071660b 100755 --- a/bin/debsources-bulk-insert-ctags +++ b/bin/debsources-bulk-insert-ctags @@ -12,18 +12,14 @@ # see the COPYING file at the top-level directory of this distribution and at # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from __future__ import absolute_import import argparse import logging - -from debsources import mainlib - -from sqlalchemy import create_engine, bindparam, LargeBinary +from sqlalchemy import LargeBinary, bindparam, create_engine from sqlalchemy.sql import text as sql_query -from debsources import fs_storage +from debsources import fs_storage, mainlib from debsources.plugins.hook_ctags import parse_ctags METADATA_SUFFIX = ".ctags" diff --git a/bin/debsources-dbadmin b/bin/debsources-dbadmin index 0d665831..7a764b76 100755 --- a/bin/debsources-dbadmin +++ b/bin/debsources-dbadmin @@ -12,8 +12,6 @@ # see the COPYING file at the top-level directory of this distribution and at # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from __future__ import absolute_import -from __future__ import print_function import argparse import time @@ -22,7 +20,6 @@ from sqlalchemy import create_engine from debsources.models import Base - if __name__ == "__main__": start_time = time.time() diff --git a/bin/debsources-fsck b/bin/debsources-fsck index afd5fbca..91f69314 100755 --- a/bin/debsources-fsck +++ b/bin/debsources-fsck @@ -14,7 +14,6 @@ # Check for DB/FS inconsistencies -from __future__ import absolute_import import argparse import logging @@ -24,10 +23,7 @@ from pathlib import Path from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker -from debsources import mainlib -from debsources import db_storage -from debsources import fs_storage - +from debsources import db_storage, fs_storage, mainlib from debsources.debmirror import SourcePackage from debsources.models import Package diff --git a/bin/debsources-run-app b/bin/debsources-run-app index 9396658d..9b85de2e 100755 --- a/bin/debsources-run-app +++ b/bin/debsources-run-app @@ -12,8 +12,6 @@ # see the COPYING file at the top-level directory of this distribution and at # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from __future__ import absolute_import -from __future__ import print_function import argparse diff --git a/bin/debsources-shell b/bin/debsources-shell index 32a1a5df..4d28b312 100755 --- a/bin/debsources-shell +++ b/bin/debsources-shell @@ -12,16 +12,14 @@ # see the COPYING file at the top-level directory of this distribution and at # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from __future__ import absolute_import +import argparse import code import os import readline import rlcompleter # NOQA -import argparse -from debsources import mainlib -from debsources import sqla_session +from debsources import mainlib, sqla_session from debsources.models import * # NOQA diff --git a/bin/debsources-suite-archive b/bin/debsources-suite-archive index d4bc970c..0aebd4fb 100755 --- a/bin/debsources-suite-archive +++ b/bin/debsources-suite-archive @@ -12,18 +12,14 @@ # see the COPYING file at the top-level directory of this distribution and at # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from __future__ import absolute_import -from __future__ import print_function import argparse import logging -import sqlalchemy import sys +import sqlalchemy -from debsources import archiver -from debsources import debmirror -from debsources import mainlib +from debsources import archiver, debmirror, mainlib def main(): diff --git a/bin/debsources-update b/bin/debsources-update index 88db813c..dc3c6831 100755 --- a/bin/debsources-update +++ b/bin/debsources-update @@ -12,15 +12,14 @@ # see the COPYING file at the top-level directory of this distribution and at # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from __future__ import absolute_import import argparse import logging -import sqlalchemy import sys -from debsources import mainlib -from debsources import updater +import sqlalchemy + +from debsources import mainlib, updater def main(): diff --git a/lib/debsources/app/app_factory.py b/lib/debsources/app/app_factory.py index b201eea7..fd20bc8a 100644 --- a/lib/debsources/app/app_factory.py +++ b/lib/debsources/app/app_factory.py @@ -12,7 +12,7 @@ import logging -from logging import Formatter, FileHandler, StreamHandler +from logging import FileHandler, Formatter, StreamHandler from flask import Flask diff --git a/lib/debsources/app/copyright/routes.py b/lib/debsources/app/copyright/routes.py index 1c6971e6..05c21703 100644 --- a/lib/debsources/app/copyright/routes.py +++ b/lib/debsources/app/copyright/routes.py @@ -11,22 +11,23 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from flask import jsonify, request, render_template +from flask import jsonify, render_template, request + +from debsources.excepts import Http404Error from ..helper import bind_render, generic_before_request -from . import bp_copyright from ..views import ( + ErrorHandler, IndexView, - PrefixView, ListPackagesView, - ErrorHandler, - Ping, + NewsArchiveView, PackageVersionsView, + Ping, + PrefixView, SearchView, - NewsArchiveView, ) -from .views import LicenseView, ChecksumLicenseView, SearchFileView, StatsView -from debsources.excepts import Http404Error +from . import bp_copyright +from .views import ChecksumLicenseView, LicenseView, SearchFileView, StatsView # context vars diff --git a/lib/debsources/app/copyright/views.py b/lib/debsources/app/copyright/views.py index fe44b689..94ee52cd 100644 --- a/lib/debsources/app/copyright/views.py +++ b/lib/debsources/app/copyright/views.py @@ -11,28 +11,29 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from collections import defaultdict, Counter +from collections import Counter, defaultdict from functools import cmp_to_key from pathlib import Path -from flask import current_app, request -from debian.debian_support import version_compare from debian import copyright +from debian.debian_support import version_compare +from flask import current_app, request import debsources.license_helper as helper import debsources.query as qry import debsources.statistics as statistics from debsources.excepts import ( - Http404ErrorSuggestions, FileOrFolderNotFound, - InvalidPackageOrVersionError, - Http404MissingCopyright, Http404Error, + Http404ErrorSuggestions, + Http404MissingCopyright, + InvalidPackageOrVersionError, ) -from ..views import GeneralView, ChecksumView, session, app -from ..sourcecode import SourceCodeIterator -from ..pagination import Pagination + from ..extract_stats import extract_stats +from ..pagination import Pagination +from ..sourcecode import SourceCodeIterator +from ..views import ChecksumView, GeneralView, app, session class LicenseView(GeneralView): diff --git a/lib/debsources/app/doc/routes.py b/lib/debsources/app/doc/routes.py index 806969f6..27bfcfd7 100644 --- a/lib/debsources/app/doc/routes.py +++ b/lib/debsources/app/doc/routes.py @@ -11,10 +11,9 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from . import bp_doc - from ..helper import bind_render -from ..views import DocView, AboutView, ErrorHandler +from ..views import AboutView, DocView, ErrorHandler +from . import bp_doc # site errors # XXX 500 handler cannot be registered on a blueprint diff --git a/lib/debsources/app/forms.py b/lib/debsources/app/forms.py index c519cc60..ad850094 100644 --- a/lib/debsources/app/forms.py +++ b/lib/debsources/app/forms.py @@ -11,9 +11,9 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING +from flask_wtf import FlaskForm from wtforms import TextField from wtforms.validators import Required -from flask_wtf import FlaskForm class SearchForm(FlaskForm): diff --git a/lib/debsources/app/helper.py b/lib/debsources/app/helper.py index da4c81c8..b18be12e 100644 --- a/lib/debsources/app/helper.py +++ b/lib/debsources/app/helper.py @@ -12,13 +12,14 @@ from functools import cmp_to_key, partial -from debian.debian_support import version_compare -from flask import request, url_for, render_template, redirect +from debian.debian_support import version_compare +from flask import redirect, render_template, request, url_for import debsources.query as qry +from debsources.excepts import Http404Error, InvalidPackageOrVersionError from debsources.models import SuiteAlias -from debsources.excepts import InvalidPackageOrVersionError, Http404Error + from . import app_wrapper session = app_wrapper.session diff --git a/lib/debsources/app/infobox.py b/lib/debsources/app/infobox.py index 6be56477..a7517580 100644 --- a/lib/debsources/app/infobox.py +++ b/lib/debsources/app/infobox.py @@ -11,10 +11,10 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from flask import url_for, current_app +from flask import current_app, url_for -from debsources.models import PackageName, Package, Suite, SlocCount, Metric, Ctag -from debsources.excepts import Http500Error, Http404Error +from debsources.excepts import Http404Error, Http500Error +from debsources.models import Ctag, Metric, Package, PackageName, SlocCount, Suite PTS_PREFIX = "https://tracker.debian.org/pkg/" # XXX move this to configuration file? diff --git a/lib/debsources/app/patches/patches_helper.py b/lib/debsources/app/patches/patches_helper.py index fbc21484..b945a2b6 100644 --- a/lib/debsources/app/patches/patches_helper.py +++ b/lib/debsources/app/patches/patches_helper.py @@ -9,14 +9,13 @@ # of the License, or (at your option) any later version. For more information # see the COPYING file at the top-level directory of this distribution and at # https://salsa.debian.org/qa/debsources/blob/master/COPYING -import re import io import logging +import re import subprocess from debsources.navigation import Location, SourceFile - ACCEPTED_FORMATS = ["3.0 (quilt)", "3.0 (native)"] diff --git a/lib/debsources/app/patches/routes.py b/lib/debsources/app/patches/routes.py index b0ed8d0f..a312b275 100644 --- a/lib/debsources/app/patches/routes.py +++ b/lib/debsources/app/patches/routes.py @@ -11,22 +11,22 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from flask import jsonify, request, render_template +from flask import jsonify, render_template, request -from . import bp_patches +from debsources.excepts import Http404Error from ..helper import bind_render, generic_before_request from ..views import ( + ErrorHandler, IndexView, + ListPackagesView, + NewsArchiveView, Ping, PrefixView, - ErrorHandler, - ListPackagesView, SearchView, - NewsArchiveView, ) -from .views import SummaryView, PatchView, VersionsView -from debsources.excepts import Http404Error +from . import bp_patches +from .views import PatchView, SummaryView, VersionsView # context vars diff --git a/lib/debsources/app/patches/views.py b/lib/debsources/app/patches/views.py index 9b9d92bc..9424de6a 100644 --- a/lib/debsources/app/patches/views.py +++ b/lib/debsources/app/patches/views.py @@ -12,18 +12,20 @@ from collections import OrderedDict -from flask import request, current_app -from ..views import GeneralView, session +from flask import current_app, request + +import debsources.query as qry from debsources.excepts import ( - Http404ErrorSuggestions, FileOrFolderNotFound, - InvalidPackageOrVersionError, Http404Error, + Http404ErrorSuggestions, + InvalidPackageOrVersionError, ) -import debsources.query as qry -from ..sourcecode import SourceCodeIterator + from ..pagination import Pagination +from ..sourcecode import SourceCodeIterator +from ..views import GeneralView, session from . import patches_helper as helper diff --git a/lib/debsources/app/sources/routes.py b/lib/debsources/app/sources/routes.py index e0c3f278..5f6f0038 100644 --- a/lib/debsources/app/sources/routes.py +++ b/lib/debsources/app/sources/routes.py @@ -11,26 +11,26 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from flask import redirect, url_for, request, jsonify, render_template +from flask import jsonify, redirect, render_template, request, url_for + +from debsources.excepts import Http404Error from ..helper import bind_render, generic_before_request from ..views import ( - IndexView, - SearchView, - CtagView, ChecksumView, - PrefixView, - ListPackagesView, - InfoPackageView, - Ping, + CtagView, ErrorHandler, - PackageVersionsView, + IndexView, + InfoPackageView, + ListPackagesView, NewsArchiveView, + PackageVersionsView, + Ping, + PrefixView, + SearchView, ) - -from .views import StatsView, SourceView from . import bp_sources -from debsources.excepts import Http404Error +from .views import SourceView, StatsView # context vars diff --git a/lib/debsources/app/sources/views.py b/lib/debsources/app/sources/views.py index e156490f..1d285d0e 100644 --- a/lib/debsources/app/sources/views.py +++ b/lib/debsources/app/sources/views.py @@ -14,24 +14,26 @@ import os from pathlib import Path -from flask import current_app, request, jsonify, url_for +from flask import current_app, jsonify, request, url_for -from debsources.excepts import ( - Http403Error, Http404ErrorSuggestions, Http404Error, FileOrFolderNotFound, - InvalidPackageOrVersionError) -from debsources.consts import SLOCCOUNT_LANGUAGES +import debsources.query as qry from debsources import statistics - -from debsources.navigation import (Location, Directory, - SourceFile) - +from debsources.consts import SLOCCOUNT_LANGUAGES +from debsources.excepts import ( + FileOrFolderNotFound, + Http403Error, + Http404Error, + Http404ErrorSuggestions, + InvalidPackageOrVersionError, +) +from debsources.navigation import Directory, Location, SourceFile from debsources.url import url_decode, url_encode -import debsources.query as qry -from ..views import GeneralView, app, session + from ..extract_stats import extract_stats +from ..helper import bind_redirect, bind_render from ..infobox import Infobox from ..sourcecode import SourceCodeIterator -from ..helper import bind_render, bind_redirect +from ..views import GeneralView, app, session class StatsView(GeneralView): diff --git a/lib/debsources/app/views.py b/lib/debsources/app/views.py index 92d3d2e0..7957426b 100644 --- a/lib/debsources/app/views.py +++ b/lib/debsources/app/views.py @@ -13,28 +13,28 @@ from pathlib import Path -from flask import current_app, jsonify, render_template, request, url_for, redirect +from flask import current_app, jsonify, redirect, render_template, request, url_for from flask.views import View +import debsources.query as qry +from debsources import local_info +from debsources.consts import SUITES from debsources.excepts import ( - Http500Error, + Http403Error, Http404Error, Http404ErrorSuggestions, - Http403Error, - InvalidPackageOrVersionError, Http404MissingCopyright, + Http500Error, + InvalidPackageOrVersionError, ) from debsources.models import Package -import debsources.query as qry from debsources.sqla_session import _close_session -from debsources import local_info -from debsources.consts import SUITES +from . import app_wrapper from .forms import SearchForm -from .pagination import Pagination -from .infobox import Infobox from .helper import format_big_num, url_for_other_page -from . import app_wrapper +from .infobox import Infobox +from .pagination import Pagination app = app_wrapper.app session = app_wrapper.session diff --git a/lib/debsources/archiver.py b/lib/debsources/archiver.py index 89e775b0..af9314a9 100644 --- a/lib/debsources/archiver.py +++ b/lib/debsources/archiver.py @@ -19,7 +19,7 @@ from debsources import db_storage, statistics, updater from debsources.debmirror import SourcePackage -from debsources.models import Suite, Package +from debsources.models import Package, Suite def list_suites(conf, session, archive): diff --git a/lib/debsources/charts.py b/lib/debsources/charts.py index f5615956..c68d4716 100644 --- a/lib/debsources/charts.py +++ b/lib/debsources/charts.py @@ -13,14 +13,13 @@ import logging import operator +from itertools import cycle import matplotlib -from itertools import cycle - matplotlib.use("Agg") -import matplotlib.pyplot as plt # NOQA import matplotlib.cm as cm # NOQA +import matplotlib.pyplot as plt # NOQA import numpy as np # NOQA diff --git a/lib/debsources/consts.py b/lib/debsources/consts.py index fb032d0a..975a18db 100644 --- a/lib/debsources/consts.py +++ b/lib/debsources/consts.py @@ -13,7 +13,6 @@ import datetime - # Limit on the maximum key length for Postgres columns which are subject to # btree indexing. The actual value is 8192, but we play safe and round down. # This allows to have complete indexes, rather than partial, which would diff --git a/lib/debsources/db_storage.py b/lib/debsources/db_storage.py index 311b9393..78015489 100644 --- a/lib/debsources/db_storage.py +++ b/lib/debsources/db_storage.py @@ -14,8 +14,7 @@ import logging from debsources import fs_storage -from debsources.models import File, Package, PackageName, SuiteInfo, Suite -from debsources.models import VCS_TYPES +from debsources.models import VCS_TYPES, File, Package, PackageName, Suite, SuiteInfo def add_package(session, pkg, pkgdir, sticky=False): diff --git a/lib/debsources/debmirror.py b/lib/debsources/debmirror.py index 14e80b5b..1a18386c 100644 --- a/lib/debsources/debmirror.py +++ b/lib/debsources/debmirror.py @@ -13,11 +13,11 @@ import logging import lzma -import magic import os from pathlib import Path from typing import Optional +import magic from debian import deb822 # supported compression formats for Sources files. Order does matter: formats diff --git a/lib/debsources/filetype.py b/lib/debsources/filetype.py index 09b889a2..fcdc2340 100644 --- a/lib/debsources/filetype.py +++ b/lib/debsources/filetype.py @@ -13,7 +13,6 @@ import re - # Languages constants ( PYTHON, diff --git a/lib/debsources/license_helper.py b/lib/debsources/license_helper.py index 47fd1dad..62bfa183 100644 --- a/lib/debsources/license_helper.py +++ b/lib/debsources/license_helper.py @@ -13,8 +13,8 @@ import logging import re -from flask import url_for from debian import copyright +from flask import url_for from debsources.navigation import Location diff --git a/lib/debsources/models.py b/lib/debsources/models.py index 8d22d38f..204fd407 100644 --- a/lib/debsources/models.py +++ b/lib/debsources/models.py @@ -14,22 +14,30 @@ import warnings from pathlib import Path -from sqlalchemy import Column, ForeignKey -from sqlalchemy import UniqueConstraint, PrimaryKeyConstraint -from sqlalchemy import Index -from sqlalchemy import Boolean, Date, DateTime, Integer, String +import sqlalchemy.types +from sqlalchemy import ( + Boolean, + Column, + Date, + DateTime, + Enum, + ForeignKey, + Index, + Integer, + PrimaryKeyConstraint, + String, + UniqueConstraint, +) from sqlalchemy.dialects.postgresql import BIGINT -from sqlalchemy import Enum -from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base -import sqlalchemy.types +from sqlalchemy.orm import relationship from debsources.consts import ( - VCS_TYPES, - SLOCCOUNT_LANGUAGES, + COPYRIGHT_ORACLES, CTAGS_LANGUAGES, METRIC_TYPES, - COPYRIGHT_ORACLES, + SLOCCOUNT_LANGUAGES, + VCS_TYPES, ) Base = declarative_base() diff --git a/lib/debsources/navigation.py b/lib/debsources/navigation.py index a3b0057f..c026f482 100644 --- a/lib/debsources/navigation.py +++ b/lib/debsources/navigation.py @@ -11,19 +11,19 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING -import magic import fnmatch from pathlib import Path +import magic from sqlalchemy import and_ -from debsources.models import Checksum, File, Package, PackageName +import debsources.query as qry from debsources import filetype -from debsources.url import url_encode from debsources.consts import AREAS from debsources.debmirror import SourcePackage from debsources.excepts import FileOrFolderNotFound, InvalidPackageOrVersionError -import debsources.query as qry +from debsources.models import Checksum, File, Package, PackageName +from debsources.url import url_encode class Location(object): diff --git a/lib/debsources/plugins/hook_checksums.py b/lib/debsources/plugins/hook_checksums.py index 1f5ad8eb..4662314f 100644 --- a/lib/debsources/plugins/hook_checksums.py +++ b/lib/debsources/plugins/hook_checksums.py @@ -17,12 +17,9 @@ from sqlalchemy import sql -from debsources import db_storage -from debsources import hashutil - +from debsources import db_storage, hashutil from debsources.models import Checksum, File - conf = None MY_NAME = "checksums" diff --git a/lib/debsources/plugins/hook_copyright.py b/lib/debsources/plugins/hook_copyright.py index cfda0077..dab08fee 100644 --- a/lib/debsources/plugins/hook_copyright.py +++ b/lib/debsources/plugins/hook_copyright.py @@ -19,8 +19,8 @@ from debian import copyright from debsources import db_storage -from debsources.models import FileCopyright, File from debsources import license_helper as helper +from debsources.models import File, FileCopyright conf = None diff --git a/lib/debsources/plugins/hook_ctags.py b/lib/debsources/plugins/hook_ctags.py index 38fb4cf1..9a3db4d1 100644 --- a/lib/debsources/plugins/hook_ctags.py +++ b/lib/debsources/plugins/hook_ctags.py @@ -19,10 +19,8 @@ from sqlalchemy import sql from debsources import db_storage - -from debsources.models import Ctag, File from debsources.consts import MAX_KEY_LENGTH - +from debsources.models import Ctag, File conf = None diff --git a/lib/debsources/plugins/hook_metrics.py b/lib/debsources/plugins/hook_metrics.py index c88a58f3..aeaffa34 100644 --- a/lib/debsources/plugins/hook_metrics.py +++ b/lib/debsources/plugins/hook_metrics.py @@ -17,10 +17,8 @@ from pathlib import Path from debsources import db_storage - from debsources.models import Metric - conf = None MY_NAME = "metrics" diff --git a/lib/debsources/plugins/hook_sloccount.py b/lib/debsources/plugins/hook_sloccount.py index cf3e1603..9cbfb95d 100644 --- a/lib/debsources/plugins/hook_sloccount.py +++ b/lib/debsources/plugins/hook_sloccount.py @@ -20,7 +20,6 @@ from debsources import db_storage from debsources.models import SlocCount - conf = None SLOCCOUNT_FLAGS = ["--addlangall"] diff --git a/lib/debsources/query.py b/lib/debsources/query.py index d554b71d..b938d043 100644 --- a/lib/debsources/query.py +++ b/lib/debsources/query.py @@ -11,30 +11,29 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING -from functools import cmp_to_key -from pathlib import Path import os import stat - -from sqlalchemy import func as sql_func, not_ from collections import namedtuple +from functools import cmp_to_key +from pathlib import Path from debian.debian_support import version_compare -from debsources.url import url_encode -from debsources.consts import PREFIXES_DEFAULT -from debsources.consts import SUITES +from sqlalchemy import func as sql_func +from sqlalchemy import not_ + +from debsources.consts import PREFIXES_DEFAULT, SUITES from debsources.excepts import InvalidPackageOrVersionError from debsources.models import ( Checksum, Ctag, File, + FileCopyright, Package, PackageName, Suite, SuiteInfo, - FileCopyright, ) - +from debsources.url import url_encode LongFMT = namedtuple("LongFMT", ["type", "perms", "size", "symlink_dest"]) diff --git a/lib/debsources/sqla_session.py b/lib/debsources/sqla_session.py index 2f326494..69dc4952 100644 --- a/lib/debsources/sqla_session.py +++ b/lib/debsources/sqla_session.py @@ -12,7 +12,7 @@ from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker, scoped_session +from sqlalchemy.orm import scoped_session, sessionmaker def _get_engine_session(url, verbose=True): diff --git a/lib/debsources/statistics.py b/lib/debsources/statistics.py index fafcf1f7..1610d4af 100644 --- a/lib/debsources/statistics.py +++ b/lib/debsources/statistics.py @@ -19,23 +19,23 @@ import re from pathlib import Path -from sqlalchemy import distinct, desc +from sqlalchemy import desc, distinct from sqlalchemy import func as sql_func from debsources.consts import SLOCCOUNT_LANGUAGES, SUITES +from debsources.license_helper import Licenses from debsources.models import ( Checksum, Ctag, + File, + FileCopyright, Metric, + Package, + PackageName, SlocCount, Suite, SuiteInfo, - Package, - PackageName, - FileCopyright, - File, ) -from debsources.license_helper import Licenses def _count(query): diff --git a/lib/debsources/tests/db_testing.py b/lib/debsources/tests/db_testing.py index 6640e450..12ced605 100644 --- a/lib/debsources/tests/db_testing.py +++ b/lib/debsources/tests/db_testing.py @@ -11,15 +11,14 @@ # https://salsa.debian.org/qa/debsources/blob/master/COPYING -import sqlalchemy -import sqlalchemy.orm import subprocess +import sqlalchemy +import sqlalchemy.orm from debsources.subprocess_workaround import subprocess_setup from debsources.tests.testdata import TEST_DATA_DIR, TEST_DB_NAME - TEST_DB_DUMP = TEST_DATA_DIR / "db" / "pg-dump-custom" # queries to compare two DB schemas (e.g. "public.*" and "ref.*") diff --git a/lib/debsources/tests/test_archiver.py b/lib/debsources/tests/test_archiver.py index 4b4582cc..0c1d0324 100644 --- a/lib/debsources/tests/test_archiver.py +++ b/lib/debsources/tests/test_archiver.py @@ -17,20 +17,14 @@ import unittest from pathlib import Path -from nose.tools import istest from nose.plugins.attrib import attr +from nose.tools import istest -from debsources import archiver -from debsources import db_storage -from debsources import debmirror -from debsources import mainlib -from debsources import statistics -from debsources import updater - +from debsources import archiver, db_storage, debmirror, mainlib, statistics, updater from debsources.consts import DEBIAN_RELEASES from debsources.tests.db_testing import DbTestFixture -from debsources.tests.updater_testing import mk_conf from debsources.tests.testdata import TEST_DATA_DIR +from debsources.tests.updater_testing import mk_conf @attr("infra") diff --git a/lib/debsources/tests/test_filetype.py b/lib/debsources/tests/test_filetype.py index 6110fa13..60290d5b 100644 --- a/lib/debsources/tests/test_filetype.py +++ b/lib/debsources/tests/test_filetype.py @@ -13,11 +13,19 @@ import unittest -from nose.tools import istest from nose.plugins.attrib import attr +from nose.tools import istest -from debsources.filetype import get_filetype, get_highlightjs_language -from debsources.filetype import HTML, PHP, PYTHON, RUBY, XML, MAKEFILE +from debsources.filetype import ( + HTML, + MAKEFILE, + PHP, + PYTHON, + RUBY, + XML, + get_filetype, + get_highlightjs_language, +) @attr("filetype") diff --git a/lib/debsources/tests/test_fs_storage.py b/lib/debsources/tests/test_fs_storage.py index 0a7479bb..e168fce7 100644 --- a/lib/debsources/tests/test_fs_storage.py +++ b/lib/debsources/tests/test_fs_storage.py @@ -13,8 +13,8 @@ import unittest -from nose.tools import istest from nose.plugins.attrib import attr +from nose.tools import istest from debsources.fs_storage import parse_path, walk from debsources.tests.testdata import TEST_DATA_DIR diff --git a/lib/debsources/tests/test_hashutil.py b/lib/debsources/tests/test_hashutil.py index 36064732..e4983593 100644 --- a/lib/debsources/tests/test_hashutil.py +++ b/lib/debsources/tests/test_hashutil.py @@ -14,8 +14,8 @@ import unittest from pathlib import Path -from nose.tools import istest from nose.plugins.attrib import attr +from nose.tools import istest from debsources.hashutil import sha256sum from debsources.tests.testdata import TEST_DATA_DIR diff --git a/lib/debsources/tests/test_stats.py b/lib/debsources/tests/test_stats.py index b83f7041..fdf254ad 100644 --- a/lib/debsources/tests/test_stats.py +++ b/lib/debsources/tests/test_stats.py @@ -13,11 +13,10 @@ import unittest -from nose.tools import istest from nose.plugins.attrib import attr +from nose.tools import istest from debsources import statistics - from debsources.tests.db_testing import DbTestFixture diff --git a/lib/debsources/tests/test_updater.py b/lib/debsources/tests/test_updater.py index 84b60efa..6b89d3a3 100644 --- a/lib/debsources/tests/test_updater.py +++ b/lib/debsources/tests/test_updater.py @@ -15,25 +15,20 @@ import logging import os import shutil -import sqlalchemy import subprocess import tempfile import unittest from pathlib import Path -from nose.tools import istest +import sqlalchemy from nose.plugins.attrib import attr +from nose.tools import istest -from debsources import db_storage -from debsources import mainlib -from debsources import models -from debsources import statistics -from debsources import updater - -from debsources.tests.db_testing import DbTestFixture, DB_COMPARE_QUERIES -from debsources.tests.updater_testing import mk_conf +from debsources import db_storage, mainlib, models, statistics, updater from debsources.subprocess_workaround import subprocess_setup +from debsources.tests.db_testing import DB_COMPARE_QUERIES, DbTestFixture from debsources.tests.testdata import TEST_DATA_DIR +from debsources.tests.updater_testing import mk_conf def compare_dirs(dir1, dir2, exclude=[]): diff --git a/lib/debsources/tests/updater_testing.py b/lib/debsources/tests/updater_testing.py index d8b25780..5c8d30d0 100644 --- a/lib/debsources/tests/updater_testing.py +++ b/lib/debsources/tests/updater_testing.py @@ -13,7 +13,7 @@ from pathlib import Path -from debsources.tests.testdata import TEST_DIR, TEST_DB_NAME, TEST_DATA_DIR +from debsources.tests.testdata import TEST_DATA_DIR, TEST_DB_NAME, TEST_DIR def mk_conf(tmpdir: Path): diff --git a/lib/debsources/updater.py b/lib/debsources/updater.py index bc8afebe..6fe352ac 100644 --- a/lib/debsources/updater.py +++ b/lib/debsources/updater.py @@ -15,31 +15,29 @@ import logging import os import subprocess +from datetime import datetime +from email.utils import formatdate from pathlib import Path from typing import List -from datetime import datetime -from email.utils import formatdate -from sqlalchemy import sql, not_ - -from debsources import db_storage -from debsources import fs_storage -from debsources import statistics -from . import query as qry +from sqlalchemy import not_, sql +from debsources import db_storage, fs_storage, statistics from debsources.consts import DEBIAN_RELEASES, SLOCCOUNT_LANGUAGES from debsources.debmirror import SourceMirror, SourcePackage from debsources.models import ( - SuiteInfo, - Suite, - SuiteAlias, - Package, + HistoryCopyright, HistorySize, HistorySlocCount, - HistoryCopyright, + Package, + Suite, + SuiteAlias, + SuiteInfo, ) from debsources.subprocess_workaround import subprocess_setup +from . import query as qry + KNOWN_EVENTS = ["add-package", "rm-package"] NO_OBSERVERS = {e: [] for e in KNOWN_EVENTS}