diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..7ccee39 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,24 @@ +fail_fast: true + +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.0.1 + hooks: + - id: check-yaml + - id: check-toml + - id: end-of-file-fixer + - id: trailing-whitespace + - id: check-added-large-files + - id: detect-private-key + - id: double-quote-string-fixer + - id: check-ast + - id: check-merge-conflict + + - repo: local + hooks: + - id: lint-python + name: Lint Python + entry: poetry run ruff check . + types: [python] + language: system + pass_filenames: false diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 6408e34..043c349 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,7 @@ [0.2.21] - replace uvicorn with granian +- pre-commit hook installed +- app.json with healthchecks used [0.2.20] - added logger diff --git a/app.json b/app.json new file mode 100644 index 0000000..cc35f74 --- /dev/null +++ b/app.json @@ -0,0 +1,13 @@ +{ + "healthchecks": { + "web": [ + { + "type": "startup", + "name": "web check", + "description": "Checking if the app responds to the GET /", + "path": "/", + "attempts": 3 + } + ] + } +} diff --git a/pyproject.toml b/pyproject.toml index 4bae977..6e54013 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,7 @@ itsdangerous = "^2.1.2" aiohttp = "^3.9.1" requests = "^2.31.0" granian = "^1.0.1" +pre-commit = "^3.6.0" [tool.poetry.group.dev.dependencies] setuptools = "^69.0.2" @@ -28,48 +29,43 @@ pytest = "^7.4.3" requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" -[tool.black] -line-length = 120 -target-version = ['py312'] -include = '\.pyi?$' -exclude = ''' - -( - /( - \.eggs # exclude a few common directories in the - | \.git # root of the project - | \.hg - | \.mypy_cache - | \.tox - | \.venv - | _build - | buck-out - | build - | dist - )/ - | foo.py # also separately exclude a file named foo.py in - # the root of the project -) -''' - -[tool.isort] -multi_line_output = 3 -include_trailing_comma = true -force_grid_wrap = 0 -use_parentheses = true -ensure_newline_before_comments = true -line_length = 120 - - [tool.ruff] -# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. -# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or -# McCabe complexity (`C901`) by default. -select = ["E4", "E7", "E9", "F"] -ignore = [] line-length = 120 +extend-select = [ + # E and F are enabled by default + 'B', # flake8-bugbear + 'C4', # flake8-comprehensions + 'C90', # mccabe + 'I', # isort + 'N', # pep8-naming + 'Q', # flake8-quotes + 'RUF100', # ruff (unused noqa) + 'S', # flake8-bandit + 'W', # pycodestyle +] +extend-ignore = [ + 'B008', # function calls in args defaults are fine + 'B009', # getattr with constants is fine + 'B034', # re.split won't confuse us + 'B904', # rising without from is fine + 'E501', # leave line length to black + 'N818', # leave to us exceptions naming + 'S101', # assert is fine +] +flake8-quotes = { multiline-quotes = 'double' } +mccabe = { max-complexity = 13 } target-version = "py312" +[tool.ruff.isort] +combine-as-imports = true +lines-after-imports = 2 +known-first-party = ['resolvers', 'services', 'orm', 'tests'] + +[tool.ruff.per-file-ignores] +'tests/**' = ['B018', 'S110', 'S501'] + +[tool.pytest.ini_options] +asyncio_mode = 'auto' [tool.pyright] venvPath = "."