python3-commons 0.15.20__tar.gz → 0.16.0__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.
Files changed (73) hide show
  1. {python3_commons-0.15.20 → python3_commons-0.16.0}/PKG-INFO +4 -4
  2. {python3_commons-0.15.20 → python3_commons-0.16.0}/pyproject.toml +3 -3
  3. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/audit.py +1 -3
  4. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/object_storage.py +33 -15
  5. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons.egg-info/PKG-INFO +4 -4
  6. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons.egg-info/requires.txt +3 -3
  7. {python3_commons-0.15.20 → python3_commons-0.16.0}/uv.lock +56 -56
  8. {python3_commons-0.15.20 → python3_commons-0.16.0}/.coveragerc +0 -0
  9. {python3_commons-0.15.20 → python3_commons-0.16.0}/.devcontainer/Dockerfile +0 -0
  10. {python3_commons-0.15.20 → python3_commons-0.16.0}/.devcontainer/devcontainer.json +0 -0
  11. {python3_commons-0.15.20 → python3_commons-0.16.0}/.devcontainer/docker-compose.yml +0 -0
  12. {python3_commons-0.15.20 → python3_commons-0.16.0}/.env_template +0 -0
  13. {python3_commons-0.15.20 → python3_commons-0.16.0}/.github/workflows/checks.yml +0 -0
  14. {python3_commons-0.15.20 → python3_commons-0.16.0}/.github/workflows/python-publish.yaml +0 -0
  15. {python3_commons-0.15.20 → python3_commons-0.16.0}/.github/workflows/release-on-tag-push.yml +0 -0
  16. {python3_commons-0.15.20 → python3_commons-0.16.0}/.gitignore +0 -0
  17. {python3_commons-0.15.20 → python3_commons-0.16.0}/.pre-commit-config.yaml +0 -0
  18. {python3_commons-0.15.20 → python3_commons-0.16.0}/.python-version +0 -0
  19. {python3_commons-0.15.20 → python3_commons-0.16.0}/AUTHORS.rst +0 -0
  20. {python3_commons-0.15.20 → python3_commons-0.16.0}/CHANGELOG.rst +0 -0
  21. {python3_commons-0.15.20 → python3_commons-0.16.0}/LICENSE +0 -0
  22. {python3_commons-0.15.20 → python3_commons-0.16.0}/README.md +0 -0
  23. {python3_commons-0.15.20 → python3_commons-0.16.0}/README.rst +0 -0
  24. {python3_commons-0.15.20 → python3_commons-0.16.0}/docs/Makefile +0 -0
  25. {python3_commons-0.15.20 → python3_commons-0.16.0}/docs/_static/.gitignore +0 -0
  26. {python3_commons-0.15.20 → python3_commons-0.16.0}/docs/authors.rst +0 -0
  27. {python3_commons-0.15.20 → python3_commons-0.16.0}/docs/changelog.rst +0 -0
  28. {python3_commons-0.15.20 → python3_commons-0.16.0}/docs/conf.py +0 -0
  29. {python3_commons-0.15.20 → python3_commons-0.16.0}/docs/index.rst +0 -0
  30. {python3_commons-0.15.20 → python3_commons-0.16.0}/docs/license.rst +0 -0
  31. {python3_commons-0.15.20 → python3_commons-0.16.0}/setup.cfg +0 -0
  32. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/__init__.py +0 -0
  33. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/api_client.py +0 -0
  34. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/async_functools.py +0 -0
  35. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/auth.py +0 -0
  36. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/cache.py +0 -0
  37. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/conf.py +0 -0
  38. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/db/__init__.py +0 -0
  39. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/db/helpers.py +0 -0
  40. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/db/models/__init__.py +0 -0
  41. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/db/models/auth.py +0 -0
  42. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/db/models/common.py +0 -0
  43. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/db/models/rbac.py +0 -0
  44. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/db/models/users.py +0 -0
  45. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/exceptions.py +0 -0
  46. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/fs.py +0 -0
  47. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/generators.py +0 -0
  48. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/helpers.py +0 -0
  49. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/log/__init__.py +0 -0
  50. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/log/filters.py +0 -0
  51. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/log/formatters.py +0 -0
  52. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/permissions.py +0 -0
  53. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/serializers/__init__.py +0 -0
  54. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/serializers/common.py +0 -0
  55. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/serializers/json.py +0 -0
  56. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/serializers/msgpack.py +0 -0
  57. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons/serializers/msgspec.py +0 -0
  58. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons.egg-info/SOURCES.txt +0 -0
  59. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons.egg-info/dependency_links.txt +0 -0
  60. {python3_commons-0.15.20 → python3_commons-0.16.0}/src/python3_commons.egg-info/top_level.txt +0 -0
  61. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/__init__.py +0 -0
  62. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/integration/__init__.py +0 -0
  63. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/integration/test_cache.py +0 -0
  64. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/integration/test_osc.py +0 -0
  65. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/unit/__init__.py +0 -0
  66. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/unit/conftest.py +0 -0
  67. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/unit/log/__init__.py +0 -0
  68. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/unit/log/test_formatters.py +0 -0
  69. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/unit/test_async_functools.py +0 -0
  70. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/unit/test_audit.py +0 -0
  71. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/unit/test_helpers.py +0 -0
  72. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/unit/test_msgpack.py +0 -0
  73. {python3_commons-0.15.20 → python3_commons-0.16.0}/tests/unit/test_msgspec.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python3-commons
3
- Version: 0.15.20
3
+ Version: 0.16.0
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,14 +12,14 @@ Requires-Python: <3.15.0,>=3.14.4
12
12
  Description-Content-Type: text/x-rst
13
13
  License-File: LICENSE
14
14
  License-File: AUTHORS.rst
15
- Requires-Dist: aiobotocore~=3.4.0
15
+ Requires-Dist: aiobotocore~=3.5.0
16
16
  Requires-Dist: aiohttp[speedups]<3.15.0,>=3.13.5
17
17
  Requires-Dist: asyncpg~=0.31.0
18
18
  Requires-Dist: lxml~=6.1.0
19
19
  Requires-Dist: msgpack~=1.1.2
20
20
  Requires-Dist: msgspec==0.21.1
21
- Requires-Dist: object-storage-client==0.0.20
22
- Requires-Dist: pydantic-settings~=2.13.1
21
+ Requires-Dist: object-storage-client==0.0.22
22
+ Requires-Dist: pydantic-settings~=2.14.0
23
23
  Requires-Dist: SQLAlchemy[asyncio]~=2.0.49
24
24
  Requires-Dist: valkey[libvalkey]~=6.1.1
25
25
  Requires-Dist: zeep~=4.3.2
@@ -18,14 +18,14 @@ classifiers = [
18
18
  keywords = []
19
19
  requires-python = ">=3.14.4,<3.15.0"
20
20
  dependencies = [
21
- "aiobotocore~=3.4.0",
21
+ "aiobotocore~=3.5.0",
22
22
  "aiohttp[speedups]>=3.13.5,<3.15.0",
23
23
  "asyncpg~=0.31.0",
24
24
  "lxml~=6.1.0",
25
25
  "msgpack~=1.1.2",
26
26
  "msgspec==0.21.1",
27
- "object-storage-client==0.0.20",
28
- "pydantic-settings~=2.13.1",
27
+ "object-storage-client==0.0.22",
28
+ "pydantic-settings~=2.14.0",
29
29
  "SQLAlchemy[asyncio]~=2.0.49",
30
30
  "valkey[libvalkey]~=6.1.1",
31
31
  "zeep~=4.3.2"
@@ -20,9 +20,7 @@ logger = logging.getLogger(__name__)
20
20
  async def write_audit_data(settings: S3Settings, key: str, data: bytes) -> None:
21
21
  if settings.aws_secret_access_key:
22
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))
23
+ await object_storage.put_object(settings.s3_bucket, f'audit/{key}', io.BytesIO(data), len(data))
26
24
  except Exception:
27
25
  logger.exception('Failed storing object in storage.')
28
26
  else:
@@ -1,11 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
+ import threading
4
5
  from contextlib import asynccontextmanager
5
6
  from typing import TYPE_CHECKING
6
7
 
7
8
  import aiobotocore.session
8
9
  from botocore.config import Config
10
+ from object_storage_client import ObjectStorageClient
9
11
 
10
12
  if TYPE_CHECKING:
11
13
  import io
@@ -19,6 +21,22 @@ from python3_commons.conf import S3Settings, s3_settings
19
21
  from python3_commons.helpers import SingletonMeta
20
22
 
21
23
  logger = logging.getLogger(__name__)
24
+ _CLIENT: ObjectStorageClient | None = None
25
+ _CLIENT_LOCK = threading.Lock()
26
+
27
+
28
+ def get_client() -> ObjectStorageClient:
29
+ global _CLIENT # noqa: PLW0603
30
+
31
+ if not _CLIENT:
32
+ with _CLIENT_LOCK:
33
+ if not _CLIENT:
34
+ client = ObjectStorageClient()
35
+ _CLIENT = client
36
+ else:
37
+ client = _CLIENT
38
+
39
+ return client
22
40
 
23
41
 
24
42
  class ObjectStorage(metaclass=SingletonMeta):
@@ -58,21 +76,21 @@ def get_absolute_path(path: str) -> str:
58
76
 
59
77
 
60
78
  async def put_object(bucket_name: str, path: str, data: io.BytesIO, length: int, part_size: int = 0) -> str | None:
61
- storage = ObjectStorage(s3_settings)
79
+ try:
80
+ client = get_client()
81
+ data.seek(0)
82
+ absolute_path = get_absolute_path(path)
83
+ url = f's3://{bucket_name}/{absolute_path}'
62
84
 
63
- async with storage.get_client() as s3_client:
64
- try:
65
- data.seek(0)
85
+ await client.put_object(url, data.getvalue())
66
86
 
67
- await s3_client.put_object(Bucket=bucket_name, Key=path, Body=data, ContentLength=length)
87
+ logger.debug('Stored object into object storage: %s:%s', bucket_name, path)
88
+ except Exception as e:
89
+ logger.exception('Failed to put object to object storage: %s:%s', bucket_name, path, exc_info=e)
68
90
 
69
- logger.debug('Stored object into object storage: %s:%s', bucket_name, path)
70
- except Exception as e:
71
- logger.exception('Failed to put object to object storage: %s:%s', bucket_name, path, exc_info=e)
72
-
73
- raise
91
+ raise
74
92
 
75
- return f's3://{bucket_name}/{path}'
93
+ return f's3://{bucket_name}/{path}'
76
94
 
77
95
 
78
96
  @asynccontextmanager
@@ -117,7 +135,7 @@ async def list_objects(bucket_name: str, prefix: str, *, recursive: bool = True)
117
135
 
118
136
 
119
137
  async def get_object_streams(
120
- bucket_name: str, path: str, *, recursive: bool = True
138
+ bucket_name: str, path: str, *, recursive: bool = True
121
139
  ) -> AsyncGenerator[tuple[str, datetime, StreamingBody]]:
122
140
  async for obj in list_objects(bucket_name, path, recursive=recursive):
123
141
  object_name = obj['Key']
@@ -128,7 +146,7 @@ async def get_object_streams(
128
146
 
129
147
 
130
148
  async def get_objects(
131
- bucket_name: str, path: str, *, recursive: bool = True
149
+ bucket_name: str, path: str, *, recursive: bool = True
132
150
  ) -> AsyncGenerator[tuple[str, datetime, bytes]]:
133
151
  async for object_name, last_modified, stream in get_object_streams(bucket_name, path, recursive=recursive):
134
152
  data = await stream.read()
@@ -150,7 +168,7 @@ async def remove_object(bucket_name: str, object_name: str) -> None:
150
168
 
151
169
 
152
170
  async def remove_objects(
153
- bucket_name: str, prefix: str | None = None, object_names: Iterable[str] | None = None
171
+ bucket_name: str, prefix: str | None = None, object_names: Iterable[str] | None = None
154
172
  ) -> Sequence[Mapping] | None:
155
173
  storage = ObjectStorage(s3_settings)
156
174
 
@@ -173,7 +191,7 @@ async def remove_objects(
173
191
  chunk_size = 1000
174
192
 
175
193
  for i in range(0, len(objects_to_delete), chunk_size):
176
- chunk = objects_to_delete[i : i + chunk_size]
194
+ chunk = objects_to_delete[i: i + chunk_size]
177
195
 
178
196
  response = await s3_client.delete_objects(Bucket=bucket_name, Delete={'Objects': chunk})
179
197
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python3-commons
3
- Version: 0.15.20
3
+ Version: 0.16.0
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,14 +12,14 @@ Requires-Python: <3.15.0,>=3.14.4
12
12
  Description-Content-Type: text/x-rst
13
13
  License-File: LICENSE
14
14
  License-File: AUTHORS.rst
15
- Requires-Dist: aiobotocore~=3.4.0
15
+ Requires-Dist: aiobotocore~=3.5.0
16
16
  Requires-Dist: aiohttp[speedups]<3.15.0,>=3.13.5
17
17
  Requires-Dist: asyncpg~=0.31.0
18
18
  Requires-Dist: lxml~=6.1.0
19
19
  Requires-Dist: msgpack~=1.1.2
20
20
  Requires-Dist: msgspec==0.21.1
21
- Requires-Dist: object-storage-client==0.0.20
22
- Requires-Dist: pydantic-settings~=2.13.1
21
+ Requires-Dist: object-storage-client==0.0.22
22
+ Requires-Dist: pydantic-settings~=2.14.0
23
23
  Requires-Dist: SQLAlchemy[asyncio]~=2.0.49
24
24
  Requires-Dist: valkey[libvalkey]~=6.1.1
25
25
  Requires-Dist: zeep~=4.3.2
@@ -1,11 +1,11 @@
1
- aiobotocore~=3.4.0
1
+ aiobotocore~=3.5.0
2
2
  aiohttp[speedups]<3.15.0,>=3.13.5
3
3
  asyncpg~=0.31.0
4
4
  lxml~=6.1.0
5
5
  msgpack~=1.1.2
6
6
  msgspec==0.21.1
7
- object-storage-client==0.0.20
8
- pydantic-settings~=2.13.1
7
+ object-storage-client==0.0.22
8
+ pydantic-settings~=2.14.0
9
9
  SQLAlchemy[asyncio]~=2.0.49
10
10
  valkey[libvalkey]~=6.1.1
11
11
  zeep~=4.3.2
@@ -4,7 +4,7 @@ requires-python = ">=3.14.4, <3.15.0"
4
4
 
5
5
  [[package]]
6
6
  name = "aiobotocore"
7
- version = "3.4.0"
7
+ version = "3.5.0"
8
8
  source = { registry = "https://pypi.org/simple" }
9
9
  dependencies = [
10
10
  { name = "aiohttp" },
@@ -15,9 +15,9 @@ dependencies = [
15
15
  { name = "python-dateutil" },
16
16
  { name = "wrapt" },
17
17
  ]
18
- sdist = { url = "https://files.pythonhosted.org/packages/b8/50/a48ed11b15f926ce3dbb33e7fb0f25af17dbb99bcb7ae3b30c763723eca7/aiobotocore-3.4.0.tar.gz", hash = "sha256:a918b5cb903f81feba7e26835aed4b5e6bb2d0149d7f42bb2dd7d8089e3d9000", size = 122360, upload-time = "2026-04-07T06:12:24.884Z" }
18
+ sdist = { url = "https://files.pythonhosted.org/packages/e6/89/9533b377e9412013cc43a539d81bc5f8feeb4b6830643821ad612f78b09b/aiobotocore-3.5.0.tar.gz", hash = "sha256:d45d1c4659ad0e48b694a5aa4ff18829100386f7de96c8d146ec7757a6f12918", size = 123061, upload-time = "2026-04-21T07:25:26.993Z" }
19
19
  wheels = [
20
- { url = "https://files.pythonhosted.org/packages/df/d8/ce9386e6d76ea79e61dee15e62aa48cff6be69e89246b0ac4a11857cb02c/aiobotocore-3.4.0-py3-none-any.whl", hash = "sha256:26290eb6830ea92d8a6f5f90b56e9f5cedd6d126074d5db63b195e281d982465", size = 88018, upload-time = "2026-04-07T06:12:22.684Z" },
20
+ { url = "https://files.pythonhosted.org/packages/2d/05/6eeeadef45c24630af0ceae4d038b883e9a394786300529286ba8cc1e62d/aiobotocore-3.5.0-py3-none-any.whl", hash = "sha256:49ce35bb8b96b85d3251c2cbbb2ed7a028dc0cb0d0d0801f9ccca1ccd0d41ded", size = 88281, upload-time = "2026-04-21T07:25:25.258Z" },
21
21
  ]
22
22
 
23
23
  [[package]]
@@ -164,16 +164,16 @@ wheels = [
164
164
 
165
165
  [[package]]
166
166
  name = "botocore"
167
- version = "1.42.84"
167
+ version = "1.42.91"
168
168
  source = { registry = "https://pypi.org/simple" }
169
169
  dependencies = [
170
170
  { name = "jmespath" },
171
171
  { name = "python-dateutil" },
172
172
  { name = "urllib3" },
173
173
  ]
174
- sdist = { url = "https://files.pythonhosted.org/packages/b4/b7/1c03423843fb0d1795b686511c00ee63fed1234c2400f469aeedfd42212f/botocore-1.42.84.tar.gz", hash = "sha256:234064604c80d9272a5e9f6b3566d260bcaa053a5e05246db90d7eca1c2cf44b", size = 15148615, upload-time = "2026-04-06T19:38:56.673Z" }
174
+ sdist = { url = "https://files.pythonhosted.org/packages/21/bc/a4b7c46471c2e789ad8c4c7acfd7f302fdb481d93ff870f441249b924ae6/botocore-1.42.91.tar.gz", hash = "sha256:d252e27bc454afdbf5ed3dc617aa423f2c855c081e98b7963093399483ecc698", size = 15213010, upload-time = "2026-04-17T19:30:50.793Z" }
175
175
  wheels = [
176
- { url = "https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl", hash = "sha256:15f3fe07dfa6545e46a60c4b049fe2bdf63803c595ae4a4eec90e8f8172764f3", size = 14827061, upload-time = "2026-04-06T19:38:53.613Z" },
176
+ { url = "https://files.pythonhosted.org/packages/b1/fc/24cc0a47c824f13933e210e9ad034b4fba22f7185b8d904c0fbf5a3b2be8/botocore-1.42.91-py3-none-any.whl", hash = "sha256:7a28c3cc6bfab5724ad18899d52402b776a0de7d87fa20c3c5270bcaaf199ce8", size = 14897344, upload-time = "2026-04-17T19:30:44.245Z" },
177
177
  ]
178
178
 
179
179
  [[package]]
@@ -478,11 +478,11 @@ wheels = [
478
478
 
479
479
  [[package]]
480
480
  name = "idna"
481
- version = "3.11"
481
+ version = "3.12"
482
482
  source = { registry = "https://pypi.org/simple" }
483
- sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
483
+ sdist = { url = "https://files.pythonhosted.org/packages/22/12/2948fbe5513d062169bd91f7d7b1cd97bc8894f32946b71fa39f6e63ca0c/idna-3.12.tar.gz", hash = "sha256:724e9952cc9e2bd7550ea784adb098d837ab5267ef67a1ab9cf7846bdbdd8254", size = 194350, upload-time = "2026-04-21T13:32:48.916Z" }
484
484
  wheels = [
485
- { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
485
+ { url = "https://files.pythonhosted.org/packages/53/b2/acc33950394b3becb2b664741a0c0889c7ef9f9ffbfa8d47eddb53a50abd/idna-3.12-py3-none-any.whl", hash = "sha256:60ffaa1858fac94c9c124728c24fcde8160f3fb4a7f79aa8cdd33a9d1af60a67", size = 68634, upload-time = "2026-04-21T13:32:47.403Z" },
486
486
  ]
487
487
 
488
488
  [[package]]
@@ -668,13 +668,13 @@ wheels = [
668
668
 
669
669
  [[package]]
670
670
  name = "object-storage-client"
671
- version = "0.0.20"
671
+ version = "0.0.22"
672
672
  source = { registry = "https://pypi.org/simple" }
673
- sdist = { url = "https://files.pythonhosted.org/packages/af/b3/c2a0c4067d829f49d6e777a9c11f28b899226e117492c6f6ed230890b327/object_storage_client-0.0.20.tar.gz", hash = "sha256:ca4bf4ce6c7061081caeb8d11e05f34ec597829a8178e94f62b17dc7e9b12498", size = 39116, upload-time = "2026-03-20T17:27:56.377Z" }
673
+ sdist = { url = "https://files.pythonhosted.org/packages/1a/49/9af56487b380cef1132c1aa718702095a0ab3ddb3e82bb4eab9593dde316/object_storage_client-0.0.22.tar.gz", hash = "sha256:00535617e1f50c0dab066e7dc6bdc9d1690e989febcfaacc27737988dd5a4101", size = 40622, upload-time = "2026-04-21T12:36:41.782Z" }
674
674
  wheels = [
675
- { url = "https://files.pythonhosted.org/packages/30/56/5c32ba20a482dd861f6faa18372410fb4abaaca74f419d60ef925ba64d9e/object_storage_client-0.0.20-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7fe6781539b4f29aef6836411e100a946f22ac409926ab0b0ec9362a198451fd", size = 1914810, upload-time = "2026-03-20T17:27:51.906Z" },
676
- { url = "https://files.pythonhosted.org/packages/41/2d/2e5b7b195a0e4478e4ae08efb249746c7b0df8aa25f58aa913540882617e/object_storage_client-0.0.20-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0037016589a153f7c7d6e9c2b84cdd046d280420c8a4120cebe6cb1e7665a6", size = 2102642, upload-time = "2026-03-20T17:27:55.24Z" },
677
- { url = "https://files.pythonhosted.org/packages/68/84/256c571a540017429009c289b2cccf174fc0cf731bae5697a214f57e26c8/object_storage_client-0.0.20-cp314-cp314-win_amd64.whl", hash = "sha256:49003b38f22af4cdb60f62fed7b55890c93fba0e837f1c6a216f9566b4167629", size = 2095189, upload-time = "2026-03-20T17:28:00.145Z" },
675
+ { url = "https://files.pythonhosted.org/packages/e3/0b/c9a4dc7ae9bc8f67877190d97c0efb94a0a9e7aef6423feaa45d93232215/object_storage_client-0.0.22-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:db7d843f11e1d281ba16533bc573343ec9e0a8d2cf779cd43464df6adca0a5a8", size = 1922610, upload-time = "2026-04-21T12:36:40.278Z" },
676
+ { url = "https://files.pythonhosted.org/packages/7e/f3/3e34cc1e70e9f48ad0be5d7af1771d864a3ee618c07aad43978e2d3a131c/object_storage_client-0.0.22-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d7c92c2ca19f9d734be99162df7dc573535e7022e5a9b5c1dce121a102a85ae", size = 2114290, upload-time = "2026-04-21T12:36:37.82Z" },
677
+ { url = "https://files.pythonhosted.org/packages/ee/73/4af6bf9dc086e9c0a69988d2258d2f6f5d02d00ef891d9df3d6d08c3355a/object_storage_client-0.0.22-cp314-cp314-win_amd64.whl", hash = "sha256:df863a2a3f8f1c77d06bdc547d674b321878dca7cb7db94606b763cb9cc7e508", size = 2095414, upload-time = "2026-04-21T12:36:38.966Z" },
678
678
  ]
679
679
 
680
680
  [[package]]
@@ -814,7 +814,7 @@ wheels = [
814
814
 
815
815
  [[package]]
816
816
  name = "pydantic"
817
- version = "2.13.2"
817
+ version = "2.13.3"
818
818
  source = { registry = "https://pypi.org/simple" }
819
819
  dependencies = [
820
820
  { name = "annotated-types" },
@@ -822,64 +822,64 @@ dependencies = [
822
822
  { name = "typing-extensions" },
823
823
  { name = "typing-inspection" },
824
824
  ]
825
- sdist = { url = "https://files.pythonhosted.org/packages/09/e5/06d23afac9973109d1e3c8ad38e1547a12e860610e327c05ee686827dc37/pydantic-2.13.2.tar.gz", hash = "sha256:b418196607e61081c3226dcd4f0672f2a194828abb9109e9cfb84026564df2d1", size = 843836, upload-time = "2026-04-17T09:31:59.636Z" }
825
+ sdist = { url = "https://files.pythonhosted.org/packages/d9/e4/40d09941a2cebcb20609b86a559817d5b9291c49dd6f8c87e5feffbe703a/pydantic-2.13.3.tar.gz", hash = "sha256:af09e9d1d09f4e7fe37145c1f577e1d61ceb9a41924bf0094a36506285d0a84d", size = 844068, upload-time = "2026-04-20T14:46:43.632Z" }
826
826
  wheels = [
827
- { url = "https://files.pythonhosted.org/packages/77/ca/b45c378e6e8d0b90577288b533e04e95b7afd61bb1d51b6c263176435489/pydantic-2.13.2-py3-none-any.whl", hash = "sha256:a525087f4c03d7e7456a3de89b64cd693d2229933bb1068b9af6befd5563694e", size = 471947, upload-time = "2026-04-17T09:31:57.541Z" },
827
+ { url = "https://files.pythonhosted.org/packages/f3/0a/fd7d723f8f8153418fb40cf9c940e82004fce7e987026b08a68a36dd3fe7/pydantic-2.13.3-py3-none-any.whl", hash = "sha256:6db14ac8dfc9a1e57f87ea2c0de670c251240f43cb0c30a5130e9720dc612927", size = 471981, upload-time = "2026-04-20T14:46:41.402Z" },
828
828
  ]
829
829
 
830
830
  [[package]]
831
831
  name = "pydantic-core"
832
- version = "2.46.2"
832
+ version = "2.46.3"
833
833
  source = { registry = "https://pypi.org/simple" }
834
834
  dependencies = [
835
835
  { name = "typing-extensions" },
836
836
  ]
837
- sdist = { url = "https://files.pythonhosted.org/packages/43/bb/4742f05b739b2478459bb16fa8470549518c802e06ddcf3f106c5081315e/pydantic_core-2.46.2.tar.gz", hash = "sha256:37bb079f9ee3f1a519392b73fda2a96379b31f2013c6b467fe693e7f2987f596", size = 471269, upload-time = "2026-04-17T09:10:07.017Z" }
838
- wheels = [
839
- { url = "https://files.pythonhosted.org/packages/d0/96/a50ccb6b539ae780f73cea74905468777680e30c6c3bdf714b9d4c116ea0/pydantic_core-2.46.2-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:4f59b45f3ef8650c0c736a57f59031d47ed9df4c0a64e83796849d7d14863a2d", size = 2097111, upload-time = "2026-04-17T09:10:49.617Z" },
840
- { url = "https://files.pythonhosted.org/packages/34/5f/fdead7b3afa822ab6e5a18ee0ecffd54937de1877c01ed13a342e0fb3f07/pydantic_core-2.46.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3a075a29ebef752784a91532a1a85be6b234ccffec0a9d7978a92696387c3da6", size = 1951904, upload-time = "2026-04-17T09:12:32.062Z" },
841
- { url = "https://files.pythonhosted.org/packages/95/e0/1c5d547e550cdab1bec737492aa08865337af6fe7fc9b96f7f45f17d9519/pydantic_core-2.46.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d12d786e30c04a9d307c5d7080bf720d9bac7f1668191d8e37633a9562749e2", size = 1978667, upload-time = "2026-04-17T09:11:35.589Z" },
842
- { url = "https://files.pythonhosted.org/packages/0e/cb/665ce629e218c8228302cb94beff4f6531082a2c87d3ecc3d5e63a26f392/pydantic_core-2.46.2-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0d5e6d6343b0b5dcacb3503b5de90022968da8ed0ab9ab39d3eda71c20cbf84e", size = 2046721, upload-time = "2026-04-17T09:11:47.725Z" },
843
- { url = "https://files.pythonhosted.org/packages/77/e9/6cb2cf60f54c1472bbdfce19d957553b43dbba79d1d7b2930a195c594785/pydantic_core-2.46.2-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:233eebac0999b6b9ba76eb56f3ec8fce13164aa16b6d2225a36a79e0f95b5973", size = 2228483, upload-time = "2026-04-17T09:12:08.837Z" },
844
- { url = "https://files.pythonhosted.org/packages/0d/2a/93e018dd5571f781ebaeda8c0cf65398489d5bee9b1f484df0b6149b43b9/pydantic_core-2.46.2-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cc0eee720dd2f14f3b7c349469402b99ad81a174ab49d3533974529e9d93992", size = 2294663, upload-time = "2026-04-17T09:12:52.053Z" },
845
- { url = "https://files.pythonhosted.org/packages/5e/4f/49e57ca55c770c93d9bb046666a54949b42e3c9099a0c5fe94557873fe30/pydantic_core-2.46.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83ee76bf2c9910513dbc19e7d82367131fa7508dedd6186a462393071cc11059", size = 2098742, upload-time = "2026-04-17T09:13:45.472Z" },
846
- { url = "https://files.pythonhosted.org/packages/c6/b0/6e46b5cd3332af665f794b8cdeea206618a8630bd9e7bcc36864518fce81/pydantic_core-2.46.2-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:d61db38eb4ee5192f0c261b7f2d38e420b554df8912245e3546aee5c45e2fd78", size = 2125922, upload-time = "2026-04-17T09:12:54.304Z" },
847
- { url = "https://files.pythonhosted.org/packages/06/d1/40850c81585be443a2abfdf7f795f8fae831baf8e2f9b2133c8246ac671c/pydantic_core-2.46.2-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8f09a713d17bcd55da8ab02ebd9110c5246a49c44182af213b5212800af8bc83", size = 2183000, upload-time = "2026-04-17T09:10:59.027Z" },
848
- { url = "https://files.pythonhosted.org/packages/04/af/8493d7dfa03ebb7866909e577c6aa65ea0de7377b86023cc51d0c8e11db3/pydantic_core-2.46.2-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:30cacc5fb696e64b8ef6fd31d9549d394dd7d52760db072eecb98e37e3af1677", size = 2180335, upload-time = "2026-04-17T09:12:57.01Z" },
849
- { url = "https://files.pythonhosted.org/packages/72/5b/1f6a344c4ffdf284da41c6067b82d5ebcbd11ce1b515ae4b662d4adb6f61/pydantic_core-2.46.2-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:7ccfb105fcfe91a22bbb5563ad3dc124bc1aa75bfd2e53a780ab05f78cdf6108", size = 2330002, upload-time = "2026-04-17T09:12:02.958Z" },
850
- { url = "https://files.pythonhosted.org/packages/25/ff/9a694126c12d6d2f48a0cafa6f8eef88ef0d8825600e18d03ff2e896c3b2/pydantic_core-2.46.2-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:13ffef637dc8370c249e5b26bd18e9a80a4fca3d809618c44e18ec834a7ca7a8", size = 2359920, upload-time = "2026-04-17T09:10:27.764Z" },
851
- { url = "https://files.pythonhosted.org/packages/51/c8/3a35c763d68a9cb2675eb10ef242cf66c5d4701b28ae12e688d67d2c180e/pydantic_core-2.46.2-cp314-cp314-win32.whl", hash = "sha256:1b0ab6d756ca2704a938e6c31b53f290c2f9c10d3914235410302a149de1a83e", size = 1953701, upload-time = "2026-04-17T09:13:30.021Z" },
852
- { url = "https://files.pythonhosted.org/packages/1a/6a/f2726a780365f7dfd89d62036f984f7acb99978c60c5e1fa7c0cb898ed11/pydantic_core-2.46.2-cp314-cp314-win_amd64.whl", hash = "sha256:99ebade8c9ada4df975372d8dd25883daa0e379a05f1cd0c99aa0c04368d01a6", size = 2071867, upload-time = "2026-04-17T09:10:39.205Z" },
853
- { url = "https://files.pythonhosted.org/packages/e1/79/76baacb9feba3d7c399b245ca1a29c74ea0db04ea693811374827eec2290/pydantic_core-2.46.2-cp314-cp314-win_arm64.whl", hash = "sha256:de87422197cf7f83db91d89c86a21660d749b3cd76cd8a45d115b8e675670f02", size = 2017252, upload-time = "2026-04-17T09:10:26.175Z" },
854
- { url = "https://files.pythonhosted.org/packages/f1/3b/77c26938f817668d9ad9bab1a905cb23f11d9a3d4bf724d429b3e55a8eaf/pydantic_core-2.46.2-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:236f22b4a206b5b61db955396b7cf9e2e1ff77f372efe9570128ccfcd6a525eb", size = 2094545, upload-time = "2026-04-17T09:12:19.339Z" },
855
- { url = "https://files.pythonhosted.org/packages/fe/de/42c13f590e3c260966aa49bcdb1674774f975467c49abd51191e502bea28/pydantic_core-2.46.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c2012f64d2cd7cca50f49f22445aa5a88691ac2b4498ee0a9a977f8ca4f7289f", size = 1933953, upload-time = "2026-04-17T09:09:55.889Z" },
856
- { url = "https://files.pythonhosted.org/packages/4e/84/ebe3ebb3e2d8db656937cfa6f97f544cb7132f2307a4a7dfdcd0ea102a12/pydantic_core-2.46.2-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d07d6c63106d3a9c9a333e2636f9c82c703b1a9e3b079299e58747964e4fdb72", size = 1974435, upload-time = "2026-04-17T09:10:12.371Z" },
857
- { url = "https://files.pythonhosted.org/packages/b9/15/0bf51ca6709477cd4ef86148b6d7844f3308f029eac361dd0383f1e17b1a/pydantic_core-2.46.2-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c326a2b4b85e959d9a1fc3a11f32f84611b6ec07c053e1828a860edf8d068208", size = 2031113, upload-time = "2026-04-17T09:10:00.752Z" },
858
- { url = "https://files.pythonhosted.org/packages/02/ae/b7b5af9b79db036d9e61a44c481c17a213dc8fc4b8b71fe6875a72fc778b/pydantic_core-2.46.2-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac8a65e798f2462552c00d2e013d532c94d646729dda98458beaf51f9ec7b120", size = 2236325, upload-time = "2026-04-17T09:10:33.227Z" },
859
- { url = "https://files.pythonhosted.org/packages/a6/ae/ecef7477b5a03d4a499708f7e75d2836452ebb70b776c2d64612b334f57a/pydantic_core-2.46.2-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a3c2bc1cc8164bedbc160b7bb1e8cc1e8b9c27f69ae4f9ae2b976cdae02b2dd", size = 2278135, upload-time = "2026-04-17T09:10:23.287Z" },
860
- { url = "https://files.pythonhosted.org/packages/db/e4/2f9d82faa47af6c39fc3f120145fd915971e1e0cb6b55b494fad9fdf8275/pydantic_core-2.46.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e69aa5e10b7e8b1bb4a6888650fd12fcbf11d396ca11d4a44de1450875702830", size = 2109071, upload-time = "2026-04-17T09:11:06.149Z" },
861
- { url = "https://files.pythonhosted.org/packages/f1/9c/677cf10873fbd0b116575ab7b97c90482b21564f8a8040beb18edef7a577/pydantic_core-2.46.2-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:4e6df5c3301e65fb42bc5338bf9a1027a02b0a31dc7f54c33775229af474daf0", size = 2106028, upload-time = "2026-04-17T09:10:51.525Z" },
862
- { url = "https://files.pythonhosted.org/packages/d6/53/6a06183544daba51c059123a2064a99039df25f115a06bdb26f2ea177038/pydantic_core-2.46.2-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c2f6e32548ac8d559b47944effcf8ae4d81c161f6b6c885edc53bc08b8f192d", size = 2164816, upload-time = "2026-04-17T09:11:56.187Z" },
863
- { url = "https://files.pythonhosted.org/packages/57/6f/10fcdd9e3eca66fc828eef0f6f5850f2dd3bca2c59e6e041fb8bc3da39be/pydantic_core-2.46.2-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:b089a81c58e6ea0485562bbbbbca4f65c0549521606d5ef27fba217aac9b665a", size = 2166130, upload-time = "2026-04-17T09:10:03.804Z" },
864
- { url = "https://files.pythonhosted.org/packages/29/83/92d3fd0e0156cad2e3cb5c26de73794af78ac9fa0c22ab666e566dd67061/pydantic_core-2.46.2-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:7f700a6d6f64112ae9193709b84303bbab84424ad4b47d0253301aabce9dfc70", size = 2316605, upload-time = "2026-04-17T09:12:45.249Z" },
865
- { url = "https://files.pythonhosted.org/packages/97/f1/facffdb970981068219582e499b8d0871ed163ffcc6b347de5c412669e4c/pydantic_core-2.46.2-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:67db6814beaa5fefe91101ec7eb9efda613795767be96f7cf58b1ca8c9ca9972", size = 2358385, upload-time = "2026-04-17T09:09:54.657Z" },
866
- { url = "https://files.pythonhosted.org/packages/8b/a1/b8160b2f22b2199467bc68581a4ed380643c16b348a27d6165c6c242d694/pydantic_core-2.46.2-cp314-cp314t-win32.whl", hash = "sha256:32fbc7447be8e3be99bf7869f7066308f16be55b61f9882c2cefc7931f5c7664", size = 1942373, upload-time = "2026-04-17T09:12:59.594Z" },
867
- { url = "https://files.pythonhosted.org/packages/0d/90/db89acabe5b150e11d1b59fe3d947dda2ef6abbfef5c82f056ff63802f5d/pydantic_core-2.46.2-cp314-cp314t-win_amd64.whl", hash = "sha256:b317a2b97019c0b95ce99f4f901ae383f40132da6706cdf1731066a73394c25c", size = 2052078, upload-time = "2026-04-17T09:10:19.96Z" },
868
- { url = "https://files.pythonhosted.org/packages/97/32/e19b83ceb07a3f1bb21798407790bbc9a31740158fd132b94139cb84e16c/pydantic_core-2.46.2-cp314-cp314t-win_arm64.whl", hash = "sha256:7dcb9d40930dfad7ab6b20bcc6ca9d2b030b0f347a0cd9909b54bd53ead521b1", size = 2016941, upload-time = "2026-04-17T09:12:34.447Z" },
837
+ sdist = { url = "https://files.pythonhosted.org/packages/2a/ef/f7abb56c49382a246fd2ce9c799691e3c3e7175ec74b14d99e798bcddb1a/pydantic_core-2.46.3.tar.gz", hash = "sha256:41c178f65b8c29807239d47e6050262eb6bf84eb695e41101e62e38df4a5bc2c", size = 471412, upload-time = "2026-04-20T14:40:56.672Z" }
838
+ wheels = [
839
+ { url = "https://files.pythonhosted.org/packages/7f/db/a7bcb4940183fda36022cd18ba8dd12f2dff40740ec7b58ce7457befa416/pydantic_core-2.46.3-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:afa3aa644f74e290cdede48a7b0bee37d1c35e71b05105f6b340d484af536d9b", size = 2097614, upload-time = "2026-04-20T14:44:38.374Z" },
840
+ { url = "https://files.pythonhosted.org/packages/24/35/e4066358a22e3e99519db370494c7528f5a2aa1367370e80e27e20283543/pydantic_core-2.46.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ced3310e51aa425f7f77da8bbbb5212616655bedbe82c70944320bc1dbe5e018", size = 1951896, upload-time = "2026-04-20T14:40:53.996Z" },
841
+ { url = "https://files.pythonhosted.org/packages/87/92/37cf4049d1636996e4b888c05a501f40a43ff218983a551d57f9d5e14f0d/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e29908922ce9da1a30b4da490bd1d3d82c01dcfdf864d2a74aacee674d0bfa34", size = 1979314, upload-time = "2026-04-20T14:41:49.446Z" },
842
+ { url = "https://files.pythonhosted.org/packages/d8/36/9ff4d676dfbdfb2d591cf43f3d90ded01e15b1404fd101180ed2d62a2fd3/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c9ff69140423eea8ed2d5477df3ba037f671f5e897d206d921bc9fdc39613e7", size = 2056133, upload-time = "2026-04-20T14:42:23.574Z" },
843
+ { url = "https://files.pythonhosted.org/packages/bc/f0/405b442a4d7ba855b06eec8b2bf9c617d43b8432d099dfdc7bf999293495/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b675ab0a0d5b1c8fdb81195dc5bcefea3f3c240871cdd7ff9a2de8aa50772eb2", size = 2228726, upload-time = "2026-04-20T14:44:22.816Z" },
844
+ { url = "https://files.pythonhosted.org/packages/e7/f8/65cd92dd5a0bd89ba277a98ecbfaf6fc36bbd3300973c7a4b826d6ab1391/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0087084960f209a9a4af50ecd1fb063d9ad3658c07bb81a7a53f452dacbfb2ba", size = 2301214, upload-time = "2026-04-20T14:44:48.792Z" },
845
+ { url = "https://files.pythonhosted.org/packages/fd/86/ef96a4c6e79e7a2d0410826a68fbc0eccc0fd44aa733be199d5fcac3bb87/pydantic_core-2.46.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed42e6cc8e1b0e2b9b96e2276bad70ae625d10d6d524aed0c93de974ae029f9f", size = 2099927, upload-time = "2026-04-20T14:41:40.196Z" },
846
+ { url = "https://files.pythonhosted.org/packages/6d/53/269caf30e0096e0a8a8f929d1982a27b3879872cca2d917d17c2f9fdf4fe/pydantic_core-2.46.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:f1771ce258afb3e4201e67d154edbbae712a76a6081079fe247c2f53c6322c22", size = 2128789, upload-time = "2026-04-20T14:41:15.868Z" },
847
+ { url = "https://files.pythonhosted.org/packages/00/b0/1a6d9b6a587e118482910c244a1c5acf4d192604174132efd12bf0ac486f/pydantic_core-2.46.3-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a7610b6a5242a6c736d8ad47fd5fff87fcfe8f833b281b1c409c3d6835d9227f", size = 2173815, upload-time = "2026-04-20T14:44:25.152Z" },
848
+ { url = "https://files.pythonhosted.org/packages/87/56/e7e00d4041a7e62b5a40815590114db3b535bf3ca0bf4dca9f16cef25246/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:ff5e7783bcc5476e1db448bf268f11cb257b1c276d3e89f00b5727be86dd0127", size = 2181608, upload-time = "2026-04-20T14:41:28.933Z" },
849
+ { url = "https://files.pythonhosted.org/packages/e8/22/4bd23c3d41f7c185d60808a1de83c76cf5aeabf792f6c636a55c3b1ec7f9/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:9d2e32edcc143bc01e95300671915d9ca052d4f745aa0a49c48d4803f8a85f2c", size = 2326968, upload-time = "2026-04-20T14:42:03.962Z" },
850
+ { url = "https://files.pythonhosted.org/packages/24/ac/66cd45129e3915e5ade3b292cb3bc7fd537f58f8f8dbdaba6170f7cabb74/pydantic_core-2.46.3-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:6e42d83d1c6b87fa56b521479cff237e626a292f3b31b6345c15a99121b454c1", size = 2369842, upload-time = "2026-04-20T14:41:35.52Z" },
851
+ { url = "https://files.pythonhosted.org/packages/a2/51/dd4248abb84113615473aa20d5545b7c4cd73c8644003b5259686f93996c/pydantic_core-2.46.3-cp314-cp314-win32.whl", hash = "sha256:07bc6d2a28c3adb4f7c6ae46aa4f2d2929af127f587ed44057af50bf1ce0f505", size = 1959661, upload-time = "2026-04-20T14:41:00.042Z" },
852
+ { url = "https://files.pythonhosted.org/packages/20/eb/59980e5f1ae54a3b86372bd9f0fa373ea2d402e8cdcd3459334430f91e91/pydantic_core-2.46.3-cp314-cp314-win_amd64.whl", hash = "sha256:8940562319bc621da30714617e6a7eaa6b98c84e8c685bcdc02d7ed5e7c7c44e", size = 2071686, upload-time = "2026-04-20T14:43:16.471Z" },
853
+ { url = "https://files.pythonhosted.org/packages/8c/db/1cf77e5247047dfee34bc01fa9bca134854f528c8eb053e144298893d370/pydantic_core-2.46.3-cp314-cp314-win_arm64.whl", hash = "sha256:5dcbbcf4d22210ced8f837c96db941bdb078f419543472aca5d9a0bb7cddc7df", size = 2026907, upload-time = "2026-04-20T14:43:31.732Z" },
854
+ { url = "https://files.pythonhosted.org/packages/57/c0/b3df9f6a543276eadba0a48487b082ca1f201745329d97dbfa287034a230/pydantic_core-2.46.3-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:d0fe3dce1e836e418f912c1ad91c73357d03e556a4d286f441bf34fed2dbeecf", size = 2095047, upload-time = "2026-04-20T14:42:37.982Z" },
855
+ { url = "https://files.pythonhosted.org/packages/66/57/886a938073b97556c168fd99e1a7305bb363cd30a6d2c76086bf0587b32a/pydantic_core-2.46.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9ce92e58abc722dac1bf835a6798a60b294e48eb0e625ec9fd994b932ac5feee", size = 1934329, upload-time = "2026-04-20T14:43:49.655Z" },
856
+ { url = "https://files.pythonhosted.org/packages/0b/7c/b42eaa5c34b13b07ecb51da21761297a9b8eb43044c864a035999998f328/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a03e6467f0f5ab796a486146d1b887b2dc5e5f9b3288898c1b1c3ad974e53e4a", size = 1974847, upload-time = "2026-04-20T14:42:10.737Z" },
857
+ { url = "https://files.pythonhosted.org/packages/e6/9b/92b42db6543e7de4f99ae977101a2967b63122d4b6cf7773812da2d7d5b5/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2798b6ba041b9d70acfb9071a2ea13c8456dd1e6a5555798e41ba7b0790e329c", size = 2041742, upload-time = "2026-04-20T14:40:44.262Z" },
858
+ { url = "https://files.pythonhosted.org/packages/0f/19/46fbe1efabb5aa2834b43b9454e70f9a83ad9c338c1291e48bdc4fecf167/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9be3e221bdc6d69abf294dcf7aff6af19c31a5cdcc8f0aa3b14be29df4bd03b1", size = 2236235, upload-time = "2026-04-20T14:41:27.307Z" },
859
+ { url = "https://files.pythonhosted.org/packages/77/da/b3f95bc009ad60ec53120f5d16c6faa8cabdbe8a20d83849a1f2b8728148/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f13936129ce841f2a5ddf6f126fea3c43cd128807b5a59588c37cf10178c2e64", size = 2282633, upload-time = "2026-04-20T14:44:33.271Z" },
860
+ { url = "https://files.pythonhosted.org/packages/cc/6e/401336117722e28f32fb8220df676769d28ebdf08f2f4469646d404c43a3/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28b5f2ef03416facccb1c6ef744c69793175fd27e44ef15669201601cf423acb", size = 2109679, upload-time = "2026-04-20T14:44:41.065Z" },
861
+ { url = "https://files.pythonhosted.org/packages/fc/53/b289f9bc8756a32fe718c46f55afaeaf8d489ee18d1a1e7be1db73f42cc4/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:830d1247d77ad23852314f069e9d7ddafeec5f684baf9d7e7065ed46a049c4e6", size = 2108342, upload-time = "2026-04-20T14:42:50.144Z" },
862
+ { url = "https://files.pythonhosted.org/packages/10/5b/8292fc7c1f9111f1b2b7c1b0dcf1179edcd014fc3ea4517499f50b829d71/pydantic_core-2.46.3-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0793c90c1a3c74966e7975eaef3ed30ebdff3260a0f815a62a22adc17e4c01c", size = 2157208, upload-time = "2026-04-20T14:42:08.133Z" },
863
+ { url = "https://files.pythonhosted.org/packages/2b/9e/f80044e9ec07580f057a89fc131f78dda7a58751ddf52bbe05eaf31db50f/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d2d0aead851b66f5245ec0c4fb2612ef457f8bbafefdf65a2bf9d6bac6140f47", size = 2167237, upload-time = "2026-04-20T14:42:25.412Z" },
864
+ { url = "https://files.pythonhosted.org/packages/f8/84/6781a1b037f3b96be9227edbd1101f6d3946746056231bf4ac48cdff1a8d/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:2f40e4246676beb31c5ce77c38a55ca4e465c6b38d11ea1bd935420568e0b1ab", size = 2312540, upload-time = "2026-04-20T14:40:40.313Z" },
865
+ { url = "https://files.pythonhosted.org/packages/3e/db/19c0839feeb728e7df03255581f198dfdf1c2aeb1e174a8420b63c5252e5/pydantic_core-2.46.3-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:cf489cf8986c543939aeee17a09c04d6ffb43bfef8ca16fcbcc5cfdcbed24dba", size = 2369556, upload-time = "2026-04-20T14:41:09.427Z" },
866
+ { url = "https://files.pythonhosted.org/packages/e0/15/3228774cb7cd45f5f721ddf1b2242747f4eb834d0c491f0c02d606f09fed/pydantic_core-2.46.3-cp314-cp314t-win32.whl", hash = "sha256:ffe0883b56cfc05798bf994164d2b2ff03efe2d22022a2bb080f3b626176dd56", size = 1949756, upload-time = "2026-04-20T14:41:25.717Z" },
867
+ { url = "https://files.pythonhosted.org/packages/b8/2a/c79cf53fd91e5a87e30d481809f52f9a60dd221e39de66455cf04deaad37/pydantic_core-2.46.3-cp314-cp314t-win_amd64.whl", hash = "sha256:706d9d0ce9cf4593d07270d8e9f53b161f90c57d315aeec4fb4fd7a8b10240d8", size = 2051305, upload-time = "2026-04-20T14:43:18.627Z" },
868
+ { url = "https://files.pythonhosted.org/packages/0b/db/d8182a7f1d9343a032265aae186eb063fe26ca4c40f256b21e8da4498e89/pydantic_core-2.46.3-cp314-cp314t-win_arm64.whl", hash = "sha256:77706aeb41df6a76568434701e0917da10692da28cb69d5fb6919ce5fdb07374", size = 2026310, upload-time = "2026-04-20T14:41:01.778Z" },
869
869
  ]
870
870
 
871
871
  [[package]]
872
872
  name = "pydantic-settings"
873
- version = "2.13.1"
873
+ version = "2.14.0"
874
874
  source = { registry = "https://pypi.org/simple" }
875
875
  dependencies = [
876
876
  { name = "pydantic" },
877
877
  { name = "python-dotenv" },
878
878
  { name = "typing-inspection" },
879
879
  ]
880
- sdist = { url = "https://files.pythonhosted.org/packages/52/6d/fffca34caecc4a3f97bda81b2098da5e8ab7efc9a66e819074a11955d87e/pydantic_settings-2.13.1.tar.gz", hash = "sha256:b4c11847b15237fb0171e1462bf540e294affb9b86db4d9aa5c01730bdbe4025", size = 223826, upload-time = "2026-02-19T13:45:08.055Z" }
880
+ sdist = { url = "https://files.pythonhosted.org/packages/42/98/c8345dccdc31de4228c039a98f6467a941e39558da41c1744fbe29fa5666/pydantic_settings-2.14.0.tar.gz", hash = "sha256:24285fd4b0e0c06507dd9fdfd331ee23794305352aaec8fc4eb92d4047aeb67d", size = 235709, upload-time = "2026-04-20T13:37:40.293Z" }
881
881
  wheels = [
882
- { url = "https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl", hash = "sha256:d56fd801823dbeae7f0975e1f8c8e25c258eb75d278ea7abb5d9cebb01b56237", size = 58929, upload-time = "2026-02-19T13:45:06.034Z" },
882
+ { url = "https://files.pythonhosted.org/packages/01/dd/bebff3040138f00ae8a102d426b27349b9a49acc310fcae7f92112d867e3/pydantic_settings-2.14.0-py3-none-any.whl", hash = "sha256:fc8d5d692eb7092e43c8647c1c35a3ecd00e040fcf02ed86f4cb5458ca62182e", size = 60940, upload-time = "2026-04-20T13:37:38.586Z" },
883
883
  ]
884
884
 
885
885
  [[package]]
@@ -1024,14 +1024,14 @@ testing = [
1024
1024
 
1025
1025
  [package.metadata]
1026
1026
  requires-dist = [
1027
- { name = "aiobotocore", specifier = "~=3.4.0" },
1027
+ { name = "aiobotocore", specifier = "~=3.5.0" },
1028
1028
  { name = "aiohttp", extras = ["speedups"], specifier = ">=3.13.5,<3.15.0" },
1029
1029
  { name = "asyncpg", specifier = "~=0.31.0" },
1030
1030
  { name = "lxml", specifier = "~=6.1.0" },
1031
1031
  { name = "msgpack", specifier = "~=1.1.2" },
1032
1032
  { name = "msgspec", specifier = "==0.21.1" },
1033
- { name = "object-storage-client", specifier = "==0.0.20" },
1034
- { name = "pydantic-settings", specifier = "~=2.13.1" },
1033
+ { name = "object-storage-client", specifier = "==0.0.22" },
1034
+ { name = "pydantic-settings", specifier = "~=2.14.0" },
1035
1035
  { name = "sqlalchemy", extras = ["asyncio"], specifier = "~=2.0.49" },
1036
1036
  { name = "valkey", extras = ["libvalkey"], specifier = "~=6.1.1" },
1037
1037
  { name = "zeep", specifier = "~=4.3.2" },