python3-commons 0.22.7__py3-none-any.whl → 0.22.9__py3-none-any.whl
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/auth.py +12 -12
- python3_commons/db/__init__.py +1 -1
- {python3_commons-0.22.7.dist-info → python3_commons-0.22.9.dist-info}/METADATA +2 -2
- {python3_commons-0.22.7.dist-info → python3_commons-0.22.9.dist-info}/RECORD +10 -10
- {python3_commons-0.22.7.dist-info → python3_commons-0.22.9.dist-info}/scm_file_list.json +45 -45
- python3_commons-0.22.9.dist-info/scm_version.json +8 -0
- python3_commons-0.22.7.dist-info/scm_version.json +0 -8
- {python3_commons-0.22.7.dist-info → python3_commons-0.22.9.dist-info}/WHEEL +0 -0
- {python3_commons-0.22.7.dist-info → python3_commons-0.22.9.dist-info}/licenses/AUTHORS.rst +0 -0
- {python3_commons-0.22.7.dist-info → python3_commons-0.22.9.dist-info}/licenses/LICENSE +0 -0
- {python3_commons-0.22.7.dist-info → python3_commons-0.22.9.dist-info}/top_level.txt +0 -0
python3_commons/auth.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import asyncio
|
|
1
2
|
import logging
|
|
2
|
-
import threading
|
|
3
3
|
from collections.abc import Sequence
|
|
4
4
|
from time import monotonic
|
|
5
5
|
from typing import Any, Self, TypeVar
|
|
@@ -98,20 +98,20 @@ class OIDCClient:
|
|
|
98
98
|
self._timeout = timeout
|
|
99
99
|
self._verify_cert = verify_cert
|
|
100
100
|
|
|
101
|
-
self._session_lock =
|
|
101
|
+
self._session_lock = asyncio.Lock()
|
|
102
102
|
self._config: dict[str, Any] | None = None
|
|
103
|
-
self._config_lock =
|
|
103
|
+
self._config_lock = asyncio.Lock()
|
|
104
104
|
self._jwks: dict[str, Any] | None = None
|
|
105
|
-
self._jwks_lock =
|
|
105
|
+
self._jwks_lock = asyncio.Lock()
|
|
106
106
|
self._jwks_cache_ttl = jwks_cache_ttl
|
|
107
107
|
self._jwks_fetched_at: float | None = None
|
|
108
108
|
self._audit_name: str | None = audit_name
|
|
109
109
|
|
|
110
|
-
def _get_session(self) -> aiohttp.ClientSession:
|
|
110
|
+
async def _get_session(self) -> aiohttp.ClientSession:
|
|
111
111
|
if (session := self._session) and not session.closed:
|
|
112
112
|
return session
|
|
113
113
|
|
|
114
|
-
with self._session_lock:
|
|
114
|
+
async with self._session_lock:
|
|
115
115
|
if (session := self._session) and not session.closed:
|
|
116
116
|
return session
|
|
117
117
|
|
|
@@ -123,7 +123,7 @@ class OIDCClient:
|
|
|
123
123
|
return session
|
|
124
124
|
|
|
125
125
|
async def __aenter__(self) -> Self:
|
|
126
|
-
self._get_session()
|
|
126
|
+
await self._get_session()
|
|
127
127
|
|
|
128
128
|
return self
|
|
129
129
|
|
|
@@ -136,7 +136,7 @@ class OIDCClient:
|
|
|
136
136
|
Fetch the OpenID configuration (including JWKS URI) from OIDC authority.
|
|
137
137
|
"""
|
|
138
138
|
async with api_client.request(
|
|
139
|
-
self._get_session(),
|
|
139
|
+
await self._get_session(),
|
|
140
140
|
str(self._authority_url),
|
|
141
141
|
'/.well-known/openid-configuration',
|
|
142
142
|
audit_name=self._audit_name,
|
|
@@ -147,7 +147,7 @@ class OIDCClient:
|
|
|
147
147
|
if config := self._config:
|
|
148
148
|
return config
|
|
149
149
|
|
|
150
|
-
with self._config_lock:
|
|
150
|
+
async with self._config_lock:
|
|
151
151
|
if config := self._config:
|
|
152
152
|
return config
|
|
153
153
|
|
|
@@ -166,7 +166,7 @@ class OIDCClient:
|
|
|
166
166
|
jwks_uri = str(replace_origin(HttpUrl(jwks_uri), authority_internal_host))
|
|
167
167
|
logger.debug('Modified jwks_uri: %s', jwks_uri)
|
|
168
168
|
|
|
169
|
-
async with api_client.request(self._get_session(), jwks_uri, '', audit_name=self._audit_name) as response:
|
|
169
|
+
async with api_client.request(await self._get_session(), jwks_uri, '', audit_name=self._audit_name) as response:
|
|
170
170
|
return await response.json()
|
|
171
171
|
|
|
172
172
|
def _is_fresh_jwks(self) -> bool:
|
|
@@ -183,7 +183,7 @@ class OIDCClient:
|
|
|
183
183
|
|
|
184
184
|
fetched_at = self._jwks_fetched_at
|
|
185
185
|
|
|
186
|
-
with self._jwks_lock:
|
|
186
|
+
async with self._jwks_lock:
|
|
187
187
|
if (jwks := self._jwks) and self._jwks_fetched_at != fetched_at:
|
|
188
188
|
return jwks
|
|
189
189
|
|
|
@@ -220,7 +220,7 @@ class OIDCClient:
|
|
|
220
220
|
|
|
221
221
|
try:
|
|
222
222
|
async with api_client.request(
|
|
223
|
-
self._get_session(),
|
|
223
|
+
await self._get_session(),
|
|
224
224
|
openid_config['token_endpoint'],
|
|
225
225
|
'',
|
|
226
226
|
method='post',
|
python3_commons/db/__init__.py
CHANGED
|
@@ -185,7 +185,7 @@ class AsyncSessionManager:
|
|
|
185
185
|
try:
|
|
186
186
|
yield session
|
|
187
187
|
except Exception:
|
|
188
|
-
logger.exception('Error
|
|
188
|
+
logger.exception('Error occurred while db session %r was open; rolling back', name)
|
|
189
189
|
await session.rollback()
|
|
190
190
|
|
|
191
191
|
raise
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python3-commons
|
|
3
|
-
Version: 0.22.
|
|
3
|
+
Version: 0.22.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
|
|
@@ -39,7 +39,7 @@ Requires-Dist: asyncpg~=0.31.0; extra == "database"
|
|
|
39
39
|
Requires-Dist: SQLAlchemy[asyncio]~=2.0.51; extra == "database"
|
|
40
40
|
Provides-Extra: object-storage
|
|
41
41
|
Requires-Dist: aiobotocore~=3.7.0; extra == "object-storage"
|
|
42
|
-
Requires-Dist: object-storage-client~=0.0.
|
|
42
|
+
Requires-Dist: object-storage-client~=0.0.40; extra == "object-storage"
|
|
43
43
|
Provides-Extra: soap-client
|
|
44
44
|
Requires-Dist: aiohttp[speedups]<3.15.0,>=3.14.1; extra == "soap-client"
|
|
45
45
|
Requires-Dist: certifi~=2026.6.17; extra == "soap-client"
|
|
@@ -2,7 +2,7 @@ python3_commons/__init__.py,sha256=0KgaYU46H_IMKn-BuasoRN3C4Hi45KlkHHoPbU9cwiA,1
|
|
|
2
2
|
python3_commons/api_client.py,sha256=SThSzLhZJxVsKP8n1xDMCczA7SBFbxGFgrhKy9k-9_g,5532
|
|
3
3
|
python3_commons/async_functools.py,sha256=A2HvwFzZHxOWTp4IQM5UiBY2yg1S_0U1CWra5BWK0gk,9101
|
|
4
4
|
python3_commons/audit.py,sha256=uGoCwenDJ0Gdwbr_VNOZm5scT8luxW1weprJbbMoHo0,2608
|
|
5
|
-
python3_commons/auth.py,sha256=
|
|
5
|
+
python3_commons/auth.py,sha256=s928lYwpyX03BDTo1R6LpOgHiUSrjVrd1OVgTjvIiQU,8279
|
|
6
6
|
python3_commons/cache.py,sha256=lowiXJqFgFy1Yg86wi9IhuoNqIUGP6nc5eNibmf0dfY,8018
|
|
7
7
|
python3_commons/conf.py,sha256=1HYtNkNBQc5IIABzhH3kz7GnLeF7rj5aNcOoW8xbEa4,3101
|
|
8
8
|
python3_commons/exceptions.py,sha256=EGjHZVBnsM6CeBfPMqhL0IPMKjDJ_2-Z-aSPXwq91LE,36
|
|
@@ -12,7 +12,7 @@ python3_commons/helpers.py,sha256=WTPu_jIOGYtxt1GYnH6sBMNDHry99AKv6ZaggGW2l1A,49
|
|
|
12
12
|
python3_commons/object_storage.py,sha256=2l8v1mDB5WWN6jhxH2t5xmHBXaVPRJl0z44wExmlO80,7175
|
|
13
13
|
python3_commons/permissions.py,sha256=gaMKSWg0MgPQTdP1voll4ItXcblXku9BlD0Lq3Xv64U,1724
|
|
14
14
|
python3_commons/soap_client.py,sha256=w2lOyhhtkhwiNnHjvir8DfjGBO51XVg5rlDHyuudU2A,7169
|
|
15
|
-
python3_commons/db/__init__.py,sha256=
|
|
15
|
+
python3_commons/db/__init__.py,sha256=GP_9GXZUUgNvehFUCsXTIWThIMFW60Hwve7sve2oPgM,10188
|
|
16
16
|
python3_commons/db/helpers.py,sha256=xRpWs4aVkBge6HCLjb6OLSnWc1nlV6rKGyaVhZ_x12w,2001
|
|
17
17
|
python3_commons/db/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
18
|
python3_commons/db/models/auth.py,sha256=t6z_0c7l_1eB-CCdnPSV9OzJ_ymgkwD1cLpecNhQgoA,773
|
|
@@ -27,11 +27,11 @@ python3_commons/serializers/common.py,sha256=VkA7C6wODvHk0QBXVX_x2JieDstihx3U__U
|
|
|
27
27
|
python3_commons/serializers/json.py,sha256=UPkC3ps13x2C_NxwVV-K7Ewp4VjkVHSSUkJVw5k7Wiw,712
|
|
28
28
|
python3_commons/serializers/msgpack.py,sha256=zESFBX34GsZ8rDu6Zk5V6CLT6P0mPilU0r04Ka6TblI,1474
|
|
29
29
|
python3_commons/serializers/msgspec.py,sha256=upy5CBmK66-8hYnK5bAM_sZvZY5CAqZmzCw9GIF346I,2988
|
|
30
|
-
python3_commons-0.22.
|
|
31
|
-
python3_commons-0.22.
|
|
32
|
-
python3_commons-0.22.
|
|
33
|
-
python3_commons-0.22.
|
|
34
|
-
python3_commons-0.22.
|
|
35
|
-
python3_commons-0.22.
|
|
36
|
-
python3_commons-0.22.
|
|
37
|
-
python3_commons-0.22.
|
|
30
|
+
python3_commons-0.22.9.dist-info/licenses/AUTHORS.rst,sha256=3R9JnfjfjH5RoPWOeqKFJgxVShSSfzQPIrEr1nxIo9Q,90
|
|
31
|
+
python3_commons-0.22.9.dist-info/licenses/LICENSE,sha256=xxILuojHm4fKQOrMHPSslbyy6WuKAN2RiG74HbrYfzM,34575
|
|
32
|
+
python3_commons-0.22.9.dist-info/METADATA,sha256=g7xWlSXgmSs5IhxMXBgrOf6p8BpJkCdOU-HFBLnabZM,9472
|
|
33
|
+
python3_commons-0.22.9.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
34
|
+
python3_commons-0.22.9.dist-info/scm_file_list.json,sha256=Uq3-KbeUsbtl48_mLNoVDW6V60qhAK9CckqYR0dkXW8,2549
|
|
35
|
+
python3_commons-0.22.9.dist-info/scm_version.json,sha256=cKWwn9r-WYnEN18qN6tJODDvAbWdT2GmfWaQvNV6ZAk,161
|
|
36
|
+
python3_commons-0.22.9.dist-info/top_level.txt,sha256=lJI6sCBf68eUHzupCnn2dzG10lH3jJKTWM_hrN1cQ7M,16
|
|
37
|
+
python3_commons-0.22.9.dist-info/RECORD,,
|
|
@@ -1,76 +1,76 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": [
|
|
3
|
-
".gitignore",
|
|
4
|
-
".python-version",
|
|
5
|
-
"README.md",
|
|
6
|
-
"AUTHORS.rst",
|
|
7
|
-
"CHANGELOG.rst",
|
|
8
|
-
"pyproject.toml",
|
|
9
|
-
".env_template",
|
|
10
3
|
".coveragerc",
|
|
11
4
|
".pre-commit-config.yaml",
|
|
5
|
+
"README.md",
|
|
12
6
|
"uv.lock",
|
|
7
|
+
".python-version",
|
|
13
8
|
"LICENSE",
|
|
9
|
+
"pyproject.toml",
|
|
10
|
+
"CHANGELOG.rst",
|
|
11
|
+
".env_template",
|
|
14
12
|
"README.rst",
|
|
15
|
-
"
|
|
13
|
+
".gitignore",
|
|
14
|
+
"AUTHORS.rst",
|
|
15
|
+
".devcontainer/Dockerfile",
|
|
16
|
+
".devcontainer/docker-compose.yml",
|
|
17
|
+
".devcontainer/devcontainer.json",
|
|
18
|
+
"docs/Makefile",
|
|
19
|
+
"docs/license.rst",
|
|
20
|
+
"docs/authors.rst",
|
|
21
|
+
"docs/index.rst",
|
|
22
|
+
"docs/changelog.rst",
|
|
23
|
+
"docs/conf.py",
|
|
24
|
+
"docs/_static/.gitignore",
|
|
25
|
+
"src/python3_commons/helpers.py",
|
|
16
26
|
"src/python3_commons/soap_client.py",
|
|
17
|
-
"src/python3_commons/async_functools.py",
|
|
18
|
-
"src/python3_commons/permissions.py",
|
|
19
|
-
"src/python3_commons/fs.py",
|
|
20
27
|
"src/python3_commons/api_client.py",
|
|
21
|
-
"src/python3_commons/
|
|
22
|
-
"src/python3_commons/object_storage.py",
|
|
28
|
+
"src/python3_commons/__init__.py",
|
|
23
29
|
"src/python3_commons/exceptions.py",
|
|
24
|
-
"src/python3_commons/
|
|
25
|
-
"src/python3_commons/
|
|
26
|
-
"src/python3_commons/cache.py",
|
|
30
|
+
"src/python3_commons/object_storage.py",
|
|
31
|
+
"src/python3_commons/permissions.py",
|
|
27
32
|
"src/python3_commons/auth.py",
|
|
28
|
-
"src/python3_commons/
|
|
33
|
+
"src/python3_commons/audit.py",
|
|
34
|
+
"src/python3_commons/cache.py",
|
|
35
|
+
"src/python3_commons/fs.py",
|
|
36
|
+
"src/python3_commons/conf.py",
|
|
37
|
+
"src/python3_commons/async_functools.py",
|
|
38
|
+
"src/python3_commons/generators.py",
|
|
29
39
|
"src/python3_commons/db/helpers.py",
|
|
30
40
|
"src/python3_commons/db/__init__.py",
|
|
31
|
-
"src/python3_commons/db/models/common.py",
|
|
32
41
|
"src/python3_commons/db/models/rbac.py",
|
|
33
|
-
"src/python3_commons/db/models/auth.py",
|
|
34
|
-
"src/python3_commons/db/models/users.py",
|
|
35
42
|
"src/python3_commons/db/models/__init__.py",
|
|
43
|
+
"src/python3_commons/db/models/users.py",
|
|
44
|
+
"src/python3_commons/db/models/auth.py",
|
|
45
|
+
"src/python3_commons/db/models/common.py",
|
|
46
|
+
"src/python3_commons/log/__init__.py",
|
|
36
47
|
"src/python3_commons/log/filters.py",
|
|
37
48
|
"src/python3_commons/log/formatters.py",
|
|
38
|
-
"src/python3_commons/
|
|
39
|
-
"src/python3_commons/serializers/
|
|
49
|
+
"src/python3_commons/serializers/__init__.py",
|
|
50
|
+
"src/python3_commons/serializers/msgpack.py",
|
|
40
51
|
"src/python3_commons/serializers/json.py",
|
|
52
|
+
"src/python3_commons/serializers/msgspec.py",
|
|
41
53
|
"src/python3_commons/serializers/common.py",
|
|
42
|
-
"src/python3_commons/serializers/msgpack.py",
|
|
43
|
-
"src/python3_commons/serializers/__init__.py",
|
|
44
|
-
".devcontainer/docker-compose.yml",
|
|
45
|
-
".devcontainer/Dockerfile",
|
|
46
|
-
".devcontainer/devcontainer.json",
|
|
47
|
-
".github/workflows/checks.yml",
|
|
48
|
-
".github/workflows/release-on-tag-push.yml",
|
|
49
|
-
".github/workflows/python-publish.yaml",
|
|
50
54
|
"tests/__init__.py",
|
|
55
|
+
"tests/integration/__init__.py",
|
|
56
|
+
"tests/integration/test_auth.py",
|
|
51
57
|
"tests/integration/conftest.py",
|
|
52
58
|
"tests/integration/test_osc.py",
|
|
53
59
|
"tests/integration/test_cache.py",
|
|
54
|
-
"tests/
|
|
55
|
-
"tests/
|
|
60
|
+
"tests/unit/__init__.py",
|
|
61
|
+
"tests/unit/test_helpers.py",
|
|
62
|
+
"tests/unit/test_auth.py",
|
|
56
63
|
"tests/unit/test_async_functools.py",
|
|
57
|
-
"tests/unit/conftest.py",
|
|
58
64
|
"tests/unit/test_msgspec.py",
|
|
65
|
+
"tests/unit/conftest.py",
|
|
59
66
|
"tests/unit/test_audit.py",
|
|
60
|
-
"tests/unit/test_auth.py",
|
|
61
67
|
"tests/unit/test_msgpack.py",
|
|
62
|
-
"tests/unit/test_helpers.py",
|
|
63
|
-
"tests/unit/__init__.py",
|
|
64
|
-
"tests/unit/db/test_async_session_manager.py",
|
|
65
68
|
"tests/unit/db/__init__.py",
|
|
66
|
-
"tests/unit/
|
|
69
|
+
"tests/unit/db/test_async_session_manager.py",
|
|
67
70
|
"tests/unit/log/__init__.py",
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"docs/changelog.rst",
|
|
73
|
-
"docs/license.rst",
|
|
74
|
-
"docs/_static/.gitignore"
|
|
71
|
+
"tests/unit/log/test_formatters.py",
|
|
72
|
+
".github/workflows/release-on-tag-push.yml",
|
|
73
|
+
".github/workflows/python-publish.yaml",
|
|
74
|
+
".github/workflows/checks.yml"
|
|
75
75
|
]
|
|
76
76
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|