diracx-client 0.0.1a18__py3-none-any.whl → 0.0.1a20__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.
- diracx/client/__init__.py +4 -18
- diracx/client/aio.py +1 -0
- diracx/client/extensions.py +90 -0
- diracx/client/{aio → generated}/__init__.py +2 -2
- diracx/client/{_client.py → generated/_client.py} +7 -6
- diracx/client/{_configuration.py → generated/_configuration.py} +1 -1
- diracx/client/generated/_patch.py +47 -0
- diracx/client/{_serialization.py → generated/_serialization.py} +303 -154
- diracx/client/{_vendor.py → generated/_vendor.py} +1 -1
- diracx/client/generated/aio/__init__.py +21 -0
- diracx/client/{aio → generated/aio}/_client.py +7 -6
- diracx/client/{aio → generated/aio}/_configuration.py +1 -1
- diracx/client/generated/aio/_patch.py +23 -0
- diracx/client/{aio → generated/aio}/_vendor.py +1 -1
- diracx/client/{aio → generated/aio}/operations/__init__.py +2 -2
- diracx/client/{aio → generated/aio}/operations/_operations.py +139 -209
- diracx/client/{models → generated/models}/__init__.py +4 -2
- diracx/client/{models → generated/models}/_enums.py +2 -2
- diracx/client/{models → generated/models}/_models.py +86 -46
- diracx/client/{operations → generated/operations}/__init__.py +2 -2
- diracx/client/{operations → generated/operations}/_operations.py +139 -209
- diracx/client/generated/py.typed +1 -0
- diracx/client/models.py +5 -0
- diracx/client/patches/__init__.py +19 -0
- diracx/client/patches/aio/__init__.py +18 -0
- diracx/client/{aio/_patch.py → patches/aio/utils.py} +25 -19
- diracx/client/{_patch.py → patches/utils.py} +115 -122
- {diracx_client-0.0.1a18.dist-info → diracx_client-0.0.1a20.dist-info}/METADATA +1 -2
- diracx_client-0.0.1a20.dist-info/RECORD +36 -0
- {diracx_client-0.0.1a18.dist-info → diracx_client-0.0.1a20.dist-info}/WHEEL +1 -1
- diracx_client-0.0.1a20.dist-info/entry_points.txt +3 -0
- diracx_client-0.0.1a18.dist-info/RECORD +0 -26
- /diracx/client/{aio → generated/aio}/operations/_patch.py +0 -0
- /diracx/client/{models → generated/models}/_patch.py +0 -0
- /diracx/client/{operations → generated/operations}/_patch.py +0 -0
- {diracx_client-0.0.1a18.dist-info → diracx_client-0.0.1a20.dist-info}/top_level.txt +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
# Marker file for PEP 561.
|
diracx/client/models.py
ADDED
@@ -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,14 @@
|
|
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
|
13
|
+
from importlib.metadata import PackageNotFoundError, distribution
|
10
14
|
from types import TracebackType
|
11
15
|
from pathlib import Path
|
12
|
-
from typing import Any, List, Optional
|
16
|
+
from typing import Any, List, Optional, Self
|
13
17
|
from azure.core.credentials import AccessToken
|
14
18
|
from azure.core.credentials_async import AsyncTokenCredential
|
15
19
|
from azure.core.pipeline import PipelineRequest
|
@@ -17,8 +21,7 @@ from azure.core.pipeline.policies import AsyncBearerTokenCredentialPolicy
|
|
17
21
|
|
18
22
|
from diracx.core.preferences import get_diracx_preferences, DiracxPreferences
|
19
23
|
|
20
|
-
from
|
21
|
-
from .._patch import (
|
24
|
+
from ..utils import (
|
22
25
|
get_openid_configuration,
|
23
26
|
get_token,
|
24
27
|
refresh_token,
|
@@ -30,15 +33,6 @@ __all__: List[str] = [
|
|
30
33
|
] # Add all objects you want publicly available to users at this package level
|
31
34
|
|
32
35
|
|
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
36
|
class DiracTokenCredential(AsyncTokenCredential):
|
43
37
|
"""Tailor get_token() for our context"""
|
44
38
|
|
@@ -140,7 +134,7 @@ class DiracBearerTokenCredentialPolicy(AsyncBearerTokenCredentialPolicy):
|
|
140
134
|
request.http_request.headers["Authorization"] = f"Bearer {self._token.token}"
|
141
135
|
|
142
136
|
|
143
|
-
class
|
137
|
+
class DiracClientMixin(metaclass=abc.ABCMeta):
|
144
138
|
"""This class inherits from the generated Dirac client and adds support for tokens,
|
145
139
|
so that the caller does not need to configure it by itself.
|
146
140
|
"""
|
@@ -163,8 +157,25 @@ class DiracClient(DiracGenerated):
|
|
163
157
|
# Get .well-known configuration
|
164
158
|
openid_configuration = get_openid_configuration(self._endpoint, verify=verify)
|
165
159
|
|
160
|
+
try:
|
161
|
+
self.client_version = distribution("diracx").version
|
162
|
+
except PackageNotFoundError:
|
163
|
+
try:
|
164
|
+
self.client_version = distribution("diracx-client").version
|
165
|
+
except PackageNotFoundError:
|
166
|
+
print("Error while getting client version")
|
167
|
+
self.client_version = "Unknown"
|
168
|
+
|
169
|
+
# Setting default headers
|
170
|
+
kwargs.setdefault("base_headers", {})[
|
171
|
+
"DiracX-Client-Version"
|
172
|
+
] = self.client_version
|
173
|
+
|
166
174
|
# Initialize Dirac with a Dirac-specific token credential policy
|
167
|
-
|
175
|
+
# We need to ignore types here because mypy complains that we give
|
176
|
+
# too many arguments to "object" constructor as this is a mixin
|
177
|
+
|
178
|
+
super().__init__( # type: ignore
|
168
179
|
endpoint=self._endpoint,
|
169
180
|
authentication_policy=DiracBearerTokenCredentialPolicy(
|
170
181
|
DiracTokenCredential(
|
@@ -180,8 +191,3 @@ class DiracClient(DiracGenerated):
|
|
180
191
|
@property
|
181
192
|
def client_id(self):
|
182
193
|
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,45 +1,120 @@
|
|
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
|
+
|
12
4
|
import json
|
13
5
|
import jwt
|
14
6
|
import requests
|
15
7
|
|
8
|
+
from datetime import datetime, timezone
|
9
|
+
from importlib.metadata import PackageNotFoundError, distribution
|
10
|
+
|
16
11
|
from pathlib import Path
|
17
|
-
from typing import Any, Dict, List, Optional, cast
|
12
|
+
from typing import Any, Dict, List, Optional, cast, Self
|
18
13
|
from urllib import parse
|
19
14
|
from azure.core.credentials import AccessToken
|
20
15
|
from azure.core.credentials import TokenCredential
|
21
16
|
from azure.core.pipeline import PipelineRequest
|
22
17
|
from azure.core.pipeline.policies import BearerTokenCredentialPolicy
|
23
18
|
|
24
|
-
from
|
19
|
+
from ..generated.models import TokenResponse
|
25
20
|
from diracx.core.models import TokenResponse as CoreTokenResponse
|
26
21
|
from diracx.core.preferences import DiracxPreferences, get_diracx_preferences
|
27
22
|
|
28
|
-
|
23
|
+
import sys
|
24
|
+
|
25
|
+
|
26
|
+
def refresh_token(
|
27
|
+
location: Path,
|
28
|
+
token_endpoint: str,
|
29
|
+
client_id: str,
|
30
|
+
refresh_token: str,
|
31
|
+
*,
|
32
|
+
verify: bool | str = True,
|
33
|
+
) -> AccessToken:
|
34
|
+
"""Refresh the access token using the refresh_token flow."""
|
35
|
+
from diracx.core.utils import write_credentials
|
36
|
+
|
37
|
+
response = requests.post(
|
38
|
+
url=token_endpoint,
|
39
|
+
data={
|
40
|
+
"client_id": client_id,
|
41
|
+
"grant_type": "refresh_token",
|
42
|
+
"refresh_token": refresh_token,
|
43
|
+
},
|
44
|
+
verify=verify,
|
45
|
+
)
|
29
46
|
|
47
|
+
if response.status_code != 200:
|
48
|
+
raise RuntimeError(
|
49
|
+
f"An issue occured while refreshing your access token: {response.json()['detail']}"
|
50
|
+
)
|
30
51
|
|
31
|
-
|
32
|
-
|
33
|
-
]
|
52
|
+
res = response.json()
|
53
|
+
token_response = TokenResponse(
|
54
|
+
access_token=res["access_token"],
|
55
|
+
expires_in=res["expires_in"],
|
56
|
+
token_type=res.get("token_type"),
|
57
|
+
refresh_token=res.get("refresh_token"),
|
58
|
+
)
|
34
59
|
|
60
|
+
write_credentials(cast(CoreTokenResponse, token_response), location=location)
|
61
|
+
credentials = json.loads(location.read_text())
|
62
|
+
return AccessToken(credentials.get("access_token"), credentials.get("expires_on"))
|
35
63
|
|
36
|
-
def patch_sdk():
|
37
|
-
"""Do not remove from this file.
|
38
64
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
"""
|
65
|
+
def get_openid_configuration(
|
66
|
+
endpoint: str, *, verify: bool | str = True
|
67
|
+
) -> Dict[str, str]:
|
68
|
+
"""Get the openid configuration from the .well-known endpoint"""
|
69
|
+
response = requests.get(
|
70
|
+
url=parse.urljoin(endpoint, ".well-known/openid-configuration"),
|
71
|
+
verify=verify,
|
72
|
+
)
|
73
|
+
if not response.ok:
|
74
|
+
raise RuntimeError("Cannot fetch any information from the .well-known endpoint")
|
75
|
+
return response.json()
|
76
|
+
|
77
|
+
|
78
|
+
def get_token(location: Path, token: AccessToken | None) -> AccessToken | None:
|
79
|
+
"""Get token if available and still valid."""
|
80
|
+
# If the credentials path does not exist, raise an error
|
81
|
+
if not location.exists():
|
82
|
+
raise RuntimeError("credentials are not set")
|
83
|
+
|
84
|
+
# Load the existing credentials
|
85
|
+
if not token:
|
86
|
+
credentials = json.loads(location.read_text())
|
87
|
+
token = AccessToken(
|
88
|
+
cast(str, credentials.get("access_token")),
|
89
|
+
cast(int, credentials.get("expires_on")),
|
90
|
+
)
|
91
|
+
|
92
|
+
# We check the validity of the token
|
93
|
+
# If not valid, then return None to inform the caller that a new token
|
94
|
+
# is needed
|
95
|
+
if not is_token_valid(token):
|
96
|
+
return None
|
97
|
+
|
98
|
+
return token
|
99
|
+
|
100
|
+
|
101
|
+
def is_refresh_token_valid(refresh_token: str) -> bool:
|
102
|
+
"""Check if the refresh token is still valid."""
|
103
|
+
# Decode the refresh token
|
104
|
+
refresh_payload = jwt.decode(refresh_token, options={"verify_signature": False})
|
105
|
+
if not refresh_payload or "exp" not in refresh_payload:
|
106
|
+
return False
|
107
|
+
|
108
|
+
# Check the expiration time
|
109
|
+
return refresh_payload["exp"] > datetime.now(tz=timezone.utc).timestamp()
|
110
|
+
|
111
|
+
|
112
|
+
def is_token_valid(token: AccessToken) -> bool:
|
113
|
+
"""Condition to get a new token"""
|
114
|
+
return (
|
115
|
+
datetime.fromtimestamp(token.expires_on, tz=timezone.utc)
|
116
|
+
- datetime.now(tz=timezone.utc)
|
117
|
+
).total_seconds() > 300
|
43
118
|
|
44
119
|
|
45
120
|
class DiracTokenCredential(TokenCredential):
|
@@ -125,7 +200,7 @@ class DiracBearerTokenCredentialPolicy(BearerTokenCredentialPolicy):
|
|
125
200
|
request.http_request.headers["Authorization"] = f"Bearer {self._token.token}"
|
126
201
|
|
127
202
|
|
128
|
-
class
|
203
|
+
class DiracClientMixin:
|
129
204
|
"""This class inherits from the generated Dirac client and adds support for tokens,
|
130
205
|
so that the caller does not need to configure it by itself.
|
131
206
|
"""
|
@@ -148,8 +223,25 @@ class DiracClient(DiracGenerated):
|
|
148
223
|
# Get .well-known configuration
|
149
224
|
openid_configuration = get_openid_configuration(self._endpoint, verify=verify)
|
150
225
|
|
226
|
+
try:
|
227
|
+
self.client_version = distribution("diracx").version
|
228
|
+
except PackageNotFoundError:
|
229
|
+
try:
|
230
|
+
self.client_version = distribution("diracx-client").version
|
231
|
+
except PackageNotFoundError:
|
232
|
+
print("Error while getting client version")
|
233
|
+
self.client_version = "Unknown"
|
234
|
+
|
235
|
+
# Setting default headers
|
236
|
+
kwargs.setdefault("base_headers", {})[
|
237
|
+
"DiracX-Client-Version"
|
238
|
+
] = self.client_version
|
239
|
+
|
151
240
|
# Initialize Dirac with a Dirac-specific token credential policy
|
152
|
-
|
241
|
+
# We need to ignore types here because mypy complains that we give
|
242
|
+
# too many arguments to "object" constructor as this is a mixin
|
243
|
+
|
244
|
+
super().__init__( # type: ignore
|
153
245
|
endpoint=self._endpoint,
|
154
246
|
authentication_policy=DiracBearerTokenCredentialPolicy(
|
155
247
|
DiracTokenCredential(
|
@@ -165,102 +257,3 @@ class DiracClient(DiracGenerated):
|
|
165
257
|
@property
|
166
258
|
def client_id(self):
|
167
259
|
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.
|
3
|
+
Version: 0.0.1a20
|
4
4
|
Summary: TODO
|
5
5
|
License: GPL-3.0-only
|
6
6
|
Classifier: Intended Audience :: Science/Research
|
@@ -18,4 +18,3 @@ Provides-Extra: testing
|
|
18
18
|
Requires-Dist: diracx-testing; extra == "testing"
|
19
19
|
Provides-Extra: types
|
20
20
|
Requires-Dist: types-requests; extra == "types"
|
21
|
-
|
@@ -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=vJe8ZP3hLFwRK36KPA2n6P4ti0nOXJgrOAhxN6bRuzU,719
|
7
|
+
diracx/client/generated/_client.py,sha256=e_LERq7nLIMtOUL84foK5S4kZAOF9mJlFOdAcdGCwDs,4831
|
8
|
+
diracx/client/generated/_configuration.py,sha256=qzFZ089UDtXIYEClN5w6iJj0Hm72qy_FL0pJsXathfM,1936
|
9
|
+
diracx/client/generated/_patch.py,sha256=ZsuUeieEbKp0OjXJz2qAW-z6W0Xt8wwb38J-RvQxfNE,1328
|
10
|
+
diracx/client/generated/_serialization.py,sha256=4C5vtTgquShn3QH7J2QaSEukQIMLW67tfNoEdGvWn5k,86948
|
11
|
+
diracx/client/generated/_vendor.py,sha256=M1s4hEh-jejSih4eDGzFu1MQkNyWQM5pmzMxyp0eBCE,1936
|
12
|
+
diracx/client/generated/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
|
13
|
+
diracx/client/generated/aio/__init__.py,sha256=vJe8ZP3hLFwRK36KPA2n6P4ti0nOXJgrOAhxN6bRuzU,719
|
14
|
+
diracx/client/generated/aio/_client.py,sha256=ctZbEdAhSPJtDYWsbh8nfvbXI_C932xd58T0Mw0q-dk,4952
|
15
|
+
diracx/client/generated/aio/_configuration.py,sha256=6V0bK2A8i_0Au-ojhZOSqYIgYTe3QkVyFADKygWWHDQ,1968
|
16
|
+
diracx/client/generated/aio/_patch.py,sha256=6FYNV6Yt0ttTc7A5EQui764Ujuzypkjpv47LVdccmD8,697
|
17
|
+
diracx/client/generated/aio/_vendor.py,sha256=M1s4hEh-jejSih4eDGzFu1MQkNyWQM5pmzMxyp0eBCE,1936
|
18
|
+
diracx/client/generated/aio/operations/__init__.py,sha256=FcU_imELohqiaOtPzeopEEPTAXgsvrIqgXjFK6VmltU,887
|
19
|
+
diracx/client/generated/aio/operations/_operations.py,sha256=JelQdNzyG5bBISE42vtbt0PL4E2iJLBXKONNMdxVhgM,95035
|
20
|
+
diracx/client/generated/aio/operations/_patch.py,sha256=3oHjHqBF7DXruMSVUTRxW0Xpv_mY1WaB8iyo47YBTec,4229
|
21
|
+
diracx/client/generated/models/__init__.py,sha256=dWjCnKAE_-4-biZ5yX9TTRZnKgtqh4psNmGOL5tFwwU,3129
|
22
|
+
diracx/client/generated/models/_enums.py,sha256=5JfOHTo7OQXAHqaoRDwiyKI3LyS0sTgxetEJ0Wjk2_I,2389
|
23
|
+
diracx/client/generated/models/_models.py,sha256=k-YMiEs8SO3ArL6Q5dcRWoW8faM_4I17MBQsdssSwa8,39708
|
24
|
+
diracx/client/generated/models/_patch.py,sha256=uvLwKzjWO_t-VZ4aSuLhuJ05RVxAP9UJxZV3XDeGMnU,1497
|
25
|
+
diracx/client/generated/operations/__init__.py,sha256=FcU_imELohqiaOtPzeopEEPTAXgsvrIqgXjFK6VmltU,887
|
26
|
+
diracx/client/generated/operations/_operations.py,sha256=iXr64Yr519jJtLjjoWVM4FNtiaqqg9cAS2GSIlfS8Nw,119966
|
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=3HSRDgdv0Ssxe53lVRFp-qlXU0Gz5mse2EqXcVmL9a0,8978
|
30
|
+
diracx/client/patches/aio/__init__.py,sha256=qIy1qj8HzaZDEU2PCjEHjFbylwfYRAM0i90WEDs2WuQ,471
|
31
|
+
diracx/client/patches/aio/utils.py,sha256=smZhoXpqZaWh1GV34oJdNcLRgogZtkWPmflHPq49O3A,6986
|
32
|
+
diracx_client-0.0.1a20.dist-info/METADATA,sha256=R20omnd-mfFWp-xo45anxzMM72tqbb9-boSqyA5yYzA,676
|
33
|
+
diracx_client-0.0.1a20.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
34
|
+
diracx_client-0.0.1a20.dist-info/entry_points.txt,sha256=NP67B7z-VIy8vEG3ZYtOAyxZqLtrOAD5hh2pA2AFBKI,123
|
35
|
+
diracx_client-0.0.1a20.dist-info/top_level.txt,sha256=vJx10tdRlBX3rF2Psgk5jlwVGZNcL3m_7iQWwgPXt-U,7
|
36
|
+
diracx_client-0.0.1a20.dist-info/RECORD,,
|
@@ -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
|
File without changes
|
File without changes
|
File without changes
|