From a91613cbd3dc7d00466764123caf844bf5304c24 Mon Sep 17 00:00:00 2001 From: DarkCat09 Date: Mon, 27 Feb 2023 19:48:34 +0400 Subject: [PATCH] Checked with MyPy, Pylint; updated Pylint config --- app/common.py | 1 - app/respond.py | 18 ++-- app/sql/__init__.py | 0 app/sql/db.py | 7 +- app/sql/schemas.py | 2 +- mypy.ini | 4 + pylintrc | 224 ++++++++++++++++++++++---------------------- 7 files changed, 133 insertions(+), 123 deletions(-) create mode 100644 app/sql/__init__.py create mode 100644 mypy.ini diff --git a/app/common.py b/app/common.py index 112db25..97010d2 100644 --- a/app/common.py +++ b/app/common.py @@ -1,4 +1,3 @@ -import os import secrets from pathlib import Path diff --git a/app/respond.py b/app/respond.py index 7635abf..816e574 100644 --- a/app/respond.py +++ b/app/respond.py @@ -16,12 +16,12 @@ from .common import templates def with_redirect( url: str = '/', code: int = 302, - *args, **kwargs) -> RedirectResponse: + **kwargs) -> RedirectResponse: """Return a redirect to the page specified in `url`. By default, code is 302 so method is changed to GET. To leave the same HTTP method, use 307 status code or call `with_redirect_307` function. - `args` and `kwargs` are passed directly + `kwargs` are passed directly to the Response contructor Args: @@ -35,16 +35,16 @@ def with_redirect( return RedirectResponse( url=url, status_code=code, - *args, **kwargs, + **kwargs, ) def with_text( content: str, code: int = 200, - *args, **kwargs) -> PlainTextResponse: + **kwargs) -> PlainTextResponse: """Return a plain text to the user. - `args` and `kwargs` are passed directly + `kwargs` are passed directly to the Response contructor Args: @@ -58,7 +58,7 @@ def with_text( return PlainTextResponse( content=content, status_code=code, - *args, **kwargs, + **kwargs, ) @@ -117,10 +117,10 @@ def with_file( path: os.PathLike, mime: Optional[str] = None, code: int = 200, - *args, **kwargs) -> FileResponse: + **kwargs) -> FileResponse: """Send the file specified in `path` automatically guessing its mimetype if `mime` is None. - `args` and `kwargs` are passed directly + `kwargs` are passed directly to the Response contructor Args: @@ -139,7 +139,7 @@ def with_file( mimetypes.guess_type(path)[0] ), status_code=code, - *args, **kwargs, + **kwargs, ) diff --git a/app/sql/__init__.py b/app/sql/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/sql/db.py b/app/sql/db.py index 489e2f2..3a03dea 100644 --- a/app/sql/db.py +++ b/app/sql/db.py @@ -3,11 +3,12 @@ from typing import AsyncGenerator from pydantic import BaseSettings from sqlalchemy import create_engine -from sqlalchemy_utils import database_exists -from sqlalchemy_utils import create_database from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy_utils import database_exists +from sqlalchemy_utils import create_database + # Database configuration class SqlSettings(BaseSettings): @@ -21,10 +22,12 @@ class SqlSettings(BaseSettings): sql_settings = SqlSettings() # DB connection URL +# pylint: disable=consider-using-f-string db_url = ( 'mysql://{db_user}:{db_password}@' '{db_host}:{db_port}/{db_database}' ).format(**sql_settings.dict()) +# pylint: enable=consider-using-f-string # SQLAlchemy engine object diff --git a/app/sql/schemas.py b/app/sql/schemas.py index c15dcb2..6244d7c 100644 --- a/app/sql/schemas.py +++ b/app/sql/schemas.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel +from pydantic import BaseModel # pylint: disable=no-name-in-module # Pydantic class for diff --git a/mypy.ini b/mypy.ini new file mode 100644 index 0000000..6f9d658 --- /dev/null +++ b/mypy.ini @@ -0,0 +1,4 @@ +[mypy] +show_error_codes = True +ignore_missing_imports = True +warn_redundant_casts = True diff --git a/pylintrc b/pylintrc index 258b920..bb879db 100644 --- a/pylintrc +++ b/pylintrc @@ -1,5 +1,6 @@ [MAIN] analyse-fallback-blocks=no +clear-cache-post-run=no extension-pkg-allow-list= extension-pkg-whitelist= fail-on= @@ -17,113 +18,6 @@ recursive=no suggestion-mode=yes unsafe-load-any-extension=no -[REPORTS] -evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) -msg-template= -reports=no -score=yes - -[MESSAGES CONTROL] -confidence=HIGH, - CONTROL_FLOW, - INFERENCE, - INFERENCE_FAILURE, - UNDEFINED -disable=raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - deprecated-pragma, - use-symbolic-message-instead -enable=c-extension-no-member - -[SIMILARITIES] -ignore-comments=yes -ignore-docstrings=yes -ignore-imports=yes -ignore-signatures=yes -min-similarity-lines=4 - -[MISCELLANEOUS] -notes=FIXME, - XXX, - TODO -notes-rgx= - -[DESIGN] -exclude-too-few-public-methods= -ignored-parents= -max-args=5 -max-attributes=7 -max-bool-expr=5 -max-branches=12 -max-locals=15 -max-parents=7 -max-public-methods=20 -max-returns=6 -max-statements=50 -min-public-methods=1 - -[STRING] -check-quote-consistency=no -check-str-concat-over-line-jumps=no - -[CLASSES] -check-protected-access-in-special-methods=no -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make -valid-classmethod-first-arg=cls -valid-metaclass-classmethod-first-arg=cls - -[FORMAT] -expected-line-ending-format= -ignore-long-lines=^\s*(# )??$ -indent-after-paren=4 -indent-string=' ' -max-line-length=100 -max-module-lines=1000 -single-line-class-stmt=no -single-line-if-stmt=no - -[IMPORTS] -allow-any-import-level= -allow-wildcard-with-all=no -deprecated-modules= -ext-import-graph= -import-graph= -int-import-graph= -known-standard-library= -known-third-party=enchant -preferred-modules= - -[VARIABLES] -additional-builtins= -allow-global-unused-variables=yes -allowed-redefined-builtins= -callbacks=cb_, - _cb -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ -ignored-argument-names=_.*|^ignored_|^unused_ -init-import=no -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io - -[LOGGING] -logging-format-style=old -logging-modules=logging - -[EXCEPTIONS] -overgeneral-exceptions=BaseException, - Exception - [BASIC] argument-naming-style=snake_case attr-naming-style=snake_case @@ -158,6 +52,105 @@ no-docstring-rgx=^_ property-classes=abc.abstractproperty variable-naming-style=snake_case +[CLASSES] +check-protected-access-in-special-methods=no +defining-attr-methods=__init__, + __new__, + setUp, + __post_init__ +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make +valid-classmethod-first-arg=cls +valid-metaclass-classmethod-first-arg=mcs + +[DESIGN] +exclude-too-few-public-methods= +ignored-parents= +max-args=5 +max-attributes=7 +max-bool-expr=5 +max-branches=12 +max-locals=15 +max-parents=7 +max-public-methods=20 +max-returns=6 +max-statements=50 +min-public-methods=0 + +[EXCEPTIONS] +overgeneral-exceptions=builtins.BaseException,builtins.Exception + +[FORMAT] +expected-line-ending-format= +ignore-long-lines=^\s*(# )??$ +indent-after-paren=4 +indent-string=' ' +max-line-length=100 +max-module-lines=1000 +single-line-class-stmt=no +single-line-if-stmt=no + +[IMPORTS] +allow-any-import-level= +allow-reexport-from-package=no +allow-wildcard-with-all=no +deprecated-modules= +ext-import-graph= +import-graph= +int-import-graph= +known-standard-library= +known-third-party=enchant +preferred-modules= + +[LOGGING] +logging-format-style=old +logging-modules=logging + +[MESSAGES CONTROL] +confidence=HIGH, + CONTROL_FLOW, + INFERENCE, + INFERENCE_FAILURE, + UNDEFINED +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead +enable=c-extension-no-member + +[METHOD_ARGS] +timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request + +[MISCELLANEOUS] +notes=FIXME, + XXX, + TODO +notes-rgx= + +[REFACTORING] +max-nested-blocks=5 +never-returning-functions=sys.exit,argparse.parse_error + +[REPORTS] +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) +msg-template= +reports=no +score=yes + +[SIMILARITIES] +ignore-comments=yes +ignore-docstrings=yes +ignore-imports=yes +ignore-signatures=yes +min-similarity-lines=4 + [SPELLING] max-spelling-suggestions=4 spelling-dict= @@ -166,6 +159,10 @@ spelling-ignore-words= spelling-private-dict-file= spelling-store-unknown-words=no +[STRING] +check-quote-consistency=no +check-str-concat-over-line-jumps=no + [TYPECHECK] contextmanager-decorators=contextlib.contextmanager generated-members= @@ -182,6 +179,13 @@ missing-member-max-choices=1 mixin-class-rgx=.*[Mm]ixin signature-mutators= -[REFACTORING] -max-nested-blocks=5 -never-returning-functions=sys.exit,argparse.parse_error +[VARIABLES] +additional-builtins= +allow-global-unused-variables=yes +allowed-redefined-builtins= +callbacks=cb_, + _cb +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ +ignored-argument-names=_.*|^ignored_|^unused_ +init-import=no +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io