From 1d9e126037238540534b6f8b90435096e25c81b9 Mon Sep 17 00:00:00 2001 From: Martijn Pieters Date: Tue, 16 May 2023 12:09:50 +0100 Subject: [PATCH] Switch to ruff to handle linting and formatting Ruff handles black, flake8 and isort in one package, and is way faster. The isort rules had not been enforced, so this commit includes a lot of import resorting changes. I switched to flake8-bugbear and the standard black-compatible line length of 80 + 10% (so max 88 characters), so some line reflowing is included too. Finally, because bugbear rightly points out that `setattr()` is less performant, I've switched the `__signature__` assigment back to using a direct assignment with type ignore comment. --- .gitignore | 3 + examples/in_memory/main.py | 2 +- fastapi_cache/__init__.py | 1 - fastapi_cache/backends/__init__.py | 3 +- fastapi_cache/coder.py | 11 +- fastapi_cache/decorator.py | 36 +++++-- fastapi_cache/types.py | 1 - poetry.lock | 161 +++++------------------------ pyproject.toml | 23 +++-- setup.cfg | 5 - tests/test_decorator.py | 2 +- tox.ini | 6 +- 12 files changed, 89 insertions(+), 165 deletions(-) delete mode 100644 setup.cfg diff --git a/.gitignore b/.gitignore index dfe7351..d7b6b6b 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,9 @@ share/python-wheels/ *.egg MANIFEST +# Ruff +.ruff_cache/ + # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. diff --git a/examples/in_memory/main.py b/examples/in_memory/main.py index 44ad088..724681f 100644 --- a/examples/in_memory/main.py +++ b/examples/in_memory/main.py @@ -4,13 +4,13 @@ from typing import Dict, Optional import pendulum import uvicorn from fastapi import FastAPI +from pydantic import BaseModel from starlette.requests import Request from starlette.responses import JSONResponse, Response from fastapi_cache import FastAPICache from fastapi_cache.backends.inmemory import InMemoryBackend from fastapi_cache.decorator import cache -from pydantic import BaseModel app = FastAPI() diff --git a/fastapi_cache/__init__.py b/fastapi_cache/__init__.py index 77abb35..6ab9947 100644 --- a/fastapi_cache/__init__.py +++ b/fastapi_cache/__init__.py @@ -4,7 +4,6 @@ from fastapi_cache.coder import Coder, JsonCoder from fastapi_cache.key_builder import default_key_builder from fastapi_cache.types import Backend, KeyBuilder - __all__ = [ "Backend", "Coder", diff --git a/fastapi_cache/backends/__init__.py b/fastapi_cache/backends/__init__.py index 261af6c..23bd0a5 100644 --- a/fastapi_cache/backends/__init__.py +++ b/fastapi_cache/backends/__init__.py @@ -1,6 +1,5 @@ -from fastapi_cache.types import Backend from fastapi_cache.backends import inmemory - +from fastapi_cache.types import Backend __all__ = ["Backend", "inmemory"] diff --git a/fastapi_cache/coder.py b/fastapi_cache/coder.py index 1652d7b..255c9a2 100644 --- a/fastapi_cache/coder.py +++ b/fastapi_cache/coder.py @@ -2,7 +2,16 @@ import datetime import json import pickle # nosec:B403 from decimal import Decimal -from typing import Any, Callable, ClassVar, Dict, Optional, TypeVar, Union, overload +from typing import ( + Any, + Callable, + ClassVar, + Dict, + Optional, + TypeVar, + Union, + overload, +) import pendulum from fastapi.encoders import jsonable_encoder diff --git a/fastapi_cache/decorator.py b/fastapi_cache/decorator.py index 73221f9..cbcac0f 100644 --- a/fastapi_cache/decorator.py +++ b/fastapi_cache/decorator.py @@ -2,7 +2,16 @@ import logging import sys from functools import wraps from inspect import Parameter, Signature, isawaitable, iscoroutinefunction -from typing import Awaitable, Callable, List, Optional, Type, TypeVar, Union, cast +from typing import ( + Awaitable, + Callable, + List, + Optional, + Type, + TypeVar, + Union, + cast, +) if sys.version_info >= (3, 10): from typing import ParamSpec @@ -10,7 +19,10 @@ else: from typing_extensions import ParamSpec from fastapi.concurrency import run_in_threadpool -from fastapi.dependencies.utils import get_typed_return_annotation, get_typed_signature +from fastapi.dependencies.utils import ( + get_typed_return_annotation, + get_typed_signature, +) from starlette.requests import Request from starlette.responses import Response from starlette.status import HTTP_304_NOT_MODIFIED @@ -37,15 +49,16 @@ def _augment_signature(signature: Signature, *extra: Parameter) -> Signature: return signature.replace(parameters=[*parameters, *extra, *variadic_keyword_params]) -def _locate_param(sig: Signature, dep: Parameter, to_inject: List[Parameter]) -> Parameter: +def _locate_param( + sig: Signature, dep: Parameter, to_inject: List[Parameter] +) -> Parameter: """Locate an existing parameter in the decorated endpoint If not found, returns the injectable parameter, and adds it to the to_inject list. """ param = next( - (param for param in sig.parameters.values() if param.annotation is dep.annotation), - None, + (p for p in sig.parameters.values() if p.annotation is dep.annotation), None ) if param is None: to_inject.append(dep) @@ -99,7 +112,9 @@ def cache( kind=Parameter.KEYWORD_ONLY, ) - def wrapper(func: Callable[P, Awaitable[R]]) -> Callable[P, Awaitable[Union[R, Response]]]: + def wrapper( + func: Callable[P, Awaitable[R]] + ) -> Callable[P, Awaitable[Union[R, Response]]]: # get_typed_signature ensures that any forward references are resolved first wrapped_signature = get_typed_signature(func) to_inject: List[Parameter] = [] @@ -162,7 +177,8 @@ def cache( ttl, cached = await backend.get_with_ttl(cache_key) except Exception: logger.warning( - f"Error retrieving cache key '{cache_key}' from backend:", exc_info=True + f"Error retrieving cache key '{cache_key}' from backend:", + exc_info=True, ) ttl, cached = 0, None @@ -174,7 +190,8 @@ def cache( await backend.set(cache_key, to_cache, expire) except Exception: logger.warning( - f"Error setting cache key '{cache_key}' in backend:", exc_info=True + f"Error setting cache key '{cache_key}' in backend:", + exc_info=True, ) if response: @@ -206,7 +223,8 @@ def cache( return result - setattr(inner, "__signature__", _augment_signature(wrapped_signature, *to_inject)) + inner.__signature__ = _augment_signature(wrapped_signature, *to_inject) # type: ignore[attr-defined] + return inner return wrapper diff --git a/fastapi_cache/types.py b/fastapi_cache/types.py index 1ae4069..551746e 100644 --- a/fastapi_cache/types.py +++ b/fastapi_cache/types.py @@ -5,7 +5,6 @@ from starlette.requests import Request from starlette.responses import Response from typing_extensions import Protocol - _Func = Callable[..., Any] diff --git a/poetry.lock b/poetry.lock index deceead..bf7b9ba 100644 --- a/poetry.lock +++ b/poetry.lock @@ -231,55 +231,6 @@ docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib- tests = ["attrs[tests-no-zope]", "zope-interface"] tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -[[package]] -name = "black" -version = "23.3.0" -description = "The uncompromising code formatter." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - [[package]] name = "botocore" version = "1.20.106" @@ -711,23 +662,6 @@ files = [ docs = ["furo (>=2023.3.27)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] -[[package]] -name = "flake8" -version = "6.0.0" -description = "the modular source code checker: pep8 pyflakes and co" -category = "dev" -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "flake8-6.0.0-py2.py3-none-any.whl", hash = "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7"}, - {file = "flake8-6.0.0.tar.gz", hash = "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"}, -] - -[package.dependencies] -mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.10.0,<2.11.0" -pyflakes = ">=3.0.0,<3.1.0" - [[package]] name = "frozenlist" version = "1.3.3" @@ -918,24 +852,6 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] -[[package]] -name = "isort" -version = "5.12.0" -description = "A Python utility / library to sort Python imports." -category = "dev" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.12.0-py3-none-any.whl", hash = "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6"}, - {file = "isort-5.12.0.tar.gz", hash = "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504"}, -] - -[package.extras] -colors = ["colorama (>=0.4.3)"] -pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] -plugins = ["setuptools"] -requirements-deprecated-finder = ["pip-api", "pipreqs"] - [[package]] name = "jmespath" version = "0.10.0" @@ -948,18 +864,6 @@ files = [ {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, ] -[[package]] -name = "mccabe" -version = "0.7.0" -description = "McCabe checker, plugin for flake8" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, -] - [[package]] name = "multidict" version = "6.0.4" @@ -1130,18 +1034,6 @@ files = [ {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] -[[package]] -name = "pathspec" -version = "0.11.1" -description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, -] - [[package]] name = "pendulum" version = "2.1.2" @@ -1215,18 +1107,6 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] -[[package]] -name = "pycodestyle" -version = "2.10.0" -description = "Python style guide checker" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pycodestyle-2.10.0-py2.py3-none-any.whl", hash = "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"}, - {file = "pycodestyle-2.10.0.tar.gz", hash = "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053"}, -] - [[package]] name = "pycparser" version = "2.21" @@ -1292,18 +1172,6 @@ typing-extensions = ">=4.2.0" dotenv = ["python-dotenv (>=0.10.4)"] email = ["email-validator (>=1.0.3)"] -[[package]] -name = "pyflakes" -version = "3.0.1" -description = "passive checker of Python programs" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyflakes-3.0.1-py2.py3-none-any.whl", hash = "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf"}, - {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, -] - [[package]] name = "pyproject-api" version = "1.5.1" @@ -1437,6 +1305,33 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "ruff" +version = "0.0.267" +description = "An extremely fast Python linter, written in Rust." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.0.267-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:4adbbbe314d8fcc539a245065bad89446a3cef2e0c9cf70bf7bb9ed6fe31856d"}, + {file = "ruff-0.0.267-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:67254ae34c38cba109fdc52e4a70887de1f850fb3971e5eeef343db67305d1c1"}, + {file = "ruff-0.0.267-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbe104f21a429b77eb5ac276bd5352fd8c0e1fbb580b4c772f77ee8c76825654"}, + {file = "ruff-0.0.267-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:db33deef2a5e1cf528ca51cc59dd764122a48a19a6c776283b223d147041153f"}, + {file = "ruff-0.0.267-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9adf1307fa9d840d1acaa477eb04f9702032a483214c409fca9dc46f5f157fe3"}, + {file = "ruff-0.0.267-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:0afca3633c8e2b6c0a48ad0061180b641b3b404d68d7e6736aab301c8024c424"}, + {file = "ruff-0.0.267-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2972241065b1c911bce3db808837ed10f4f6f8a8e15520a4242d291083605ab6"}, + {file = "ruff-0.0.267-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f731d81cb939e757b0335b0090f18ca2e9ff8bcc8e6a1cf909245958949b6e11"}, + {file = "ruff-0.0.267-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20c594eb56c19063ef5a57f89340e64c6550e169d6a29408a45130a8c3068adc"}, + {file = "ruff-0.0.267-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:45d61a2b01bdf61581a2ee039503a08aa603dc74a6bbe6fb5d1ce3052f5370e5"}, + {file = "ruff-0.0.267-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2107cec3699ca4d7bd41543dc1d475c97ae3a21ea9212238b5c2088fa8ee7722"}, + {file = "ruff-0.0.267-py3-none-musllinux_1_2_i686.whl", hash = "sha256:786de30723c71fc46b80a173c3313fc0dbe73c96bd9da8dd1212cbc2f84cdfb2"}, + {file = "ruff-0.0.267-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5a898953949e37c109dd242cfcf9841e065319995ebb7cdfd213b446094a942f"}, + {file = "ruff-0.0.267-py3-none-win32.whl", hash = "sha256:d12ab329474c46b96d962e2bdb92e3ad2144981fe41b89c7770f370646c0101f"}, + {file = "ruff-0.0.267-py3-none-win_amd64.whl", hash = "sha256:d09aecc9f5845586ba90911d815f9772c5a6dcf2e34be58c6017ecb124534ac4"}, + {file = "ruff-0.0.267-py3-none-win_arm64.whl", hash = "sha256:7df7eb5f8d791566ba97cc0b144981b9c080a5b861abaf4bb35a26c8a77b83e9"}, + {file = "ruff-0.0.267.tar.gz", hash = "sha256:632cec7bbaf3c06fcf0a72a1dd029b7d8b7f424ba95a574aaa135f5d20a00af7"}, +] + [[package]] name = "setuptools" version = "67.7.2" @@ -2227,4 +2122,4 @@ redis = ["redis"] [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "edb317193b26f7b00f1a4998cb61a56b2f3fd542c15218f0c3858d8e60a33bf0" +content-hash = "2bc8487caa2aa1bffd3e97013826ba5c137de0b4d26902026b77c7e78374ece1" diff --git a/pyproject.toml b/pyproject.toml index b25fc31..5f41d1c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,13 +29,11 @@ aiohttp = { version = ">=3.8.3", markers = "python_version >= \"3.11\"" } optional = true [tool.poetry.group.linting.dependencies] -flake8 = { version = "*", markers = "python_version >= \"3.10\"" } -isort = { version = "*", markers = "python_version >= \"3.10\"" } -black = { version = "*", markers = "python_version >= \"3.10\"" } mypy = { version = "^1.2.0", markers = "python_version >= \"3.10\"" } pyright = { version = "^1.1.306", markers="python_version >= \"3.10\"" } types-aiobotocore = { extras = ["dynamodb"], version = "^2.5.0.post2", markers = "python_version >= \"3.10\"" } types-redis = { version = "^4.5.4.2", markers = "python_version >= \"3.10\"" } +ruff = { version = "^0.0.267", markers = "python_version >= \"3.10\"" } [tool.poetry.group.dev.dependencies] pytest = "*" @@ -50,10 +48,6 @@ memcache = ["aiomcache"] dynamodb = ["aiobotocore"] all = ["redis", "aiomcache", "aiobotocore"] -[tool.black] -line-length = 100 -target-version = ['py36', 'py37', 'py38', 'py39'] - [tool.mypy] files = ["fastapi_cache", "examples", "tests"] python_version = "3.7" @@ -82,6 +76,21 @@ include = ["fastapi_cache", "tests", "examples"] strict = ["fastapi_cache", "tests"] pythonVersion = "3.7" +[tool.pytest] +addopts = "-p no:warnings" + +[tool.ruff] +ignore = ["E501"] +line-length = 80 +select = [ + "B", # flake8-bugbear + "E", # pycodestyle errors + "F", # pyflakes + "I", # isort + "W", # pycodestyle warnings +] +target-version = "py37" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 53d2b2f..0000000 --- a/setup.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[flake8] -ignore = E501,W503 - -[tool:pytest] -addopts = -p no:warnings \ No newline at end of file diff --git a/tests/test_decorator.py b/tests/test_decorator.py index 5e2f62e..ba86fd5 100644 --- a/tests/test_decorator.py +++ b/tests/test_decorator.py @@ -1,5 +1,5 @@ import time -from typing import Generator, Any +from typing import Any, Generator import pendulum import pytest diff --git a/tox.ini b/tox.ini index 617bb34..c62e50b 100644 --- a/tox.ini +++ b/tox.ini @@ -32,8 +32,7 @@ skip_install = true commands_pre = poetry install --no-root --with=linting --sync --all-extras commands = - black --check --diff . - flake8 + ruff check --show-source . mypy pyright @@ -43,5 +42,4 @@ skip_install = true commands_pre = poetry install --no-root --sync --with=linting commands = - black . - isort . + ruff check --fix .