diracx-client 0.0.1a18__py3-none-any.whl → 0.0.1a19__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. diracx/client/__init__.py +4 -18
  2. diracx/client/aio.py +1 -0
  3. diracx/client/extensions.py +90 -0
  4. diracx/client/{aio → generated}/__init__.py +2 -2
  5. diracx/client/{_client.py → generated/_client.py} +7 -6
  6. diracx/client/{_configuration.py → generated/_configuration.py} +1 -1
  7. diracx/client/generated/_patch.py +47 -0
  8. diracx/client/{_serialization.py → generated/_serialization.py} +301 -151
  9. diracx/client/{_vendor.py → generated/_vendor.py} +1 -1
  10. diracx/client/generated/aio/__init__.py +21 -0
  11. diracx/client/{aio → generated/aio}/_client.py +7 -6
  12. diracx/client/{aio → generated/aio}/_configuration.py +1 -1
  13. diracx/client/generated/aio/_patch.py +23 -0
  14. diracx/client/{aio → generated/aio}/_vendor.py +1 -1
  15. diracx/client/{aio → generated/aio}/operations/__init__.py +1 -1
  16. diracx/client/{aio → generated/aio}/operations/_operations.py +402 -385
  17. diracx/client/{models → generated/models}/__init__.py +3 -1
  18. diracx/client/{models → generated/models}/_enums.py +2 -2
  19. diracx/client/{models → generated/models}/_models.py +84 -43
  20. diracx/client/{operations → generated/operations}/__init__.py +1 -1
  21. diracx/client/{operations → generated/operations}/_operations.py +402 -385
  22. diracx/client/generated/py.typed +1 -0
  23. diracx/client/models.py +5 -0
  24. diracx/client/patches/__init__.py +19 -0
  25. diracx/client/patches/aio/__init__.py +18 -0
  26. diracx/client/{aio/_patch.py → patches/aio/utils.py} +10 -19
  27. diracx/client/{_patch.py → patches/utils.py} +98 -121
  28. {diracx_client-0.0.1a18.dist-info → diracx_client-0.0.1a19.dist-info}/METADATA +1 -1
  29. diracx_client-0.0.1a19.dist-info/RECORD +36 -0
  30. diracx_client-0.0.1a19.dist-info/entry_points.txt +3 -0
  31. diracx_client-0.0.1a18.dist-info/RECORD +0 -26
  32. /diracx/client/{aio → generated/aio}/operations/_patch.py +0 -0
  33. /diracx/client/{models → generated/models}/_patch.py +0 -0
  34. /diracx/client/{operations → generated/operations}/_patch.py +0 -0
  35. {diracx_client-0.0.1a18.dist-info → diracx_client-0.0.1a19.dist-info}/WHEEL +0 -0
  36. {diracx_client-0.0.1a18.dist-info → diracx_client-0.0.1a19.dist-info}/top_level.txt +0 -0
@@ -0,0 +1 @@
1
+ # Marker file for PEP 561.
@@ -0,0 +1,5 @@
1
+ from .generated.models import * # pylint: disable=unused-wildcard-import
2
+
3
+
4
+ # TODO: replace with postprocess
5
+ from .generated.models import DeviceFlowErrorResponse
@@ -0,0 +1,19 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import List
4
+
5
+ from .utils import DiracClientMixin
6
+
7
+
8
+ from diracx.core.extensions import select_from_extension
9
+
10
+ real_client = select_from_extension(group="diracx", name="client_class")[0].load()
11
+ DiracGenerated = real_client
12
+
13
+
14
+ __all__: List[str] = [
15
+ "DiracClient",
16
+ ] # Add all objects you want publicly available to users at this package level
17
+
18
+
19
+ class DiracClient(DiracClientMixin, DiracGenerated): ... # type: ignore
@@ -0,0 +1,18 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import List
4
+
5
+ from .utils import DiracClientMixin
6
+
7
+
8
+ from diracx.core.extensions import select_from_extension
9
+
10
+ real_client = select_from_extension(group="diracx", name="aio_client_class")[0].load()
11
+ DiracGenerated = real_client
12
+
13
+ __all__: List[str] = [
14
+ "DiracClient",
15
+ ] # Add all objects you want publicly available to users at this package level
16
+
17
+
18
+ class DiracClient(DiracClientMixin, DiracGenerated): ... # type: ignore
@@ -6,10 +6,13 @@
6
6
 
7
7
  Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
8
8
  """
9
+ from __future__ import annotations
10
+
11
+ import abc
9
12
  import json
10
13
  from types import TracebackType
11
14
  from pathlib import Path
12
- from typing import Any, List, Optional
15
+ from typing import Any, List, Optional, Self
13
16
  from azure.core.credentials import AccessToken
14
17
  from azure.core.credentials_async import AsyncTokenCredential
15
18
  from azure.core.pipeline import PipelineRequest
@@ -17,8 +20,7 @@ from azure.core.pipeline.policies import AsyncBearerTokenCredentialPolicy
17
20
 
18
21
  from diracx.core.preferences import get_diracx_preferences, DiracxPreferences
19
22
 
20
- from ._client import Dirac as DiracGenerated
21
- from .._patch import (
23
+ from ..utils import (
22
24
  get_openid_configuration,
23
25
  get_token,
24
26
  refresh_token,
@@ -30,15 +32,6 @@ __all__: List[str] = [
30
32
  ] # Add all objects you want publicly available to users at this package level
31
33
 
32
34
 
33
- def patch_sdk():
34
- """Do not remove from this file.
35
-
36
- `patch_sdk` is a last resort escape hatch that allows you to do customizations
37
- you can't accomplish using the techniques described in
38
- https://aka.ms/azsdk/python/dpcodegen/python/customize
39
- """
40
-
41
-
42
35
  class DiracTokenCredential(AsyncTokenCredential):
43
36
  """Tailor get_token() for our context"""
44
37
 
@@ -140,7 +133,7 @@ class DiracBearerTokenCredentialPolicy(AsyncBearerTokenCredentialPolicy):
140
133
  request.http_request.headers["Authorization"] = f"Bearer {self._token.token}"
141
134
 
142
135
 
143
- class DiracClient(DiracGenerated):
136
+ class DiracClientMixin(metaclass=abc.ABCMeta):
144
137
  """This class inherits from the generated Dirac client and adds support for tokens,
145
138
  so that the caller does not need to configure it by itself.
146
139
  """
@@ -164,7 +157,10 @@ class DiracClient(DiracGenerated):
164
157
  openid_configuration = get_openid_configuration(self._endpoint, verify=verify)
165
158
 
166
159
  # Initialize Dirac with a Dirac-specific token credential policy
167
- super().__init__(
160
+ # We need to ignore types here because mypy complains that we give
161
+ # too many arguments to "object" constructor as this is a mixin
162
+
163
+ super().__init__( # type: ignore
168
164
  endpoint=self._endpoint,
169
165
  authentication_policy=DiracBearerTokenCredentialPolicy(
170
166
  DiracTokenCredential(
@@ -180,8 +176,3 @@ class DiracClient(DiracGenerated):
180
176
  @property
181
177
  def client_id(self):
182
178
  return self._client_id
183
-
184
- async def __aenter__(self) -> "DiracClient":
185
- """Redefined to provide the patched Dirac client in the managed context"""
186
- await self._client.__aenter__()
187
- return self
@@ -1,11 +1,3 @@
1
- # ------------------------------------
2
- # Copyright (c) Microsoft Corporation.
3
- # Licensed under the MIT License.
4
- # ------------------------------------
5
- """Customize generated code here.
6
-
7
- Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
8
- """
9
1
  from __future__ import annotations
10
2
 
11
3
  from datetime import datetime, timezone
@@ -13,33 +5,114 @@ import json
13
5
  import jwt
14
6
  import requests
15
7
 
8
+
16
9
  from pathlib import Path
17
- from typing import Any, Dict, List, Optional, cast
10
+ from typing import Any, Dict, List, Optional, cast, Self
18
11
  from urllib import parse
19
12
  from azure.core.credentials import AccessToken
20
13
  from azure.core.credentials import TokenCredential
21
14
  from azure.core.pipeline import PipelineRequest
22
15
  from azure.core.pipeline.policies import BearerTokenCredentialPolicy
23
16
 
24
- from diracx.client.models import TokenResponse
17
+ from ..generated.models import TokenResponse
25
18
  from diracx.core.models import TokenResponse as CoreTokenResponse
26
19
  from diracx.core.preferences import DiracxPreferences, get_diracx_preferences
27
20
 
28
- from ._client import Dirac as DiracGenerated
21
+ import sys
29
22
 
30
23
 
31
- __all__: List[str] = [
32
- "DiracClient",
33
- ] # Add all objects you want publicly available to users at this package level
24
+ def refresh_token(
25
+ location: Path,
26
+ token_endpoint: str,
27
+ client_id: str,
28
+ refresh_token: str,
29
+ *,
30
+ verify: bool | str = True,
31
+ ) -> AccessToken:
32
+ """Refresh the access token using the refresh_token flow."""
33
+ from diracx.core.utils import write_credentials
34
34
 
35
+ response = requests.post(
36
+ url=token_endpoint,
37
+ data={
38
+ "client_id": client_id,
39
+ "grant_type": "refresh_token",
40
+ "refresh_token": refresh_token,
41
+ },
42
+ verify=verify,
43
+ )
35
44
 
36
- def patch_sdk():
37
- """Do not remove from this file.
45
+ if response.status_code != 200:
46
+ raise RuntimeError(
47
+ f"An issue occured while refreshing your access token: {response.json()['detail']}"
48
+ )
38
49
 
39
- `patch_sdk` is a last resort escape hatch that allows you to do customizations
40
- you can't accomplish using the techniques described in
41
- https://aka.ms/azsdk/python/dpcodegen/python/customize
42
- """
50
+ res = response.json()
51
+ token_response = TokenResponse(
52
+ access_token=res["access_token"],
53
+ expires_in=res["expires_in"],
54
+ token_type=res.get("token_type"),
55
+ refresh_token=res.get("refresh_token"),
56
+ )
57
+
58
+ write_credentials(cast(CoreTokenResponse, token_response), location=location)
59
+ credentials = json.loads(location.read_text())
60
+ return AccessToken(credentials.get("access_token"), credentials.get("expires_on"))
61
+
62
+
63
+ def get_openid_configuration(
64
+ endpoint: str, *, verify: bool | str = True
65
+ ) -> Dict[str, str]:
66
+ """Get the openid configuration from the .well-known endpoint"""
67
+ response = requests.get(
68
+ url=parse.urljoin(endpoint, ".well-known/openid-configuration"),
69
+ verify=verify,
70
+ )
71
+ if not response.ok:
72
+ raise RuntimeError("Cannot fetch any information from the .well-known endpoint")
73
+ return response.json()
74
+
75
+
76
+ def get_token(location: Path, token: AccessToken | None) -> AccessToken | None:
77
+ """Get token if available and still valid."""
78
+ # If the credentials path does not exist, raise an error
79
+ if not location.exists():
80
+ raise RuntimeError("credentials are not set")
81
+
82
+ # Load the existing credentials
83
+ if not token:
84
+ credentials = json.loads(location.read_text())
85
+ token = AccessToken(
86
+ cast(str, credentials.get("access_token")),
87
+ cast(int, credentials.get("expires_on")),
88
+ )
89
+
90
+ # We check the validity of the token
91
+ # If not valid, then return None to inform the caller that a new token
92
+ # is needed
93
+ if not is_token_valid(token):
94
+ return None
95
+
96
+ return token
97
+
98
+
99
+ def is_refresh_token_valid(refresh_token: str) -> bool:
100
+ """Check if the refresh token is still valid."""
101
+ # Decode the refresh token
102
+ refresh_payload = jwt.decode(refresh_token, options={"verify_signature": False})
103
+ if not refresh_payload or "exp" not in refresh_payload:
104
+ return False
105
+
106
+ # Check the expiration time
107
+ return refresh_payload["exp"] > datetime.now(tz=timezone.utc).timestamp()
108
+
109
+
110
+ def is_token_valid(token: AccessToken) -> bool:
111
+ """Condition to get a new token"""
112
+ return (
113
+ datetime.fromtimestamp(token.expires_on, tz=timezone.utc)
114
+ - datetime.now(tz=timezone.utc)
115
+ ).total_seconds() > 300
43
116
 
44
117
 
45
118
  class DiracTokenCredential(TokenCredential):
@@ -125,7 +198,7 @@ class DiracBearerTokenCredentialPolicy(BearerTokenCredentialPolicy):
125
198
  request.http_request.headers["Authorization"] = f"Bearer {self._token.token}"
126
199
 
127
200
 
128
- class DiracClient(DiracGenerated):
201
+ class DiracClientMixin:
129
202
  """This class inherits from the generated Dirac client and adds support for tokens,
130
203
  so that the caller does not need to configure it by itself.
131
204
  """
@@ -149,7 +222,10 @@ class DiracClient(DiracGenerated):
149
222
  openid_configuration = get_openid_configuration(self._endpoint, verify=verify)
150
223
 
151
224
  # Initialize Dirac with a Dirac-specific token credential policy
152
- super().__init__(
225
+ # We need to ignore types here because mypy complains that we give
226
+ # too many arguments to "object" constructor as this is a mixin
227
+
228
+ super().__init__( # type: ignore
153
229
  endpoint=self._endpoint,
154
230
  authentication_policy=DiracBearerTokenCredentialPolicy(
155
231
  DiracTokenCredential(
@@ -165,102 +241,3 @@ class DiracClient(DiracGenerated):
165
241
  @property
166
242
  def client_id(self):
167
243
  return self._client_id
168
-
169
- def __aenter__(self) -> "DiracClient":
170
- """Redefined to provide the patched Dirac client in the managed context"""
171
- self._client.__enter__()
172
- return self
173
-
174
-
175
- def refresh_token(
176
- location: Path,
177
- token_endpoint: str,
178
- client_id: str,
179
- refresh_token: str,
180
- *,
181
- verify: bool | str = True,
182
- ) -> AccessToken:
183
- """Refresh the access token using the refresh_token flow."""
184
- from diracx.core.utils import write_credentials
185
-
186
- response = requests.post(
187
- url=token_endpoint,
188
- data={
189
- "client_id": client_id,
190
- "grant_type": "refresh_token",
191
- "refresh_token": refresh_token,
192
- },
193
- verify=verify,
194
- )
195
-
196
- if response.status_code != 200:
197
- raise RuntimeError(
198
- f"An issue occured while refreshing your access token: {response.json()['detail']}"
199
- )
200
-
201
- res = response.json()
202
- token_response = TokenResponse(
203
- access_token=res["access_token"],
204
- expires_in=res["expires_in"],
205
- token_type=res.get("token_type"),
206
- refresh_token=res.get("refresh_token"),
207
- )
208
-
209
- write_credentials(cast(CoreTokenResponse, token_response), location=location)
210
- credentials = json.loads(location.read_text())
211
- return AccessToken(credentials.get("access_token"), credentials.get("expires_on"))
212
-
213
-
214
- def get_openid_configuration(
215
- endpoint: str, *, verify: bool | str = True
216
- ) -> Dict[str, str]:
217
- """Get the openid configuration from the .well-known endpoint"""
218
- response = requests.get(
219
- url=parse.urljoin(endpoint, ".well-known/openid-configuration"),
220
- verify=verify,
221
- )
222
- if not response.ok:
223
- raise RuntimeError("Cannot fetch any information from the .well-known endpoint")
224
- return response.json()
225
-
226
-
227
- def get_token(location: Path, token: AccessToken | None) -> AccessToken | None:
228
- """Get token if available and still valid."""
229
- # If the credentials path does not exist, raise an error
230
- if not location.exists():
231
- raise RuntimeError("credentials are not set")
232
-
233
- # Load the existing credentials
234
- if not token:
235
- credentials = json.loads(location.read_text())
236
- token = AccessToken(
237
- cast(str, credentials.get("access_token")),
238
- cast(int, credentials.get("expires_on")),
239
- )
240
-
241
- # We check the validity of the token
242
- # If not valid, then return None to inform the caller that a new token
243
- # is needed
244
- if not is_token_valid(token):
245
- return None
246
-
247
- return token
248
-
249
-
250
- def is_refresh_token_valid(refresh_token: str) -> bool:
251
- """Check if the refresh token is still valid."""
252
- # Decode the refresh token
253
- refresh_payload = jwt.decode(refresh_token, options={"verify_signature": False})
254
- if not refresh_payload or "exp" not in refresh_payload:
255
- return False
256
-
257
- # Check the expiration time
258
- return refresh_payload["exp"] > datetime.now(tz=timezone.utc).timestamp()
259
-
260
-
261
- def is_token_valid(token: AccessToken) -> bool:
262
- """Condition to get a new token"""
263
- return (
264
- datetime.fromtimestamp(token.expires_on, tz=timezone.utc)
265
- - datetime.now(tz=timezone.utc)
266
- ).total_seconds() > 300
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: diracx-client
3
- Version: 0.0.1a18
3
+ Version: 0.0.1a19
4
4
  Summary: TODO
5
5
  License: GPL-3.0-only
6
6
  Classifier: Intended Audience :: Science/Research
@@ -0,0 +1,36 @@
1
+ diracx/client/__init__.py,sha256=aLo7lP4xwlCtxs7MKD55gr2oDLQyWEvRHZVHwj5Sl2c,165
2
+ diracx/client/aio.py,sha256=gqVCOxYYl-q6hrz6dbhiT8kXuYWZfQeIQLHAHF9liI4,37
3
+ diracx/client/extensions.py,sha256=igHJAXhgpYQq-Di1ZOX2b2okqgjQHTs9HL8mBTHb6ss,3385
4
+ diracx/client/models.py,sha256=ToGTZHywDTtn-uw1woTLxNAcSw1eRCx2A_kr67ix2Hw,163
5
+ diracx/client/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
6
+ diracx/client/generated/__init__.py,sha256=B9QWqpEmloFGgHcz5Qr_JhZ1VWuue3bFqG8P8tNRnOo,699
7
+ diracx/client/generated/_client.py,sha256=Ucb7XVfbGg3wwzyUzyXVM7vHyHpiVY_SI-hLIlrzM10,4831
8
+ diracx/client/generated/_configuration.py,sha256=cV68TslcEaEz1UC9I1w0fD97B8Qd-qp4e9DdnN52RNo,1936
9
+ diracx/client/generated/_patch.py,sha256=ZsuUeieEbKp0OjXJz2qAW-z6W0Xt8wwb38J-RvQxfNE,1328
10
+ diracx/client/generated/_serialization.py,sha256=D2NDvU1N7HsRxZcro5RqQsjwzeVrW89OfQABp2m-RT8,86957
11
+ diracx/client/generated/_vendor.py,sha256=G4uvSqVEkCV40TKFEGOXRzs4kjAx70wPBNPS8cdzSBg,1936
12
+ diracx/client/generated/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
13
+ diracx/client/generated/aio/__init__.py,sha256=B9QWqpEmloFGgHcz5Qr_JhZ1VWuue3bFqG8P8tNRnOo,699
14
+ diracx/client/generated/aio/_client.py,sha256=sT_kcTQdSmZctC-uVACv_KvtUQUANbYNorpz31tcGsc,4952
15
+ diracx/client/generated/aio/_configuration.py,sha256=XLwTMklUFCJUPdY7nyx2YjLHyu23q6H0nPYgbQfsr48,1968
16
+ diracx/client/generated/aio/_patch.py,sha256=6FYNV6Yt0ttTc7A5EQui764Ujuzypkjpv47LVdccmD8,697
17
+ diracx/client/generated/aio/_vendor.py,sha256=G4uvSqVEkCV40TKFEGOXRzs4kjAx70wPBNPS8cdzSBg,1936
18
+ diracx/client/generated/aio/operations/__init__.py,sha256=GHpFQ9Xm5etewGThBTvKhKms0KHnhp2_vuNkb6na8a0,868
19
+ diracx/client/generated/aio/operations/_operations.py,sha256=5h5c7NFGLOi53yxgC4ZPO4joSNysax4O4hxpDnNGNPE,99551
20
+ diracx/client/generated/aio/operations/_patch.py,sha256=3oHjHqBF7DXruMSVUTRxW0Xpv_mY1WaB8iyo47YBTec,4229
21
+ diracx/client/generated/models/__init__.py,sha256=1W96tTA46xJpxwVE73kswpIkUwuKZAVxKdr7mdUgykw,3110
22
+ diracx/client/generated/models/_enums.py,sha256=xhX35Xy2EkLB1gX5TyOSFTV0pw9iAgR98UenK5yKB2o,2389
23
+ diracx/client/generated/models/_models.py,sha256=WJoQCHRJ0rXehIr0gUwNNfKXp9uIifKb8smXmH0IQoE,39799
24
+ diracx/client/generated/models/_patch.py,sha256=uvLwKzjWO_t-VZ4aSuLhuJ05RVxAP9UJxZV3XDeGMnU,1497
25
+ diracx/client/generated/operations/__init__.py,sha256=GHpFQ9Xm5etewGThBTvKhKms0KHnhp2_vuNkb6na8a0,868
26
+ diracx/client/generated/operations/_operations.py,sha256=jv07HbP9JF0DF56eyu7FYYjW4DSB1GxjMDHVRkM1LvY,124482
27
+ diracx/client/generated/operations/_patch.py,sha256=FvemlcswH_zZkdyoGObyTwRnwTsYIZJa3seO66C2BQI,4202
28
+ diracx/client/patches/__init__.py,sha256=8mzMyg1Kd9lJH1K7DYJ6FgjkTJgPRJmF0sYmuFv5wcs,468
29
+ diracx/client/patches/utils.py,sha256=srbqBTsnNUKajHAP4aT3hR29P6rmJlsojIiJdMBW9wo,8403
30
+ diracx/client/patches/aio/__init__.py,sha256=qIy1qj8HzaZDEU2PCjEHjFbylwfYRAM0i90WEDs2WuQ,471
31
+ diracx/client/patches/aio/utils.py,sha256=d_OvqJuzJUfmeSmfmDD3J6CArVW3M9BZg9fnslzltKQ,6412
32
+ diracx_client-0.0.1a19.dist-info/METADATA,sha256=7gHtve3zQW3j57bJyUOVYOoTykIkwGtjpVyi39uK5wg,677
33
+ diracx_client-0.0.1a19.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
34
+ diracx_client-0.0.1a19.dist-info/entry_points.txt,sha256=NP67B7z-VIy8vEG3ZYtOAyxZqLtrOAD5hh2pA2AFBKI,123
35
+ diracx_client-0.0.1a19.dist-info/top_level.txt,sha256=vJx10tdRlBX3rF2Psgk5jlwVGZNcL3m_7iQWwgPXt-U,7
36
+ diracx_client-0.0.1a19.dist-info/RECORD,,
@@ -0,0 +1,3 @@
1
+ [diracx]
2
+ aio_client_class = diracx.client.generated.aio._client:Dirac
3
+ client_class = diracx.client.generated._client:Dirac
@@ -1,26 +0,0 @@
1
- diracx/client/__init__.py,sha256=NpsBFQPgWn_D_IVhT2RbRy0Y9oIKicEh6QBD0zGYHy4,701
2
- diracx/client/_client.py,sha256=agmWB402dpROnDRlqL_StInHTBIqDj-ZLSPinGfrxGk,4788
3
- diracx/client/_configuration.py,sha256=87XGycT5MOvmixM7v4Hq8kGsJhDAA6Zv_8pxO2sCAvQ,1937
4
- diracx/client/_patch.py,sha256=Dgf3pYZrSRurPsx6yxio9kMRmW30LHNEqL744ksZiPI,9130
5
- diracx/client/_serialization.py,sha256=jd8QTNv6p8YvcNhCkJPIjiZyuVQL55YEGOpy4cVcVzI,80965
6
- diracx/client/_vendor.py,sha256=ubmRRLS5-52w6qbvaWwOZBz-gS-MH3StxRlmXROIMvs,1937
7
- diracx/client/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
8
- diracx/client/aio/__init__.py,sha256=NpsBFQPgWn_D_IVhT2RbRy0Y9oIKicEh6QBD0zGYHy4,701
9
- diracx/client/aio/_client.py,sha256=zaVOzCPZfUPTTXfHohO7fm43mjo5_zPHVWFwG0ZSvOs,4909
10
- diracx/client/aio/_configuration.py,sha256=5AiZRmwQ1B8SjUPIY6bYtD-V71eumeHxQUj7Maigs4c,1969
11
- diracx/client/aio/_patch.py,sha256=fCRZTD-wvBE2-QZo4jiN1OsZzM2mWbtSAXk9X9Als9Q,6688
12
- diracx/client/aio/_vendor.py,sha256=ubmRRLS5-52w6qbvaWwOZBz-gS-MH3StxRlmXROIMvs,1937
13
- diracx/client/aio/operations/__init__.py,sha256=NpQ6cr321ysggDkN62imu0BAD6VXTF2GZNG0Zs6hqj4,869
14
- diracx/client/aio/operations/_operations.py,sha256=mM1UgFGr3e5KeE591Bb0drPjz1VNdzLZ1-_SKtcHQ18,99720
15
- diracx/client/aio/operations/_patch.py,sha256=3oHjHqBF7DXruMSVUTRxW0Xpv_mY1WaB8iyo47YBTec,4229
16
- diracx/client/models/__init__.py,sha256=cidagrv48gYiRwqXgAtkiAG2CBHoEF5aMuKt8gqOOjE,3043
17
- diracx/client/models/_enums.py,sha256=Cn1A9abUE1EK7Z5saAFj5Ea6sk_QdcvDsdMbZiyGFlo,2395
18
- diracx/client/models/_models.py,sha256=jzLNS8kQO8U0x_CAAjtuK--K5rZrUkLXaLRdFiNV13s,38145
19
- diracx/client/models/_patch.py,sha256=uvLwKzjWO_t-VZ4aSuLhuJ05RVxAP9UJxZV3XDeGMnU,1497
20
- diracx/client/operations/__init__.py,sha256=NpQ6cr321ysggDkN62imu0BAD6VXTF2GZNG0Zs6hqj4,869
21
- diracx/client/operations/_operations.py,sha256=Favj5uZ_UeRbA0UT2FYJSENNpH6qz2IkcQu0TNAjGiI,124423
22
- diracx/client/operations/_patch.py,sha256=FvemlcswH_zZkdyoGObyTwRnwTsYIZJa3seO66C2BQI,4202
23
- diracx_client-0.0.1a18.dist-info/METADATA,sha256=y-d6UJ0EVqhFlyzIO78WRBUmDcuLik88svsNSAQ0C7U,677
24
- diracx_client-0.0.1a18.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
25
- diracx_client-0.0.1a18.dist-info/top_level.txt,sha256=vJx10tdRlBX3rF2Psgk5jlwVGZNcL3m_7iQWwgPXt-U,7
26
- diracx_client-0.0.1a18.dist-info/RECORD,,
File without changes