From 303241b16df37463f239cff809950a4ab1207175 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 11:41:29 +0000 Subject: [PATCH 1/7] Bump the pip group across 1 directory with 37 updates Bumps the pip group with 37 updates in the / directory: | Package | From | To | | --- | --- | --- | | [black](https://github.com/psf/black) | `25.9.0` | `26.1.0` | | [pylint](https://github.com/pylint-dev/pylint) | `3.3.9` | `4.0.4` | | [pytest](https://github.com/pytest-dev/pytest) | `8.4.2` | `9.0.2` | | [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) | `1.2.0` | `1.3.0` | | [pytest-env](https://github.com/pytest-dev/pytest-env) | `1.2.0` | `1.3.2` | | [faker](https://github.com/joke2k/faker) | `37.12.0` | `40.4.0` | | [annotated-doc](https://github.com/fastapi/annotated-doc) | `0.0.3` | `0.0.4` | | [anyio](https://github.com/agronholm/anyio) | `4.11.0` | `4.12.1` | | [boto3](https://github.com/boto/boto3) | `1.35.99` | `1.42.50` | | [botocore](https://github.com/boto/botocore) | `1.35.99` | `1.42.50` | | [certifi](https://github.com/certifi/python-certifi) | `2025.10.5` | `2026.1.4` | | [click](https://github.com/pallets/click) | `8.3.0` | `8.3.1` | | [cryptography](https://github.com/pyca/cryptography) | `46.0.3` | `46.0.5` | | [fastapi](https://github.com/fastapi/fastapi) | `0.120.2` | `0.129.0` | | [fastapi-cli](https://github.com/fastapi/fastapi-cli) | `0.0.14` | `0.0.23` | | [fastapi-cloud-cli](https://github.com/fastapilabs/fastapi-cloud-cli) | `0.3.1` | `0.12.0` | | [jmespath](https://github.com/jmespath/jmespath.py) | `1.0.1` | `1.1.0` | | [orjson](https://github.com/ijl/orjson) | `3.11.4` | `3.11.7` | | [pillow](https://github.com/python-pillow/Pillow) | `12.0.0` | `12.1.1` | | [pycparser](https://github.com/eliben/pycparser) | `2.23` | `3.0` | | [pydantic](https://github.com/pydantic/pydantic) | `2.12.3` | `2.12.5` | | [pydantic-extra-types](https://github.com/pydantic/pydantic-extra-types) | `2.10.6` | `2.11.0` | | [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.11.0` | `2.13.0` | | [pydantic-core](https://github.com/pydantic/pydantic-core) | `2.41.4` | `2.41.5` | | [pyjwt](https://github.com/jpadilla/pyjwt) | `2.10.1` | `2.11.0` | | [pymongo](https://github.com/mongodb/mongo-python-driver) | `4.15.3` | `4.16.0` | | [python-multipart](https://github.com/Kludex/python-multipart) | `0.0.20` | `0.0.22` | | [rich](https://github.com/Textualize/rich) | `14.2.0` | `14.3.2` | | rich-toolkit | `0.15.1` | `0.19.4` | | rignore | `0.7.2` | `0.7.6` | | [s3transfer](https://github.com/boto/s3transfer) | `0.10.4` | `0.16.0` | | [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.43.0` | `2.53.0` | | [starlette](https://github.com/Kludex/starlette) | `0.49.1` | `0.52.1` | | [typer](https://github.com/fastapi/typer) | `0.20.0` | `0.24.0` | | [urllib3](https://github.com/urllib3/urllib3) | `2.6.0` | `2.6.3` | | [uvicorn](https://github.com/Kludex/uvicorn) | `0.38.0` | `0.41.0` | | [websockets](https://github.com/python-websockets/websockets) | `15.0.1` | `16.0` | Updates `black` from 25.9.0 to 26.1.0 - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/25.9.0...26.1.0) Updates `pylint` from 3.3.9 to 4.0.4 - [Release notes](https://github.com/pylint-dev/pylint/releases) - [Commits](https://github.com/pylint-dev/pylint/compare/v3.3.9...v4.0.4) Updates `pytest` from 8.4.2 to 9.0.2 - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.4.2...9.0.2) Updates `pytest-asyncio` from 1.2.0 to 1.3.0 - [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases) - [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v1.2.0...v1.3.0) Updates `pytest-env` from 1.2.0 to 1.3.2 - [Release notes](https://github.com/pytest-dev/pytest-env/releases) - [Commits](https://github.com/pytest-dev/pytest-env/compare/1.2.0...1.3.2) Updates `faker` from 37.12.0 to 40.4.0 - [Release notes](https://github.com/joke2k/faker/releases) - [Changelog](https://github.com/joke2k/faker/blob/master/CHANGELOG.md) - [Commits](https://github.com/joke2k/faker/compare/v37.12.0...v40.4.0) Updates `annotated-doc` from 0.0.3 to 0.0.4 - [Release notes](https://github.com/fastapi/annotated-doc/releases) - [Changelog](https://github.com/fastapi/annotated-doc/blob/main/release-notes.md) - [Commits](https://github.com/fastapi/annotated-doc/compare/0.0.3...0.0.4) Updates `anyio` from 4.11.0 to 4.12.1 - [Release notes](https://github.com/agronholm/anyio/releases) - [Commits](https://github.com/agronholm/anyio/compare/4.11.0...4.12.1) Updates `boto3` from 1.35.99 to 1.42.50 - [Release notes](https://github.com/boto/boto3/releases) - [Commits](https://github.com/boto/boto3/compare/1.35.99...1.42.50) Updates `botocore` from 1.35.99 to 1.42.50 - [Commits](https://github.com/boto/botocore/compare/1.35.99...1.42.50) Updates `certifi` from 2025.10.5 to 2026.1.4 - [Commits](https://github.com/certifi/python-certifi/compare/2025.10.05...2026.01.04) Updates `click` from 8.3.0 to 8.3.1 - [Release notes](https://github.com/pallets/click/releases) - [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/click/compare/8.3.0...8.3.1) Updates `cryptography` from 46.0.3 to 46.0.5 - [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pyca/cryptography/compare/46.0.3...46.0.5) Updates `fastapi` from 0.120.2 to 0.129.0 - [Release notes](https://github.com/fastapi/fastapi/releases) - [Commits](https://github.com/fastapi/fastapi/compare/0.120.2...0.129.0) Updates `fastapi-cli` from 0.0.14 to 0.0.23 - [Release notes](https://github.com/fastapi/fastapi-cli/releases) - [Changelog](https://github.com/fastapi/fastapi-cli/blob/main/release-notes.md) - [Commits](https://github.com/fastapi/fastapi-cli/compare/0.0.14...0.0.23) Updates `fastapi-cloud-cli` from 0.3.1 to 0.12.0 - [Release notes](https://github.com/fastapilabs/fastapi-cloud-cli/releases) - [Changelog](https://github.com/fastapilabs/fastapi-cloud-cli/blob/main/release-notes.md) - [Commits](https://github.com/fastapilabs/fastapi-cloud-cli/compare/0.3.1...0.12.0) Updates `jmespath` from 1.0.1 to 1.1.0 - [Changelog](https://github.com/jmespath/jmespath.py/blob/develop/CHANGELOG.rst) - [Commits](https://github.com/jmespath/jmespath.py/compare/1.0.1...1.1.0) Updates `orjson` from 3.11.4 to 3.11.7 - [Release notes](https://github.com/ijl/orjson/releases) - [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md) - [Commits](https://github.com/ijl/orjson/compare/3.11.4...3.11.7) Updates `pillow` from 12.0.0 to 12.1.1 - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/12.0.0...12.1.1) Updates `pycparser` from 2.23 to 3.0 - [Release notes](https://github.com/eliben/pycparser/releases) - [Commits](https://github.com/eliben/pycparser/compare/release_v2.23...release_v3.00) Updates `pydantic` from 2.12.3 to 2.12.5 - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md) - [Commits](https://github.com/pydantic/pydantic/compare/v2.12.3...v2.12.5) Updates `pydantic-extra-types` from 2.10.6 to 2.11.0 - [Release notes](https://github.com/pydantic/pydantic-extra-types/releases) - [Changelog](https://github.com/pydantic/pydantic-extra-types/blob/main/HISTORY.md) - [Commits](https://github.com/pydantic/pydantic-extra-types/compare/v2.10.6...v2.11.0) Updates `pydantic-settings` from 2.11.0 to 2.13.0 - [Release notes](https://github.com/pydantic/pydantic-settings/releases) - [Commits](https://github.com/pydantic/pydantic-settings/compare/v2.11.0...v2.13.0) Updates `pydantic-core` from 2.41.4 to 2.41.5 - [Release notes](https://github.com/pydantic/pydantic-core/releases) - [Commits](https://github.com/pydantic/pydantic-core/compare/v2.41.4...v2.41.5) Updates `pyjwt` from 2.10.1 to 2.11.0 - [Release notes](https://github.com/jpadilla/pyjwt/releases) - [Changelog](https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst) - [Commits](https://github.com/jpadilla/pyjwt/compare/2.10.1...2.11.0) Updates `pymongo` from 4.15.3 to 4.16.0 - [Release notes](https://github.com/mongodb/mongo-python-driver/releases) - [Changelog](https://github.com/mongodb/mongo-python-driver/blob/master/doc/changelog.rst) - [Commits](https://github.com/mongodb/mongo-python-driver/compare/4.15.3...4.16.0) Updates `python-multipart` from 0.0.20 to 0.0.22 - [Release notes](https://github.com/Kludex/python-multipart/releases) - [Changelog](https://github.com/Kludex/python-multipart/blob/master/CHANGELOG.md) - [Commits](https://github.com/Kludex/python-multipart/compare/0.0.20...0.0.22) Updates `rich` from 14.2.0 to 14.3.2 - [Release notes](https://github.com/Textualize/rich/releases) - [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md) - [Commits](https://github.com/Textualize/rich/compare/v14.2.0...v14.3.2) Updates `rich-toolkit` from 0.15.1 to 0.19.4 Updates `rignore` from 0.7.2 to 0.7.6 Updates `s3transfer` from 0.10.4 to 0.16.0 - [Changelog](https://github.com/boto/s3transfer/blob/develop/CHANGELOG.rst) - [Commits](https://github.com/boto/s3transfer/compare/0.10.4...0.16.0) Updates `sentry-sdk` from 2.43.0 to 2.53.0 - [Release notes](https://github.com/getsentry/sentry-python/releases) - [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-python/compare/2.43.0...2.53.0) Updates `starlette` from 0.49.1 to 0.52.1 - [Release notes](https://github.com/Kludex/starlette/releases) - [Changelog](https://github.com/Kludex/starlette/blob/main/docs/release-notes.md) - [Commits](https://github.com/Kludex/starlette/compare/0.49.1...0.52.1) Updates `typer` from 0.20.0 to 0.24.0 - [Release notes](https://github.com/fastapi/typer/releases) - [Changelog](https://github.com/fastapi/typer/blob/master/docs/release-notes.md) - [Commits](https://github.com/fastapi/typer/compare/0.20.0...0.24.0) Updates `urllib3` from 2.6.0 to 2.6.3 - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.6.0...2.6.3) Updates `uvicorn` from 0.38.0 to 0.41.0 - [Release notes](https://github.com/Kludex/uvicorn/releases) - [Changelog](https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md) - [Commits](https://github.com/Kludex/uvicorn/compare/0.38.0...0.41.0) Updates `websockets` from 15.0.1 to 16.0 - [Release notes](https://github.com/python-websockets/websockets/releases) - [Commits](https://github.com/python-websockets/websockets/compare/15.0.1...16.0) --- updated-dependencies: - dependency-name: black dependency-version: 26.1.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: pip - dependency-name: pylint dependency-version: 4.0.4 dependency-type: direct:development update-type: version-update:semver-major dependency-group: pip - dependency-name: pytest dependency-version: 9.0.2 dependency-type: direct:development update-type: version-update:semver-major dependency-group: pip - dependency-name: pytest-asyncio dependency-version: 1.3.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: pip - dependency-name: pytest-env dependency-version: 1.3.2 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: pip - dependency-name: faker dependency-version: 40.4.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: pip - dependency-name: annotated-doc dependency-version: 0.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: anyio dependency-version: 4.12.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: boto3 dependency-version: 1.42.50 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: botocore dependency-version: 1.42.50 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: certifi dependency-version: 2026.1.4 dependency-type: direct:production update-type: version-update:semver-major dependency-group: pip - dependency-name: click dependency-version: 8.3.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: cryptography dependency-version: 46.0.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: fastapi dependency-version: 0.129.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: fastapi-cli dependency-version: 0.0.23 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: fastapi-cloud-cli dependency-version: 0.12.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: jmespath dependency-version: 1.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: orjson dependency-version: 3.11.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: pillow dependency-version: 12.1.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: pycparser dependency-version: '3.0' dependency-type: direct:production update-type: version-update:semver-major dependency-group: pip - dependency-name: pydantic dependency-version: 2.12.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: pydantic-extra-types dependency-version: 2.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: pydantic-settings dependency-version: 2.13.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: pydantic-core dependency-version: 2.41.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: pyjwt dependency-version: 2.11.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: pymongo dependency-version: 4.16.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: python-multipart dependency-version: 0.0.22 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: rich dependency-version: 14.3.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: rich-toolkit dependency-version: 0.19.4 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: rignore dependency-version: 0.7.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: s3transfer dependency-version: 0.16.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: sentry-sdk dependency-version: 2.53.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: starlette dependency-version: 0.52.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: typer dependency-version: 0.24.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: urllib3 dependency-version: 2.6.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: pip - dependency-name: uvicorn dependency-version: 0.41.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: pip - dependency-name: websockets dependency-version: '16.0' dependency-type: direct:production update-type: version-update:semver-major dependency-group: pip ... Signed-off-by: dependabot[bot] --- pyproject.toml | 12 +++++----- requirements.txt | 62 ++++++++++++++++++++++++------------------------ 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 05d09e4..3f04fbe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,21 +19,21 @@ dependencies = [ [project.optional-dependencies] code-analysis = [ - "black==25.9.0", - "pylint==3.3.9", + "black==26.1.0", + "pylint==4.0.5", "object-storage-api[test]" ] test = [ - "pytest==8.4.2", - "pytest-asyncio==1.2.0", + "pytest==9.0.2", + "pytest-asyncio==1.3.0", "pytest-cov==7.0.0", - "pytest-env==1.2.0", + "pytest-env==1.5.0", "requests==2.32.5" ] scripts = [ - "faker==37.12.0", + "faker==40.4.0", "faker-file[pdf,docx,images]==0.18.4", ] diff --git a/requirements.txt b/requirements.txt index 88300fa..21c1ab6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,17 +1,17 @@ -annotated-doc==0.0.3 +annotated-doc==0.0.4 annotated-types==0.7.0 -anyio==4.11.0 -boto3==1.35.99 -botocore==1.35.99 -certifi==2025.10.5 +anyio==4.12.1 +boto3==1.42.53 +botocore==1.42.53 +certifi==2026.1.4 cffi==2.0.0 -click==8.3.0 -cryptography==46.0.3 +click==8.3.1 +cryptography==46.0.5 dnspython==2.8.0 email-validator==2.3.0 -fastapi==0.120.2 -fastapi-cli==0.0.14 -fastapi-cloud-cli==0.3.1 +fastapi==0.129.0 +fastapi-cli==0.0.23 +fastapi-cloud-cli==0.13.0 h11==0.16.0 httpcore==1.0.9 httptools==0.7.1 @@ -19,39 +19,39 @@ httpx==0.28.1 idna==3.11 itsdangerous==2.2.0 Jinja2==3.1.6 -jmespath==1.0.1 +jmespath==1.1.0 markdown-it-py==4.0.0 MarkupSafe==3.0.3 mdurl==0.1.2 -orjson==3.11.4 -pillow==12.0.0 -pycparser==2.23 -pydantic==2.12.3 -pydantic-extra-types==2.10.6 -pydantic-settings==2.11.0 -pydantic_core==2.41.4 +orjson==3.11.7 +pillow==12.1.1 +pycparser==3.0 +pydantic==2.12.5 +pydantic-extra-types==2.11.0 +pydantic-settings==2.13.1 +pydantic_core==2.41.5 Pygments==2.19.2 -PyJWT==2.10.1 -pymongo==4.15.3 +PyJWT==2.11.0 +pymongo==4.16.0 python-dateutil==2.9.0.post0 python-dotenv==1.2.1 -python-multipart==0.0.20 +python-multipart==0.0.22 PyYAML==6.0.3 -rich==14.2.0 -rich-toolkit==0.15.1 -rignore==0.7.2 -s3transfer==0.10.4 -sentry-sdk==2.43.0 +rich==14.3.3 +rich-toolkit==0.19.4 +rignore==0.7.6 +s3transfer==0.16.0 +sentry-sdk==2.53.0 shellingham==1.5.4 six==1.17.0 sniffio==1.3.1 -starlette==0.49.1 -typer==0.20.0 +starlette==0.52.1 +typer==0.24.0 typing-inspection==0.4.2 typing_extensions==4.15.0 ujson==5.11.0 -urllib3==2.6.0 -uvicorn==0.38.0 +urllib3==2.6.3 +uvicorn==0.41.0 uvloop==0.22.1 watchfiles==1.1.1 -websockets==15.0.1 +websockets==16.0 From 7d2fc536f7743be45f4d9972eac0d7cdc85a129c Mon Sep 17 00:00:00 2001 From: Joel Davies Date: Fri, 20 Feb 2026 12:40:34 +0000 Subject: [PATCH 2/7] Update requirements.txt file --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 21c1ab6..bb9e294 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,6 +12,7 @@ email-validator==2.3.0 fastapi==0.129.0 fastapi-cli==0.0.23 fastapi-cloud-cli==0.13.0 +fastar==0.8.0 h11==0.16.0 httpcore==1.0.9 httptools==0.7.1 @@ -44,7 +45,6 @@ s3transfer==0.16.0 sentry-sdk==2.53.0 shellingham==1.5.4 six==1.17.0 -sniffio==1.3.1 starlette==0.52.1 typer==0.24.0 typing-inspection==0.4.2 From 712389923c4ebae9185c895098c413fd26f36ec8 Mon Sep 17 00:00:00 2001 From: Joel Davies Date: Fri, 20 Feb 2026 12:44:23 +0000 Subject: [PATCH 3/7] Regnerate .pylintrc file --- .pylintrc | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.pylintrc b/.pylintrc index ae85523..1205f85 100644 --- a/.pylintrc +++ b/.pylintrc @@ -104,10 +104,6 @@ recursive=no # source root. source-roots= -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. unsafe-load-any-extension=no @@ -234,6 +230,11 @@ name-group= # not require a docstring. no-docstring-rgx=^_ +# Regular expression matching correct parameter specification variable names. +# If left empty, parameter specification variable names will be checked with +# the set naming style. +#paramspec-rgx= + # List of decorators that produce properties, such as abc.abstractproperty. Add # to this list to register other decorators that produce valid properties. # These decorators are taken in consideration only for invalid-name. @@ -247,6 +248,10 @@ property-classes=abc.abstractproperty # variable names will be checked with the set naming style. #typevar-rgx= +# Regular expression matching correct type variable tuple names. If left empty, +# type variable tuple names will be checked with the set naming style. +#typevartuple-rgx= + # Naming style matching correct variable names. variable-naming-style=snake_case @@ -344,7 +349,9 @@ indent-after-paren=4 # tab). indent-string=' ' -# Maximum number of characters on a single line. +# Maximum number of characters on a single line. Pylint's default of 100 is +# based on PEP 8's guidance that teams may choose line lengths up to 99 +# characters. max-line-length=120 # Maximum number of lines in a module. @@ -456,6 +463,9 @@ timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests. [MISCELLANEOUS] +# Whether or not to search for fixme's in docstrings. +check-fixme-in-docstring=no + # List of note tags to take in consideration, separated by a comma. notes=FIXME, XXX, From da14b95a2d6e45dc33a3a11deb38724bc56fd742 Mon Sep 17 00:00:00 2001 From: Joel Davies Date: Fri, 20 Feb 2026 12:52:13 +0000 Subject: [PATCH 4/7] Return 401 when JWT access token is invalid or expired #216 --- object_storage_api/auth/jwt_middleware.py | 2 +- test/e2e/test_jwt_middleware.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/object_storage_api/auth/jwt_middleware.py b/object_storage_api/auth/jwt_middleware.py index 658055b..13d4bbb 100644 --- a/object_storage_api/auth/jwt_middleware.py +++ b/object_storage_api/auth/jwt_middleware.py @@ -48,7 +48,7 @@ async def dispatch(self, request: Request, call_next: RequestResponseEndpoint) - if not self._is_jwt_access_token_valid(credentials.credentials): return JSONResponse( - status_code=status.HTTP_403_FORBIDDEN, content={"detail": "Invalid token or expired token"} + status_code=status.HTTP_401_UNAUTHORIZED, content={"detail": "Invalid token or expired token"} ) return await call_next(request) diff --git a/test/e2e/test_jwt_middleware.py b/test/e2e/test_jwt_middleware.py index 048f1e3..80d28f4 100644 --- a/test/e2e/test_jwt_middleware.py +++ b/test/e2e/test_jwt_middleware.py @@ -72,7 +72,7 @@ def test_jwt_middleware_denies_unauthenticated_requests(test_client, headers, ex for method in ["GET", "DELETE", "PATCH", "POST", "PUT"]: if method in api_route.methods: response = test_client.request(method, api_route.path, headers=headers) - assert response.status_code == 403 + assert response.status_code == 401 assert response.json()["detail"] == expected_response_message From a1784c4702b759b4b69c4680c9ee06cb0028611c Mon Sep 17 00:00:00 2001 From: Joel Davies Date: Fri, 20 Feb 2026 13:01:12 +0000 Subject: [PATCH 5/7] Revert changes to boto libraries as wont work with echo --- requirements.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.txt b/requirements.txt index bb9e294..da65a5f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ annotated-doc==0.0.4 annotated-types==0.7.0 anyio==4.12.1 -boto3==1.42.53 -botocore==1.42.53 +boto3==1.35.99 +botocore==1.35.99 certifi==2026.1.4 cffi==2.0.0 click==8.3.1 @@ -41,7 +41,7 @@ PyYAML==6.0.3 rich==14.3.3 rich-toolkit==0.19.4 rignore==0.7.6 -s3transfer==0.16.0 +s3transfer==0.10.4 sentry-sdk==2.53.0 shellingham==1.5.4 six==1.17.0 From 2d456ffc43633f963f939ddc1181fd6b5b34bfe7 Mon Sep 17 00:00:00 2001 From: Joel Davies Date: Fri, 20 Feb 2026 13:01:34 +0000 Subject: [PATCH 6/7] Fix failing tests #216 --- test/e2e/test_jwt_middleware.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/test_jwt_middleware.py b/test/e2e/test_jwt_middleware.py index 80d28f4..92dabf2 100644 --- a/test/e2e/test_jwt_middleware.py +++ b/test/e2e/test_jwt_middleware.py @@ -55,7 +55,7 @@ def test_jwt_middleware_allows_authenticated_request(test_client): ), pytest.param( {"Authorization": f"Invalid-Bearer {VALID_ACCESS_TOKEN}"}, - "Invalid authentication credentials", + "Not authenticated", id="invalid_authorization_scheme", ), ], From 3bb34d707fc6ea26ec8d727ce5b50efa4f5c15f7 Mon Sep 17 00:00:00 2001 From: Joel Davies Date: Fri, 20 Feb 2026 13:07:29 +0000 Subject: [PATCH 7/7] Run black formatter --- test/unit/stores/test_image.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/stores/test_image.py b/test/unit/stores/test_image.py index 6caa0b4..c95ec30 100644 --- a/test/unit/stores/test_image.py +++ b/test/unit/stores/test_image.py @@ -218,7 +218,7 @@ def call_create_presigned_get(self) -> None: `mock_create_presigned_get`. """ - (self._obtained_presigned_view_url, self._obtained_presigned_download_url) = ( + self._obtained_presigned_view_url, self._obtained_presigned_download_url = ( self.image_store.create_presigned_get(self._image_out) )