python3-commons 0.18.6__tar.gz → 0.18.7__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 (74) hide show
  1. {python3_commons-0.18.6/src/python3_commons.egg-info → python3_commons-0.18.7}/PKG-INFO +1 -1
  2. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/soap_client.py +69 -65
  3. {python3_commons-0.18.6 → python3_commons-0.18.7/src/python3_commons.egg-info}/PKG-INFO +1 -1
  4. {python3_commons-0.18.6 → python3_commons-0.18.7}/.coveragerc +0 -0
  5. {python3_commons-0.18.6 → python3_commons-0.18.7}/.devcontainer/Dockerfile +0 -0
  6. {python3_commons-0.18.6 → python3_commons-0.18.7}/.devcontainer/devcontainer.json +0 -0
  7. {python3_commons-0.18.6 → python3_commons-0.18.7}/.devcontainer/docker-compose.yml +0 -0
  8. {python3_commons-0.18.6 → python3_commons-0.18.7}/.env_template +0 -0
  9. {python3_commons-0.18.6 → python3_commons-0.18.7}/.github/workflows/checks.yml +0 -0
  10. {python3_commons-0.18.6 → python3_commons-0.18.7}/.github/workflows/python-publish.yaml +0 -0
  11. {python3_commons-0.18.6 → python3_commons-0.18.7}/.github/workflows/release-on-tag-push.yml +0 -0
  12. {python3_commons-0.18.6 → python3_commons-0.18.7}/.gitignore +0 -0
  13. {python3_commons-0.18.6 → python3_commons-0.18.7}/.pre-commit-config.yaml +0 -0
  14. {python3_commons-0.18.6 → python3_commons-0.18.7}/.python-version +0 -0
  15. {python3_commons-0.18.6 → python3_commons-0.18.7}/AUTHORS.rst +0 -0
  16. {python3_commons-0.18.6 → python3_commons-0.18.7}/CHANGELOG.rst +0 -0
  17. {python3_commons-0.18.6 → python3_commons-0.18.7}/LICENSE +0 -0
  18. {python3_commons-0.18.6 → python3_commons-0.18.7}/README.md +0 -0
  19. {python3_commons-0.18.6 → python3_commons-0.18.7}/README.rst +0 -0
  20. {python3_commons-0.18.6 → python3_commons-0.18.7}/docs/Makefile +0 -0
  21. {python3_commons-0.18.6 → python3_commons-0.18.7}/docs/_static/.gitignore +0 -0
  22. {python3_commons-0.18.6 → python3_commons-0.18.7}/docs/authors.rst +0 -0
  23. {python3_commons-0.18.6 → python3_commons-0.18.7}/docs/changelog.rst +0 -0
  24. {python3_commons-0.18.6 → python3_commons-0.18.7}/docs/conf.py +0 -0
  25. {python3_commons-0.18.6 → python3_commons-0.18.7}/docs/index.rst +0 -0
  26. {python3_commons-0.18.6 → python3_commons-0.18.7}/docs/license.rst +0 -0
  27. {python3_commons-0.18.6 → python3_commons-0.18.7}/pyproject.toml +0 -0
  28. {python3_commons-0.18.6 → python3_commons-0.18.7}/setup.cfg +0 -0
  29. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/__init__.py +0 -0
  30. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/api_client.py +0 -0
  31. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/async_functools.py +0 -0
  32. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/audit.py +0 -0
  33. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/auth.py +0 -0
  34. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/cache.py +0 -0
  35. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/conf.py +0 -0
  36. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/db/__init__.py +0 -0
  37. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/db/helpers.py +0 -0
  38. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/db/models/__init__.py +0 -0
  39. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/db/models/auth.py +0 -0
  40. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/db/models/common.py +0 -0
  41. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/db/models/rbac.py +0 -0
  42. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/db/models/users.py +0 -0
  43. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/exceptions.py +0 -0
  44. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/fs.py +0 -0
  45. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/generators.py +0 -0
  46. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/helpers.py +0 -0
  47. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/log/__init__.py +0 -0
  48. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/log/filters.py +0 -0
  49. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/log/formatters.py +0 -0
  50. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/object_storage.py +0 -0
  51. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/permissions.py +0 -0
  52. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/serializers/__init__.py +0 -0
  53. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/serializers/common.py +0 -0
  54. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/serializers/json.py +0 -0
  55. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/serializers/msgpack.py +0 -0
  56. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons/serializers/msgspec.py +0 -0
  57. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons.egg-info/SOURCES.txt +0 -0
  58. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons.egg-info/dependency_links.txt +0 -0
  59. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons.egg-info/requires.txt +0 -0
  60. {python3_commons-0.18.6 → python3_commons-0.18.7}/src/python3_commons.egg-info/top_level.txt +0 -0
  61. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/__init__.py +0 -0
  62. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/integration/__init__.py +0 -0
  63. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/integration/test_cache.py +0 -0
  64. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/integration/test_osc.py +0 -0
  65. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/unit/__init__.py +0 -0
  66. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/unit/conftest.py +0 -0
  67. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/unit/log/__init__.py +0 -0
  68. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/unit/log/test_formatters.py +0 -0
  69. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/unit/test_async_functools.py +0 -0
  70. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/unit/test_audit.py +0 -0
  71. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/unit/test_helpers.py +0 -0
  72. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/unit/test_msgpack.py +0 -0
  73. {python3_commons-0.18.6 → python3_commons-0.18.7}/tests/unit/test_msgspec.py +0 -0
  74. {python3_commons-0.18.6 → python3_commons-0.18.7}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python3-commons
3
- Version: 0.18.6
3
+ Version: 0.18.7
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
@@ -68,11 +68,11 @@ class AsyncTransport(Transport):
68
68
  """
69
69
 
70
70
  def __init__(
71
- self,
72
- *,
73
- session: ClientSession,
74
- config: TransportConfig,
75
- _owns_session: bool = False,
71
+ self,
72
+ *,
73
+ session: ClientSession,
74
+ config: TransportConfig,
75
+ _owns_session: bool = False,
76
76
  ) -> None:
77
77
  super().__init__()
78
78
  self._session = session
@@ -81,10 +81,10 @@ class AsyncTransport(Transport):
81
81
 
82
82
  @classmethod
83
83
  def from_config(
84
- cls,
85
- config: TransportConfig | None = None,
86
- *,
87
- session: ClientSession | None = None,
84
+ cls,
85
+ config: TransportConfig | None = None,
86
+ *,
87
+ session: ClientSession | None = None,
88
88
  ) -> Self:
89
89
  config = config or TransportConfig()
90
90
  owns_session = session is None
@@ -163,60 +163,64 @@ class AsyncTransport(Transport):
163
163
  with concurrent.futures.ThreadPoolExecutor(max_workers=1) as pool:
164
164
  return pool.submit(asyncio.run, _fetch()).result()
165
165
 
166
-
167
- async def post(
168
- self,
169
- address: str,
170
- message: bytes,
171
- headers: dict[str, str],
172
- *,
173
- timeout: int | None = None,
174
- ) -> Response:
175
- logger.debug('SOAP POST → %s\n%s', address, message)
176
-
177
- async with self._session.post(
178
- address,
179
- data=message,
180
- headers=headers,
181
- proxy=self._config.proxy,
182
- timeout=ClientTimeout(total=timeout) if timeout is not None else None,
183
- ) as resp:
184
- body = await resp.read()
185
- logger.debug('SOAP ← %s (HTTP %d)\n%s', address, resp.status, body)
186
-
187
- return self._build_response(resp, body)
188
-
189
-
190
- async def post_xml(
191
- self,
192
- address: str,
193
- envelope: Any,
194
- headers: dict[str, str],
195
- ) -> Response:
196
- return await self.post(address, etree_to_string(envelope), headers)
197
-
198
-
199
- async def get(
200
- self,
201
- address: str,
202
- params: dict[str, str],
203
- headers: dict[str, str],
204
- ) -> Response:
205
- async with self._session.get(
206
- address,
207
- params=params,
208
- headers=headers,
209
- proxy=self._config.proxy,
210
- ) as resp:
211
- body = await resp.read()
212
-
213
- return self._build_response(resp, body)
166
+ async def post(
167
+ self,
168
+ address: str,
169
+ message: bytes,
170
+ headers: dict[str, str],
171
+ *,
172
+ timeout: int | None = None,
173
+ ) -> Response:
174
+ logger.debug('SOAP POST → %s\n%s', address, message)
175
+
176
+ async with self._session.post(
177
+ address,
178
+ data=message,
179
+ headers=headers,
180
+ proxy=self._config.proxy,
181
+ timeout=ClientTimeout(total=timeout) if timeout is not None else None,
182
+ ) as resp:
183
+ body = await resp.read()
184
+ logger.debug('SOAP %s (HTTP %d)\n%s', address, resp.status, body)
185
+ return self._build_response(resp, body)
186
+
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
+ async def get(
205
+ self,
206
+ address: str,
207
+ params: dict[str, str],
208
+ headers: dict[str, str],
209
+ ) -> Response:
210
+ async with self._session.get(
211
+ address,
212
+ params=params,
213
+ headers=headers,
214
+ proxy=self._config.proxy,
215
+ ) as resp:
216
+ body = await resp.read()
217
+ return self._build_response(resp, body)
214
218
 
215
219
 
216
220
  def build_soap_client(
217
- wsdl_url: str,
218
- transport: AsyncTransport,
219
- plugins: Sequence[Plugin] | None = None,
221
+ wsdl_url: str,
222
+ transport: AsyncTransport,
223
+ plugins: Sequence[Plugin] | None = None,
220
224
  ) -> AsyncClient:
221
225
  if not wsdl_url:
222
226
  msg = 'wsdl_url must be a non-empty string.'
@@ -228,11 +232,11 @@ def build_soap_client(
228
232
 
229
233
  @asynccontextmanager
230
234
  async def soap_client(
231
- wsdl_url: str,
232
- *,
233
- config: TransportConfig | None = None,
234
- session: ClientSession | None = None,
235
- plugins: Sequence[Plugin] | None = None,
235
+ wsdl_url: str,
236
+ *,
237
+ config: TransportConfig | None = None,
238
+ session: ClientSession | None = None,
239
+ plugins: Sequence[Plugin] | None = None,
236
240
  ) -> AsyncIterator[AsyncClient]:
237
241
  """
238
242
  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.6
3
+ Version: 0.18.7
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