From c5c68724790c8d121302ce488a627dd72960cba7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:23:14 +0000 Subject: [PATCH 1/4] chore(deps): bump node from 23.5.0-bookworm to 23.6.0-bookworm (#17369) Bumps node from 23.5.0-bookworm to 23.6.0-bookworm. --- updated-dependencies: - dependency-name: node dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ee Durbin --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8ce0572a9a0b..7d5655720fee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # First things first, we build an image which is where we're going to compile # our static assets with. We use this stage in development. -FROM node:23.5.0-bookworm AS static-deps +FROM node:23.6.0-bookworm AS static-deps WORKDIR /opt/warehouse/src/ From cc239fe9475edb47c7dcd7f5bdc88a13197ed400 Mon Sep 17 00:00:00 2001 From: "pypi-combine-prs[bot]" <144945619+pypi-combine-prs[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 15:29:51 +0000 Subject: [PATCH 2/4] Combined PRs (#17388) * chore(deps): bump starlette from 0.45.1 to 0.45.2 Bumps [starlette](https://github.com/encode/starlette) from 0.45.1 to 0.45.2. - [Release notes](https://github.com/encode/starlette/releases) - [Changelog](https://github.com/encode/starlette/blob/master/docs/release-notes.md) - [Commits](https://github.com/encode/starlette/compare/0.45.1...0.45.2) --- updated-dependencies: - dependency-name: starlette dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * chore(deps): bump anyio from 4.7.0 to 4.8.0 Bumps [anyio](https://github.com/agronholm/anyio) from 4.7.0 to 4.8.0. - [Release notes](https://github.com/agronholm/anyio/releases) - [Changelog](https://github.com/agronholm/anyio/blob/master/docs/versionhistory.rst) - [Commits](https://github.com/agronholm/anyio/compare/4.7.0...4.8.0) --- updated-dependencies: - dependency-name: anyio dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore(deps): bump faker from 33.1.0 to 33.3.0 Bumps [faker](https://github.com/joke2k/faker) from 33.1.0 to 33.3.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/v33.1.0...v33.3.0) --- updated-dependencies: - dependency-name: faker dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore(deps): bump pymdown-extensions from 10.13 to 10.14 Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.13 to 10.14. - [Release notes](https://github.com/facelessuser/pymdown-extensions/releases) - [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.13...10.14) --- updated-dependencies: - dependency-name: pymdown-extensions dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore(deps): bump trove-classifiers from 2024.10.21.16 to 2025.1.7.14 Bumps [trove-classifiers](https://github.com/pypa/trove-classifiers) from 2024.10.21.16 to 2025.1.7.14. - [Release notes](https://github.com/pypa/trove-classifiers/releases) - [Commits](https://github.com/pypa/trove-classifiers/compare/2024.10.21.16...2025.1.7.14) --- updated-dependencies: - dependency-name: trove-classifiers dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * chore(deps): bump disposable-email-domains from 0.0.114 to 0.0.115 Bumps [disposable-email-domains](https://github.com/disposable-email-domains/disposable-email-domains) from 0.0.114 to 0.0.115. - [Commits](https://github.com/disposable-email-domains/disposable-email-domains/commits) --- updated-dependencies: - dependency-name: disposable-email-domains dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * chore(deps): bump grpcio from 1.68.1 to 1.69.0 Bumps [grpcio](https://github.com/grpc/grpc) from 1.68.1 to 1.69.0. - [Release notes](https://github.com/grpc/grpc/releases) - [Changelog](https://github.com/grpc/grpc/blob/master/doc/grpc_release_schedule.md) - [Commits](https://github.com/grpc/grpc/compare/v1.68.1...v1.69.0) --- updated-dependencies: - dependency-name: grpcio dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore(deps): bump grpcio-status from 1.68.1 to 1.69.0 Bumps [grpcio-status](https://grpc.io) from 1.68.1 to 1.69.0. --- updated-dependencies: - dependency-name: grpcio-status dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore(deps): bump setuptools from 75.6.0 to 75.8.0 Bumps [setuptools](https://github.com/pypa/setuptools) from 75.6.0 to 75.8.0. - [Release notes](https://github.com/pypa/setuptools/releases) - [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst) - [Commits](https://github.com/pypa/setuptools/compare/v75.6.0...v75.8.0) --- updated-dependencies: - dependency-name: setuptools dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore(deps): bump pygments from 2.18.0 to 2.19.1 Bumps [pygments](https://github.com/pygments/pygments) from 2.18.0 to 2.19.1. - [Release notes](https://github.com/pygments/pygments/releases) - [Changelog](https://github.com/pygments/pygments/blob/master/CHANGES) - [Commits](https://github.com/pygments/pygments/compare/2.18.0...2.19.1) --- updated-dependencies: - dependency-name: pygments dependency-type: indirect update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore(deps): bump types-setuptools Bumps [types-setuptools](https://github.com/python/typeshed) from 75.6.0.20241223 to 75.8.0.20250110. - [Commits](https://github.com/python/typeshed/commits) --- updated-dependencies: - dependency-name: types-setuptools dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * chore(deps): bump sqlalchemy[asyncio] from 2.0.36 to 2.0.37 Bumps [sqlalchemy[asyncio]](https://github.com/sqlalchemy/sqlalchemy) from 2.0.36 to 2.0.37. - [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases) - [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst) - [Commits](https://github.com/sqlalchemy/sqlalchemy/commits) --- updated-dependencies: - dependency-name: sqlalchemy[asyncio] dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * chore(deps): bump orjson from 3.10.13 to 3.10.14 Bumps [orjson](https://github.com/ijl/orjson) from 3.10.13 to 3.10.14. - [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.10.13...3.10.14) --- updated-dependencies: - dependency-name: orjson dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * chore(deps): bump protobuf from 5.29.2 to 5.29.3 Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 5.29.2 to 5.29.3. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v5.29.2...v5.29.3) --- updated-dependencies: - dependency-name: protobuf dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: pypi-combine-prs[bot] <144945619+pypi-combine-prs[bot]@users.noreply.github.com> --- requirements/deploy.txt | 24 +- requirements/docs-blog.txt | 12 +- requirements/docs-dev.txt | 18 +- requirements/docs-user.txt | 12 +- requirements/lint.txt | 12 +- requirements/main.txt | 434 ++++++++++++++++++------------------- requirements/tests.txt | 12 +- 7 files changed, 262 insertions(+), 262 deletions(-) diff --git a/requirements/deploy.txt b/requirements/deploy.txt index 0f81baf2ebd2..952b88fb22ad 100644 --- a/requirements/deploy.txt +++ b/requirements/deploy.txt @@ -94,18 +94,18 @@ packaging==24.2 \ --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f # via gunicorn -protobuf==5.29.2 \ - --hash=sha256:13d6d617a2a9e0e82a88113d7191a1baa1e42c2cc6f5f1398d3b054c8e7e714a \ - --hash=sha256:2d2e674c58a06311c8e99e74be43e7f3a8d1e2b2fdf845eaa347fbd866f23355 \ - --hash=sha256:36000f97ea1e76e8398a3f02936aac2a5d2b111aae9920ec1b769fc4a222c4d9 \ - --hash=sha256:494229ecd8c9009dd71eda5fd57528395d1eacdf307dbece6c12ad0dd09e912e \ - --hash=sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9 \ - --hash=sha256:a0c53d78383c851bfa97eb42e3703aefdc96d2036a41482ffd55dc5f529466eb \ - --hash=sha256:b2cc8e8bb7c9326996f0e160137b0861f1a82162502658df2951209d0cb0309e \ - --hash=sha256:b6b0d416bbbb9d4fbf9d0561dbfc4e324fd522f61f7af0fe0f282ab67b22477e \ - --hash=sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851 \ - --hash=sha256:e621a98c0201a7c8afe89d9646859859be97cb22b8bf1d8eacfd90d5bda2eb19 \ - --hash=sha256:fde4554c0e578a5a0bcc9a276339594848d1e89f9ea47b4427c80e5d72f90181 +protobuf==5.29.3 \ + --hash=sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f \ + --hash=sha256:0eb32bfa5219fc8d4111803e9a690658aa2e6366384fd0851064b963b6d1f2a7 \ + --hash=sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888 \ + --hash=sha256:5da0f41edaf117bde316404bad1a486cb4ededf8e4a54891296f648e8e076620 \ + --hash=sha256:6ce8cc3389a20693bfde6c6562e03474c40851b44975c9b2bf6df7d8c4f864da \ + --hash=sha256:84a57163a0ccef3f96e4b6a20516cedcf5bb3a95a657131c5c3ac62200d23252 \ + --hash=sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a \ + --hash=sha256:a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e \ + --hash=sha256:b89c115d877892a512f79a8114564fb435943b59067615894c3b13cd3e1fa107 \ + --hash=sha256:c027e08a08be10b67c06bf2370b99c811c466398c357e615ca88c91c07f0910f \ + --hash=sha256:daaf63f70f25e8689c072cfad4334ca0ac1d1e05a92fc15c54eb9cf23c3efd84 # via ddtrace typing-extensions==4.12.2 \ --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ diff --git a/requirements/docs-blog.txt b/requirements/docs-blog.txt index 5619a35dfd49..ebd8cb4e4d57 100644 --- a/requirements/docs-blog.txt +++ b/requirements/docs-blog.txt @@ -508,13 +508,13 @@ pycparser==2.22 \ --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc # via cffi -pygments==2.18.0 \ - --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ - --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a +pygments==2.19.1 \ + --hash=sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f \ + --hash=sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c # via mkdocs-material -pymdown-extensions==10.13 \ - --hash=sha256:80bc33d715eec68e683e04298946d47d78c7739e79d808203df278ee8ef89428 \ - --hash=sha256:e0b351494dc0d8d14a1f52b39b1499a00ef1566b4ba23dc74f1eba75c736f5dd +pymdown-extensions==10.14 \ + --hash=sha256:202481f716cc8250e4be8fce997781ebf7917701b59652458ee47f2401f818b5 \ + --hash=sha256:741bd7c4ff961ba40b7528d32284c53bc436b8b1645e8e37c3e57770b8700a34 # via mkdocs-material python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ diff --git a/requirements/docs-dev.txt b/requirements/docs-dev.txt index 77e0d94c2ea6..aa4a80a53f3d 100644 --- a/requirements/docs-dev.txt +++ b/requirements/docs-dev.txt @@ -8,9 +8,9 @@ alabaster==1.0.0 \ --hash=sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e \ --hash=sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b # via sphinx -anyio==4.7.0 \ - --hash=sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48 \ - --hash=sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352 +anyio==4.8.0 \ + --hash=sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a \ + --hash=sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a # via # starlette # watchfiles @@ -256,9 +256,9 @@ packaging==24.2 \ --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ --hash=sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f # via sphinx -pygments==2.18.0 \ - --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ - --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a +pygments==2.19.1 \ + --hash=sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f \ + --hash=sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c # via # furo # sphinx @@ -400,9 +400,9 @@ sphinxcontrib-serializinghtml==2.0.0 \ --hash=sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331 \ --hash=sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d # via sphinx -starlette==0.45.1 \ - --hash=sha256:5656c0524f586e9148d9a3c1dd5257fb42a99892fb0dc6877dd76ef4d184aac3 \ - --hash=sha256:a8ae1fa3b1ab7ca83a4abd77871921a13fb5aeaf4874436fb96c29dfcd4ecfa3 +starlette==0.45.2 \ + --hash=sha256:4daec3356fb0cb1e723a5235e5beaf375d2259af27532958e2d79df549dad9da \ + --hash=sha256:bba1831d15ae5212b22feab2f218bab6ed3cd0fc2dc1d4442443bb1ee52260e0 # via sphinx-autobuild typing-extensions==4.12.2 \ --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ diff --git a/requirements/docs-user.txt b/requirements/docs-user.txt index 91e12801a8a5..6c0b258fb7a7 100644 --- a/requirements/docs-user.txt +++ b/requirements/docs-user.txt @@ -269,13 +269,13 @@ platformdirs==4.3.6 \ --hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \ --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb # via mkdocs-get-deps -pygments==2.18.0 \ - --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ - --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a +pygments==2.19.1 \ + --hash=sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f \ + --hash=sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c # via mkdocs-material -pymdown-extensions==10.13 \ - --hash=sha256:80bc33d715eec68e683e04298946d47d78c7739e79d808203df278ee8ef89428 \ - --hash=sha256:e0b351494dc0d8d14a1f52b39b1499a00ef1566b4ba23dc74f1eba75c736f5dd +pymdown-extensions==10.14 \ + --hash=sha256:202481f716cc8250e4be8fce997781ebf7917701b59652458ee47f2401f818b5 \ + --hash=sha256:741bd7c4ff961ba40b7528d32284c53bc436b8b1645e8e37c3e57770b8700a34 # via mkdocs-material python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ diff --git a/requirements/lint.txt b/requirements/lint.txt index 20786b6d99f0..7247b0c159af 100644 --- a/requirements/lint.txt +++ b/requirements/lint.txt @@ -569,9 +569,9 @@ types-s3transfer==0.10.4 \ --hash=sha256:03123477e3064c81efe712bf9d372c7c72f2790711431f9baa59cf96ea607267 \ --hash=sha256:22ac1aabc98f9d7f2928eb3fb4d5c02bf7435687f0913345a97dd3b84d0c217d # via boto3-stubs -types-setuptools==75.6.0.20241223 \ - --hash=sha256:7cbfd3bf2944f88bbcdd321b86ddd878232a277be95d44c78a53585d78ebc2f6 \ - --hash=sha256:d9478a985057ed48a994c707f548e55aababa85fe1c9b212f43ab5a1fffd3211 +types-setuptools==75.8.0.20250110 \ + --hash=sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271 \ + --hash=sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480 # via # -r requirements/lint.in # types-babel @@ -654,9 +654,9 @@ zope-schema==7.0.1 \ # via mypy-zope # The following packages are considered to be unsafe in a requirements file: -setuptools==75.6.0 \ - --hash=sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6 \ - --hash=sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d +setuptools==75.8.0 \ + --hash=sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6 \ + --hash=sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3 # via # zope-event # zope-interface diff --git a/requirements/main.txt b/requirements/main.txt index eb6f266fa40e..7f5e4f54ee8c 100644 --- a/requirements/main.txt +++ b/requirements/main.txt @@ -515,9 +515,9 @@ deprecated==1.2.15 \ --hash=sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320 \ --hash=sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d # via limits -disposable-email-domains==0.0.114 \ - --hash=sha256:40719a1d10267a4dc705d887bb59645e11eff60234cd268a1437cc08815228de \ - --hash=sha256:73f29c9663c3a269ae8eb6ea05bd744c5357a1d41e49c5d06bb154b78c9d87f4 +disposable-email-domains==0.0.115 \ + --hash=sha256:25285d539a6fd81926961d5d5edec837cdc8e8371eb6464b01ce384720bd6c63 \ + --hash=sha256:d622cc7d7f4107939f9fad9add50c6a64e37ad3da3218e6b540aae16af4d0b54 # via -r requirements/main.in dnspython==2.7.0 \ --hash=sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86 \ @@ -698,68 +698,68 @@ greenlet==3.1.1 \ --hash=sha256:f406b22b7c9a9b4f8aa9d2ab13d6ae0ac3e85c9a809bd590ad53fed2bf70dc79 \ --hash=sha256:f6ff3b14f2df4c41660a7dec01045a045653998784bf8cfcb5a525bdffffbc8f # via sqlalchemy -grpcio==1.68.1 \ - --hash=sha256:025f790c056815b3bf53da850dd70ebb849fd755a4b1ac822cb65cd631e37d43 \ - --hash=sha256:04cfd68bf4f38f5bb959ee2361a7546916bd9a50f78617a346b3aeb2b42e2161 \ - --hash=sha256:0feb02205a27caca128627bd1df4ee7212db051019a9afa76f4bb6a1a80ca95e \ - --hash=sha256:1098f03dedc3b9810810568060dea4ac0822b4062f537b0f53aa015269be0a76 \ - --hash=sha256:12941d533f3cd45d46f202e3667be8ebf6bcb3573629c7ec12c3e211d99cfccf \ - --hash=sha256:255b1635b0ed81e9f91da4fcc8d43b7ea5520090b9a9ad9340d147066d1d3613 \ - --hash=sha256:298ee7f80e26f9483f0b6f94cc0a046caf54400a11b644713bb5b3d8eb387600 \ - --hash=sha256:2c4cec6177bf325eb6faa6bd834d2ff6aa8bb3b29012cceb4937b86f8b74323c \ - --hash=sha256:2cc1fd04af8399971bcd4f43bd98c22d01029ea2e56e69c34daf2bf8470e47f5 \ - --hash=sha256:334ab917792904245a028f10e803fcd5b6f36a7b2173a820c0b5b076555825e1 \ - --hash=sha256:3522c77d7e6606d6665ec8d50e867f13f946a4e00c7df46768f1c85089eae515 \ - --hash=sha256:37ea3be171f3cf3e7b7e412a98b77685eba9d4fd67421f4a34686a63a65d99f9 \ - --hash=sha256:390eee4225a661c5cd133c09f5da1ee3c84498dc265fd292a6912b65c421c78c \ - --hash=sha256:3aed6544e4d523cd6b3119b0916cef3d15ef2da51e088211e4d1eb91a6c7f4f1 \ - --hash=sha256:3ceb56c4285754e33bb3c2fa777d055e96e6932351a3082ce3559be47f8024f0 \ - --hash=sha256:44a8502dd5de653ae6a73e2de50a401d84184f0331d0ac3daeb044e66d5c5054 \ - --hash=sha256:4b177f5547f1b995826ef529d2eef89cca2f830dd8b2c99ffd5fde4da734ba73 \ - --hash=sha256:4efac5481c696d5cb124ff1c119a78bddbfdd13fc499e3bc0ca81e95fc573684 \ - --hash=sha256:52fbf85aa71263380d330f4fce9f013c0798242e31ede05fcee7fbe40ccfc20d \ - --hash=sha256:55857c71641064f01ff0541a1776bfe04a59db5558e82897d35a7793e525774c \ - --hash=sha256:66a24f3d45c33550703f0abb8b656515b0ab777970fa275693a2f6dc8e35f1c1 \ - --hash=sha256:6ab2d912ca39c51f46baf2a0d92aa265aa96b2443266fc50d234fa88bf877d8e \ - --hash=sha256:77d65165fc35cff6e954e7fd4229e05ec76102d4406d4576528d3a3635fc6172 \ - --hash=sha256:7dfc914cc31c906297b30463dde0b9be48e36939575eaf2a0a22a8096e69afe5 \ - --hash=sha256:7f20ebec257af55694d8f993e162ddf0d36bd82d4e57f74b31c67b3c6d63d8b2 \ - --hash=sha256:80af6f1e69c5e68a2be529990684abdd31ed6622e988bf18850075c81bb1ad6e \ - --hash=sha256:83bbf5807dc3ee94ce1de2dfe8a356e1d74101e4b9d7aa8c720cc4818a34aded \ - --hash=sha256:8720c25cd9ac25dd04ee02b69256d0ce35bf8a0f29e20577427355272230965a \ - --hash=sha256:8829924fffb25386995a31998ccbbeaa7367223e647e0122043dfc485a87c666 \ - --hash=sha256:8a3869a6661ec8f81d93f4597da50336718bde9eb13267a699ac7e0a1d6d0bea \ - --hash=sha256:8cb620037a2fd9eeee97b4531880e439ebfcd6d7d78f2e7dcc3726428ab5ef63 \ - --hash=sha256:919d7f18f63bcad3a0f81146188e90274fde800a94e35d42ffe9eadf6a9a6330 \ - --hash=sha256:95c87ce2a97434dffe7327a4071839ab8e8bffd0054cc74cbe971fba98aedd60 \ - --hash=sha256:963cc8d7d79b12c56008aabd8b457f400952dbea8997dd185f155e2f228db079 \ - --hash=sha256:96f473cdacfdd506008a5d7579c9f6a7ff245a9ade92c3c0265eb76cc591914f \ - --hash=sha256:9d1fae6bbf0816415b81db1e82fb3bf56f7857273c84dcbe68cbe046e58e1ccd \ - --hash=sha256:a0c8ddabef9c8f41617f213e527254c41e8b96ea9d387c632af878d05db9229c \ - --hash=sha256:a1b988b40f2fd9de5c820f3a701a43339d8dcf2cb2f1ca137e2c02671cc83ac1 \ - --hash=sha256:a47faedc9ea2e7a3b6569795c040aae5895a19dde0c728a48d3c5d7995fda385 \ - --hash=sha256:a8040f85dcb9830d8bbb033ae66d272614cec6faceee88d37a88a9bd1a7a704e \ - --hash=sha256:b33bd114fa5a83f03ec6b7b262ef9f5cac549d4126f1dc702078767b10c46ed9 \ - --hash=sha256:c08079b4934b0bf0a8847f42c197b1d12cba6495a3d43febd7e99ecd1cdc8d54 \ - --hash=sha256:c28848761a6520c5c6071d2904a18d339a796ebe6b800adc8b3f474c5ce3c3ad \ - --hash=sha256:cb400138e73969eb5e0535d1d06cae6a6f7a15f2cc74add320e2130b8179211a \ - --hash=sha256:cbb5780e2e740b6b4f2d208e90453591036ff80c02cc605fea1af8e6fc6b1bbe \ - --hash=sha256:ccf2ebd2de2d6661e2520dae293298a3803a98ebfc099275f113ce1f6c2a80f1 \ - --hash=sha256:d35740e3f45f60f3c37b1e6f2f4702c23867b9ce21c6410254c9c682237da68d \ - --hash=sha256:d99abcd61760ebb34bdff37e5a3ba333c5cc09feda8c1ad42547bea0416ada78 \ - --hash=sha256:ddda1aa22495d8acd9dfbafff2866438d12faec4d024ebc2e656784d96328ad0 \ - --hash=sha256:dffd29a2961f3263a16d73945b57cd44a8fd0b235740cb14056f0612329b345e \ - --hash=sha256:e4842e4872ae4ae0f5497bf60a0498fa778c192cc7a9e87877abd2814aca9475 \ - --hash=sha256:e8dbe3e00771bfe3d04feed8210fc6617006d06d9a2679b74605b9fed3e8362c \ - --hash=sha256:ee2e743e51cb964b4975de572aa8fb95b633f496f9fcb5e257893df3be854746 \ - --hash=sha256:eeb38ff04ab6e5756a2aef6ad8d94e89bb4a51ef96e20f45c44ba190fa0bcaad \ - --hash=sha256:f8261fa2a5f679abeb2a0a93ad056d765cdca1c47745eda3f2d87f874ff4b8c9 +grpcio==1.69.0 \ + --hash=sha256:01f834732c22a130bdf3dc154d1053bdbc887eb3ccb7f3e6285cfbfc33d9d5cc \ + --hash=sha256:028337786f11fecb5d7b7fa660475a06aabf7e5e52b5ac2df47414878c0ce7ea \ + --hash=sha256:0470fa911c503af59ec8bc4c82b371ee4303ececbbdc055f55ce48e38b20fd67 \ + --hash=sha256:0f0270bd9ffbff6961fe1da487bdcd594407ad390cc7960e738725d4807b18c4 \ + --hash=sha256:1227ff7836f7b3a4ab04e5754f1d001fa52a730685d3dc894ed8bc262cc96c01 \ + --hash=sha256:1514341def9c6ec4b7f0b9628be95f620f9d4b99331b7ef0a1845fd33d9b579c \ + --hash=sha256:1e925954b18d41aeb5ae250262116d0970893b38232689c4240024e4333ac084 \ + --hash=sha256:1ee76cd7e2e49cf9264f6812d8c9ac1b85dda0eaea063af07292400f9191750e \ + --hash=sha256:1f03dc9b4da4c0dc8a1db7a5420f575251d7319b7a839004d8916257ddbe4816 \ + --hash=sha256:200e48a6e7b00f804cf00a1c26292a5baa96507c7749e70a3ec10ca1a288936e \ + --hash=sha256:2060ca95a8db295ae828d0fc1c7f38fb26ccd5edf9aa51a0f44251f5da332e97 \ + --hash=sha256:26c9a9c4ac917efab4704b18eed9082ed3b6ad19595f047e8173b5182fec0d5e \ + --hash=sha256:282f47d0928e40f25d007f24eb8fa051cb22551e3c74b8248bc9f9bea9c35fe0 \ + --hash=sha256:2e52e107261fd8fa8fa457fe44bfadb904ae869d87c1280bf60f93ecd3e79278 \ + --hash=sha256:316463c0832d5fcdb5e35ff2826d9aa3f26758d29cdfb59a368c1d6c39615a11 \ + --hash=sha256:3629d8a8185f5139869a6a17865d03113a260e311e78fbe313f1a71603617589 \ + --hash=sha256:3b75aea7c6cb91b341c85e7c1d9db1e09e1dd630b0717f836be94971e015031e \ + --hash=sha256:45a4704339b6e5b24b0e136dea9ad3815a94f30eb4f1e1d44c4ac484ef11d8dd \ + --hash=sha256:4ed866f9edb574fd9be71bf64c954ce1b88fc93b2a4cbf94af221e9426eb14d6 \ + --hash=sha256:5494d0e52bf77a2f7eb17c6da662886ca0a731e56c1c85b93505bece8dc6cf4c \ + --hash=sha256:5ccbed100dc43704e94ccff9e07680b540d64e4cc89213ab2832b51b4f68a520 \ + --hash=sha256:5cfd14175f9db33d4b74d63de87c64bb0ee29ce475ce3c00c01ad2a3dc2a9e51 \ + --hash=sha256:60e5de105dc02832dc8f120056306d0ef80932bcf1c0e2b4ca3b676de6dc6505 \ + --hash=sha256:7e76accf38808f5c5c752b0ab3fd919eb14ff8fafb8db520ad1cc12afff74de6 \ + --hash=sha256:85d347cb8237751b23539981dbd2d9d8f6e9ff90082b427b13022b948eb6347a \ + --hash=sha256:87d222569273720366f68a99cb62e6194681eb763ee1d3b1005840678d4884f9 \ + --hash=sha256:8b94e83f66dbf6fd642415faca0608590bc5e8d30e2c012b31d7d1b91b1de2fd \ + --hash=sha256:8cc614e895177ab7e4b70f154d1a7c97e152577ea101d76026d132b7aaba003b \ + --hash=sha256:8de1b192c29b8ce45ee26a700044717bcbbd21c697fa1124d440548964328561 \ + --hash=sha256:9031069d36cb949205293cf0e243abd5e64d6c93e01b078c37921493a41b72dc \ + --hash=sha256:90b3646ced2eae3a0599658eeccc5ba7f303bf51b82514c50715bdd2b109e5ec \ + --hash=sha256:936fa44241b5379c5afc344e1260d467bee495747eaf478de825bab2791da6f5 \ + --hash=sha256:a78a06911d4081a24a1761d16215a08e9b6d4d29cdbb7e427e6c7e17b06bcc5d \ + --hash=sha256:a7f4ed0dcf202a70fe661329f8874bc3775c14bb3911d020d07c82c766ce0eb1 \ + --hash=sha256:b192b81076073ed46f4b4dd612b8897d9a1e39d4eabd822e5da7b38497ed77e1 \ + --hash=sha256:b62b0f41e6e01a3e5082000b612064c87c93a49b05f7602fe1b7aa9fd5171a1d \ + --hash=sha256:b634851b92c090763dde61df0868c730376cdb73a91bcc821af56ae043b09596 \ + --hash=sha256:b650f34aceac8b2d08a4c8d7dc3e8a593f4d9e26d86751ebf74ebf5107d927de \ + --hash=sha256:b7f693db593d6bf285e015d5538bf1c86cf9c60ed30b6f7da04a00ed052fe2f3 \ + --hash=sha256:bf1f8be0da3fcdb2c1e9f374f3c2d043d606d69f425cd685110dd6d0d2d61258 \ + --hash=sha256:bf5f680d3ed08c15330d7830d06bc65f58ca40c9999309517fd62880d70cb06e \ + --hash=sha256:c1fea55d26d647346acb0069b08dca70984101f2dc95066e003019207212e303 \ + --hash=sha256:c5ba38aeac7a2fe353615c6b4213d1fbb3a3c34f86b4aaa8be08baaaee8cc56d \ + --hash=sha256:c9a281878feeb9ae26db0622a19add03922a028d4db684658f16d546601a4870 \ + --hash=sha256:ca71d73a270dff052fe4edf74fef142d6ddd1f84175d9ac4a14b7280572ac519 \ + --hash=sha256:cc89b6c29f3dccbe12d7a3b3f1b3999db4882ae076c1c1f6df231d55dbd767a5 \ + --hash=sha256:cd7ea241b10bc5f0bb0f82c0d7896822b7ed122b3ab35c9851b440c1ccf81588 \ + --hash=sha256:d5658c3c2660417d82db51e168b277e0ff036d0b0f859fa7576c0ffd2aec1442 \ + --hash=sha256:db6f9fd2578dbe37db4b2994c94a1d9c93552ed77dca80e1657bb8a05b898b55 \ + --hash=sha256:dc48f99cc05e0698e689b51a05933253c69a8c8559a47f605cff83801b03af0e \ + --hash=sha256:dc5a351927d605b2721cbb46158e431dd49ce66ffbacb03e709dc07a491dde35 \ + --hash=sha256:dd034d68a2905464c49479b0c209c773737a4245d616234c79c975c7c90eca03 \ + --hash=sha256:f79e05f5bbf551c4057c227d1b041ace0e78462ac8128e2ad39ec58a382536d2 \ + --hash=sha256:fb9302afc3a0e4ba0b225cd651ef8e478bf0070cf11a529175caecd5ea2474e7 \ + --hash=sha256:fc18a4de8c33491ad6f70022af5c460b39611e39578a4d84de0fe92f12d5d47b # via # google-api-core # grpcio-status -grpcio-status==1.68.1 \ - --hash=sha256:66f3d8847f665acfd56221333d66f7ad8927903d87242a482996bdb45e8d28fd \ - --hash=sha256:e1378d036c81a1610d7b4c7a146cd663dd13fcc915cf4d7d053929dba5bbb6e1 +grpcio-status==1.69.0 \ + --hash=sha256:595ef84e5178d6281caa732ccf68ff83259241608d26b0e9c40a5e66eee2a2d2 \ + --hash=sha256:d6b2a3c9562c03a817c628d7ba9a925e209c228762d6d7677ae5c9401a542853 # via google-api-core grpclib==0.4.7 \ --hash=sha256:2988ef57c02b22b7a2e8e961792c41ccf97efc2ace91ae7a5b0de03c363823c3 @@ -1445,82 +1445,82 @@ opensearch-py==2.8.0 \ --hash=sha256:52c60fdb5d4dcf6cce3ee746c13b194529b0161e0f41268b98ab8f1624abe2fa \ --hash=sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda # via -r requirements/main.in -orjson==3.10.13 \ - --hash=sha256:003721c72930dbb973f25c5d8e68d0f023d6ed138b14830cc94e57c6805a2eab \ - --hash=sha256:0065896f85d9497990731dfd4a9991a45b0a524baec42ef0a63c34630ee26fd6 \ - --hash=sha256:03b0f29d485411e3c13d79604b740b14e4e5fb58811743f6f4f9693ee6480a8f \ - --hash=sha256:064b9dbb0217fd64a8d016a8929f2fae6f3312d55ab3036b00b1d17399ab2f3e \ - --hash=sha256:0bc858086088b39dc622bc8219e73d3f246fb2bce70a6104abd04b3a080a66a8 \ - --hash=sha256:0dbf3b97e52e093d7c3e93eb5eb5b31dc7535b33c2ad56872c83f0160f943487 \ - --hash=sha256:0e2759d3172300b2f892dee85500b22fca5ac49e0c42cfff101aaf9c12ac9617 \ - --hash=sha256:0fee076134398d4e6cb827002468679ad402b22269510cf228301b787fdff5ae \ - --hash=sha256:1232c5e873a4d1638ef957c5564b4b0d6f2a6ab9e207a9b3de9de05a09d1d920 \ - --hash=sha256:1884e53c6818686891cc6fc5a3a2540f2f35e8c76eac8dc3b40480fb59660b00 \ - --hash=sha256:1a7d64f1db5ecbc21eb83097e5236d6ab7e86092c1cd4c216c02533332951afc \ - --hash=sha256:2149e2fcd084c3fd584881c7f9d7f9e5ad1e2e006609d8b80649655e0d52cd02 \ - --hash=sha256:22f1c9a30b43d14a041a6ea190d9eca8a6b80c4beb0e8b67602c82d30d6eec3e \ - --hash=sha256:233aae4474078d82f425134bb6a10fb2b3fc5a1a1b3420c6463ddd1b6a97eda8 \ - --hash=sha256:2cdaf8b028a976ebab837a2c27b82810f7fc76ed9fb243755ba650cc83d07730 \ - --hash=sha256:33ef84f7e9513fb13b3999c2a64b9ca9c8143f3da9722fbf9c9ce51ce0d8076e \ - --hash=sha256:3723e137772639af8adb68230f2aa4bcb27c48b3335b1b1e2d49328fed5e244c \ - --hash=sha256:3a7df63076435f39ec024bdfeb4c9767ebe7b49abc4949068d61cf4857fa6d6c \ - --hash=sha256:3ca6f17467ebbd763f8862f1d89384a5051b461bb0e41074f583a0ebd7120e8e \ - --hash=sha256:4222881d0aab76224d7b003a8e5fdae4082e32c86768e0e8652de8afd6c4e2c1 \ - --hash=sha256:46c249b4e934453be4ff2e518cd1adcd90467da7391c7a79eaf2fbb79c51e8c7 \ - --hash=sha256:48a946796e390cbb803e069472de37f192b7a80f4ac82e16d6eb9909d9e39d56 \ - --hash=sha256:4a11532cbfc2f5752c37e84863ef8435b68b0e6d459b329933294f65fa4bda1a \ - --hash=sha256:527afb6ddb0fa3fe02f5d9fba4920d9d95da58917826a9be93e0242da8abe94a \ - --hash=sha256:5385935a73adce85cc7faac9d396683fd813566d3857fa95a0b521ef84a5b588 \ - --hash=sha256:54433e421618cd5873e51c0e9d0b9fb35f7bf76eb31c8eab20b3595bb713cd3d \ - --hash=sha256:5f00c7fb18843bad2ac42dc1ce6dd214a083c53f1e324a0fd1c8137c6436269b \ - --hash=sha256:5f74d878d1efb97a930b8a9f9898890067707d683eb5c7e20730030ecb3fb930 \ - --hash=sha256:6066729cf9552d70de297b56556d14b4f49c8f638803ee3c90fd212fa43cc6af \ - --hash=sha256:62c3cc00c7e776c71c6b7b9c48c5d2701d4c04e7d1d7cdee3572998ee6dc57cc \ - --hash=sha256:63664bf12addb318dc8f032160e0f5dc17eb8471c93601e8f5e0d07f95003784 \ - --hash=sha256:69b21d91c5c5ef8a201036d207b1adf3aa596b930b6ca3c71484dd11386cf6c3 \ - --hash=sha256:6a428afb5720f12892f64920acd2eeb4d996595bf168a26dd9190115dbf1130d \ - --hash=sha256:711878da48f89df194edd2ba603ad42e7afed74abcd2bac164685e7ec15f96de \ - --hash=sha256:7184f608ad563032e398f311910bc536e62b9fbdca2041be889afcbc39500de8 \ - --hash=sha256:8257c3fb8dd7b0b446b5e87bf85a28e4071ac50f8c04b6ce2d38cb4abd7dff57 \ - --hash=sha256:89367767ed27b33c25c026696507c76e3d01958406f51d3a2239fe9e91959df2 \ - --hash=sha256:8a1152e2761025c5d13b5e1908d4b1c57f3797ba662e485ae6f26e4e0c466388 \ - --hash=sha256:92b4ec30d6025a9dcdfe0df77063cbce238c08d0404471ed7a79f309364a3d19 \ - --hash=sha256:9c976bad3996aa027cd3aef78aa57873f3c959b6c38719de9724b71bdc7bd14b \ - --hash=sha256:a3614b00621c77f3f6487792238f9ed1dd8a42f2ec0e6540ee34c2d4e6db813a \ - --hash=sha256:a36c0d48d2f084c800763473020a12976996f1109e2fcb66cfea442fdf88047f \ - --hash=sha256:a42b9fe4b0114b51eb5cdf9887d8c94447bc59df6dbb9c5884434eab947888d8 \ - --hash=sha256:a5a7624ab4d121c7e035708c8dd1f99c15ff155b69a1c0affc4d9d8b551281ba \ - --hash=sha256:a94542d12271c30044dadad1125ee060e7a2048b6c7034e432e116077e1d13d2 \ - --hash=sha256:a9ecea472f3eb653e1c0a3d68085f031f18fc501ea392b98dcca3e87c24f9ebe \ - --hash=sha256:aa6fe68f0981fba0d4bf9cdc666d297a7cdba0f1b380dcd075a9a3dd5649a69e \ - --hash=sha256:ae537fcf330b3947e82c6ae4271e092e6cf16b9bc2cef68b14ffd0df1fa8832a \ - --hash=sha256:b12a63f48bb53dba8453d36ca2661f2330126d54e26c1661e550b32864b28ce3 \ - --hash=sha256:b42f56821c29e697c68d7d421410d7c1d8f064ae288b525af6a50cf99a4b1200 \ - --hash=sha256:b5f7c298d4b935b222f52d6c7f2ba5eafb59d690d9a3840b7b5c5cda97f6ec5c \ - --hash=sha256:ba5b13b8739ce5b630c65cb1c85aedbd257bcc2b9c256b06ab2605209af75a2e \ - --hash=sha256:c0044b0b8c85a565e7c3ce0a72acc5d35cda60793edf871ed94711e712cb637d \ - --hash=sha256:c96d2fb80467d1d0dfc4d037b4e1c0f84f1fe6229aa7fea3f070083acef7f3d7 \ - --hash=sha256:cab83e67f6aabda1b45882254b2598b48b80ecc112968fc6483fa6dae609e9f0 \ - --hash=sha256:cf16f06cb77ce8baf844bc222dbcb03838f61d0abda2c3341400c2b7604e436e \ - --hash=sha256:d26a0eca3035619fa366cbaf49af704c7cb1d4a0e6c79eced9f6a3f2437964b6 \ - --hash=sha256:d36f689e7e1b9b6fb39dbdebc16a6f07cbe994d3644fb1c22953020fc575935f \ - --hash=sha256:d4b6acd7c9c829895e50d385a357d4b8c3fafc19c5989da2bae11783b0fd4977 \ - --hash=sha256:d9c3a87abe6f849a4a7ac8a8a1dede6320a4303d5304006b90da7a3cd2b70d2c \ - --hash=sha256:dbcd7aad6bcff258f6896abfbc177d54d9b18149c4c561114f47ebfe74ae6bfd \ - --hash=sha256:dc03db4922e75bbc870b03fc49734cefbd50fe975e0878327d200022210b82d8 \ - --hash=sha256:dca1d20f1af0daff511f6e26a27354a424f0b5cf00e04280279316df0f604a6f \ - --hash=sha256:dce1cc42ed75b585c0c4dc5eb53a90a34ccb493c09a10750d1a1f9b9eff2bd12 \ - --hash=sha256:dd2bcde107221bb9c2fa0c4aaba735a537225104173d7e19cf73f70b3126c993 \ - --hash=sha256:dda4ba4d3e6f6c53b6b9c35266788053b61656a716a7fef5c884629c2a52e7aa \ - --hash=sha256:e1ba0c5857dd743438acecc1cd0e1adf83f0a81fee558e32b2b36f89e40cee8b \ - --hash=sha256:e384e330a67cf52b3597ee2646de63407da6f8fc9e9beec3eaaaef5514c7a1c9 \ - --hash=sha256:e400436950ba42110a20c50c80dff4946c8e3ec09abc1c9cf5473467e83fd1c5 \ - --hash=sha256:e49333d1038bc03a25fdfe11c86360df9b890354bfe04215f1f54d030f33c342 \ - --hash=sha256:e4f998bbf300690be881772ee9c5281eb9c0044e295bcd4722504f5b5c6092ff \ - --hash=sha256:eb9bfb14ab8f68d9d9492d4817ae497788a15fd7da72e14dfabc289c3bb088ec \ - --hash=sha256:ee948c6c01f6b337589c88f8e0bb11e78d32a15848b8b53d3f3b6fea48842c12 \ - --hash=sha256:f47c9e7d224b86ffb086059cdcf634f4b3f32480f9838864aa09022fe2617ce2 \ - --hash=sha256:f81b26c03f5fb5f0d0ee48d83cea4d7bc5e67e420d209cc1a990f5d1c62f9be0 +orjson==3.10.14 \ + --hash=sha256:0293a88815e9bb5c90af4045f81ed364d982f955d12052d989d844d6c4e50945 \ + --hash=sha256:03f61ca3674555adcb1aa717b9fc87ae936aa7a63f6aba90a474a88701278780 \ + --hash=sha256:06d4ec218b1ec1467d8d64da4e123b4794c781b536203c309ca0f52819a16c03 \ + --hash=sha256:07520685d408a2aba514c17ccc16199ff2934f9f9e28501e676c557f454a37fe \ + --hash=sha256:0905ca08a10f7e0e0c97d11359609300eb1437490a7f32bbaa349de757e2e0c7 \ + --hash=sha256:0de4d6315cfdbd9ec803b945c23b3a68207fd47cbe43626036d97e8e9561a436 \ + --hash=sha256:164ac155109226b3a2606ee6dda899ccfbe6e7e18b5bdc3fbc00f79cc074157d \ + --hash=sha256:16642f10c1ca5611251bd835de9914a4b03095e28a34c8ba6a5500b5074338bd \ + --hash=sha256:175abf3d20e737fec47261d278f95031736a49d7832a09ab684026528c4d96db \ + --hash=sha256:175cafd322e458603e8ce73510a068d16b6e6f389c13f69bf16de0e843d7d406 \ + --hash=sha256:1b49e2af011c84c3f2d541bb5cd1e3c7c2df672223e7e3ea608f09cf295e5f8a \ + --hash=sha256:21d3be4132f71ef1360385770474f29ea1538a242eef72ac4934fe142800e37f \ + --hash=sha256:26336c0d4b2d44636e1e1e6ed1002f03c6aae4a8a9329561c8883f135e9ff010 \ + --hash=sha256:29ca1a93e035d570e8b791b6c0feddd403c6a5388bfe870bf2aa6bba1b9d9b8e \ + --hash=sha256:2ad4b7e367efba6dc3f119c9a0fcd41908b7ec0399a696f3cdea7ec477441b09 \ + --hash=sha256:33449c67195969b1a677533dee9d76e006001213a24501333624623e13c7cc8e \ + --hash=sha256:36f5bfc0399cd4811bf10ec7a759c7ab0cd18080956af8ee138097d5b5296a95 \ + --hash=sha256:3871bad546aa66c155e3f36f99c459780c2a392d502a64e23fb96d9abf338511 \ + --hash=sha256:397083806abd51cf2b3bbbf6c347575374d160331a2d33c5823e22249ad3118b \ + --hash=sha256:3af8e42ae4363773658b8d578d56dedffb4f05ceeb4d1d4dd3fb504950b45526 \ + --hash=sha256:4ddc8c866d7467f5ee2991397d2ea94bcf60d0048bdd8ca555740b56f9042725 \ + --hash=sha256:4f5007abfdbb1d866e2aa8990bd1c465f0f6da71d19e695fc278282be12cffa5 \ + --hash=sha256:56ee546c2bbe9599aba78169f99d1dc33301853e897dbaf642d654248280dc6e \ + --hash=sha256:6169d3868b190d6b21adc8e61f64e3db30f50559dfbdef34a1cd6c738d409dfc \ + --hash=sha256:64410696c97a35af2432dea7bdc4ce32416458159430ef1b4beb79fd30093ad6 \ + --hash=sha256:691ab9a13834310a263664313e4f747ceb93662d14a8bdf20eb97d27ed488f16 \ + --hash=sha256:6b1225024cf0ef5d15934b5ffe9baf860fe8bc68a796513f5ea4f5056de30bca \ + --hash=sha256:6e2ec73b7099b6a29b40a62e08a23b936423bd35529f8f55c42e27acccde7954 \ + --hash=sha256:76344269b550ea01488d19a2a369ab572c1ac4449a72e9f6ac0d70eb1cbfb953 \ + --hash=sha256:7796692136a67b3e301ef9052bde6fe8e7bd5200da766811a3a608ffa62aaff0 \ + --hash=sha256:7e947f70167fe18469f2023644e91ab3d24f9aed69a5e1c78e2c81b9cea553fb \ + --hash=sha256:8050a5d81c022561ee29cd2739de5b4445f3c72f39423fde80a63299c1892c52 \ + --hash=sha256:83adda3db595cb1a7e2237029b3249c85afbe5c747d26b41b802e7482cb3933e \ + --hash=sha256:849ea7845a55f09965826e816cdc7689d6cf74fe9223d79d758c714af955bcb6 \ + --hash=sha256:84dd83110503bc10e94322bf3ffab8bc49150176b49b4984dc1cce4c0a993bf9 \ + --hash=sha256:868943660fb2a1e6b6b965b74430c16a79320b665b28dd4511d15ad5038d37d5 \ + --hash=sha256:8cc8204f0b75606869c707da331058ddf085de29558b516fc43c73ee5ee2aadb \ + --hash=sha256:901e826cb2f1bdc1fcef3ef59adf0c451e8f7c0b5deb26c1a933fb66fb505eae \ + --hash=sha256:90937664e776ad316d64251e2fa2ad69265e4443067668e4727074fe39676414 \ + --hash=sha256:92d13292249f9f2a3e418cbc307a9fbbef043c65f4bd8ba1eb620bc2aaba3d15 \ + --hash=sha256:962c2ec0dcaf22b76dee9831fdf0c4a33d4bf9a257a2bc5d4adc00d5c8ad9034 \ + --hash=sha256:96a1c0ee30fb113b3ae3c748fd75ca74a157ff4c58476c47db4d61518962a011 \ + --hash=sha256:998019ef74a4997a9d741b1473533cdb8faa31373afc9849b35129b4b8ec048d \ + --hash=sha256:9a0fba3b8a587a54c18585f077dcab6dd251c170d85cfa4d063d5746cd595a0f \ + --hash=sha256:9d034abdd36f0f0f2240f91492684e5043d46f290525d1117712d5b8137784eb \ + --hash=sha256:9d3f9ed72e7458ded9a1fb1b4d4ed4c4fdbaf82030ce3f9274b4dc1bff7ace2b \ + --hash=sha256:9ed3d26c4cb4f6babaf791aa46a029265850e80ec2a566581f5c2ee1a14df4f1 \ + --hash=sha256:9f1d2942605c894162252d6259b0121bf1cb493071a1ea8cb35d79cb3e6ac5bc \ + --hash=sha256:a2d1679df9f9cd9504f8dff24555c1eaabba8aad7f5914f28dab99e3c2552c9d \ + --hash=sha256:b11ed82054fce82fb74cea33247d825d05ad6a4015ecfc02af5fbce442fbf361 \ + --hash=sha256:b49a28e30d3eca86db3fe6f9b7f4152fcacbb4a467953cd1b42b94b479b77956 \ + --hash=sha256:b5947b139dfa33f72eecc63f17e45230a97e741942955a6c9e650069305eb73d \ + --hash=sha256:c28ed60597c149a9e3f5ad6dd9cebaee6fb2f0e3f2d159a4a2b9b862d4748860 \ + --hash=sha256:c6dfbaeb7afa77ca608a50e2770a0461177b63a99520d4928e27591b142c74b1 \ + --hash=sha256:c7f189bbfcded40e41a6969c1068ba305850ba016665be71a217918931416fbf \ + --hash=sha256:ca041ad20291a65d853a9523744eebc3f5a4b2f7634e99f8fe88320695ddf766 \ + --hash=sha256:cde6d76910d3179dae70f164466692f4ea36da124d6fb1a61399ca589e81d69a \ + --hash=sha256:cf31f6f071a6b8e7aa1ead1fa27b935b48d00fbfa6a28ce856cfff2d5dd68eed \ + --hash=sha256:d313a2998b74bb26e9e371851a173a9b9474764916f1fc7971095699b3c6e964 \ + --hash=sha256:d5075c54edf1d6ad81d4c6523ce54a748ba1208b542e54b97d8a882ecd810fd1 \ + --hash=sha256:d6546e8073dc382e60fcae4a001a5a1bc46da5eab4a4878acc2d12072d6166d5 \ + --hash=sha256:deaa2899dff7f03ab667e2ec25842d233e2a6a9e333efa484dfe666403f3501c \ + --hash=sha256:e2979d0f2959990620f7e62da6cd954e4620ee815539bc57a8ae46e2dacf90e3 \ + --hash=sha256:e2bc525e335a8545c4e48f84dd0328bc46158c9aaeb8a1c2276546e94540ea3d \ + --hash=sha256:e4c9f60f9fb0b5be66e416dcd8c9d94c3eabff3801d875bdb1f8ffc12cf86905 \ + --hash=sha256:e70a1d62b8288677d48f3bea66c21586a5f999c64ecd3878edb7393e8d1b548d \ + --hash=sha256:eca04dfd792cedad53dc9a917da1a522486255360cb4e77619343a20d9f35364 \ + --hash=sha256:eee4bc767f348fba485ed9dc576ca58b0a9eac237f0e160f7a59bce628ed06b3 \ + --hash=sha256:efe5fd254cfb0eeee13b8ef7ecb20f5d5a56ddda8a587f3852ab2cedfefdb5f6 \ + --hash=sha256:f1c3ea52642c9714dc6e56de8a451a066f6d2707d273e07fe8a9cc1ba073813d \ + --hash=sha256:f496286fc85e93ce0f71cc84fc1c42de2decf1bf494094e188e27a53694777a7 \ + --hash=sha256:f506fd666dd1ecd15a832bebc66c4df45c1902fd47526292836c339f7ba665a9 \ + --hash=sha256:f77202c80e8ab5a1d1e9faf642343bee5aaf332061e1ada4e9147dbd9eb00c46 \ + --hash=sha256:fa18f949d3183a8d468367056be989666ac2bef3a72eece0bade9cdb733b3c28 \ + --hash=sha256:fa45e489ef80f28ff0e5ba0a72812b8cfc7c1ef8b46a694723807d1b07c89ebb # via -r requirements/main.in packaging==24.2 \ --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ @@ -1592,18 +1592,18 @@ proto-plus==1.25.0 \ --hash=sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961 \ --hash=sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91 # via google-api-core -protobuf==5.29.2 \ - --hash=sha256:13d6d617a2a9e0e82a88113d7191a1baa1e42c2cc6f5f1398d3b054c8e7e714a \ - --hash=sha256:2d2e674c58a06311c8e99e74be43e7f3a8d1e2b2fdf845eaa347fbd866f23355 \ - --hash=sha256:36000f97ea1e76e8398a3f02936aac2a5d2b111aae9920ec1b769fc4a222c4d9 \ - --hash=sha256:494229ecd8c9009dd71eda5fd57528395d1eacdf307dbece6c12ad0dd09e912e \ - --hash=sha256:842de6d9241134a973aab719ab42b008a18a90f9f07f06ba480df268f86432f9 \ - --hash=sha256:a0c53d78383c851bfa97eb42e3703aefdc96d2036a41482ffd55dc5f529466eb \ - --hash=sha256:b2cc8e8bb7c9326996f0e160137b0861f1a82162502658df2951209d0cb0309e \ - --hash=sha256:b6b0d416bbbb9d4fbf9d0561dbfc4e324fd522f61f7af0fe0f282ab67b22477e \ - --hash=sha256:c12ba8249f5624300cf51c3d0bfe5be71a60c63e4dcf51ffe9a68771d958c851 \ - --hash=sha256:e621a98c0201a7c8afe89d9646859859be97cb22b8bf1d8eacfd90d5bda2eb19 \ - --hash=sha256:fde4554c0e578a5a0bcc9a276339594848d1e89f9ea47b4427c80e5d72f90181 +protobuf==5.29.3 \ + --hash=sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f \ + --hash=sha256:0eb32bfa5219fc8d4111803e9a690658aa2e6366384fd0851064b963b6d1f2a7 \ + --hash=sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888 \ + --hash=sha256:5da0f41edaf117bde316404bad1a486cb4ededf8e4a54891296f648e8e076620 \ + --hash=sha256:6ce8cc3389a20693bfde6c6562e03474c40851b44975c9b2bf6df7d8c4f864da \ + --hash=sha256:84a57163a0ccef3f96e4b6a20516cedcf5bb3a95a657131c5c3ac62200d23252 \ + --hash=sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a \ + --hash=sha256:a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e \ + --hash=sha256:b89c115d877892a512f79a8114564fb435943b59067615894c3b13cd3e1fa107 \ + --hash=sha256:c027e08a08be10b67c06bf2370b99c811c466398c357e615ca88c91c07f0910f \ + --hash=sha256:daaf63f70f25e8689c072cfad4334ca0ac1d1e05a92fc15c54eb9cf23c3efd84 # via # google-api-core # googleapis-common-protos @@ -1777,9 +1777,9 @@ pydantic-core==2.27.1 \ --hash=sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206 \ --hash=sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b # via pydantic -pygments==2.18.0 \ - --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ - --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a +pygments==2.19.1 \ + --hash=sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f \ + --hash=sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c # via # readme-renderer # rich @@ -2168,64 +2168,64 @@ six==1.17.0 \ # pymacaroons # python-dateutil # rfc3339-validator -sqlalchemy[asyncio]==2.0.36 \ - --hash=sha256:03e08af7a5f9386a43919eda9de33ffda16b44eb11f3b313e6822243770e9763 \ - --hash=sha256:0572f4bd6f94752167adfd7c1bed84f4b240ee6203a95e05d1e208d488d0d436 \ - --hash=sha256:07b441f7d03b9a66299ce7ccf3ef2900abc81c0db434f42a5694a37bd73870f2 \ - --hash=sha256:1bc330d9d29c7f06f003ab10e1eaced295e87940405afe1b110f2eb93a233588 \ - --hash=sha256:1e0d612a17581b6616ff03c8e3d5eff7452f34655c901f75d62bd86449d9750e \ - --hash=sha256:23623166bfefe1487d81b698c423f8678e80df8b54614c2bf4b4cfcd7c711959 \ - --hash=sha256:2519f3a5d0517fc159afab1015e54bb81b4406c278749779be57a569d8d1bb0d \ - --hash=sha256:28120ef39c92c2dd60f2721af9328479516844c6b550b077ca450c7d7dc68575 \ - --hash=sha256:37350015056a553e442ff672c2d20e6f4b6d0b2495691fa239d8aa18bb3bc908 \ - --hash=sha256:39769a115f730d683b0eb7b694db9789267bcd027326cccc3125e862eb03bfd8 \ - --hash=sha256:3c01117dd36800f2ecaa238c65365b7b16497adc1522bf84906e5710ee9ba0e8 \ - --hash=sha256:3d6718667da04294d7df1670d70eeddd414f313738d20a6f1d1f379e3139a545 \ - --hash=sha256:3dbb986bad3ed5ceaf090200eba750b5245150bd97d3e67343a3cfed06feecf7 \ - --hash=sha256:4557e1f11c5f653ebfdd924f3f9d5ebfc718283b0b9beebaa5dd6b77ec290971 \ - --hash=sha256:46331b00096a6db1fdc052d55b101dbbfc99155a548e20a0e4a8e5e4d1362855 \ - --hash=sha256:4a121d62ebe7d26fec9155f83f8be5189ef1405f5973ea4874a26fab9f1e262c \ - --hash=sha256:4f5e9cd989b45b73bd359f693b935364f7e1f79486e29015813c338450aa5a71 \ - --hash=sha256:50aae840ebbd6cdd41af1c14590e5741665e5272d2fee999306673a1bb1fdb4d \ - --hash=sha256:59b1ee96617135f6e1d6f275bbe988f419c5178016f3d41d3c0abb0c819f75bb \ - --hash=sha256:59b8f3adb3971929a3e660337f5dacc5942c2cdb760afcabb2614ffbda9f9f72 \ - --hash=sha256:66bffbad8d6271bb1cc2f9a4ea4f86f80fe5e2e3e501a5ae2a3dc6a76e604e6f \ - --hash=sha256:69f93723edbca7342624d09f6704e7126b152eaed3cdbb634cb657a54332a3c5 \ - --hash=sha256:6a440293d802d3011028e14e4226da1434b373cbaf4a4bbb63f845761a708346 \ - --hash=sha256:72c28b84b174ce8af8504ca28ae9347d317f9dba3999e5981a3cd441f3712e24 \ - --hash=sha256:79d2e78abc26d871875b419e1fd3c0bca31a1cb0043277d0d850014599626c2e \ - --hash=sha256:7f2767680b6d2398aea7082e45a774b2b0767b5c8d8ffb9c8b683088ea9b29c5 \ - --hash=sha256:8318f4776c85abc3f40ab185e388bee7a6ea99e7fa3a30686580b209eaa35c08 \ - --hash=sha256:8958b10490125124463095bbdadda5aa22ec799f91958e410438ad6c97a7b793 \ - --hash=sha256:8c78ac40bde930c60e0f78b3cd184c580f89456dd87fc08f9e3ee3ce8765ce88 \ - --hash=sha256:90812a8933df713fdf748b355527e3af257a11e415b613dd794512461eb8a686 \ - --hash=sha256:9bc633f4ee4b4c46e7adcb3a9b5ec083bf1d9a97c1d3854b92749d935de40b9b \ - --hash=sha256:9e46ed38affdfc95d2c958de328d037d87801cfcbea6d421000859e9789e61c2 \ - --hash=sha256:9fe53b404f24789b5ea9003fc25b9a3988feddebd7e7b369c8fac27ad6f52f28 \ - --hash=sha256:a4e46a888b54be23d03a89be510f24a7652fe6ff660787b96cd0e57a4ebcb46d \ - --hash=sha256:a86bfab2ef46d63300c0f06936bd6e6c0105faa11d509083ba8f2f9d237fb5b5 \ - --hash=sha256:ac9dfa18ff2a67b09b372d5db8743c27966abf0e5344c555d86cc7199f7ad83a \ - --hash=sha256:af148a33ff0349f53512a049c6406923e4e02bf2f26c5fb285f143faf4f0e46a \ - --hash=sha256:b11d0cfdd2b095e7b0686cf5fabeb9c67fae5b06d265d8180715b8cfa86522e3 \ - --hash=sha256:b2985c0b06e989c043f1dc09d4fe89e1616aadd35392aea2844f0458a989eacf \ - --hash=sha256:b544ad1935a8541d177cb402948b94e871067656b3a0b9e91dbec136b06a2ff5 \ - --hash=sha256:b5cc79df7f4bc3d11e4b542596c03826063092611e481fcf1c9dfee3c94355ef \ - --hash=sha256:b817d41d692bf286abc181f8af476c4fbef3fd05e798777492618378448ee689 \ - --hash=sha256:b81ee3d84803fd42d0b154cb6892ae57ea6b7c55d8359a02379965706c7efe6c \ - --hash=sha256:be9812b766cad94a25bc63bec11f88c4ad3629a0cec1cd5d4ba48dc23860486b \ - --hash=sha256:c245b1fbade9c35e5bd3b64270ab49ce990369018289ecfde3f9c318411aaa07 \ - --hash=sha256:c3f3631693003d8e585d4200730616b78fafd5a01ef8b698f6967da5c605b3fa \ - --hash=sha256:c4ae3005ed83f5967f961fd091f2f8c5329161f69ce8480aa8168b2d7fe37f06 \ - --hash=sha256:c54a1e53a0c308a8e8a7dffb59097bff7facda27c70c286f005327f21b2bd6b1 \ - --hash=sha256:d0ddd9db6e59c44875211bc4c7953a9f6638b937b0a88ae6d09eb46cced54eff \ - --hash=sha256:dc022184d3e5cacc9579e41805a681187650e170eb2fd70e28b86192a479dcaa \ - --hash=sha256:e32092c47011d113dc01ab3e1d3ce9f006a47223b18422c5c0d150af13a00687 \ - --hash=sha256:f7b64e6ec3f02c35647be6b4851008b26cff592a95ecb13b6788a54ef80bbdd4 \ - --hash=sha256:f942a799516184c855e1a32fbc7b29d7e571b52612647866d4ec1c3242578fcb \ - --hash=sha256:f9511d8dd4a6e9271d07d150fb2f81874a3c8c95e11ff9af3a2dfc35fe42ee44 \ - --hash=sha256:fd3a55deef00f689ce931d4d1b23fa9f04c880a48ee97af488fd215cf24e2a6c \ - --hash=sha256:fddbe92b4760c6f5d48162aef14824add991aeda8ddadb3c31d56eb15ca69f8e \ - --hash=sha256:fdf3386a801ea5aba17c6410dd1dc8d39cf454ca2565541b5ac42a84e1e28f53 +sqlalchemy[asyncio]==2.0.37 \ + --hash=sha256:03f0528c53ca0b67094c4764523c1451ea15959bbf0a8a8a3096900014db0278 \ + --hash=sha256:12b0f1ec623cccf058cf21cb544f0e74656618165b083d78145cafde156ea7b6 \ + --hash=sha256:12b28d99a9c14eaf4055810df1001557176716de0167b91026e648e65229bffb \ + --hash=sha256:1b2690456528a87234a75d1a1644cdb330a6926f455403c8e4f6cad6921f9098 \ + --hash=sha256:1cdba1f73b64530c47b27118b7053b8447e6d6f3c8104e3ac59f3d40c33aa9fd \ + --hash=sha256:293f9ade06b2e68dd03cfb14d49202fac47b7bb94bffcff174568c951fbc7af2 \ + --hash=sha256:2952748ecd67ed3b56773c185e85fc084f6bdcdec10e5032a7c25a6bc7d682ef \ + --hash=sha256:2f95fc8e3f34b5f6b3effb49d10ac97c569ec8e32f985612d9b25dd12d0d2e94 \ + --hash=sha256:2fa2c0913f02341d25fb858e4fb2031e6b0813494cca1ba07d417674128ce11b \ + --hash=sha256:3151822aa1db0eb5afd65ccfafebe0ef5cda3a7701a279c8d0bf17781a793bb4 \ + --hash=sha256:35bd2df269de082065d4b23ae08502a47255832cc3f17619a5cea92ce478b02b \ + --hash=sha256:41296bbcaa55ef5fdd32389a35c710133b097f7b2609d8218c0eabded43a1d84 \ + --hash=sha256:44f569d0b1eb82301b92b72085583277316e7367e038d97c3a1a899d9a05e342 \ + --hash=sha256:46954173612617a99a64aee103bcd3f078901b9a8dcfc6ae80cbf34ba23df989 \ + --hash=sha256:4b12885dc85a2ab2b7d00995bac6d967bffa8594123b02ed21e8eb2205a7584b \ + --hash=sha256:4f581d365af9373a738c49e0c51e8b18e08d8a6b1b15cc556773bcd8a192fa8b \ + --hash=sha256:51bc9cfef83e0ac84f86bf2b10eaccb27c5a3e66a1212bef676f5bee6ef33ebb \ + --hash=sha256:521ef85c04c33009166777c77e76c8a676e2d8528dc83a57836b63ca9c69dcd1 \ + --hash=sha256:5bc3339db84c5fb9130ac0e2f20347ee77b5dd2596ba327ce0d399752f4fce39 \ + --hash=sha256:635d8a21577341dfe4f7fa59ec394b346da12420b86624a69e466d446de16aff \ + --hash=sha256:648ec5acf95ad59255452ef759054f2176849662af4521db6cb245263ae4aa33 \ + --hash=sha256:650dcb70739957a492ad8acff65d099a9586b9b8920e3507ca61ec3ce650bb72 \ + --hash=sha256:6b788f14c5bb91db7f468dcf76f8b64423660a05e57fe277d3f4fad7b9dcb7ce \ + --hash=sha256:6c67415258f9f3c69867ec02fea1bf6508153709ecbd731a982442a590f2b7e4 \ + --hash=sha256:74bbd1d0a9bacf34266a7907d43260c8d65d31d691bb2356f41b17c2dca5b1d0 \ + --hash=sha256:75311559f5c9881a9808eadbeb20ed8d8ba3f7225bef3afed2000c2a9f4d49b9 \ + --hash=sha256:78361be6dc9073ed17ab380985d1e45e48a642313ab68ab6afa2457354ff692c \ + --hash=sha256:7b7e772dc4bc507fdec4ee20182f15bd60d2a84f1e087a8accf5b5b7a0dcf2ba \ + --hash=sha256:82df02816c14f8dc9f4d74aea4cb84a92f4b0620235daa76dde002409a3fbb5a \ + --hash=sha256:84b9f23b0fa98a6a4b99d73989350a94e4a4ec476b9a7dfe9b79ba5939f5e80b \ + --hash=sha256:8c4096727193762e72ce9437e2a86a110cf081241919ce3fab8e89c02f6b6658 \ + --hash=sha256:8e47f1af09444f87c67b4f1bb6231e12ba6d4d9f03050d7fc88df6d075231a49 \ + --hash=sha256:93d1543cd8359040c02b6614421c8e10cd7a788c40047dbc507ed46c29ae5636 \ + --hash=sha256:94b564e38b344d3e67d2e224f0aec6ba09a77e4582ced41e7bfd0f757d926ec9 \ + --hash=sha256:955a2a765aa1bd81aafa69ffda179d4fe3e2a3ad462a736ae5b6f387f78bfeb8 \ + --hash=sha256:9d087663b7e1feabea8c578d6887d59bb00388158e8bff3a76be11aa3f748ca2 \ + --hash=sha256:9df21b8d9e5c136ea6cde1c50d2b1c29a2b5ff2b1d610165c23ff250e0704087 \ + --hash=sha256:a8998bf9f8658bd3839cbc44ddbe982955641863da0c1efe5b00c1ab4f5c16b1 \ + --hash=sha256:b2eae3423e538c10d93ae3e87788c6a84658c3ed6db62e6a61bb9495b0ad16bb \ + --hash=sha256:b661b49d0cb0ab311a189b31e25576b7ac3e20783beb1e1817d72d9d02508bf5 \ + --hash=sha256:bedee60385c1c0411378cbd4dc486362f5ee88deceea50002772912d798bb00f \ + --hash=sha256:c505edd429abdfe3643fa3b2e83efb3445a34a9dc49d5f692dd087be966020e0 \ + --hash=sha256:cce918ada64c956b62ca2c2af59b125767097ec1dca89650a6221e887521bfd7 \ + --hash=sha256:cf5ae8a9dcf657fd72144a7fd01f243236ea39e7344e579a121c4205aedf07bb \ + --hash=sha256:cf95a60b36997dad99692314c4713f141b61c5b0b4cc5c3426faad570b31ca01 \ + --hash=sha256:d57bafbab289e147d064ffbd5cca2d7b1394b63417c0636cea1f2e93d16eb9e8 \ + --hash=sha256:d70f53a0646cc418ca4853da57cf3ddddbccb8c98406791f24426f2dd77fd0e2 \ + --hash=sha256:d75ead7dd4d255068ea0f21492ee67937bd7c90964c8f3c2bea83c7b7f81b95f \ + --hash=sha256:da36c3b0e891808a7542c5c89f224520b9a16c7f5e4d6a1156955605e54aef0e \ + --hash=sha256:db18ff6b8c0f1917f8b20f8eca35c28bbccb9f83afa94743e03d40203ed83de9 \ + --hash=sha256:dfff7be361048244c3aa0f60b5e63221c5e0f0e509f4e47b8910e22b57d10ae7 \ + --hash=sha256:e4fb5ac86d8fe8151966814f6720996430462e633d225497566b3996966b9bdb \ + --hash=sha256:e56a139bfe136a22c438478a86f8204c1eb5eed36f4e15c4224e4b9db01cb3e4 \ + --hash=sha256:e6f5d254a22394847245f411a2956976401e84da4288aa70cbcd5190744062c1 \ + --hash=sha256:e7402ff96e2b073a98ef6d6142796426d705addd27b9d26c3b32dbaa06d7d069 \ + --hash=sha256:ea308cec940905ba008291d93619d92edaf83232ec85fbd514dcb329f3192761 \ + --hash=sha256:eaa8039b6d20137a4e02603aba37d12cd2dde7887500b8855356682fc33933f4 # via # -r requirements/main.in # alembic @@ -2269,9 +2269,9 @@ translationstring==1.4 \ --hash=sha256:5f4dc4d939573db851c8d840551e1a0fb27b946afe3b95aafc22577eed2d6262 \ --hash=sha256:bf947538d76e69ba12ab17283b10355a9ecfbc078e6123443f43f2107f6376f3 # via pyramid -trove-classifiers==2024.10.21.16 \ - --hash=sha256:0fb11f1e995a757807a8ef1c03829fbd4998d817319abcef1f33165750f103be \ - --hash=sha256:17cbd055d67d5e9d9de63293a8732943fabc21574e4c7b74edf112b4928cf5f3 +trove-classifiers==2025.1.7.14 \ + --hash=sha256:0fd08ab2b517ee22f2a539dcdab772ccee4e744eff61ba819846a5fac913d285 \ + --hash=sha256:969b4ea1ef4e5e91b0398b60ae3a5e94027a50a65d5410badc920b2fc3de7ebb # via -r requirements/main.in tuf==5.1.0 \ --hash=sha256:1865737bf8e05893ae31b4511617da7f02cf070562fa3c931074d29ef5fb46d7 \ @@ -2487,9 +2487,9 @@ zxcvbn==4.4.28 \ # via -r requirements/main.in # The following packages are considered to be unsafe in a requirements file: -setuptools==75.6.0 \ - --hash=sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6 \ - --hash=sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d +setuptools==75.8.0 \ + --hash=sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6 \ + --hash=sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3 # via # -r requirements/main.in # pyramid diff --git a/requirements/tests.txt b/requirements/tests.txt index 2984784973c0..5d0e32a41229 100644 --- a/requirements/tests.txt +++ b/requirements/tests.txt @@ -191,9 +191,9 @@ factory-boy==3.3.1 \ --hash=sha256:7b1113c49736e1e9995bc2a18f4dbf2c52cf0f841103517010b1d825712ce3ca \ --hash=sha256:8317aa5289cdfc45f9cae570feb07a6177316c82e34d14df3c2e1f22f26abef0 # via -r requirements/tests.in -faker==33.1.0 \ - --hash=sha256:1c925fc0e86a51fc46648b504078c88d0cd48da1da2595c4e712841cab43a1e4 \ - --hash=sha256:d30c5f0e2796b8970de68978365247657486eb0311c5abe88d0b895b68dff05d +faker==33.3.0 \ + --hash=sha256:2abb551a05b75d268780b6095100a48afc43c53e97422002efbfc1272ebf5f26 \ + --hash=sha256:ae074d9c7ef65817a93b448141a5531a16b2ea2e563dc5774578197c7c84060c # via factory-boy freezegun==1.5.1 \ --hash=sha256:b29dedfcda6d5e8e083ce71b2b542753ad48cfec44037b3fc79702e2980a89e9 \ @@ -406,7 +406,7 @@ webtest==3.0.2 \ # via -r requirements/tests.in # The following packages are considered to be unsafe in a requirements file: -setuptools==75.6.0 \ - --hash=sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6 \ - --hash=sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d +setuptools==75.8.0 \ + --hash=sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6 \ + --hash=sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3 # via pytest-postgresql From dedcee46ada7c5fb10d054768b8e68903feb0315 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 10:47:34 -0500 Subject: [PATCH 3/4] chore(deps): bump limits from 3.14.1 to 4.0.0 (#17360) Bumps [limits](https://github.com/alisaifee/limits) from 3.14.1 to 4.0.0. - [Release notes](https://github.com/alisaifee/limits/releases) - [Changelog](https://github.com/alisaifee/limits/blob/master/HISTORY.rst) - [Commits](https://github.com/alisaifee/limits/compare/3.14.1...4.0.0) --- updated-dependencies: - dependency-name: limits dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ee Durbin --- requirements/main.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements/main.txt b/requirements/main.txt index 7f5e4f54ee8c..a851a99c847f 100644 --- a/requirements/main.txt +++ b/requirements/main.txt @@ -994,9 +994,9 @@ lazy-object-proxy==1.10.0 \ --hash=sha256:edb45bb8278574710e68a6b021599a10ce730d156e5b254941754a9cc0b17d03 \ --hash=sha256:fec03caabbc6b59ea4a638bee5fce7117be8e99a4103d9d5ad77f15d6f81020c # via openapi-spec-validator -limits==3.14.1 \ - --hash=sha256:051aca02da56e6932599a25cb8e70543959294f5d587d57bcd7e38df234e697b \ - --hash=sha256:cad16a9b3cf3924e27da48e78bdab33ef312ecb7194fdb50e509cc8111c8d0bb +limits==4.0.0 \ + --hash=sha256:0024ebe5a36c905fcff2d30a8e7680840b75ecdb989db10c526e9fabba529b58 \ + --hash=sha256:0516cec7c0803e0e1ecd48ad2f75547b85e2be5fb343a24e033f1316f5487e31 # via -r requirements/main.in linehaul==1.0.2 \ --hash=sha256:4545fee3b54df22c697d204da8668e8fd975afcb28cbb5654865e43491c70ff0 \ From e951ec1a49bda494d3eed2683ef160c758b4ef26 Mon Sep 17 00:00:00 2001 From: Ee Durbin Date: Fri, 10 Jan 2025 11:13:41 -0500 Subject: [PATCH 4/4] orgs: stripe data hygiene (#17380) * ensure we don't try to process checkout events unrelated to us * create _new_ subscription when existing subscriptions are cancelled Cancelled is a terminal state, we cannot "return" to re-enable a cancelled subscription. Must create a new one * translations * lint * implement Organization.manageable_subscription This is distinct from "active_subscription" as it determines if a user can self-service updating the subscription payment. Basically all states excepted Cancelled can be self-serviced. --- dev/environment | 4 +- tests/conftest.py | 1 + tests/unit/api/test_billing.py | 73 +++++++++++++++++++++++ tests/unit/organizations/test_models.py | 31 ++++++++++ tests/unit/subscriptions/test_services.py | 8 +++ warehouse/api/billing.py | 5 ++ warehouse/locale/messages.pot | 18 +++--- warehouse/manage/views/organizations.py | 6 +- warehouse/organizations/models.py | 8 +++ warehouse/subscriptions/models.py | 6 ++ warehouse/subscriptions/services.py | 17 +++--- 11 files changed, 157 insertions(+), 20 deletions(-) diff --git a/dev/environment b/dev/environment index 40aad6ce7f60..5eba2b9a0152 100644 --- a/dev/environment +++ b/dev/environment @@ -20,8 +20,8 @@ SESSION_SECRET="an insecure development secret" # Use Stripe billing service with test keys for development. # See Stripe Dashboard for keys. https://dashboard.stripe.com/apikeys # See Stripe Docs for more information. https://stripe.com/docs/keys -BILLING_BACKEND=warehouse.subscriptions.services.MockStripeBillingService api_base=http://stripe:12111 api_version=2020-08-27 -# BILLING_BACKEND=warehouse.subscriptions.services.StripeBillingService api_version=2020-08-27 publishable_key=pk_test_123 secret_key=sk_test_123 webhook_key=whsec_123 +BILLING_BACKEND=warehouse.subscriptions.services.MockStripeBillingService api_base=http://stripe:12111 api_version=2020-08-27 domain=localhost +# BILLING_BACKEND=warehouse.subscriptions.services.StripeBillingService api_version=2020-08-27 publishable_key=pk_test_123 secret_key=sk_test_123 webhook_key=whsec_123 domain=localhost CAMO_URL={request.scheme}://{request.domain}:9000/ CAMO_KEY=insecurecamokey diff --git a/tests/conftest.py b/tests/conftest.py index a5a41f41e695..b5f56485bd5b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -590,6 +590,7 @@ def billing_service(app_config): api=stripe, publishable_key="pk_test_123", webhook_secret="whsec_123", + domain="localhost", ) diff --git a/tests/unit/api/test_billing.py b/tests/unit/api/test_billing.py index ab27cd171d01..8ab7dd23a9b5 100644 --- a/tests/unit/api/test_billing.py +++ b/tests/unit/api/test_billing.py @@ -30,6 +30,59 @@ class TestHandleBillingWebhookEvent: # checkout.session.completed + def test_handle_billing_webhook_event_checkout_complete_not_us( + self, db_request, subscription_service, monkeypatch, billing_service + ): + organization = OrganizationFactory.create() + stripe_customer = StripeCustomerFactory.create() + OrganizationStripeCustomerFactory.create( + organization=organization, customer=stripe_customer + ) + subscription = StripeSubscriptionFactory.create(customer=stripe_customer) + OrganizationStripeSubscriptionFactory.create( + organization=organization, subscription=subscription + ) + + event = { + "type": "checkout.session.completed", + "data": { + "object": { + "id": "cs_test_12345", + "customer": stripe_customer.customer_id, + "status": "complete", + "subscription": subscription.subscription_id, + # Missing expected metadata tags (billing_service, domain) + "metadata": {}, + }, + }, + } + + checkout_session = { + "id": "cs_test_12345", + "customer": { + "id": stripe_customer.customer_id, + "email": "good@day.com", + }, + "status": "complete", + "subscription": { + "id": subscription.subscription_id, + "items": { + "data": [{"id": "si_12345"}], + }, + }, + } + + get_checkout_session = pretend.call_recorder(lambda *a, **kw: checkout_session) + monkeypatch.setattr( + billing_service, "get_checkout_session", get_checkout_session + ) + + billing.handle_billing_webhook_event(db_request, event) + + assert ( + get_checkout_session.calls == [] + ) # Should have stopped immediately before this call + def test_handle_billing_webhook_event_checkout_complete_update( self, db_request, subscription_service, monkeypatch, billing_service ): @@ -51,6 +104,10 @@ def test_handle_billing_webhook_event_checkout_complete_update( "customer": stripe_customer.customer_id, "status": "complete", "subscription": subscription.subscription_id, + "metadata": { + "billing_service": "pypi", + "domain": "localhost", + }, }, }, } @@ -94,6 +151,10 @@ def test_handle_billing_webhook_event_checkout_complete_add( "customer": stripe_customer.customer_id, "status": "complete", "subscription": "sub_12345", + "metadata": { + "billing_service": "pypi", + "domain": "localhost", + }, }, }, } @@ -131,6 +192,10 @@ def test_handle_billing_webhook_event_checkout_complete_invalid_status( "customer": "cus_1234", "status": "invalid_status", "subscription": "sub_12345", + "metadata": { + "billing_service": "pypi", + "domain": "localhost", + }, }, }, } @@ -149,6 +214,10 @@ def test_handle_billing_webhook_event_checkout_complete_invalid_customer( "customer": "", "status": "complete", "subscription": "sub_12345", + "metadata": { + "billing_service": "pypi", + "domain": "localhost", + }, }, }, } @@ -187,6 +256,10 @@ def test_handle_billing_webhook_event_checkout_complete_invalid_subscription( "customer": "cus_1234", "status": "complete", "subscription": "", + "metadata": { + "billing_service": "pypi", + "domain": "localhost", + }, }, }, } diff --git a/tests/unit/organizations/test_models.py b/tests/unit/organizations/test_models.py index 63dd925d8bf8..a1418cf2a2b5 100644 --- a/tests/unit/organizations/test_models.py +++ b/tests/unit/organizations/test_models.py @@ -445,8 +445,38 @@ def test_active_subscription(self, db_session): organization=organization, subscription=subscription ) assert organization.active_subscription is not None + assert organization.manageable_subscription is not None def test_active_subscription_none(self, db_session): + organization = DBOrganizationFactory.create() + stripe_customer = DBStripeCustomerFactory.create() + DBOrganizationStripeCustomerFactory.create( + organization=organization, customer=stripe_customer + ) + subscription = DBStripeSubscriptionFactory.create( + customer=stripe_customer, + status="unpaid", + ) + DBOrganizationStripeSubscriptionFactory.create( + organization=organization, subscription=subscription + ) + assert organization.active_subscription is None + assert organization.manageable_subscription is not None + + def test_manageable_subscription(self, db_session): + organization = DBOrganizationFactory.create() + stripe_customer = DBStripeCustomerFactory.create() + DBOrganizationStripeCustomerFactory.create( + organization=organization, customer=stripe_customer + ) + subscription = DBStripeSubscriptionFactory.create(customer=stripe_customer) + DBOrganizationStripeSubscriptionFactory.create( + organization=organization, subscription=subscription + ) + assert organization.active_subscription is not None + assert organization.manageable_subscription is not None + + def test_manageable_subscription_none(self, db_session): organization = DBOrganizationFactory.create() stripe_customer = DBStripeCustomerFactory.create() DBOrganizationStripeCustomerFactory.create( @@ -460,3 +490,4 @@ def test_active_subscription_none(self, db_session): organization=organization, subscription=subscription ) assert organization.active_subscription is None + assert organization.manageable_subscription is None diff --git a/tests/unit/subscriptions/test_services.py b/tests/unit/subscriptions/test_services.py index b5dde3ad0798..af752057e406 100644 --- a/tests/unit/subscriptions/test_services.py +++ b/tests/unit/subscriptions/test_services.py @@ -59,11 +59,13 @@ def test_basic_init(self): api=api, publishable_key="secret_to_everybody", webhook_secret="keep_it_secret_keep_it_safe", + domain="tests", ) assert billing_service.api is api assert billing_service.publishable_key == "secret_to_everybody" assert billing_service.webhook_secret == "keep_it_secret_keep_it_safe" + assert billing_service.domain == "tests" def test_create_service(self): # Reload stripe to reset the global stripe.api_key to default. @@ -77,6 +79,7 @@ def test_create_service(self): "billing.secret_key": "sk_test_123", "billing.publishable_key": "pk_test_123", "billing.webhook_key": "whsec_123", + "billing.domain": "tests", } ) ) @@ -87,6 +90,7 @@ def test_create_service(self): assert billing_service.api.api_key == "sk_test_123" assert billing_service.publishable_key == "pk_test_123" assert billing_service.webhook_secret == "whsec_123" + assert billing_service.domain == "tests" class TestMockStripeBillingService: @@ -100,11 +104,13 @@ def test_basic_init(self): api=api, publishable_key="secret_to_everybody", webhook_secret="keep_it_secret_keep_it_safe", + domain="tests", ) assert billing_service.api is api assert billing_service.publishable_key == "secret_to_everybody" assert billing_service.webhook_secret == "keep_it_secret_keep_it_safe" + assert billing_service.domain == "tests" def test_create_service(self): request = pretend.stub( @@ -420,11 +426,13 @@ def test_basic_init(self): api=api, publishable_key="secret_to_everybody", webhook_secret="keep_it_secret_keep_it_safe", + domain="tests", ) assert billing_service.api is api assert billing_service.publishable_key == "secret_to_everybody" assert billing_service.webhook_secret == "keep_it_secret_keep_it_safe" + assert billing_service.domain == "tests" def test_notimplementederror(self): with pytest.raises(NotImplementedError): diff --git a/warehouse/api/billing.py b/warehouse/api/billing.py index 63d92e73ecb0..01e797d18972 100644 --- a/warehouse/api/billing.py +++ b/warehouse/api/billing.py @@ -27,6 +27,11 @@ def handle_billing_webhook_event(request, event): # Occurs when a Checkout Session has been successfully completed. case "checkout.session.completed": checkout_session = event["data"]["object"] + if not ( + checkout_session["metadata"].get("billing_service") == "pypi" + and checkout_session["metadata"].get("domain") == billing_service.domain + ): + return # Get expanded checkout session object checkout_session = billing_service.get_checkout_session( checkout_session["id"], diff --git a/warehouse/locale/messages.pot b/warehouse/locale/messages.pot index 6ac7358e3bd2..fb8285c379ff 100644 --- a/warehouse/locale/messages.pot +++ b/warehouse/locale/messages.pot @@ -579,12 +579,12 @@ msgid "" msgstr "" #: warehouse/manage/views/__init__.py:2817 -#: warehouse/manage/views/organizations.py:887 +#: warehouse/manage/views/organizations.py:889 msgid "User '${username}' already has an active invite. Please try again later." msgstr "" #: warehouse/manage/views/__init__.py:2882 -#: warehouse/manage/views/organizations.py:952 +#: warehouse/manage/views/organizations.py:954 msgid "Invitation sent to '${username}'" msgstr "" @@ -597,30 +597,30 @@ msgid "Invitation already expired." msgstr "" #: warehouse/manage/views/__init__.py:2958 -#: warehouse/manage/views/organizations.py:1139 +#: warehouse/manage/views/organizations.py:1141 msgid "Invitation revoked from '${username}'." msgstr "" -#: warehouse/manage/views/organizations.py:863 +#: warehouse/manage/views/organizations.py:865 msgid "User '${username}' already has ${role_name} role for organization" msgstr "" -#: warehouse/manage/views/organizations.py:874 +#: warehouse/manage/views/organizations.py:876 msgid "" "User '${username}' does not have a verified primary email address and " "cannot be added as a ${role_name} for organization" msgstr "" -#: warehouse/manage/views/organizations.py:1035 -#: warehouse/manage/views/organizations.py:1077 +#: warehouse/manage/views/organizations.py:1037 +#: warehouse/manage/views/organizations.py:1079 msgid "Could not find organization invitation." msgstr "" -#: warehouse/manage/views/organizations.py:1045 +#: warehouse/manage/views/organizations.py:1047 msgid "Organization invitation could not be re-sent." msgstr "" -#: warehouse/manage/views/organizations.py:1092 +#: warehouse/manage/views/organizations.py:1094 msgid "Expired invitation for '${username}' deleted." msgstr "" diff --git a/warehouse/manage/views/organizations.py b/warehouse/manage/views/organizations.py index 5cf08c7f7461..25d6bd859aef 100644 --- a/warehouse/manage/views/organizations.py +++ b/warehouse/manage/views/organizations.py @@ -573,8 +573,10 @@ def create_or_manage_subscription(self): if not self.request.organization_access: raise HTTPNotFound() - if not self.organization.subscriptions: - # Create subscription if there are no existing subscription. + if not self.organization.manageable_subscription: + # Create subscription if there are no manageable subscription. + # This occurs if no subscription exists, or all subscriptions have reached + # a terminal state of Canceled. return self.create_subscription() else: # Manage subscription if there is an existing subscription. diff --git a/warehouse/organizations/models.py b/warehouse/organizations/models.py index 4a2b5c6791a0..b5d42abe0df2 100644 --- a/warehouse/organizations/models.py +++ b/warehouse/organizations/models.py @@ -490,6 +490,14 @@ def active_subscription(self): else: return None + @property + def manageable_subscription(self): + for subscription in self.subscriptions: + if subscription.is_manageable: + return subscription + else: + return None + def customer_name(self, site_name="PyPI"): return f"{site_name} Organization - {self.display_name} ({self.name})" diff --git a/warehouse/subscriptions/models.py b/warehouse/subscriptions/models.py index 2edf2f45949a..ad05f7f3a543 100644 --- a/warehouse/subscriptions/models.py +++ b/warehouse/subscriptions/models.py @@ -125,6 +125,12 @@ def is_restricted(self): StripeSubscriptionStatus.Trialing.value, ] + @property + def is_manageable(self): + return self.status not in [ + StripeSubscriptionStatus.Canceled.value, + ] + class StripeSubscriptionProduct(db.Model): __tablename__ = "stripe_subscription_products" diff --git a/warehouse/subscriptions/services.py b/warehouse/subscriptions/services.py index 8464467815c5..e8dbe82cb93c 100644 --- a/warehouse/subscriptions/services.py +++ b/warehouse/subscriptions/services.py @@ -37,10 +37,11 @@ class GenericBillingService: - def __init__(self, api, publishable_key, webhook_secret): + def __init__(self, api, publishable_key, webhook_secret, domain): self.api = api self.publishable_key = publishable_key self.webhook_secret = webhook_secret + self.domain = domain @classmethod def create_service(cls, context, request): @@ -76,7 +77,7 @@ def create_customer(self, name, description): return self.api.Customer.create( name=name, description=description, - metadata={"billing_service": "pypi"}, + metadata={"billing_service": "pypi", "domain": self.domain}, ) def update_customer(self, customer_id, name, description): @@ -97,7 +98,7 @@ def create_checkout_session(self, customer_id, price_ids, success_url, cancel_ur cancel_url=cancel_url, mode="subscription", line_items=[{"price": price_id} for price_id in price_ids], - metadata={"billing_service": "pypi"}, + metadata={"billing_service": "pypi", "domain": self.domain}, # Uncomment `automatic_tax` to calculate tax automatically. # Requires active tax settings on Stripe Dashboard. # https://dashboard.stripe.com/settings/tax/activate @@ -154,7 +155,7 @@ def create_product(self, name, description, tax_code, unit_label): description=description, tax_code=tax_code, unit_label=unit_label, - metadata={"billing_service": "pypi"}, + metadata={"billing_service": "pypi", "domain": self.domain}, ) def retrieve_product(self, product_id): @@ -256,7 +257,7 @@ def create_price(self, unit_amount, currency, product_id, tax_behavior): }, product=product_id, tax_behavior=tax_behavior, - metadata={"billing_service": "pypi"}, + metadata={"billing_service": "pypi", "domain": self.domain}, ) def retrieve_price(self, price_id): @@ -332,8 +333,9 @@ def create_service(cls, context, request): stripe.api_key = "sk_test_123" publishable_key = "pk_test_123" webhook_secret = "whsec_123" + domain = "localhost" - return cls(stripe, publishable_key, webhook_secret) + return cls(stripe, publishable_key, webhook_secret, domain) def create_customer(self, name, description): # Mock Stripe doesn't return a customer_id so create a mock id by default @@ -370,8 +372,9 @@ def create_service(cls, context, request): stripe.api_key = request.registry.settings["billing.secret_key"] publishable_key = request.registry.settings["billing.publishable_key"] webhook_secret = request.registry.settings["billing.webhook_key"] + domain = request.registry.settings["billing.domain"] - return cls(stripe, publishable_key, webhook_secret) + return cls(stripe, publishable_key, webhook_secret, domain) @implementer(ISubscriptionService)