python3-commons 0.18.7__tar.gz → 0.18.9__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.18.7/src/python3_commons.egg-info → python3_commons-0.18.9}/PKG-INFO +3 -3
- {python3_commons-0.18.7 → python3_commons-0.18.9}/pyproject.toml +2 -2
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/soap_client.py +96 -102
- {python3_commons-0.18.7 → python3_commons-0.18.9/src/python3_commons.egg-info}/PKG-INFO +3 -3
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons.egg-info/requires.txt +2 -2
- {python3_commons-0.18.7 → python3_commons-0.18.9}/uv.lock +31 -31
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.coveragerc +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.devcontainer/Dockerfile +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.devcontainer/devcontainer.json +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.devcontainer/docker-compose.yml +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.env_template +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.github/workflows/checks.yml +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.github/workflows/python-publish.yaml +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.github/workflows/release-on-tag-push.yml +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.gitignore +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.pre-commit-config.yaml +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/.python-version +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/AUTHORS.rst +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/CHANGELOG.rst +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/LICENSE +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/README.md +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/README.rst +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/docs/Makefile +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/docs/_static/.gitignore +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/docs/authors.rst +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/docs/changelog.rst +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/docs/conf.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/docs/index.rst +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/docs/license.rst +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/setup.cfg +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/__init__.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/api_client.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/async_functools.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/audit.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/auth.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/cache.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/conf.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/db/__init__.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/db/helpers.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/db/models/__init__.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/db/models/auth.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/db/models/common.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/db/models/rbac.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/db/models/users.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/exceptions.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/fs.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/generators.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/helpers.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/log/__init__.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/log/filters.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/log/formatters.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/object_storage.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/permissions.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/serializers/__init__.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/serializers/common.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/serializers/json.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/serializers/msgpack.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/serializers/msgspec.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons.egg-info/SOURCES.txt +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons.egg-info/dependency_links.txt +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons.egg-info/top_level.txt +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/__init__.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/integration/__init__.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/integration/test_cache.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/integration/test_osc.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/unit/__init__.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/unit/conftest.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/unit/log/__init__.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/unit/log/test_formatters.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/unit/test_async_functools.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/unit/test_audit.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/unit/test_helpers.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/tests/unit/test_msgpack.py +0 -0
- {python3_commons-0.18.7 → python3_commons-0.18.9}/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.18.
|
|
3
|
+
Version: 0.18.9
|
|
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
|
|
@@ -38,8 +38,8 @@ Provides-Extra: database
|
|
|
38
38
|
Requires-Dist: asyncpg~=0.31.0; extra == "database"
|
|
39
39
|
Requires-Dist: SQLAlchemy[asyncio]~=2.0.49; extra == "database"
|
|
40
40
|
Provides-Extra: object-storage
|
|
41
|
-
Requires-Dist: aiobotocore~=3.
|
|
42
|
-
Requires-Dist: object-storage-client==0.0.
|
|
41
|
+
Requires-Dist: aiobotocore~=3.6.0; extra == "object-storage"
|
|
42
|
+
Requires-Dist: object-storage-client==0.0.25; extra == "object-storage"
|
|
43
43
|
Provides-Extra: soap-client
|
|
44
44
|
Requires-Dist: aiohttp[speedups]<3.15.0,>=3.13.5; extra == "soap-client"
|
|
45
45
|
Requires-Dist: certifi==2026.4.22; extra == "soap-client"
|
|
@@ -54,8 +54,8 @@ database = [
|
|
|
54
54
|
"SQLAlchemy[asyncio]~=2.0.49"
|
|
55
55
|
]
|
|
56
56
|
object-storage = [
|
|
57
|
-
"aiobotocore~=3.
|
|
58
|
-
"object-storage-client==0.0.
|
|
57
|
+
"aiobotocore~=3.6.0",
|
|
58
|
+
"object-storage-client==0.0.25"
|
|
59
59
|
]
|
|
60
60
|
soap-client = [
|
|
61
61
|
"aiohttp[speedups]>=3.13.5,<3.15.0",
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Async SOAP client built on aiohttp + zeep.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
1
|
from __future__ import annotations
|
|
6
2
|
|
|
7
3
|
import asyncio
|
|
@@ -13,10 +9,9 @@ from contextlib import asynccontextmanager
|
|
|
13
9
|
from dataclasses import dataclass
|
|
14
10
|
from typing import TYPE_CHECKING, Any, Self
|
|
15
11
|
|
|
16
|
-
import certifi
|
|
17
|
-
|
|
18
12
|
try:
|
|
19
13
|
import aiohttp
|
|
14
|
+
import certifi
|
|
20
15
|
from aiohttp import ClientSession, ClientTimeout, TCPConnector
|
|
21
16
|
from requests import Response
|
|
22
17
|
from requests.cookies import RequestsCookieJar
|
|
@@ -38,55 +33,48 @@ logger = logging.getLogger(__name__)
|
|
|
38
33
|
|
|
39
34
|
def _make_ssl_context(*, verify: bool) -> ssl.SSLContext | bool:
|
|
40
35
|
if not verify:
|
|
41
|
-
return False
|
|
36
|
+
return False
|
|
42
37
|
|
|
43
38
|
return ssl.create_default_context(cafile=certifi.where())
|
|
44
39
|
|
|
45
40
|
|
|
46
41
|
@dataclass(frozen=True, slots=True)
|
|
47
42
|
class TransportConfig:
|
|
48
|
-
"""Immutable transport settings passed to AsyncTransport."""
|
|
49
|
-
|
|
50
43
|
timeout: int = 300
|
|
51
|
-
"""Total timeout in seconds for WSDL fetches."""
|
|
52
|
-
|
|
53
44
|
operation_timeout: int = 60
|
|
54
|
-
"""Total timeout in seconds for SOAP operation calls."""
|
|
55
|
-
|
|
56
45
|
verify_ssl: bool = True
|
|
57
46
|
proxy: str | None = None
|
|
58
47
|
|
|
59
48
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
Usage::
|
|
49
|
+
# -------------------------
|
|
50
|
+
# Transport
|
|
51
|
+
# -------------------------
|
|
65
52
|
|
|
66
|
-
async with soap_client("https://example.com/service?wsdl") as client:
|
|
67
|
-
result = await client.service.SomeOperation(...)
|
|
68
|
-
"""
|
|
69
53
|
|
|
54
|
+
class AsyncTransport(Transport):
|
|
70
55
|
def __init__(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
56
|
+
self,
|
|
57
|
+
*,
|
|
58
|
+
session: ClientSession,
|
|
59
|
+
config: TransportConfig,
|
|
60
|
+
loop: asyncio.AbstractEventLoop,
|
|
61
|
+
owns_session: bool = False,
|
|
76
62
|
) -> None:
|
|
77
63
|
super().__init__()
|
|
78
64
|
self._session = session
|
|
79
65
|
self._config = config
|
|
80
|
-
self.
|
|
66
|
+
self._loop = loop
|
|
67
|
+
self._owns_session = owns_session
|
|
81
68
|
|
|
82
69
|
@classmethod
|
|
83
70
|
def from_config(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
) ->
|
|
71
|
+
cls,
|
|
72
|
+
config: TransportConfig | None = None,
|
|
73
|
+
*,
|
|
74
|
+
session: ClientSession | None = None,
|
|
75
|
+
) -> AsyncTransport:
|
|
89
76
|
config = config or TransportConfig()
|
|
77
|
+
loop = asyncio.get_running_loop()
|
|
90
78
|
owns_session = session is None
|
|
91
79
|
|
|
92
80
|
if owns_session:
|
|
@@ -96,7 +84,12 @@ class AsyncTransport(Transport):
|
|
|
96
84
|
headers={'User-Agent': f'Zeep/{get_version()} (www.python-zeep.org)'},
|
|
97
85
|
)
|
|
98
86
|
|
|
99
|
-
return cls(
|
|
87
|
+
return cls(
|
|
88
|
+
session=session,
|
|
89
|
+
config=config,
|
|
90
|
+
loop=loop,
|
|
91
|
+
owns_session=owns_session,
|
|
92
|
+
)
|
|
100
93
|
|
|
101
94
|
async def aclose(self) -> None:
|
|
102
95
|
if self._owns_session:
|
|
@@ -110,7 +103,6 @@ class AsyncTransport(Transport):
|
|
|
110
103
|
|
|
111
104
|
@staticmethod
|
|
112
105
|
def _build_response(response: aiohttp.ClientResponse, body: bytes) -> Response:
|
|
113
|
-
"""Convert an aiohttp response into a requests.Response for zeep."""
|
|
114
106
|
r = Response()
|
|
115
107
|
r.status_code = response.status
|
|
116
108
|
r._content = body # noqa: SLF001
|
|
@@ -127,116 +119,118 @@ class AsyncTransport(Transport):
|
|
|
127
119
|
|
|
128
120
|
return r
|
|
129
121
|
|
|
122
|
+
async def _fetch(self, url: str) -> bytes:
|
|
123
|
+
async with self._session.get(
|
|
124
|
+
url,
|
|
125
|
+
proxy=self._config.proxy,
|
|
126
|
+
timeout=ClientTimeout(total=self._config.timeout),
|
|
127
|
+
) as resp:
|
|
128
|
+
body = await resp.read()
|
|
129
|
+
|
|
130
|
+
if resp.status >= 400:
|
|
131
|
+
raise TransportError(
|
|
132
|
+
status_code=resp.status,
|
|
133
|
+
message=body.decode(errors='ignore'),
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
return body
|
|
137
|
+
|
|
130
138
|
def load(self, url: str) -> bytes:
|
|
131
139
|
"""
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
is no cross-loop session sharing with the operational session.
|
|
140
|
+
Called synchronously by zeep during WSDL/XSD parsing.
|
|
141
|
+
Always runs in a fresh thread with its own isolated event loop —
|
|
142
|
+
never touches self._loop to avoid deadlock.
|
|
136
143
|
"""
|
|
137
144
|
if not url:
|
|
138
145
|
return b''
|
|
139
146
|
|
|
140
147
|
async def _fetch() -> bytes:
|
|
141
|
-
async with (
|
|
142
|
-
ClientSession(
|
|
148
|
+
async with ClientSession(
|
|
143
149
|
connector=TCPConnector(ssl=_make_ssl_context(verify=self._config.verify_ssl)),
|
|
144
150
|
timeout=ClientTimeout(total=self._config.timeout),
|
|
145
151
|
headers={'User-Agent': f'Zeep/{get_version()} (www.python-zeep.org)'},
|
|
146
|
-
|
|
147
|
-
session.get(url, proxy=self._config.proxy) as resp
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return content
|
|
158
|
-
|
|
159
|
-
# load() is always called from within a running event loop (during
|
|
160
|
-
# AsyncClient.__init__ inside the soap_client context manager), so
|
|
161
|
-
# run_until_complete on the running loop would raise. Always delegate
|
|
162
|
-
# to a thread with its own fresh event loop.
|
|
152
|
+
) as session:
|
|
153
|
+
async with session.get(url, proxy=self._config.proxy) as resp:
|
|
154
|
+
body = await resp.read()
|
|
155
|
+
if resp.status >= 400:
|
|
156
|
+
raise TransportError(
|
|
157
|
+
status_code=resp.status,
|
|
158
|
+
message=body.decode(errors='ignore'),
|
|
159
|
+
)
|
|
160
|
+
return body
|
|
161
|
+
|
|
163
162
|
with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
|
|
164
163
|
return pool.submit(asyncio.run, _fetch()).result()
|
|
165
164
|
|
|
166
|
-
async def
|
|
165
|
+
async def post_xml(
|
|
167
166
|
self,
|
|
168
167
|
address: str,
|
|
169
|
-
|
|
168
|
+
envelope: Any,
|
|
170
169
|
headers: dict[str, str],
|
|
171
|
-
*,
|
|
172
|
-
timeout: int | None = None,
|
|
173
170
|
) -> Response:
|
|
174
|
-
|
|
171
|
+
return await self.post(address, etree_to_string(envelope), headers)
|
|
172
|
+
|
|
173
|
+
async def post(
|
|
174
|
+
self,
|
|
175
|
+
address: str,
|
|
176
|
+
message: bytes,
|
|
177
|
+
headers: dict[str, str],
|
|
178
|
+
*,
|
|
179
|
+
timeout: int | None = None,
|
|
180
|
+
) -> Response:
|
|
181
|
+
logger.debug('SOAP POST → %s', address)
|
|
175
182
|
|
|
176
183
|
async with self._session.post(
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
184
|
+
address,
|
|
185
|
+
data=message,
|
|
186
|
+
headers=headers,
|
|
187
|
+
proxy=self._config.proxy,
|
|
188
|
+
timeout=ClientTimeout(total=timeout) if timeout is not None else None,
|
|
182
189
|
) as resp:
|
|
183
190
|
body = await resp.read()
|
|
184
|
-
logger.debug('SOAP ← %s (
|
|
191
|
+
logger.debug('SOAP ← %s (%d)', address, resp.status)
|
|
185
192
|
return self._build_response(resp, body)
|
|
186
193
|
|
|
187
|
-
def post_xml(
|
|
188
|
-
self,
|
|
189
|
-
address: str,
|
|
190
|
-
envelope: Any,
|
|
191
|
-
headers: dict[str, str],
|
|
192
|
-
) -> Response:
|
|
193
|
-
"""
|
|
194
|
-
Sync entry-point zeep calls from a thread executor during send_async.
|
|
195
|
-
Bridges back into the running event loop via run_coroutine_threadsafe.
|
|
196
|
-
"""
|
|
197
|
-
loop = asyncio.get_event_loop()
|
|
198
|
-
future = asyncio.run_coroutine_threadsafe(
|
|
199
|
-
self.post(address, etree_to_string(envelope), headers),
|
|
200
|
-
loop,
|
|
201
|
-
)
|
|
202
|
-
return future.result()
|
|
203
|
-
|
|
204
194
|
async def get(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
195
|
+
self,
|
|
196
|
+
address: str,
|
|
197
|
+
params: dict[str, str],
|
|
198
|
+
headers: dict[str, str],
|
|
209
199
|
) -> Response:
|
|
210
200
|
async with self._session.get(
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
201
|
+
address,
|
|
202
|
+
params=params,
|
|
203
|
+
headers=headers,
|
|
204
|
+
proxy=self._config.proxy,
|
|
215
205
|
) as resp:
|
|
216
206
|
body = await resp.read()
|
|
217
207
|
return self._build_response(resp, body)
|
|
218
208
|
|
|
219
209
|
|
|
220
210
|
def build_soap_client(
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
211
|
+
wsdl_url: str,
|
|
212
|
+
transport: AsyncTransport,
|
|
213
|
+
plugins: Sequence[Plugin] | None = None,
|
|
224
214
|
) -> AsyncClient:
|
|
225
215
|
if not wsdl_url:
|
|
226
216
|
msg = 'wsdl_url must be a non-empty string.'
|
|
227
217
|
|
|
228
218
|
raise ValueError(msg)
|
|
229
219
|
|
|
230
|
-
return AsyncClient(
|
|
220
|
+
return AsyncClient(
|
|
221
|
+
wsdl_url,
|
|
222
|
+
transport=transport,
|
|
223
|
+
plugins=list(plugins or []),
|
|
224
|
+
)
|
|
231
225
|
|
|
232
226
|
|
|
233
227
|
@asynccontextmanager
|
|
234
228
|
async def soap_client(
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
229
|
+
wsdl_url: str,
|
|
230
|
+
*,
|
|
231
|
+
config: TransportConfig | None = None,
|
|
232
|
+
session: ClientSession | None = None,
|
|
233
|
+
plugins: Sequence[Plugin] | None = None,
|
|
240
234
|
) -> AsyncIterator[AsyncClient]:
|
|
241
235
|
"""
|
|
242
236
|
Async context manager yielding a ready-to-use zeep AsyncClient.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python3-commons
|
|
3
|
-
Version: 0.18.
|
|
3
|
+
Version: 0.18.9
|
|
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
|
|
@@ -38,8 +38,8 @@ Provides-Extra: database
|
|
|
38
38
|
Requires-Dist: asyncpg~=0.31.0; extra == "database"
|
|
39
39
|
Requires-Dist: SQLAlchemy[asyncio]~=2.0.49; extra == "database"
|
|
40
40
|
Provides-Extra: object-storage
|
|
41
|
-
Requires-Dist: aiobotocore~=3.
|
|
42
|
-
Requires-Dist: object-storage-client==0.0.
|
|
41
|
+
Requires-Dist: aiobotocore~=3.6.0; extra == "object-storage"
|
|
42
|
+
Requires-Dist: object-storage-client==0.0.25; extra == "object-storage"
|
|
43
43
|
Provides-Extra: soap-client
|
|
44
44
|
Requires-Dist: aiohttp[speedups]<3.15.0,>=3.13.5; extra == "soap-client"
|
|
45
45
|
Requires-Dist: certifi==2026.4.22; extra == "soap-client"
|
|
@@ -4,7 +4,7 @@ requires-python = "==3.14.*"
|
|
|
4
4
|
|
|
5
5
|
[[package]]
|
|
6
6
|
name = "aiobotocore"
|
|
7
|
-
version = "3.
|
|
7
|
+
version = "3.6.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/
|
|
18
|
+
sdist = { url = "https://files.pythonhosted.org/packages/28/52/4689a0c2ddced3888c687a84b820da37da6abda5ec52d96a7f11f22ff6ec/aiobotocore-3.6.0.tar.gz", hash = "sha256:78e6b95b258bcdde8d681d6851f88f337ed30b2d6611fae45366e6bf7488feb3", size = 123104, upload-time = "2026-05-01T20:33:31.109Z" }
|
|
19
19
|
wheels = [
|
|
20
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
20
|
+
{ url = "https://files.pythonhosted.org/packages/72/9a/17033aaafb880932eec0b0054a8e1cf201cb74501dfb0518c6b39fc5b258/aiobotocore-3.6.0-py3-none-any.whl", hash = "sha256:bf1c2e1d8492d98c9b63b330723a44b41a5d402afd19eaca704e107b91669c09", size = 88259, upload-time = "2026-05-01T20:33:29.213Z" },
|
|
21
21
|
]
|
|
22
22
|
|
|
23
23
|
[[package]]
|
|
@@ -176,16 +176,16 @@ wheels = [
|
|
|
176
176
|
|
|
177
177
|
[[package]]
|
|
178
178
|
name = "botocore"
|
|
179
|
-
version = "1.
|
|
179
|
+
version = "1.43.0"
|
|
180
180
|
source = { registry = "https://pypi.org/simple" }
|
|
181
181
|
dependencies = [
|
|
182
182
|
{ name = "jmespath" },
|
|
183
183
|
{ name = "python-dateutil" },
|
|
184
184
|
{ name = "urllib3" },
|
|
185
185
|
]
|
|
186
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
186
|
+
sdist = { url = "https://files.pythonhosted.org/packages/28/79/2f4be1896db3db7ccf44504253a175d56b6bd6b669619edc5147d1aa21ea/botocore-1.43.0.tar.gz", hash = "sha256:e933b31a2d644253e1d029d7d39e99ba41b87e29300534f189744cc438cdf928", size = 15286817, upload-time = "2026-04-29T22:07:31.723Z" }
|
|
187
187
|
wheels = [
|
|
188
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
188
|
+
{ url = "https://files.pythonhosted.org/packages/bf/4b/afc1fef8a43bafb139f57f73bbd70df82807af5934321e8112ae50668827/botocore-1.43.0-py3-none-any.whl", hash = "sha256:cc5b15eaec3c6eac05d8012cb5ef17ebe891beb88a16ca13c374bfaece1241e6", size = 14970102, upload-time = "2026-04-29T22:07:27Z" },
|
|
189
189
|
]
|
|
190
190
|
|
|
191
191
|
[[package]]
|
|
@@ -717,13 +717,13 @@ wheels = [
|
|
|
717
717
|
|
|
718
718
|
[[package]]
|
|
719
719
|
name = "object-storage-client"
|
|
720
|
-
version = "0.0.
|
|
720
|
+
version = "0.0.25"
|
|
721
721
|
source = { registry = "https://pypi.org/simple" }
|
|
722
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
722
|
+
sdist = { url = "https://files.pythonhosted.org/packages/01/34/c6796891f4271e65c14f0ab098a0e4abd2ff0658f4d065cfc7093869e85c/object_storage_client-0.0.25.tar.gz", hash = "sha256:c29a789b9e7d8fc8c42f7a3bf0ff881cb736024c87f571693d9799d367d80e9a", size = 41697, upload-time = "2026-05-05T17:18:01.082Z" }
|
|
723
723
|
wheels = [
|
|
724
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
725
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
726
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
724
|
+
{ url = "https://files.pythonhosted.org/packages/cf/84/edc997f45f4fe1df1f4b2fe1463f9c1fad3188478ab9b724fb9ceb6187fe/object_storage_client-0.0.25-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f2acc15b7987f58df609f8bb60abd02753233b440914fb42fa4456cf07126ba1", size = 1945474, upload-time = "2026-05-05T17:18:05.736Z" },
|
|
725
|
+
{ url = "https://files.pythonhosted.org/packages/55/71/720452bb2ac7ac2943d112ffc23530eb088585a90cebec40b1f832ec4fab/object_storage_client-0.0.25-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6343bd4b63e8e7e2facf4bbd1f7227ad6b27e242be273dfbe7e60e89ae70dca0", size = 2133158, upload-time = "2026-05-05T17:17:58.554Z" },
|
|
726
|
+
{ url = "https://files.pythonhosted.org/packages/27/84/aab307d9bc79ac48ae32b9f6fc0d644a4e577281e0583a9ac3802106def3/object_storage_client-0.0.25-cp314-cp314-win_amd64.whl", hash = "sha256:d9564f446849aa5c8d4e11bfbe9050909a1b61a7932618f5865a7c1224cf3b4f", size = 2131352, upload-time = "2026-05-05T17:17:59.937Z" },
|
|
727
727
|
]
|
|
728
728
|
|
|
729
729
|
[[package]]
|
|
@@ -737,11 +737,11 @@ wheels = [
|
|
|
737
737
|
|
|
738
738
|
[[package]]
|
|
739
739
|
name = "pip"
|
|
740
|
-
version = "26.1"
|
|
740
|
+
version = "26.1.1"
|
|
741
741
|
source = { registry = "https://pypi.org/simple" }
|
|
742
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
742
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b6/48/cb9b7a682f6fe01a4221e1728941dd4ac3cd9090a17db3779d6ff490b602/pip-26.1.1.tar.gz", hash = "sha256:d36762751d156a4ee895de8af39aa0abeeeb577f93a2eca6ab62467bbf0f8a78", size = 1840400, upload-time = "2026-05-04T19:02:21.248Z" }
|
|
743
743
|
wheels = [
|
|
744
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
744
|
+
{ url = "https://files.pythonhosted.org/packages/3a/eb/fea4d1d51c49832120f7f285d07306db3960f423a2612c6057caf3e8196f/pip-26.1.1-py3-none-any.whl", hash = "sha256:99cb1c2899893b075ff56e4ed0af55669a955b49ad7fb8d8603ecdaf4ed653fb", size = 1812777, upload-time = "2026-05-04T19:02:18.9Z" },
|
|
745
745
|
]
|
|
746
746
|
|
|
747
747
|
[[package]]
|
|
@@ -1017,15 +1017,15 @@ wheels = [
|
|
|
1017
1017
|
|
|
1018
1018
|
[[package]]
|
|
1019
1019
|
name = "python-discovery"
|
|
1020
|
-
version = "1.
|
|
1020
|
+
version = "1.3.0"
|
|
1021
1021
|
source = { registry = "https://pypi.org/simple" }
|
|
1022
1022
|
dependencies = [
|
|
1023
1023
|
{ name = "filelock" },
|
|
1024
1024
|
{ name = "platformdirs" },
|
|
1025
1025
|
]
|
|
1026
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1026
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ae/e0/cc5a8653e9a24f6cf84768f05064aa8ed5a83dcefd5e2a043db14a1c5f44/python_discovery-1.3.0.tar.gz", hash = "sha256:d098f1e86be5d45fe4d14bf1029294aabbd332f4321179dec85e76cddce834b0", size = 63925, upload-time = "2026-05-05T14:38:39.769Z" }
|
|
1027
1027
|
wheels = [
|
|
1028
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1028
|
+
{ url = "https://files.pythonhosted.org/packages/30/d4/24d543ab8b8158b7f5a97113c831205f5c900c92c8762b1e7f44b7ea0405/python_discovery-1.3.0-py3-none-any.whl", hash = "sha256:441d9ced3dfce36e113beb35ca302c71c7ef06f3c0f9c227a0b9bb3bd49b9e9f", size = 33124, upload-time = "2026-05-05T14:38:38.539Z" },
|
|
1029
1029
|
]
|
|
1030
1030
|
|
|
1031
1031
|
[[package]]
|
|
@@ -1123,7 +1123,7 @@ testing = [
|
|
|
1123
1123
|
|
|
1124
1124
|
[package.metadata]
|
|
1125
1125
|
requires-dist = [
|
|
1126
|
-
{ name = "aiobotocore", marker = "extra == 'object-storage'", specifier = "~=3.
|
|
1126
|
+
{ name = "aiobotocore", marker = "extra == 'object-storage'", specifier = "~=3.6.0" },
|
|
1127
1127
|
{ name = "aiohttp", extras = ["speedups"], marker = "extra == 'api-client'", specifier = ">=3.13.5,<3.15.0" },
|
|
1128
1128
|
{ name = "aiohttp", extras = ["speedups"], marker = "extra == 'authn'", specifier = ">=3.13.5,<3.15.0" },
|
|
1129
1129
|
{ name = "aiohttp", extras = ["speedups"], marker = "extra == 'soap-client'", specifier = ">=3.13.5,<3.15.0" },
|
|
@@ -1135,7 +1135,7 @@ requires-dist = [
|
|
|
1135
1135
|
{ name = "lxml", marker = "extra == 'soap-client'", specifier = "~=6.1.0" },
|
|
1136
1136
|
{ name = "msgpack", specifier = "~=1.1.2" },
|
|
1137
1137
|
{ name = "msgspec", specifier = "==0.21.1" },
|
|
1138
|
-
{ name = "object-storage-client", marker = "extra == 'object-storage'", specifier = "==0.0.
|
|
1138
|
+
{ name = "object-storage-client", marker = "extra == 'object-storage'", specifier = "==0.0.25" },
|
|
1139
1139
|
{ name = "pydantic-settings", specifier = "~=2.14.0" },
|
|
1140
1140
|
{ name = "python3-commons", extras = ["api-client"], marker = "extra == 'authn'" },
|
|
1141
1141
|
{ name = "python3-commons", extras = ["api-client"], marker = "extra == 'authz'" },
|
|
@@ -1170,11 +1170,11 @@ testing = [
|
|
|
1170
1170
|
|
|
1171
1171
|
[[package]]
|
|
1172
1172
|
name = "pytz"
|
|
1173
|
-
version = "2026.
|
|
1173
|
+
version = "2026.2"
|
|
1174
1174
|
source = { registry = "https://pypi.org/simple" }
|
|
1175
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1175
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" }
|
|
1176
1176
|
wheels = [
|
|
1177
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1177
|
+
{ url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" },
|
|
1178
1178
|
]
|
|
1179
1179
|
|
|
1180
1180
|
[[package]]
|
|
@@ -1307,14 +1307,14 @@ asyncio = [
|
|
|
1307
1307
|
|
|
1308
1308
|
[[package]]
|
|
1309
1309
|
name = "types-aiobotocore"
|
|
1310
|
-
version = "3.
|
|
1310
|
+
version = "3.6.0"
|
|
1311
1311
|
source = { registry = "https://pypi.org/simple" }
|
|
1312
1312
|
dependencies = [
|
|
1313
1313
|
{ name = "botocore-stubs" },
|
|
1314
1314
|
]
|
|
1315
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1315
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b9/e4/5dd83c879eff726931ef222d3ae27f67999c3bc33dfae1ca8237ebccdf17/types_aiobotocore-3.6.0.tar.gz", hash = "sha256:e990056ce9d19094a9d9b36008ca0b2a4d69948ff58f50868dd159a81f6ad69c", size = 87978, upload-time = "2026-05-02T03:05:30.694Z" }
|
|
1316
1316
|
wheels = [
|
|
1317
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1317
|
+
{ url = "https://files.pythonhosted.org/packages/19/7c/cadd4b4d0bdd6f1cbc601177a115966dabd9afa022287f3f25423274ab97/types_aiobotocore-3.6.0-py3-none-any.whl", hash = "sha256:e38d5340bfb7ecc17a40acfd1043f4ed91af9f8189daa5e438bda2e7d276d406", size = 54805, upload-time = "2026-05-02T03:05:27.911Z" },
|
|
1318
1318
|
]
|
|
1319
1319
|
|
|
1320
1320
|
[package.optional-dependencies]
|
|
@@ -1324,11 +1324,11 @@ s3 = [
|
|
|
1324
1324
|
|
|
1325
1325
|
[[package]]
|
|
1326
1326
|
name = "types-aiobotocore-s3"
|
|
1327
|
-
version = "3.
|
|
1327
|
+
version = "3.6.0"
|
|
1328
1328
|
source = { registry = "https://pypi.org/simple" }
|
|
1329
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1329
|
+
sdist = { url = "https://files.pythonhosted.org/packages/66/90/eec276a418a417441a785dd394424fee87682cf34af29fe026f46883149e/types_aiobotocore_s3-3.6.0.tar.gz", hash = "sha256:5eb816af93791b7f42f58b2dd3b5ecfe24da9de414a7390c05c392cf1d9ef5b4", size = 77715, upload-time = "2026-05-02T03:03:31.274Z" }
|
|
1330
1330
|
wheels = [
|
|
1331
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1331
|
+
{ url = "https://files.pythonhosted.org/packages/e7/df/4f2dce96e6b71f3d8287351558824021a9857eb88506c6eb72c61b23bcb4/types_aiobotocore_s3-3.6.0-py3-none-any.whl", hash = "sha256:5af9f9710c9fe6ba9645852a0b13f6fca4eb44d87a35b0959063341a32f11b37", size = 85450, upload-time = "2026-05-02T03:03:29.054Z" },
|
|
1332
1332
|
]
|
|
1333
1333
|
|
|
1334
1334
|
[[package]]
|
|
@@ -1398,7 +1398,7 @@ wheels = [
|
|
|
1398
1398
|
|
|
1399
1399
|
[[package]]
|
|
1400
1400
|
name = "virtualenv"
|
|
1401
|
-
version = "21.3.
|
|
1401
|
+
version = "21.3.1"
|
|
1402
1402
|
source = { registry = "https://pypi.org/simple" }
|
|
1403
1403
|
dependencies = [
|
|
1404
1404
|
{ name = "distlib" },
|
|
@@ -1406,9 +1406,9 @@ dependencies = [
|
|
|
1406
1406
|
{ name = "platformdirs" },
|
|
1407
1407
|
{ name = "python-discovery" },
|
|
1408
1408
|
]
|
|
1409
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1409
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ec/0d/915c02c94d207b85580eb09bffab54438a709e7288524094fe781da526c2/virtualenv-21.3.1.tar.gz", hash = "sha256:c2305bc1fddeec40699b8370d13f8d431b0701f00ce895061ce493aeded4426b", size = 7613791, upload-time = "2026-05-05T01:34:31.402Z" }
|
|
1410
1410
|
wheels = [
|
|
1411
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1411
|
+
{ url = "https://files.pythonhosted.org/packages/b1/4f/f71e641e504111a5a74e3a20bc52d01bd86788b22699dd3fee1c63253cf6/virtualenv-21.3.1-py3-none-any.whl", hash = "sha256:d1a71cf58f2f9228fff23a1f6ec15d39785c6b32e03658d104974247145edd35", size = 7594539, upload-time = "2026-05-05T01:34:28.98Z" },
|
|
1412
1412
|
]
|
|
1413
1413
|
|
|
1414
1414
|
[[package]]
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/serializers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/serializers/msgpack.py
RENAMED
|
File without changes
|
{python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons/serializers/msgspec.py
RENAMED
|
File without changes
|
|
File without changes
|
{python3_commons-0.18.7 → python3_commons-0.18.9}/src/python3_commons.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{python3_commons-0.18.7 → python3_commons-0.18.9}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|