python3-commons 0.20.6__tar.gz → 0.20.8__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.20.6/src/python3_commons.egg-info → python3_commons-0.20.8}/PKG-INFO +1 -1
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/auth.py +6 -4
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/db/__init__.py +15 -18
- {python3_commons-0.20.6 → python3_commons-0.20.8/src/python3_commons.egg-info}/PKG-INFO +1 -1
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.coveragerc +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.devcontainer/Dockerfile +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.devcontainer/devcontainer.json +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.devcontainer/docker-compose.yml +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.env_template +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.github/workflows/checks.yml +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.github/workflows/python-publish.yaml +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.github/workflows/release-on-tag-push.yml +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.gitignore +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.pre-commit-config.yaml +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/.python-version +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/AUTHORS.rst +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/CHANGELOG.rst +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/LICENSE +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/README.md +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/README.rst +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/docs/Makefile +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/docs/_static/.gitignore +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/docs/authors.rst +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/docs/changelog.rst +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/docs/conf.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/docs/index.rst +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/docs/license.rst +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/pyproject.toml +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/setup.cfg +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/__init__.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/api_client.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/async_functools.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/audit.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/cache.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/conf.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/db/helpers.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/db/models/__init__.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/db/models/auth.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/db/models/common.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/db/models/rbac.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/db/models/users.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/exceptions.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/fs.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/generators.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/helpers.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/log/__init__.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/log/filters.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/log/formatters.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/object_storage.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/permissions.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/serializers/__init__.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/serializers/common.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/serializers/json.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/serializers/msgpack.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/serializers/msgspec.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/soap_client.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons.egg-info/SOURCES.txt +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons.egg-info/dependency_links.txt +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons.egg-info/requires.txt +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons.egg-info/top_level.txt +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/__init__.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/integration/__init__.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/integration/conftest.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/integration/test_auth.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/integration/test_cache.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/integration/test_osc.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/__init__.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/conftest.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/db/__init__.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/db/test_async_session_manager.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/log/__init__.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/log/test_formatters.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/test_async_functools.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/test_audit.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/test_helpers.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/test_msgpack.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/test_msgspec.py +0 -0
- {python3_commons-0.20.6 → python3_commons-0.20.8}/uv.lock +0 -0
|
@@ -17,7 +17,9 @@ except ImportError as e:
|
|
|
17
17
|
import msgspec
|
|
18
18
|
|
|
19
19
|
logger = logging.getLogger(__name__)
|
|
20
|
-
|
|
20
|
+
_OIDC_CONFIG_LOCK = threading.Lock()
|
|
21
|
+
_OIDC_JWKS_LOCK = threading.Lock()
|
|
22
|
+
_OIDC_SESSION_LOCK = threading.Lock()
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
class TokenData(msgspec.Struct):
|
|
@@ -101,7 +103,7 @@ class OIDCClient:
|
|
|
101
103
|
if self._session:
|
|
102
104
|
return self._session
|
|
103
105
|
|
|
104
|
-
with
|
|
106
|
+
with _OIDC_SESSION_LOCK:
|
|
105
107
|
if self._session:
|
|
106
108
|
return self._session
|
|
107
109
|
|
|
@@ -145,7 +147,7 @@ class OIDCClient:
|
|
|
145
147
|
if self._config:
|
|
146
148
|
return self._config
|
|
147
149
|
|
|
148
|
-
with
|
|
150
|
+
with _OIDC_CONFIG_LOCK:
|
|
149
151
|
if self._config:
|
|
150
152
|
return self._config
|
|
151
153
|
|
|
@@ -180,7 +182,7 @@ class OIDCClient:
|
|
|
180
182
|
if self._jwks:
|
|
181
183
|
return self._jwks
|
|
182
184
|
|
|
183
|
-
with
|
|
185
|
+
with _OIDC_JWKS_LOCK:
|
|
184
186
|
if self._jwks:
|
|
185
187
|
return self._jwks
|
|
186
188
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import asyncio
|
|
2
1
|
import contextlib
|
|
3
2
|
import logging
|
|
4
3
|
import time
|
|
@@ -159,19 +158,18 @@ class AsyncSessionManager:
|
|
|
159
158
|
logger.debug('Acquiring session for %r', name)
|
|
160
159
|
|
|
161
160
|
try:
|
|
162
|
-
async with
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
raise
|
|
161
|
+
async with session_maker() as session:
|
|
162
|
+
session_acquired = True
|
|
163
|
+
elapsed = time.monotonic() - t0
|
|
164
|
+
logger.debug('Session acquired for %r in %.3fs', name, elapsed)
|
|
165
|
+
|
|
166
|
+
try:
|
|
167
|
+
yield session
|
|
168
|
+
except Exception:
|
|
169
|
+
logger.exception('Database communication error for %r; rolling back', name)
|
|
170
|
+
await session.rollback()
|
|
171
|
+
|
|
172
|
+
raise
|
|
175
173
|
except TimeoutError as e:
|
|
176
174
|
if session_acquired:
|
|
177
175
|
raise
|
|
@@ -230,10 +228,9 @@ async def is_healthy(
|
|
|
230
228
|
t0 = time.monotonic()
|
|
231
229
|
|
|
232
230
|
try:
|
|
233
|
-
async with
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
healthy = result.scalar() == 1
|
|
231
|
+
async with engine.begin() as conn:
|
|
232
|
+
result = await conn.execute(text('SELECT 1'))
|
|
233
|
+
healthy = result.scalar() == 1
|
|
237
234
|
|
|
238
235
|
elapsed = time.monotonic() - t0
|
|
239
236
|
|
|
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.20.6 → python3_commons-0.20.8}/src/python3_commons/serializers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/serializers/msgpack.py
RENAMED
|
File without changes
|
{python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons/serializers/msgspec.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python3_commons-0.20.6 → python3_commons-0.20.8}/src/python3_commons.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
{python3_commons-0.20.6 → python3_commons-0.20.8}/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
|
{python3_commons-0.20.6 → python3_commons-0.20.8}/tests/unit/db/test_async_session_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|