diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 31ce74d..169a687 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,3 +15,7 @@ repos: - id: poetry-lock - id: poetry-export args: ["--without-hashes", "-f", "requirements.txt", "-o", "requirements.txt"] +- repo: https://github.com/pycqa/flake8 + rev: "5.0.4" + hooks: + - id: flake8 diff --git a/cbreader/tests/test_settings.py b/cbreader/tests/test_settings.py deleted file mode 100644 index 38afc36..0000000 --- a/cbreader/tests/test_settings.py +++ /dev/null @@ -1,118 +0,0 @@ -""" -Django settings for cbreader project. - -Generated by 'django-admin startproject' using Django 1.8.2. - -For more information on this file, see -https://docs.djangoproject.com/en/1.8/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.8/ref/settings/ -""" - -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -import os - -import dj_database_url - -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = "=3tf-@u1t7x4%$yr++59+8tspl4ao&r3&!bb6l(t&$#6@bfkwg" - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = os.environ.get("DJANGO_DEBUG", True) - -ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "localhost").split(",") - - -# Application definition - -INSTALLED_APPS = ( - "django.contrib.admin", - "django.contrib.auth", - "django.contrib.contenttypes", - "django.contrib.sessions", - "django.contrib.messages", - "django.contrib.staticfiles", - "snowpenguin.django.recaptcha2", - "comic", - "comic_auth", -) - -MIDDLEWARE = [ - "django.middleware.security.SecurityMiddleware", - "django.contrib.sessions.middleware.SessionMiddleware", - "django.middleware.common.CommonMiddleware", - "django.middleware.csrf.CsrfViewMiddleware", - "django.contrib.auth.middleware.AuthenticationMiddleware", - "django.contrib.messages.middleware.MessageMiddleware", - "django.middleware.clickjacking.XFrameOptionsMiddleware", -] - -ROOT_URLCONF = "cbreader.urls" - -TEMPLATES = [ - { - "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": ["templates"], - "APP_DIRS": True, - "OPTIONS": { - "context_processors": [ - "django.template.context_processors.debug", - "django.template.context_processors.request", - "django.contrib.auth.context_processors.auth", - "django.contrib.messages.context_processors.messages", - ] - }, - } -] - -WSGI_APPLICATION = "cbreader.wsgi.application" - - -# Database -# https://docs.djangoproject.com/en/1.8/ref/settings/#databases - -DATABASE_URL = os.getenv("TEST_DATABASE_URL") - -if DATABASE_URL: - DATABASES = {"default": dj_database_url.config(conn_max_age=500)} -else: - DATABASES = {"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": os.path.join(BASE_DIR, "db.sqlite3")}} - - -# Internationalization -# https://docs.djangoproject.com/en/1.8/topics/i18n/ - -LANGUAGE_CODE = "en-ie" - -TIME_ZONE = "UTC" - -USE_I18N = True - -USE_L10N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.8/howto/static-files/ - -STATIC_URL = "/static/" - -LOGIN_REDIRECT_URL = "/comic/" - -LOGIN_URL = "/login/" - -UNRAR_TOOL = os.getenv("UNRAR_TOOL", None) - -CBREADER_USE_RECAPTCHA = False -RECAPTCHA_PRIVATE_KEY = "" -RECAPTCHA_PUBLIC_KEY = "" - -COMIC_DIR = "/media/comics" diff --git a/cbreader/urls.py b/cbreader/urls.py index c669c38..011bf4c 100644 --- a/cbreader/urls.py +++ b/cbreader/urls.py @@ -28,15 +28,15 @@ from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView from comic import rest, feeds schema_view = get_schema_view( - openapi.Info( - title="CBWebReader API", - default_version='v1', - description="API to access your comic collection", - contact=openapi.Contact(name="Ajurna", url="https://github.com/ajurna/cbwebreader"), - license=openapi.License(name="MIT License"), - ), - public=True, - permission_classes=[permissions.AllowAny] + openapi.Info( + title="CBWebReader API", + default_version='v1', + description="API to access your comic collection", + contact=openapi.Contact(name="Ajurna", url="https://github.com/ajurna/cbwebreader"), + license=openapi.License(name="MIT License"), + ), + public=True, + permission_classes=[permissions.AllowAny] ) router = ExtendedDefaultRouter() @@ -69,4 +69,3 @@ urlpatterns = [ if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # urlpatterns += [path('silk/', include('silk.urls', namespace='silk'))] - diff --git a/comic/models.py b/comic/models.py index dde8aa3..51413b9 100644 --- a/comic/models.py +++ b/comic/models.py @@ -53,7 +53,7 @@ class Directory(models.Model): class Meta: ordering = ['name'] - def __str__(self): + def __str__(self) -> str: return f"Directory: {self.name}; {self.parent}" @property diff --git a/poetry.lock b/poetry.lock index 43c83a1..f5096ac 100644 --- a/poetry.lock +++ b/poetry.lock @@ -46,6 +46,20 @@ six = "*" [package.extras] test = ["astroid (<=2.5.3)", "pytest"] +[[package]] +name = "attrs" +version = "22.1.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope-interface"] +docs = ["furo", "sphinx", "sphinx-notfound-page", "zope-interface"] +tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope-interface"] +tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] + [[package]] name = "autopep8" version = "1.7.0" @@ -471,6 +485,31 @@ python-versions = ">=3.7" docs = ["furo (>=2022.6.21)", "sphinx (>=5.1.1)", "sphinx-autodoc-typehints (>=1.19.1)"] testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "pytest-timeout (>=2.1)"] +[[package]] +name = "flake8" +version = "5.0.4" +description = "the modular source code checker: pep8 pyflakes and co" +category = "main" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.9.0,<2.10.0" +pyflakes = ">=2.5.0,<2.6.0" + +[[package]] +name = "flake8-annotations" +version = "2.9.1" +description = "Flake8 Type Annotation Checks" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" + +[package.dependencies] +attrs = ">=21.4" +flake8 = ">=3.7" + [[package]] name = "gprof2dot" version = "2022.7.29" @@ -656,7 +695,7 @@ traitlets = "*" name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -849,6 +888,14 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "pyflakes" +version = "2.5.0" +description = "passive checker of Python programs" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "pygments" version = "2.13.0" @@ -1246,7 +1293,7 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "9195bf3e7c3308fb256f1d782360971ec6c6df5454dec454d995bf9f4237e667" +content-hash = "85edbd1fe3ad53c66f95b372ad7e1891058831431f08de21f11197047ce8c51b" [metadata.files] appnope = [ @@ -1265,6 +1312,10 @@ asttokens = [ {file = "asttokens-2.0.8-py2.py3-none-any.whl", hash = "sha256:e3305297c744ae53ffa032c45dc347286165e4ffce6875dc662b205db0623d86"}, {file = "asttokens-2.0.8.tar.gz", hash = "sha256:c61e16246ecfb2cde2958406b4c8ebc043c9e6d73aaa83c941673b35e5d3a76b"}, ] +attrs = [ + {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, + {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, +] autopep8 = [ {file = "autopep8-1.7.0-py2.py3-none-any.whl", hash = "sha256:6f09e90a2be784317e84dc1add17ebfc7abe3924239957a37e5040e27d812087"}, {file = "autopep8-1.7.0.tar.gz", hash = "sha256:ca9b1a83e53a7fad65d731dc7a2a2d50aa48f43850407c59f6a1a306c4201142"}, @@ -1535,6 +1586,14 @@ filelock = [ {file = "filelock-3.8.0-py3-none-any.whl", hash = "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"}, {file = "filelock-3.8.0.tar.gz", hash = "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc"}, ] +flake8 = [ + {file = "flake8-5.0.4-py2.py3-none-any.whl", hash = "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"}, + {file = "flake8-5.0.4.tar.gz", hash = "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"}, +] +flake8-annotations = [ + {file = "flake8-annotations-2.9.1.tar.gz", hash = "sha256:11f09efb99ae63c8f9d6b492b75fe147fbc323179fddfe00b2e56eefeca42f57"}, + {file = "flake8_annotations-2.9.1-py3-none-any.whl", hash = "sha256:a4385158a7a9fc8af1d8820a2f4c8d03387997006a83f5f8bfe5bc6085bdf88a"}, +] gprof2dot = [ {file = "gprof2dot-2022.7.29-py2.py3-none-any.whl", hash = "sha256:f165b3851d3c52ee4915eb1bd6cca571e5759823c2cd0f71a79bda93c2dc85d6"}, {file = "gprof2dot-2022.7.29.tar.gz", hash = "sha256:45b4d298bd36608fccf9511c3fd88a773f7a1abc04d6cd39445b11ba43133ec5"}, @@ -1830,6 +1889,10 @@ pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] +pyflakes = [ + {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash = "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"}, + {file = "pyflakes-2.5.0.tar.gz", hash = "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"}, +] pygments = [ {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, diff --git a/pyproject.toml b/pyproject.toml index fc784a7..8b34a5a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,6 +35,8 @@ djangorestframework-simplejwt = "^5.2.0" django-webpack-loader = "^1.6.0" drf-yasg = "^1.20.0" drf-extensions = "^0.7.1" +flake8 = "^5.0.4" +flake8-annotations = "^2.9.1" [tool.poetry.dev-dependencies] mypy = "^0.971" diff --git a/setup.cfg b/setup.cfg index 937c535..f61b5aa 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,21 +1,24 @@ [tool:pytest] -addopts = -vv --black --isort --flake8 +addopts = --flake8 [flake8] -max-line-length = 119 +max-line-length = 120 ignore = + * ANN101 # Ignore rules which contradicts black's formatting choices: - * E501 - * W503 - * W504 - * E266 +; * E501 +; * W503 +; * W504 +; * E266 exclude = # Exclude these files - comic/rarfile.py + */migrations/* + cbreader/settings + frontend [tool:isort] line_length = 119 indent = ' ' multi_line_output = 3 -include_trailing_comma = 1 \ No newline at end of file +include_trailing_comma = 1