python3-commons 0.14.10__tar.gz → 0.14.12__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.devcontainer/Dockerfile +1 -1
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.pre-commit-config.yaml +2 -2
- python3_commons-0.14.12/.python-version +1 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/PKG-INFO +2 -2
- {python3_commons-0.14.10 → python3_commons-0.14.12}/pyproject.toml +1 -1
- python3_commons-0.14.12/src/python3_commons/audit.py +65 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/conf.py +2 -1
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons.egg-info/PKG-INFO +2 -2
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons.egg-info/requires.txt +1 -1
- {python3_commons-0.14.10 → python3_commons-0.14.12}/uv.lock +118 -111
- python3_commons-0.14.10/.python-version +0 -1
- python3_commons-0.14.10/src/python3_commons/audit.py +0 -188
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.coveragerc +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.devcontainer/devcontainer.json +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.devcontainer/docker-compose.yml +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.env_template +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.github/workflows/checks.yml +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.github/workflows/python-publish.yaml +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.github/workflows/release-on-tag-push.yml +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/.gitignore +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/AUTHORS.rst +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/CHANGELOG.rst +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/LICENSE +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/README.md +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/README.rst +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/docs/Makefile +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/docs/_static/.gitignore +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/docs/authors.rst +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/docs/changelog.rst +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/docs/conf.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/docs/index.rst +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/docs/license.rst +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/setup.cfg +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/__init__.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/api_client.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/auth.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/cache.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/db/__init__.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/db/helpers.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/db/models/__init__.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/db/models/auth.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/db/models/common.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/exceptions.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/fs.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/generators.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/helpers.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/log/__init__.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/log/filters.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/log/formatters.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/object_storage.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/serializers/__init__.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/serializers/common.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/serializers/json.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/serializers/msgpack.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/serializers/msgspec.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons.egg-info/SOURCES.txt +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons.egg-info/dependency_links.txt +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons.egg-info/top_level.txt +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/tests/__init__.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/tests/integration/__init__.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/tests/integration/test_cache.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/tests/unit/__init__.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/tests/unit/conftest.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/tests/unit/test_audit.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/tests/unit/test_helpers.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/tests/unit/test_msgpack.py +0 -0
- {python3_commons-0.14.10 → python3_commons-0.14.12}/tests/unit/test_msgspec.py +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
repos:
|
|
2
2
|
- repo: https://github.com/astral-sh/uv-pre-commit
|
|
3
|
-
rev: 0.9.
|
|
3
|
+
rev: 0.9.13
|
|
4
4
|
hooks:
|
|
5
5
|
- id: uv-lock
|
|
6
6
|
# - id: uv-export
|
|
7
7
|
|
|
8
8
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
9
|
-
rev: v0.14.
|
|
9
|
+
rev: v0.14.7
|
|
10
10
|
hooks:
|
|
11
11
|
# Run the linter.
|
|
12
12
|
- id: ruff-check
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
==3.14.2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python3-commons
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.12
|
|
4
4
|
Summary: Re-usable Python3 code
|
|
5
5
|
Author-email: Oleg Korsak <kamikaze.is.waiting.you@gmail.com>
|
|
6
6
|
License-Expression: GPL-3.0
|
|
@@ -12,7 +12,7 @@ Requires-Python: <3.15.0,>=3.13.9
|
|
|
12
12
|
Description-Content-Type: text/x-rst
|
|
13
13
|
License-File: LICENSE
|
|
14
14
|
License-File: AUTHORS.rst
|
|
15
|
-
Requires-Dist: aiobotocore~=2.
|
|
15
|
+
Requires-Dist: aiobotocore~=2.26.0
|
|
16
16
|
Requires-Dist: aiohttp[speedups]<3.15.0,>=3.12.0
|
|
17
17
|
Requires-Dist: asyncpg~=0.31.0
|
|
18
18
|
Requires-Dist: lxml~=6.0.2
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import io
|
|
3
|
+
import logging
|
|
4
|
+
from datetime import UTC, datetime
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
from uuid import uuid4
|
|
7
|
+
|
|
8
|
+
from lxml import etree
|
|
9
|
+
from zeep.plugins import Plugin
|
|
10
|
+
|
|
11
|
+
from python3_commons import object_storage
|
|
12
|
+
from python3_commons.conf import S3Settings, s3_settings
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from zeep.wsdl.definitions import AbstractOperation
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
async def write_audit_data(settings: S3Settings, key: str, data: bytes) -> None:
|
|
21
|
+
if settings.aws_secret_access_key:
|
|
22
|
+
try:
|
|
23
|
+
absolute_path = object_storage.get_absolute_path(f'audit/{key}')
|
|
24
|
+
|
|
25
|
+
await object_storage.put_object(settings.s3_bucket, absolute_path, io.BytesIO(data), len(data))
|
|
26
|
+
except Exception:
|
|
27
|
+
logger.exception('Failed storing object in storage.')
|
|
28
|
+
else:
|
|
29
|
+
logger.debug(f'Stored object in storage: {key}')
|
|
30
|
+
else:
|
|
31
|
+
logger.debug(f'S3 is not configured, not storing object in storage: {key}')
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ZeepAuditPlugin(Plugin):
|
|
35
|
+
def __init__(self, audit_name: str = 'zeep') -> None:
|
|
36
|
+
super().__init__()
|
|
37
|
+
self.audit_name = audit_name
|
|
38
|
+
|
|
39
|
+
def store_audit_in_s3(self, envelope, operation: AbstractOperation, direction: str) -> None:
|
|
40
|
+
xml = etree.tostring(envelope, encoding='UTF-8', pretty_print=True)
|
|
41
|
+
now = datetime.now(tz=UTC)
|
|
42
|
+
date_path = now.strftime('%Y/%m/%d')
|
|
43
|
+
timestamp = now.strftime('%H%M%S')
|
|
44
|
+
path = f'{date_path}/{self.audit_name}/{operation.name}/{timestamp}_{str(uuid4())[-12:]}_{direction}.xml'
|
|
45
|
+
coro = write_audit_data(s3_settings, path, xml)
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
loop = asyncio.get_running_loop()
|
|
49
|
+
except RuntimeError:
|
|
50
|
+
loop = None
|
|
51
|
+
|
|
52
|
+
if loop and loop.is_running():
|
|
53
|
+
loop.create_task(coro)
|
|
54
|
+
else:
|
|
55
|
+
asyncio.run(coro)
|
|
56
|
+
|
|
57
|
+
def ingress(self, envelope, http_headers, operation: AbstractOperation):
|
|
58
|
+
self.store_audit_in_s3(envelope, operation, 'ingress')
|
|
59
|
+
|
|
60
|
+
return envelope, http_headers
|
|
61
|
+
|
|
62
|
+
def egress(self, envelope, http_headers, operation: AbstractOperation, binding_options):
|
|
63
|
+
self.store_audit_in_s3(envelope, operation, 'egress')
|
|
64
|
+
|
|
65
|
+
return envelope, http_headers
|
|
@@ -17,11 +17,12 @@ class OIDCSettings(BaseSettings):
|
|
|
17
17
|
authority_url: HttpUrl | None = None
|
|
18
18
|
client_id: str | None = None
|
|
19
19
|
redirect_uri: str | None = None
|
|
20
|
-
|
|
20
|
+
scope: Sequence[str] = (
|
|
21
21
|
'openid',
|
|
22
22
|
'profile',
|
|
23
23
|
'email',
|
|
24
24
|
)
|
|
25
|
+
audience: Sequence[str] = ()
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
class ValkeySettings(BaseSettings):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python3-commons
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.12
|
|
4
4
|
Summary: Re-usable Python3 code
|
|
5
5
|
Author-email: Oleg Korsak <kamikaze.is.waiting.you@gmail.com>
|
|
6
6
|
License-Expression: GPL-3.0
|
|
@@ -12,7 +12,7 @@ Requires-Python: <3.15.0,>=3.13.9
|
|
|
12
12
|
Description-Content-Type: text/x-rst
|
|
13
13
|
License-File: LICENSE
|
|
14
14
|
License-File: AUTHORS.rst
|
|
15
|
-
Requires-Dist: aiobotocore~=2.
|
|
15
|
+
Requires-Dist: aiobotocore~=2.26.0
|
|
16
16
|
Requires-Dist: aiohttp[speedups]<3.15.0,>=3.12.0
|
|
17
17
|
Requires-Dist: asyncpg~=0.31.0
|
|
18
18
|
Requires-Dist: lxml~=6.0.2
|
|
@@ -8,7 +8,7 @@ resolution-markers = [
|
|
|
8
8
|
|
|
9
9
|
[[package]]
|
|
10
10
|
name = "aiobotocore"
|
|
11
|
-
version = "2.
|
|
11
|
+
version = "2.26.0"
|
|
12
12
|
source = { registry = "https://pypi.org/simple" }
|
|
13
13
|
dependencies = [
|
|
14
14
|
{ name = "aiohttp" },
|
|
@@ -19,21 +19,21 @@ dependencies = [
|
|
|
19
19
|
{ name = "python-dateutil" },
|
|
20
20
|
{ name = "wrapt" },
|
|
21
21
|
]
|
|
22
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
22
|
+
sdist = { url = "https://files.pythonhosted.org/packages/4d/f8/99fa90d9c25b78292899fd4946fce97b6353838b5ecc139ad8ba1436e70c/aiobotocore-2.26.0.tar.gz", hash = "sha256:50567feaf8dfe2b653570b4491f5bc8c6e7fb9622479d66442462c021db4fadc", size = 122026, upload-time = "2025-11-28T07:54:59.956Z" }
|
|
23
23
|
wheels = [
|
|
24
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
24
|
+
{ url = "https://files.pythonhosted.org/packages/b7/58/3bf0b7d474607dc7fd67dd1365c4e0f392c8177eaf4054e5ddee3ebd53b5/aiobotocore-2.26.0-py3-none-any.whl", hash = "sha256:a793db51c07930513b74ea7a95bd79aaa42f545bdb0f011779646eafa216abec", size = 87333, upload-time = "2025-11-28T07:54:58.457Z" },
|
|
25
25
|
]
|
|
26
26
|
|
|
27
27
|
[[package]]
|
|
28
28
|
name = "aiodns"
|
|
29
|
-
version = "3.
|
|
29
|
+
version = "3.6.0"
|
|
30
30
|
source = { registry = "https://pypi.org/simple" }
|
|
31
31
|
dependencies = [
|
|
32
32
|
{ name = "pycares" },
|
|
33
33
|
]
|
|
34
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
34
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e6/11/238e97cbf5c1c0f725d590a092e0618dcdc50f44dbd1e2a926fae27e6f06/aiodns-3.6.0.tar.gz", hash = "sha256:9b0ef54339e6687cdbd39a7d73d7de2467cb5c115281da28f2598f058633dac8", size = 15108, upload-time = "2025-12-05T18:29:57.873Z" }
|
|
35
35
|
wheels = [
|
|
36
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
36
|
+
{ url = "https://files.pythonhosted.org/packages/dc/ae/10adb8d683bdb800ad6ae1460d2099db7045a67eff13985955a72448e8c1/aiodns-3.6.0-py3-none-any.whl", hash = "sha256:9fa49f812648374d046436a3b96491afb141320cd0b501df83880f034d0b5b85", size = 7971, upload-time = "2025-12-05T18:29:56.228Z" },
|
|
37
37
|
]
|
|
38
38
|
|
|
39
39
|
[[package]]
|
|
@@ -194,66 +194,70 @@ wheels = [
|
|
|
194
194
|
|
|
195
195
|
[[package]]
|
|
196
196
|
name = "backports-zstd"
|
|
197
|
-
version = "1.
|
|
198
|
-
source = { registry = "https://pypi.org/simple" }
|
|
199
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
200
|
-
wheels = [
|
|
201
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
202
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
203
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
204
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
205
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
206
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
207
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
208
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
209
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
210
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
211
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
212
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
213
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
214
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
215
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
216
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
217
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
218
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
219
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
220
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
221
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
222
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
223
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
224
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
225
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
226
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
227
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
228
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
229
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
230
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
197
|
+
version = "1.2.0"
|
|
198
|
+
source = { registry = "https://pypi.org/simple" }
|
|
199
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f4/d8/e8426a2abd7bfdafffcc1be07a23890314f199928515937c8ee7e3537157/backports_zstd-1.2.0.tar.gz", hash = "sha256:6c3fc19342db750b52fde793e4440a93575761b1493bb4a1d3b26033d2bd3452", size = 997263, upload-time = "2025-12-06T20:26:39.595Z" }
|
|
200
|
+
wheels = [
|
|
201
|
+
{ url = "https://files.pythonhosted.org/packages/6e/6c/dd602f484f22d8df9ed71859735dc86e094e90b7d8f51e51d48808f3571e/backports_zstd-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1db671ac69df7cd88057c85a7bc614b94afd74a48faacd1576ad91dd18008f6a", size = 435731, upload-time = "2025-12-06T20:25:17.225Z" },
|
|
202
|
+
{ url = "https://files.pythonhosted.org/packages/29/7d/b126e05650103f269282e5271a0960e30ac4ce9f192e3ae98e303325011b/backports_zstd-1.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5f6520e555c2b597863b97ecb90ad21857bf044119f643130c29110b55f67c1a", size = 362007, upload-time = "2025-12-06T20:25:18.841Z" },
|
|
203
|
+
{ url = "https://files.pythonhosted.org/packages/5c/e2/464e87930aa771da08634846300c13355f7ae07a476c8a30f75631fd1689/backports_zstd-1.2.0-cp313-cp313-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:9ef28be8bfebf5169cde28f36ebd146a0305569c91e836aed3a3aa79b7bbc58b", size = 505925, upload-time = "2025-12-06T20:25:20.319Z" },
|
|
204
|
+
{ url = "https://files.pythonhosted.org/packages/44/08/bda420a2d13be0d6aa8323b735207de46bb01c08575e3a6810e01a20501f/backports_zstd-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9478c04e285da26ce1198d5ec1e43905531049c9e0f74169a39df5876f44643e", size = 476130, upload-time = "2025-12-06T20:25:21.839Z" },
|
|
205
|
+
{ url = "https://files.pythonhosted.org/packages/17/d5/fca7eb6e5a12e390ea4437bc6705e18efd70c9966127c3c2fec8188654f1/backports_zstd-1.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f032452d783876c5f4d81907e42fc6fbe812a9a712c360b497968ea7109bb17", size = 581610, upload-time = "2025-12-06T20:25:23.077Z" },
|
|
206
|
+
{ url = "https://files.pythonhosted.org/packages/81/e2/072fdf5bff7274788b49491a4d039bf0fe2f2f07a9975751d8b70fc14ac6/backports_zstd-1.2.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5642ae3832fb74817bdabc0d8b8877b109537c3f9ceeb54a6cd855aa0afc3bd9", size = 642454, upload-time = "2025-12-06T20:25:24.28Z" },
|
|
207
|
+
{ url = "https://files.pythonhosted.org/packages/2c/74/a7ae8e421ccb779130d64745d3191daf6da02f37bf7cf099dc10d688d14e/backports_zstd-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e7340a7fb7bac7607382554b138ae8dbffda0b8af72ce5c639fb86b49a3b2e4", size = 491079, upload-time = "2025-12-06T20:25:25.481Z" },
|
|
208
|
+
{ url = "https://files.pythonhosted.org/packages/25/26/450b23bad6035f0f3dc8e1cf3729e31a10ce1821a7b6d3bf8555ba818a46/backports_zstd-1.2.0-cp313-cp313-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b72e343b1b2927fc047054450de8738bc64c268e93fabc8228d963690eaf348e", size = 566373, upload-time = "2025-12-06T20:25:27.034Z" },
|
|
209
|
+
{ url = "https://files.pythonhosted.org/packages/c0/42/8161164fb26ac1a656f5fb5e3aa3aa9dcf4d06f6d9553fc596fa6f0ae3ad/backports_zstd-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c3f2a3f898dd1eaba5c8f0ea0e1bd23d993ed86ea7d4c12bf7a0743158d123d6", size = 481888, upload-time = "2025-12-06T20:25:28.198Z" },
|
|
210
|
+
{ url = "https://files.pythonhosted.org/packages/c0/2c/5c4f9a54c7c708f38cdb0670804d62237e9cacd1a6ff567f8c5fb8ef5d1a/backports_zstd-1.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:afb95bc88d7623eeda2c0c8fe0388ac8838fa5a09ddbd7dfa72b283de392024b", size = 509480, upload-time = "2025-12-06T20:25:29.438Z" },
|
|
211
|
+
{ url = "https://files.pythonhosted.org/packages/13/fc/f7a86785fde290b3280adeb81c577a96323d4b661b9befa0d990aaa67a86/backports_zstd-1.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:59ddb84b8bd46a4a297cdf92601aaa9f59881c59f4a402a021173d6bb8bc367a", size = 586040, upload-time = "2025-12-06T20:25:30.598Z" },
|
|
212
|
+
{ url = "https://files.pythonhosted.org/packages/40/7a/11c709c72abeef82c5ef752718c10a3fde0fba8258c069d717de33d366f7/backports_zstd-1.2.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d3d0d54ef711ea5ffa4e2eebfb70784295eb517bd7ac64545a142ad35c5b02ba", size = 564125, upload-time = "2025-12-06T20:25:31.772Z" },
|
|
213
|
+
{ url = "https://files.pythonhosted.org/packages/f5/ec/2ea033ceeca0808d830c3fb1d8ced1b6d2e5c4540ed8bdf66e0ec99180af/backports_zstd-1.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:5c170f1329e90614f2d51f6f4622f6f775f51b92b7bc7801fa093b97db6cfc95", size = 632819, upload-time = "2025-12-06T20:25:33.027Z" },
|
|
214
|
+
{ url = "https://files.pythonhosted.org/packages/cb/3a/1469312ce7b1c6d98c788b500df01d61468d17bfd58df21266a7160112fe/backports_zstd-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:49c675121210ee23ea9c9b28ad15822e1b0f9182df733f0e1a10a5385f628701", size = 495375, upload-time = "2025-12-06T20:25:34.362Z" },
|
|
215
|
+
{ url = "https://files.pythonhosted.org/packages/c6/da/27ef9e6a169808fc6777fb58fb55991bdc9ec22eee1aaecaf076be91986b/backports_zstd-1.2.0-cp313-cp313-win32.whl", hash = "sha256:0724fb2958eb2ccc100c9f49315d856a88b5deb985c62953876a78ecb46027ba", size = 288717, upload-time = "2025-12-06T20:25:35.565Z" },
|
|
216
|
+
{ url = "https://files.pythonhosted.org/packages/6e/f3/bfe0c470e2cfd0bbc274ca484e7a061f2d505c28df2479c52ed1dcce4fea/backports_zstd-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:b80b715170fc590d464d3342757978702ed4b6b41a3b3a0a5dbb46a89f4ccebe", size = 313927, upload-time = "2025-12-06T20:25:36.691Z" },
|
|
217
|
+
{ url = "https://files.pythonhosted.org/packages/16/0d/cf6b22e4ca8cfa850061baa89664437b2da65698b2a8a02eb67de9d6b69e/backports_zstd-1.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c09f5e985142fc04581c12e635dfd8cdc64b2d595479c1213f0b4db7ee37e3cb", size = 288947, upload-time = "2025-12-06T20:25:37.884Z" },
|
|
218
|
+
{ url = "https://files.pythonhosted.org/packages/4f/65/285bccc9fddb1b1d7fa379b42407f3e88359db05a6955fbe02ef4d5ed6ce/backports_zstd-1.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:21c68b9d358f1062c5c8baad946e306b54380dcbe2b12d00fdebc42533b5a499", size = 436423, upload-time = "2025-12-06T20:25:39.048Z" },
|
|
219
|
+
{ url = "https://files.pythonhosted.org/packages/9d/27/bba33f68cfc57a2885bbd1a1ffc9405cb461b12db5083ca63b15074bfa6d/backports_zstd-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4c3508074a30e3309bcc1bfdfe6cbd6bd3d64567788d3c6e15b1594e63bef276", size = 362704, upload-time = "2025-12-06T20:25:40.232Z" },
|
|
220
|
+
{ url = "https://files.pythonhosted.org/packages/42/62/9233d99c1be673188afde322aecc467653023185077064dd3eac18678e22/backports_zstd-1.2.0-cp313-cp313t-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:9a0e5f6aebd1ff3c75b26d3e3ac3140996b9f0883b95847fad57992be06fe5d2", size = 507870, upload-time = "2025-12-06T20:25:41.364Z" },
|
|
221
|
+
{ url = "https://files.pythonhosted.org/packages/0f/b0/089867ef455f6311caa9224e68020cabcbfc3f8759cfd19931b06ba7bb8d/backports_zstd-1.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b12f415fe62f1e9f7196ce9eaedc699547c38cc263e64b6939b610b2a29a200", size = 475770, upload-time = "2025-12-06T20:25:42.873Z" },
|
|
222
|
+
{ url = "https://files.pythonhosted.org/packages/43/d5/8615151ea4bcf5d2dca0755bfa7cad97b7cb8dbd1c9c2e1da57081f1d8a6/backports_zstd-1.2.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00066e7c3df700fe0df66aa197dcbd3d691d55c16f6179c3acd87a6ca22e7993", size = 581191, upload-time = "2025-12-06T20:25:44.156Z" },
|
|
223
|
+
{ url = "https://files.pythonhosted.org/packages/f5/71/eb6e7019db30622d2a31faa0e608fc3dc29e336b4a855bd5b0e78ac0943e/backports_zstd-1.2.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c56bdb8e57563d726ce46225011801ff748018cbeff5175576f8a46868e0f706", size = 640185, upload-time = "2025-12-06T20:25:45.348Z" },
|
|
224
|
+
{ url = "https://files.pythonhosted.org/packages/d6/64/ebd64f84875f7feb83005bfc3e7352700d26f5396e7e5e494681af18fe18/backports_zstd-1.2.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9f499ec4944c223814be97627d0f1b65c2474ba981e1f21ec8b541f2dff5f960", size = 495073, upload-time = "2025-12-06T20:25:46.546Z" },
|
|
225
|
+
{ url = "https://files.pythonhosted.org/packages/45/a7/8f44bbd2a78855680c24e7f90cad69c0c70650f345c4cf13bc7a6dd56231/backports_zstd-1.2.0-cp313-cp313t-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7a0957bc3eb84b4a537388c7a62ed055d61c2246c11babf4cbaafb3b5eda0a9c", size = 570664, upload-time = "2025-12-06T20:25:47.731Z" },
|
|
226
|
+
{ url = "https://files.pythonhosted.org/packages/85/e3/476a8b3ac1d7d1b41442bf634603d0beb392d9df2a1439f9543312b67bc3/backports_zstd-1.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e38b22cb32bd9010ad65c0b75a2934448adfdd6bba4387b0f9bacce11e051716", size = 482252, upload-time = "2025-12-06T20:25:49.166Z" },
|
|
227
|
+
{ url = "https://files.pythonhosted.org/packages/cc/2f/cebac7f4dc977da1dfbef4004dae6ae12e31f6978db34af530425568dea7/backports_zstd-1.2.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:9af83bbd56f785dffc9a669918e7e7b7f96b0e32fd8877ff90e445ca531463ae", size = 511631, upload-time = "2025-12-06T20:25:50.4Z" },
|
|
228
|
+
{ url = "https://files.pythonhosted.org/packages/22/29/1e9a135af0141d0e0eabb21491f0f058e73ddb4de356ca174406d60d1dd6/backports_zstd-1.2.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:e3ddf78b1b58291616df13844d5a0e6027b0ce299b15d7d3be2a93b974b7b5f6", size = 585764, upload-time = "2025-12-06T20:25:51.998Z" },
|
|
229
|
+
{ url = "https://files.pythonhosted.org/packages/e1/17/e9b29c3d7c4d13e046876fb81b7564a85463d6ab65c10f7fc42a7c658042/backports_zstd-1.2.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:93332bf758954da70b1803ccc73697c7cdec475e4ec04286ff8c568f3786c398", size = 568581, upload-time = "2025-12-06T20:25:53.895Z" },
|
|
230
|
+
{ url = "https://files.pythonhosted.org/packages/4a/b5/e2f2f68c204743a9060e50f6910fd7ae1b484250460fa85e843292e8e8d8/backports_zstd-1.2.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:8f5ba6a97712794ab9c284382a5faefd31ebcb84fa55cb4621e948264dbc6b97", size = 630790, upload-time = "2025-12-06T20:25:55.071Z" },
|
|
231
|
+
{ url = "https://files.pythonhosted.org/packages/78/ff/87fc0e498e6c4ad475da178a4e4c81fbfaf19b043ca586a63068ad704f49/backports_zstd-1.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9d541c0c1992ac25bfd836a1e77cf0e70f18d5505aeeebc56c2cf06ffbc209f5", size = 499701, upload-time = "2025-12-06T20:25:56.265Z" },
|
|
232
|
+
{ url = "https://files.pythonhosted.org/packages/b0/2e/e10d1b10f087094a108f542b91b44efe928800b6ecd8f1619c9967b6da5b/backports_zstd-1.2.0-cp313-cp313t-win32.whl", hash = "sha256:6c2bc4f7154d5c166912c5b7ee6cbb3a921726d1c2cee7c0f1bfaae736f7c250", size = 289660, upload-time = "2025-12-06T20:25:57.753Z" },
|
|
233
|
+
{ url = "https://files.pythonhosted.org/packages/d6/ae/68e5bca7f9990c45c7b1940deccfa4a106c956c5ddd63393332372dad131/backports_zstd-1.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2b7b83331878041a259ec0b384bee7dbfd486b2a2579cd730aca718897d045d7", size = 315026, upload-time = "2025-12-06T20:25:58.952Z" },
|
|
234
|
+
{ url = "https://files.pythonhosted.org/packages/e4/33/a519b4da2015069fb36cded5181ff078ecceb852861b675e2c79547ad10d/backports_zstd-1.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:a884be79cd0897436e1e06566d0b6bcad2360afca8e8e27fb19422ba0cca4d7a", size = 289583, upload-time = "2025-12-06T20:26:00.127Z" },
|
|
231
235
|
]
|
|
232
236
|
|
|
233
237
|
[[package]]
|
|
234
238
|
name = "botocore"
|
|
235
|
-
version = "1.
|
|
239
|
+
version = "1.41.5"
|
|
236
240
|
source = { registry = "https://pypi.org/simple" }
|
|
237
241
|
dependencies = [
|
|
238
242
|
{ name = "jmespath" },
|
|
239
243
|
{ name = "python-dateutil" },
|
|
240
244
|
{ name = "urllib3" },
|
|
241
245
|
]
|
|
242
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
246
|
+
sdist = { url = "https://files.pythonhosted.org/packages/90/22/7fe08c726a2e3b11a0aef8bf177e83891c9cb2dc1809d35c9ed91a9e60e6/botocore-1.41.5.tar.gz", hash = "sha256:0367622b811597d183bfcaab4a350f0d3ede712031ce792ef183cabdee80d3bf", size = 14668152, upload-time = "2025-11-26T20:27:38.026Z" }
|
|
243
247
|
wheels = [
|
|
244
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
248
|
+
{ url = "https://files.pythonhosted.org/packages/4e/4e/21cd0b8f365449f1576f93de1ec8718ed18a7a3bc086dfbdeb79437bba7a/botocore-1.41.5-py3-none-any.whl", hash = "sha256:3fef7fcda30c82c27202d232cfdbd6782cb27f20f8e7e21b20606483e66ee73a", size = 14337008, upload-time = "2025-11-26T20:27:35.208Z" },
|
|
245
249
|
]
|
|
246
250
|
|
|
247
251
|
[[package]]
|
|
248
252
|
name = "botocore-stubs"
|
|
249
|
-
version = "1.
|
|
253
|
+
version = "1.42.4"
|
|
250
254
|
source = { registry = "https://pypi.org/simple" }
|
|
251
255
|
dependencies = [
|
|
252
256
|
{ name = "types-awscrt" },
|
|
253
257
|
]
|
|
254
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
258
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d6/92/0269be8d4b5e3912c8a978faa1b78cbfb95d1669ae20a32250abdc0ebe44/botocore_stubs-1.42.4.tar.gz", hash = "sha256:5b8e63a1f62800945dcc824514fa0465f78ad2c8fe7a592b59f77ca19f1aa10b", size = 42430, upload-time = "2025-12-05T20:30:14.69Z" }
|
|
255
259
|
wheels = [
|
|
256
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
260
|
+
{ url = "https://files.pythonhosted.org/packages/d2/dd/6bd717a756b55d732fd9287bbcb627fe26d784bb602440667bc4d958163f/botocore_stubs-1.42.4-py3-none-any.whl", hash = "sha256:0b6711abe0ceffe32fa572c0c683e93d9a17b2c4cff1b47a7b48bb784fe2dbcc", size = 66747, upload-time = "2025-12-05T20:30:13.42Z" },
|
|
257
261
|
]
|
|
258
262
|
|
|
259
263
|
[[package]]
|
|
@@ -581,30 +585,33 @@ wheels = [
|
|
|
581
585
|
|
|
582
586
|
[[package]]
|
|
583
587
|
name = "greenlet"
|
|
584
|
-
version = "3.
|
|
585
|
-
source = { registry = "https://pypi.org/simple" }
|
|
586
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
587
|
-
wheels = [
|
|
588
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
589
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
590
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
591
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
592
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
593
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
594
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
595
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
596
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
597
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
598
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
599
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
600
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
601
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
602
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
603
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
604
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
605
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
606
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
607
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
588
|
+
version = "3.3.0"
|
|
589
|
+
source = { registry = "https://pypi.org/simple" }
|
|
590
|
+
sdist = { url = "https://files.pythonhosted.org/packages/c7/e5/40dbda2736893e3e53d25838e0f19a2b417dfc122b9989c91918db30b5d3/greenlet-3.3.0.tar.gz", hash = "sha256:a82bb225a4e9e4d653dd2fb7b8b2d36e4fb25bc0165422a11e48b88e9e6f78fb", size = 190651, upload-time = "2025-12-04T14:49:44.05Z" }
|
|
591
|
+
wheels = [
|
|
592
|
+
{ url = "https://files.pythonhosted.org/packages/02/2f/28592176381b9ab2cafa12829ba7b472d177f3acc35d8fbcf3673d966fff/greenlet-3.3.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:a1e41a81c7e2825822f4e068c48cb2196002362619e2d70b148f20a831c00739", size = 275140, upload-time = "2025-12-04T14:23:01.282Z" },
|
|
593
|
+
{ url = "https://files.pythonhosted.org/packages/2c/80/fbe937bf81e9fca98c981fe499e59a3f45df2a04da0baa5c2be0dca0d329/greenlet-3.3.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f515a47d02da4d30caaa85b69474cec77b7929b2e936ff7fb853d42f4bf8808", size = 599219, upload-time = "2025-12-04T14:50:08.309Z" },
|
|
594
|
+
{ url = "https://files.pythonhosted.org/packages/c2/ff/7c985128f0514271b8268476af89aee6866df5eec04ac17dcfbc676213df/greenlet-3.3.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7d2d9fd66bfadf230b385fdc90426fcd6eb64db54b40c495b72ac0feb5766c54", size = 610211, upload-time = "2025-12-04T14:57:43.968Z" },
|
|
595
|
+
{ url = "https://files.pythonhosted.org/packages/79/07/c47a82d881319ec18a4510bb30463ed6891f2ad2c1901ed5ec23d3de351f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30a6e28487a790417d036088b3bcb3f3ac7d8babaa7d0139edbaddebf3af9492", size = 624311, upload-time = "2025-12-04T15:07:14.697Z" },
|
|
596
|
+
{ url = "https://files.pythonhosted.org/packages/fd/8e/424b8c6e78bd9837d14ff7df01a9829fc883ba2ab4ea787d4f848435f23f/greenlet-3.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:087ea5e004437321508a8d6f20efc4cfec5e3c30118e1417ea96ed1d93950527", size = 612833, upload-time = "2025-12-04T14:26:03.669Z" },
|
|
597
|
+
{ url = "https://files.pythonhosted.org/packages/b5/ba/56699ff9b7c76ca12f1cdc27a886d0f81f2189c3455ff9f65246780f713d/greenlet-3.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ab97cf74045343f6c60a39913fa59710e4bd26a536ce7ab2397adf8b27e67c39", size = 1567256, upload-time = "2025-12-04T15:04:25.276Z" },
|
|
598
|
+
{ url = "https://files.pythonhosted.org/packages/1e/37/f31136132967982d698c71a281a8901daf1a8fbab935dce7c0cf15f942cc/greenlet-3.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5375d2e23184629112ca1ea89a53389dddbffcf417dad40125713d88eb5f96e8", size = 1636483, upload-time = "2025-12-04T14:27:30.804Z" },
|
|
599
|
+
{ url = "https://files.pythonhosted.org/packages/7e/71/ba21c3fb8c5dce83b8c01f458a42e99ffdb1963aeec08fff5a18588d8fd7/greenlet-3.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:9ee1942ea19550094033c35d25d20726e4f1c40d59545815e1128ac58d416d38", size = 301833, upload-time = "2025-12-04T14:32:23.929Z" },
|
|
600
|
+
{ url = "https://files.pythonhosted.org/packages/d7/7c/f0a6d0ede2c7bf092d00bc83ad5bafb7e6ec9b4aab2fbdfa6f134dc73327/greenlet-3.3.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:60c2ef0f578afb3c8d92ea07ad327f9a062547137afe91f38408f08aacab667f", size = 275671, upload-time = "2025-12-04T14:23:05.267Z" },
|
|
601
|
+
{ url = "https://files.pythonhosted.org/packages/44/06/dac639ae1a50f5969d82d2e3dd9767d30d6dbdbab0e1a54010c8fe90263c/greenlet-3.3.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a5d554d0712ba1de0a6c94c640f7aeba3f85b3a6e1f2899c11c2c0428da9365", size = 646360, upload-time = "2025-12-04T14:50:10.026Z" },
|
|
602
|
+
{ url = "https://files.pythonhosted.org/packages/e0/94/0fb76fe6c5369fba9bf98529ada6f4c3a1adf19e406a47332245ef0eb357/greenlet-3.3.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3a898b1e9c5f7307ebbde4102908e6cbfcb9ea16284a3abe15cab996bee8b9b3", size = 658160, upload-time = "2025-12-04T14:57:45.41Z" },
|
|
603
|
+
{ url = "https://files.pythonhosted.org/packages/93/79/d2c70cae6e823fac36c3bbc9077962105052b7ef81db2f01ec3b9bf17e2b/greenlet-3.3.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dcd2bdbd444ff340e8d6bdf54d2f206ccddbb3ccfdcd3c25bf4afaa7b8f0cf45", size = 671388, upload-time = "2025-12-04T15:07:15.789Z" },
|
|
604
|
+
{ url = "https://files.pythonhosted.org/packages/b8/14/bab308fc2c1b5228c3224ec2bf928ce2e4d21d8046c161e44a2012b5203e/greenlet-3.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5773edda4dc00e173820722711d043799d3adb4f01731f40619e07ea2750b955", size = 660166, upload-time = "2025-12-04T14:26:05.099Z" },
|
|
605
|
+
{ url = "https://files.pythonhosted.org/packages/4b/d2/91465d39164eaa0085177f61983d80ffe746c5a1860f009811d498e7259c/greenlet-3.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ac0549373982b36d5fd5d30beb8a7a33ee541ff98d2b502714a09f1169f31b55", size = 1615193, upload-time = "2025-12-04T15:04:27.041Z" },
|
|
606
|
+
{ url = "https://files.pythonhosted.org/packages/42/1b/83d110a37044b92423084d52d5d5a3b3a73cafb51b547e6d7366ff62eff1/greenlet-3.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d198d2d977460358c3b3a4dc844f875d1adb33817f0613f663a656f463764ccc", size = 1683653, upload-time = "2025-12-04T14:27:32.366Z" },
|
|
607
|
+
{ url = "https://files.pythonhosted.org/packages/7c/9a/9030e6f9aa8fd7808e9c31ba4c38f87c4f8ec324ee67431d181fe396d705/greenlet-3.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:73f51dd0e0bdb596fb0417e475fa3c5e32d4c83638296e560086b8d7da7c4170", size = 305387, upload-time = "2025-12-04T14:26:51.063Z" },
|
|
608
|
+
{ url = "https://files.pythonhosted.org/packages/a0/66/bd6317bc5932accf351fc19f177ffba53712a202f9df10587da8df257c7e/greenlet-3.3.0-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:d6ed6f85fae6cdfdb9ce04c9bf7a08d666cfcfb914e7d006f44f840b46741931", size = 282638, upload-time = "2025-12-04T14:25:20.941Z" },
|
|
609
|
+
{ url = "https://files.pythonhosted.org/packages/30/cf/cc81cb030b40e738d6e69502ccbd0dd1bced0588e958f9e757945de24404/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9125050fcf24554e69c4cacb086b87b3b55dc395a8b3ebe6487b045b2614388", size = 651145, upload-time = "2025-12-04T14:50:11.039Z" },
|
|
610
|
+
{ url = "https://files.pythonhosted.org/packages/9c/ea/1020037b5ecfe95ca7df8d8549959baceb8186031da83d5ecceff8b08cd2/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:87e63ccfa13c0a0f6234ed0add552af24cc67dd886731f2261e46e241608bee3", size = 654236, upload-time = "2025-12-04T14:57:47.007Z" },
|
|
611
|
+
{ url = "https://files.pythonhosted.org/packages/69/cc/1e4bae2e45ca2fa55299f4e85854606a78ecc37fead20d69322f96000504/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2662433acbca297c9153a4023fe2161c8dcfdcc91f10433171cf7e7d94ba2221", size = 662506, upload-time = "2025-12-04T15:07:16.906Z" },
|
|
612
|
+
{ url = "https://files.pythonhosted.org/packages/57/b9/f8025d71a6085c441a7eaff0fd928bbb275a6633773667023d19179fe815/greenlet-3.3.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3c6e9b9c1527a78520357de498b0e709fb9e2f49c3a513afd5a249007261911b", size = 653783, upload-time = "2025-12-04T14:26:06.225Z" },
|
|
613
|
+
{ url = "https://files.pythonhosted.org/packages/f6/c7/876a8c7a7485d5d6b5c6821201d542ef28be645aa024cfe1145b35c120c1/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:286d093f95ec98fdd92fcb955003b8a3d054b4e2cab3e2707a5039e7b50520fd", size = 1614857, upload-time = "2025-12-04T15:04:28.484Z" },
|
|
614
|
+
{ url = "https://files.pythonhosted.org/packages/4f/dc/041be1dff9f23dac5f48a43323cd0789cb798342011c19a248d9c9335536/greenlet-3.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c10513330af5b8ae16f023e8ddbfb486ab355d04467c4679c5cfe4659975dd9", size = 1676034, upload-time = "2025-12-04T14:27:33.531Z" },
|
|
608
615
|
]
|
|
609
616
|
|
|
610
617
|
[[package]]
|
|
@@ -914,11 +921,11 @@ wheels = [
|
|
|
914
921
|
|
|
915
922
|
[[package]]
|
|
916
923
|
name = "platformdirs"
|
|
917
|
-
version = "4.5.
|
|
924
|
+
version = "4.5.1"
|
|
918
925
|
source = { registry = "https://pypi.org/simple" }
|
|
919
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
926
|
+
sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", size = 21715, upload-time = "2025-12-05T13:52:58.638Z" }
|
|
920
927
|
wheels = [
|
|
921
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
928
|
+
{ url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" },
|
|
922
929
|
]
|
|
923
930
|
|
|
924
931
|
[[package]]
|
|
@@ -1189,7 +1196,7 @@ wheels = [
|
|
|
1189
1196
|
|
|
1190
1197
|
[[package]]
|
|
1191
1198
|
name = "pytest"
|
|
1192
|
-
version = "9.0.
|
|
1199
|
+
version = "9.0.2"
|
|
1193
1200
|
source = { registry = "https://pypi.org/simple" }
|
|
1194
1201
|
dependencies = [
|
|
1195
1202
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
@@ -1198,9 +1205,9 @@ dependencies = [
|
|
|
1198
1205
|
{ name = "pluggy" },
|
|
1199
1206
|
{ name = "pygments" },
|
|
1200
1207
|
]
|
|
1201
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1208
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" }
|
|
1202
1209
|
wheels = [
|
|
1203
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1210
|
+
{ url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" },
|
|
1204
1211
|
]
|
|
1205
1212
|
|
|
1206
1213
|
[[package]]
|
|
@@ -1299,7 +1306,7 @@ testing = [
|
|
|
1299
1306
|
|
|
1300
1307
|
[package.metadata]
|
|
1301
1308
|
requires-dist = [
|
|
1302
|
-
{ name = "aiobotocore", specifier = "~=2.
|
|
1309
|
+
{ name = "aiobotocore", specifier = "~=2.26.0" },
|
|
1303
1310
|
{ name = "aiohttp", extras = ["speedups"], specifier = ">=3.12.0,<3.15.0" },
|
|
1304
1311
|
{ name = "asyncpg", specifier = "~=0.31.0" },
|
|
1305
1312
|
{ name = "lxml", specifier = "~=6.0.2" },
|
|
@@ -1416,28 +1423,28 @@ wheels = [
|
|
|
1416
1423
|
|
|
1417
1424
|
[[package]]
|
|
1418
1425
|
name = "ruff"
|
|
1419
|
-
version = "0.14.
|
|
1420
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1421
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1422
|
-
wheels = [
|
|
1423
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1424
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1425
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1426
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1427
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1428
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1429
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1430
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1431
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1432
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1433
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1434
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1435
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1436
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1437
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1438
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1439
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1440
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1426
|
+
version = "0.14.8"
|
|
1427
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1428
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ed/d9/f7a0c4b3a2bf2556cd5d99b05372c29980249ef71e8e32669ba77428c82c/ruff-0.14.8.tar.gz", hash = "sha256:774ed0dd87d6ce925e3b8496feb3a00ac564bea52b9feb551ecd17e0a23d1eed", size = 5765385, upload-time = "2025-12-04T15:06:17.669Z" }
|
|
1429
|
+
wheels = [
|
|
1430
|
+
{ url = "https://files.pythonhosted.org/packages/48/b8/9537b52010134b1d2b72870cc3f92d5fb759394094741b09ceccae183fbe/ruff-0.14.8-py3-none-linux_armv6l.whl", hash = "sha256:ec071e9c82eca417f6111fd39f7043acb53cd3fde9b1f95bbed745962e345afb", size = 13441540, upload-time = "2025-12-04T15:06:14.896Z" },
|
|
1431
|
+
{ url = "https://files.pythonhosted.org/packages/24/00/99031684efb025829713682012b6dd37279b1f695ed1b01725f85fd94b38/ruff-0.14.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:8cdb162a7159f4ca36ce980a18c43d8f036966e7f73f866ac8f493b75e0c27e9", size = 13669384, upload-time = "2025-12-04T15:06:51.809Z" },
|
|
1432
|
+
{ url = "https://files.pythonhosted.org/packages/72/64/3eb5949169fc19c50c04f28ece2c189d3b6edd57e5b533649dae6ca484fe/ruff-0.14.8-py3-none-macosx_11_0_arm64.whl", hash = "sha256:2e2fcbefe91f9fad0916850edf0854530c15bd1926b6b779de47e9ab619ea38f", size = 12806917, upload-time = "2025-12-04T15:06:08.925Z" },
|
|
1433
|
+
{ url = "https://files.pythonhosted.org/packages/c4/08/5250babb0b1b11910f470370ec0cbc67470231f7cdc033cee57d4976f941/ruff-0.14.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9d70721066a296f45786ec31916dc287b44040f553da21564de0ab4d45a869b", size = 13256112, upload-time = "2025-12-04T15:06:23.498Z" },
|
|
1434
|
+
{ url = "https://files.pythonhosted.org/packages/78/4c/6c588e97a8e8c2d4b522c31a579e1df2b4d003eddfbe23d1f262b1a431ff/ruff-0.14.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c87e09b3cd9d126fc67a9ecd3b5b1d3ded2b9c7fce3f16e315346b9d05cfb52", size = 13227559, upload-time = "2025-12-04T15:06:33.432Z" },
|
|
1435
|
+
{ url = "https://files.pythonhosted.org/packages/23/ce/5f78cea13eda8eceac71b5f6fa6e9223df9b87bb2c1891c166d1f0dce9f1/ruff-0.14.8-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d62cb310c4fbcb9ee4ac023fe17f984ae1e12b8a4a02e3d21489f9a2a5f730c", size = 13896379, upload-time = "2025-12-04T15:06:02.687Z" },
|
|
1436
|
+
{ url = "https://files.pythonhosted.org/packages/cf/79/13de4517c4dadce9218a20035b21212a4c180e009507731f0d3b3f5df85a/ruff-0.14.8-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1af35c2d62633d4da0521178e8a2641c636d2a7153da0bac1b30cfd4ccd91344", size = 15372786, upload-time = "2025-12-04T15:06:29.828Z" },
|
|
1437
|
+
{ url = "https://files.pythonhosted.org/packages/00/06/33df72b3bb42be8a1c3815fd4fae83fa2945fc725a25d87ba3e42d1cc108/ruff-0.14.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25add4575ffecc53d60eed3f24b1e934493631b48ebbc6ebaf9d8517924aca4b", size = 14990029, upload-time = "2025-12-04T15:06:36.812Z" },
|
|
1438
|
+
{ url = "https://files.pythonhosted.org/packages/64/61/0f34927bd90925880394de0e081ce1afab66d7b3525336f5771dcf0cb46c/ruff-0.14.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c943d847b7f02f7db4201a0600ea7d244d8a404fbb639b439e987edcf2baf9a", size = 14407037, upload-time = "2025-12-04T15:06:39.979Z" },
|
|
1439
|
+
{ url = "https://files.pythonhosted.org/packages/96/bc/058fe0aefc0fbf0d19614cb6d1a3e2c048f7dc77ca64957f33b12cfdc5ef/ruff-0.14.8-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb6e8bf7b4f627548daa1b69283dac5a296bfe9ce856703b03130732e20ddfe2", size = 14102390, upload-time = "2025-12-04T15:06:46.372Z" },
|
|
1440
|
+
{ url = "https://files.pythonhosted.org/packages/af/a4/e4f77b02b804546f4c17e8b37a524c27012dd6ff05855d2243b49a7d3cb9/ruff-0.14.8-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:7aaf2974f378e6b01d1e257c6948207aec6a9b5ba53fab23d0182efb887a0e4a", size = 14230793, upload-time = "2025-12-04T15:06:20.497Z" },
|
|
1441
|
+
{ url = "https://files.pythonhosted.org/packages/3f/52/bb8c02373f79552e8d087cedaffad76b8892033d2876c2498a2582f09dcf/ruff-0.14.8-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e5758ca513c43ad8a4ef13f0f081f80f08008f410790f3611a21a92421ab045b", size = 13160039, upload-time = "2025-12-04T15:06:49.06Z" },
|
|
1442
|
+
{ url = "https://files.pythonhosted.org/packages/1f/ad/b69d6962e477842e25c0b11622548df746290cc6d76f9e0f4ed7456c2c31/ruff-0.14.8-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f74f7ba163b6e85a8d81a590363bf71618847e5078d90827749bfda1d88c9cdf", size = 13205158, upload-time = "2025-12-04T15:06:54.574Z" },
|
|
1443
|
+
{ url = "https://files.pythonhosted.org/packages/06/63/54f23da1315c0b3dfc1bc03fbc34e10378918a20c0b0f086418734e57e74/ruff-0.14.8-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eed28f6fafcc9591994c42254f5a5c5ca40e69a30721d2ab18bb0bb3baac3ab6", size = 13469550, upload-time = "2025-12-04T15:05:59.209Z" },
|
|
1444
|
+
{ url = "https://files.pythonhosted.org/packages/70/7d/a4d7b1961e4903bc37fffb7ddcfaa7beb250f67d97cfd1ee1d5cddb1ec90/ruff-0.14.8-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:21d48fa744c9d1cb8d71eb0a740c4dd02751a5de9db9a730a8ef75ca34cf138e", size = 14211332, upload-time = "2025-12-04T15:06:06.027Z" },
|
|
1445
|
+
{ url = "https://files.pythonhosted.org/packages/5d/93/2a5063341fa17054e5c86582136e9895db773e3c2ffb770dde50a09f35f0/ruff-0.14.8-py3-none-win32.whl", hash = "sha256:15f04cb45c051159baebb0f0037f404f1dc2f15a927418f29730f411a79bc4e7", size = 13151890, upload-time = "2025-12-04T15:06:11.668Z" },
|
|
1446
|
+
{ url = "https://files.pythonhosted.org/packages/02/1c/65c61a0859c0add13a3e1cbb6024b42de587456a43006ca2d4fd3d1618fe/ruff-0.14.8-py3-none-win_amd64.whl", hash = "sha256:9eeb0b24242b5bbff3011409a739929f497f3fb5fe3b5698aba5e77e8c833097", size = 14537826, upload-time = "2025-12-04T15:06:26.409Z" },
|
|
1447
|
+
{ url = "https://files.pythonhosted.org/packages/6d/63/8b41cea3afd7f58eb64ac9251668ee0073789a3bc9ac6f816c8c6fef986d/ruff-0.14.8-py3-none-win_arm64.whl", hash = "sha256:965a582c93c63fe715fd3e3f8aa37c4b776777203d8e1d8aa3cc0c14424a4b99", size = 13634522, upload-time = "2025-12-04T15:06:43.212Z" },
|
|
1441
1448
|
]
|
|
1442
1449
|
|
|
1443
1450
|
[[package]]
|
|
@@ -1499,14 +1506,14 @@ asyncio = [
|
|
|
1499
1506
|
|
|
1500
1507
|
[[package]]
|
|
1501
1508
|
name = "types-aiobotocore"
|
|
1502
|
-
version = "2.
|
|
1509
|
+
version = "2.26.0.post2"
|
|
1503
1510
|
source = { registry = "https://pypi.org/simple" }
|
|
1504
1511
|
dependencies = [
|
|
1505
1512
|
{ name = "botocore-stubs" },
|
|
1506
1513
|
]
|
|
1507
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1514
|
+
sdist = { url = "https://files.pythonhosted.org/packages/3e/27/c60789f312a3630cbc82181e4d6e809bd8801b471de99f14ceb11f4c5c26/types_aiobotocore-2.26.0.post2.tar.gz", hash = "sha256:68ebe5e9de3201442e56359af182493e2e642e855a9133a5918352cbf5ac4e2d", size = 86472, upload-time = "2025-12-02T16:52:55.101Z" }
|
|
1508
1515
|
wheels = [
|
|
1509
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1516
|
+
{ url = "https://files.pythonhosted.org/packages/3d/47/e080e365376619d4062da8989747ecf7c8404bd94b2de10904239a3104f0/types_aiobotocore-2.26.0.post2-py3-none-any.whl", hash = "sha256:0e19caffd6ce6b1c3e7ba5b085d1d03357672e1aa65e5bcdfd9efb026a1041f7", size = 54207, upload-time = "2025-12-02T16:52:48.246Z" },
|
|
1510
1517
|
]
|
|
1511
1518
|
|
|
1512
1519
|
[package.optional-dependencies]
|
|
@@ -1516,20 +1523,20 @@ s3 = [
|
|
|
1516
1523
|
|
|
1517
1524
|
[[package]]
|
|
1518
1525
|
name = "types-aiobotocore-s3"
|
|
1519
|
-
version = "2.
|
|
1526
|
+
version = "2.26.0"
|
|
1520
1527
|
source = { registry = "https://pypi.org/simple" }
|
|
1521
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1528
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b5/8a/dd2190fb5b19933b93c6f153226ac41ddc71a1e81d55f490168944156c43/types_aiobotocore_s3-2.26.0.tar.gz", hash = "sha256:35eb714401883febb61cca3dd65766724105ead3e8325082146a89d244f74768", size = 76495, upload-time = "2025-11-29T01:49:23.844Z" }
|
|
1522
1529
|
wheels = [
|
|
1523
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1530
|
+
{ url = "https://files.pythonhosted.org/packages/b9/a4/abcd852032d7de6c1766d78d7b2769f1937b634bffc00e03afd68dc1bb22/types_aiobotocore_s3-2.26.0-py3-none-any.whl", hash = "sha256:b8c085c93db877d79f0d128c7d21c131bd596e1d8400ae807d25bf7b3ff1eff6", size = 84159, upload-time = "2025-11-29T01:49:22.519Z" },
|
|
1524
1531
|
]
|
|
1525
1532
|
|
|
1526
1533
|
[[package]]
|
|
1527
1534
|
name = "types-awscrt"
|
|
1528
|
-
version = "0.29.
|
|
1535
|
+
version = "0.29.2"
|
|
1529
1536
|
source = { registry = "https://pypi.org/simple" }
|
|
1530
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1537
|
+
sdist = { url = "https://files.pythonhosted.org/packages/4b/55/880afcfb08a8f683444074c1be70ad6141cf873b7f8115e9cc9e87a487b3/types_awscrt-0.29.2.tar.gz", hash = "sha256:41e01e14d646877bd310e7e3c49ff193f8361480b9568e97b1639775009bbefa", size = 17761, upload-time = "2025-12-04T01:53:21.148Z" }
|
|
1531
1538
|
wheels = [
|
|
1532
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1539
|
+
{ url = "https://files.pythonhosted.org/packages/3f/26/dcbfda45af027355647c8860429066922f8405197af912817e79bc75efa4/types_awscrt-0.29.2-py3-none-any.whl", hash = "sha256:3f5d1e6c99b0b551af6365f9c04d8ce2effbcfe18bb719a34501efea279ae7bb", size = 42394, upload-time = "2025-12-04T01:53:19.074Z" },
|
|
1533
1540
|
]
|
|
1534
1541
|
|
|
1535
1542
|
[[package]]
|
|
@@ -1555,11 +1562,11 @@ wheels = [
|
|
|
1555
1562
|
|
|
1556
1563
|
[[package]]
|
|
1557
1564
|
name = "urllib3"
|
|
1558
|
-
version = "2.
|
|
1565
|
+
version = "2.6.0"
|
|
1559
1566
|
source = { registry = "https://pypi.org/simple" }
|
|
1560
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1567
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1c/43/554c2569b62f49350597348fc3ac70f786e3c32e7f19d266e19817812dd3/urllib3-2.6.0.tar.gz", hash = "sha256:cb9bcef5a4b345d5da5d145dc3e30834f58e8018828cbc724d30b4cb7d4d49f1", size = 432585, upload-time = "2025-12-05T15:08:47.885Z" }
|
|
1561
1568
|
wheels = [
|
|
1562
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1569
|
+
{ url = "https://files.pythonhosted.org/packages/56/1a/9ffe814d317c5224166b23e7c47f606d6e473712a2fad0f704ea9b99f246/urllib3-2.6.0-py3-none-any.whl", hash = "sha256:c90f7a39f716c572c4e3e58509581ebd83f9b59cced005b7db7ad2d22b0db99f", size = 131083, upload-time = "2025-12-05T15:08:45.983Z" },
|
|
1563
1570
|
]
|
|
1564
1571
|
|
|
1565
1572
|
[[package]]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
==3.14.0
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
import io
|
|
3
|
-
import logging
|
|
4
|
-
from datetime import UTC, datetime
|
|
5
|
-
from typing import TYPE_CHECKING
|
|
6
|
-
from uuid import uuid4
|
|
7
|
-
|
|
8
|
-
from lxml import etree
|
|
9
|
-
from zeep.plugins import Plugin
|
|
10
|
-
|
|
11
|
-
from python3_commons import object_storage
|
|
12
|
-
from python3_commons.conf import S3Settings, s3_settings
|
|
13
|
-
|
|
14
|
-
if TYPE_CHECKING:
|
|
15
|
-
from zeep.wsdl.definitions import AbstractOperation
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger(__name__)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
# class GeneratedStream(io.BytesIO):
|
|
21
|
-
# def __init__(self, generator: AsyncGenerator[bytes], *args, **kwargs):
|
|
22
|
-
# super().__init__(*args, **kwargs)
|
|
23
|
-
# self.generator = generator
|
|
24
|
-
#
|
|
25
|
-
# def read(self, size: int = -1):
|
|
26
|
-
# if size < 0:
|
|
27
|
-
# while True:
|
|
28
|
-
# try:
|
|
29
|
-
# chunk = anext(self.generator)
|
|
30
|
-
# except StopIteration:
|
|
31
|
-
# break
|
|
32
|
-
# else:
|
|
33
|
-
# self.write(chunk)
|
|
34
|
-
# else:
|
|
35
|
-
# total_written_size = 0
|
|
36
|
-
#
|
|
37
|
-
# while total_written_size < size:
|
|
38
|
-
# try:
|
|
39
|
-
# chunk = anext(self.generator)
|
|
40
|
-
# except StopIteration:
|
|
41
|
-
# break
|
|
42
|
-
# else:
|
|
43
|
-
# total_written_size += self.write(chunk)
|
|
44
|
-
#
|
|
45
|
-
# self.seek(0)
|
|
46
|
-
#
|
|
47
|
-
# if chunk := super().read(size):
|
|
48
|
-
# pos = self.tell()
|
|
49
|
-
#
|
|
50
|
-
# buf = self.getbuffer()
|
|
51
|
-
# unread_data_size = len(buf) - pos
|
|
52
|
-
#
|
|
53
|
-
# if unread_data_size > 0:
|
|
54
|
-
# buf[:unread_data_size] = buf[pos : pos + unread_data_size]
|
|
55
|
-
#
|
|
56
|
-
# del buf
|
|
57
|
-
#
|
|
58
|
-
# self.seek(0)
|
|
59
|
-
# self.truncate(unread_data_size)
|
|
60
|
-
#
|
|
61
|
-
# return chunk
|
|
62
|
-
#
|
|
63
|
-
# def readable(self):
|
|
64
|
-
# return True
|
|
65
|
-
#
|
|
66
|
-
#
|
|
67
|
-
# async def generate_archive(
|
|
68
|
-
# objects: AsyncGenerator[tuple[str, datetime, bytes]], chunk_size: int = 4096
|
|
69
|
-
# ) -> AsyncGenerator[bytes]:
|
|
70
|
-
# buffer = deque()
|
|
71
|
-
#
|
|
72
|
-
# with tarfile.open(fileobj=buffer, mode='w') as archive:
|
|
73
|
-
# async for name, last_modified, content in objects:
|
|
74
|
-
# logger.info(f'Adding {name} to archive')
|
|
75
|
-
# info = tarfile.TarInfo(name)
|
|
76
|
-
# info.size = len(content)
|
|
77
|
-
# info.mtime = int(last_modified.timestamp())
|
|
78
|
-
# archive.addfile(info, io.BytesIO(content))
|
|
79
|
-
#
|
|
80
|
-
# buffer_length = buffer.tell()
|
|
81
|
-
#
|
|
82
|
-
# while buffer_length >= chunk_size:
|
|
83
|
-
# buffer.seek(0)
|
|
84
|
-
# chunk = buffer.read(chunk_size)
|
|
85
|
-
# chunk_len = len(chunk)
|
|
86
|
-
#
|
|
87
|
-
# if not chunk:
|
|
88
|
-
# break
|
|
89
|
-
#
|
|
90
|
-
# yield chunk
|
|
91
|
-
#
|
|
92
|
-
# buffer.seek(0)
|
|
93
|
-
# buffer.truncate(chunk_len)
|
|
94
|
-
# buffer.seek(0, io.SEEK_END)
|
|
95
|
-
# buffer_length = buffer.tell()
|
|
96
|
-
#
|
|
97
|
-
# while True:
|
|
98
|
-
# chunk = buffer.read(chunk_size)
|
|
99
|
-
#
|
|
100
|
-
# if not chunk:
|
|
101
|
-
# break
|
|
102
|
-
#
|
|
103
|
-
# yield chunk
|
|
104
|
-
#
|
|
105
|
-
# buffer.seek(0)
|
|
106
|
-
# buffer.truncate(0)
|
|
107
|
-
#
|
|
108
|
-
#
|
|
109
|
-
# async def generate_bzip2(chunks: AsyncGenerator[bytes]) -> AsyncGenerator[bytes]:
|
|
110
|
-
# compressor = BZ2Compressor()
|
|
111
|
-
#
|
|
112
|
-
# async for chunk in chunks:
|
|
113
|
-
# if compressed_chunk := compressor.compress(chunk):
|
|
114
|
-
# yield compressed_chunk
|
|
115
|
-
#
|
|
116
|
-
# if compressed_chunk := compressor.flush():
|
|
117
|
-
# yield compressed_chunk
|
|
118
|
-
#
|
|
119
|
-
|
|
120
|
-
# async def archive_audit_data(root_path: str = 'audit'):
|
|
121
|
-
# now = datetime.now(tz=UTC) - timedelta(days=1)
|
|
122
|
-
# year = now.year
|
|
123
|
-
# month = now.month
|
|
124
|
-
# day = now.day
|
|
125
|
-
# bucket_name = s3_settings.s3_bucket
|
|
126
|
-
# date_path = object_storage.get_absolute_path(f'{root_path}/{year}/{month:02}/{day:02}')
|
|
127
|
-
#
|
|
128
|
-
# if objects := object_storage.get_objects(bucket_name, date_path, recursive=True):
|
|
129
|
-
# logger.info(f'Compacting files in: {date_path}')
|
|
130
|
-
#
|
|
131
|
-
# generator = generate_archive(objects, chunk_size=900_000)
|
|
132
|
-
# bzip2_generator = generate_bzip2(generator)
|
|
133
|
-
# archive_stream = GeneratedStream(bzip2_generator)
|
|
134
|
-
#
|
|
135
|
-
# archive_path = object_storage.get_absolute_path(f'audit/.archive/{year}_{month:02}_{day:02}.tar.bz2')
|
|
136
|
-
# await object_storage.put_object(bucket_name, archive_path, archive_stream, -1, part_size=5 * 1024 * 1024)
|
|
137
|
-
#
|
|
138
|
-
# if errors := await object_storage.remove_objects(bucket_name, date_path):
|
|
139
|
-
# for error in errors:
|
|
140
|
-
# logger.error(f'Failed to delete object in {bucket_name=}: {error}')
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
async def write_audit_data(settings: S3Settings, key: str, data: bytes) -> None:
|
|
144
|
-
if settings.aws_secret_access_key:
|
|
145
|
-
try:
|
|
146
|
-
absolute_path = object_storage.get_absolute_path(f'audit/{key}')
|
|
147
|
-
|
|
148
|
-
await object_storage.put_object(settings.s3_bucket, absolute_path, io.BytesIO(data), len(data))
|
|
149
|
-
except Exception:
|
|
150
|
-
logger.exception('Failed storing object in storage.')
|
|
151
|
-
else:
|
|
152
|
-
logger.debug(f'Stored object in storage: {key}')
|
|
153
|
-
else:
|
|
154
|
-
logger.debug(f'S3 is not configured, not storing object in storage: {key}')
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
class ZeepAuditPlugin(Plugin):
|
|
158
|
-
def __init__(self, audit_name: str = 'zeep') -> None:
|
|
159
|
-
super().__init__()
|
|
160
|
-
self.audit_name = audit_name
|
|
161
|
-
|
|
162
|
-
def store_audit_in_s3(self, envelope, operation: AbstractOperation, direction: str) -> None:
|
|
163
|
-
xml = etree.tostring(envelope, encoding='UTF-8', pretty_print=True)
|
|
164
|
-
now = datetime.now(tz=UTC)
|
|
165
|
-
date_path = now.strftime('%Y/%m/%d')
|
|
166
|
-
timestamp = now.strftime('%H%M%S')
|
|
167
|
-
path = f'{date_path}/{self.audit_name}/{operation.name}/{timestamp}_{str(uuid4())[-12:]}_{direction}.xml'
|
|
168
|
-
coro = write_audit_data(s3_settings, path, xml)
|
|
169
|
-
|
|
170
|
-
try:
|
|
171
|
-
loop = asyncio.get_running_loop()
|
|
172
|
-
except RuntimeError:
|
|
173
|
-
loop = None
|
|
174
|
-
|
|
175
|
-
if loop and loop.is_running():
|
|
176
|
-
loop.create_task(coro)
|
|
177
|
-
else:
|
|
178
|
-
asyncio.run(coro)
|
|
179
|
-
|
|
180
|
-
def ingress(self, envelope, http_headers, operation: AbstractOperation):
|
|
181
|
-
self.store_audit_in_s3(envelope, operation, 'ingress')
|
|
182
|
-
|
|
183
|
-
return envelope, http_headers
|
|
184
|
-
|
|
185
|
-
def egress(self, envelope, http_headers, operation: AbstractOperation, binding_options):
|
|
186
|
-
self.store_audit_in_s3(envelope, operation, 'egress')
|
|
187
|
-
|
|
188
|
-
return envelope, http_headers
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python3_commons-0.14.10 → python3_commons-0.14.12}/.github/workflows/release-on-tag-push.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/db/models/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/serializers/__init__.py
RENAMED
|
File without changes
|
{python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/serializers/common.py
RENAMED
|
File without changes
|
|
File without changes
|
{python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/serializers/msgpack.py
RENAMED
|
File without changes
|
{python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons/serializers/msgspec.py
RENAMED
|
File without changes
|
{python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{python3_commons-0.14.10 → python3_commons-0.14.12}/src/python3_commons.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|