digitalhub 0.10.2__py3-none-any.whl → 0.10.3__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.
- digitalhub/stores/client/api.py +1 -1
- digitalhub/stores/client/builder.py +2 -2
- digitalhub/stores/client/dhcore/client.py +3 -2
- digitalhub/stores/client/dhcore/configurator.py +77 -14
- digitalhub/stores/client/dhcore/utils.py +1 -0
- digitalhub/stores/configurator/configurator.py +3 -1
- digitalhub/stores/configurator/ini_module.py +58 -4
- digitalhub/stores/data/builder.py +1 -1
- digitalhub/stores/data/local/store.py +0 -3
- digitalhub/stores/data/remote/store.py +0 -3
- digitalhub/stores/data/s3/configurator.py +0 -19
- digitalhub/stores/data/s3/store.py +3 -8
- digitalhub/stores/data/sql/configurator.py +7 -20
- digitalhub/stores/data/sql/store.py +1 -2
- {digitalhub-0.10.2.dist-info → digitalhub-0.10.3.dist-info}/METADATA +1 -1
- {digitalhub-0.10.2.dist-info → digitalhub-0.10.3.dist-info}/RECORD +18 -20
- digitalhub/stores/data/s3/models.py +0 -21
- digitalhub/stores/data/sql/models.py +0 -24
- {digitalhub-0.10.2.dist-info → digitalhub-0.10.3.dist-info}/WHEEL +0 -0
- {digitalhub-0.10.2.dist-info → digitalhub-0.10.3.dist-info}/licenses/LICENSE.txt +0 -0
digitalhub/stores/client/api.py
CHANGED
|
@@ -23,7 +23,7 @@ class ClientBuilder:
|
|
|
23
23
|
self._local = None
|
|
24
24
|
self._dhcore = None
|
|
25
25
|
|
|
26
|
-
def build(self, local: bool = False
|
|
26
|
+
def build(self, local: bool = False) -> Client:
|
|
27
27
|
"""
|
|
28
28
|
Method to create a client instance.
|
|
29
29
|
|
|
@@ -43,7 +43,7 @@ class ClientBuilder:
|
|
|
43
43
|
return self._local
|
|
44
44
|
|
|
45
45
|
if self._dhcore is None:
|
|
46
|
-
self._dhcore = ClientDHCore(
|
|
46
|
+
self._dhcore = ClientDHCore()
|
|
47
47
|
return self._dhcore
|
|
48
48
|
|
|
49
49
|
|
|
@@ -35,7 +35,7 @@ class ClientDHCore(Client):
|
|
|
35
35
|
configuration, otherwise it simply set the environment variables.
|
|
36
36
|
"""
|
|
37
37
|
|
|
38
|
-
def __init__(self
|
|
38
|
+
def __init__(self) -> None:
|
|
39
39
|
super().__init__()
|
|
40
40
|
|
|
41
41
|
# API builder
|
|
@@ -52,7 +52,7 @@ class ClientDHCore(Client):
|
|
|
52
52
|
|
|
53
53
|
# Client Configurator
|
|
54
54
|
self._configurator = ClientDHCoreConfigurator()
|
|
55
|
-
self._configurator.configure(
|
|
55
|
+
self._configurator.configure()
|
|
56
56
|
|
|
57
57
|
##############################
|
|
58
58
|
# CRUD methods
|
|
@@ -276,6 +276,7 @@ class ClientDHCore(Client):
|
|
|
276
276
|
dict
|
|
277
277
|
Response object.
|
|
278
278
|
"""
|
|
279
|
+
self._configurator.check_config()
|
|
279
280
|
if kwargs is None:
|
|
280
281
|
kwargs = {}
|
|
281
282
|
url = self._configurator.build_url(api)
|
|
@@ -31,11 +31,30 @@ class ClientDHCoreConfigurator:
|
|
|
31
31
|
Configurator object used to configure the client.
|
|
32
32
|
"""
|
|
33
33
|
|
|
34
|
+
def __init__(self) -> None:
|
|
35
|
+
self._current_env = configurator.get_current_env()
|
|
36
|
+
|
|
34
37
|
##############################
|
|
35
38
|
# Configuration methods
|
|
36
39
|
##############################
|
|
37
40
|
|
|
38
|
-
def
|
|
41
|
+
def check_config(self) -> None:
|
|
42
|
+
"""
|
|
43
|
+
Check if the config is valid.
|
|
44
|
+
|
|
45
|
+
Parameters
|
|
46
|
+
----------
|
|
47
|
+
config : dict
|
|
48
|
+
Configuration dictionary.
|
|
49
|
+
|
|
50
|
+
Returns
|
|
51
|
+
-------
|
|
52
|
+
None
|
|
53
|
+
"""
|
|
54
|
+
if configurator.get_current_env() != self._current_env:
|
|
55
|
+
self.configure()
|
|
56
|
+
|
|
57
|
+
def configure(self) -> None:
|
|
39
58
|
"""
|
|
40
59
|
Configure the client attributes with config (given or from
|
|
41
60
|
environment).
|
|
@@ -44,11 +63,6 @@ class ClientDHCoreConfigurator:
|
|
|
44
63
|
over the basic auth. Furthermore, the config parameter is
|
|
45
64
|
validated against the proper pydantic model.
|
|
46
65
|
|
|
47
|
-
Parameters
|
|
48
|
-
----------
|
|
49
|
-
config : dict
|
|
50
|
-
Configuration dictionary.
|
|
51
|
-
|
|
52
66
|
Returns
|
|
53
67
|
-------
|
|
54
68
|
None
|
|
@@ -140,10 +154,10 @@ class ClientDHCoreConfigurator:
|
|
|
140
154
|
None
|
|
141
155
|
"""
|
|
142
156
|
# Give priority to access token
|
|
143
|
-
access_token =
|
|
157
|
+
access_token = self._load_dhcore_oauth_vars(DhcoreEnvVar.ACCESS_TOKEN.value)
|
|
144
158
|
if access_token is not None:
|
|
145
159
|
configurator.set_credential(AUTH_KEY, AuthType.OAUTH2.value)
|
|
146
|
-
configurator.set_credential(DhcoreEnvVar.ACCESS_TOKEN.value, access_token)
|
|
160
|
+
configurator.set_credential(DhcoreEnvVar.ACCESS_TOKEN.value.removeprefix("DHCORE_"), access_token)
|
|
147
161
|
|
|
148
162
|
# Fallback to basic
|
|
149
163
|
else:
|
|
@@ -204,7 +218,7 @@ class ClientDHCoreConfigurator:
|
|
|
204
218
|
elif self.oauth2_auth():
|
|
205
219
|
if "headers" not in kwargs:
|
|
206
220
|
kwargs["headers"] = {}
|
|
207
|
-
access_token = creds[DhcoreEnvVar.ACCESS_TOKEN.value]
|
|
221
|
+
access_token = creds[DhcoreEnvVar.ACCESS_TOKEN.value.removeprefix("DHCORE_")]
|
|
208
222
|
kwargs["headers"]["Authorization"] = f"Bearer {access_token}"
|
|
209
223
|
return kwargs
|
|
210
224
|
|
|
@@ -227,7 +241,7 @@ class ClientDHCoreConfigurator:
|
|
|
227
241
|
|
|
228
242
|
# Otherwise try token from file
|
|
229
243
|
if response.status_code in (400, 401, 403):
|
|
230
|
-
refresh_token = configurator.load_from_file(DhcoreEnvVar.REFRESH_TOKEN.value)
|
|
244
|
+
refresh_token = configurator.load_from_file(DhcoreEnvVar.REFRESH_TOKEN.value.removeprefix("DHCORE_"))
|
|
231
245
|
response = self._call_refresh_token_endpoint(url, refresh_token)
|
|
232
246
|
|
|
233
247
|
response.raise_for_status()
|
|
@@ -248,12 +262,42 @@ class ClientDHCoreConfigurator:
|
|
|
248
262
|
-------
|
|
249
263
|
None
|
|
250
264
|
"""
|
|
251
|
-
keys =
|
|
265
|
+
keys = [
|
|
266
|
+
*self._remove_prefix_dhcore(list_enum(DhcoreEnvVar)),
|
|
267
|
+
*list_enum(S3StoreEnv),
|
|
268
|
+
*list_enum(SqlStoreEnv),
|
|
269
|
+
]
|
|
252
270
|
for key in keys:
|
|
253
|
-
if (value := response.get(key.lower()
|
|
271
|
+
if (value := response.get(key.lower())) is not None:
|
|
254
272
|
configurator.set_credential(key, value)
|
|
255
273
|
configurator.write_env(keys)
|
|
256
274
|
|
|
275
|
+
def _remove_prefix_dhcore(self, keys: list[str]) -> list[str]:
|
|
276
|
+
"""
|
|
277
|
+
Remove prefix from selected keys. (Compatibility with CLI)
|
|
278
|
+
|
|
279
|
+
Parameters
|
|
280
|
+
----------
|
|
281
|
+
keys : list[str]
|
|
282
|
+
List of keys.
|
|
283
|
+
|
|
284
|
+
Returns
|
|
285
|
+
-------
|
|
286
|
+
list[str]
|
|
287
|
+
List of keys without prefix.
|
|
288
|
+
"""
|
|
289
|
+
new_list = []
|
|
290
|
+
for key in keys:
|
|
291
|
+
if key in (
|
|
292
|
+
DhcoreEnvVar.REFRESH_TOKEN.value,
|
|
293
|
+
DhcoreEnvVar.ACCESS_TOKEN.value,
|
|
294
|
+
DhcoreEnvVar.ISSUER.value,
|
|
295
|
+
):
|
|
296
|
+
new_list.append(key.removeprefix("DHCORE_"))
|
|
297
|
+
else:
|
|
298
|
+
new_list.append(key)
|
|
299
|
+
return new_list
|
|
300
|
+
|
|
257
301
|
def _get_refresh_endpoint(self) -> str:
|
|
258
302
|
"""
|
|
259
303
|
Get the refresh endpoint.
|
|
@@ -264,11 +308,11 @@ class ClientDHCoreConfigurator:
|
|
|
264
308
|
Refresh endpoint.
|
|
265
309
|
"""
|
|
266
310
|
# Get issuer endpoint
|
|
267
|
-
endpoint_issuer =
|
|
311
|
+
endpoint_issuer = self._load_dhcore_oauth_vars(DhcoreEnvVar.ISSUER.value)
|
|
268
312
|
if endpoint_issuer is None:
|
|
269
313
|
raise ClientError("Issuer endpoint not set.")
|
|
270
314
|
endpoint_issuer = self._sanitize_endpoint(endpoint_issuer)
|
|
271
|
-
configurator.set_credential(DhcoreEnvVar.ISSUER.value, endpoint_issuer)
|
|
315
|
+
configurator.set_credential(DhcoreEnvVar.ISSUER.value.removeprefix("DHCORE_"), endpoint_issuer)
|
|
272
316
|
|
|
273
317
|
# Standard issuer endpoint path
|
|
274
318
|
url = endpoint_issuer + "/.well-known/openid-configuration"
|
|
@@ -308,3 +352,22 @@ class ClientDHCoreConfigurator:
|
|
|
308
352
|
}
|
|
309
353
|
headers = {"Content-Type": "application/x-www-form-urlencoded"}
|
|
310
354
|
return request("POST", url, data=payload, headers=headers, timeout=60)
|
|
355
|
+
|
|
356
|
+
def _load_dhcore_oauth_vars(self, oauth_var: str) -> str | None:
|
|
357
|
+
"""
|
|
358
|
+
Load DHCore oauth variables.
|
|
359
|
+
|
|
360
|
+
Parameters
|
|
361
|
+
----------
|
|
362
|
+
oauth_var : str
|
|
363
|
+
The oauth variable to load.
|
|
364
|
+
|
|
365
|
+
Returns
|
|
366
|
+
-------
|
|
367
|
+
str
|
|
368
|
+
The oauth variable.
|
|
369
|
+
"""
|
|
370
|
+
read_var = configurator.load_from_env(oauth_var)
|
|
371
|
+
if read_var is None:
|
|
372
|
+
read_var = configurator.load_from_file(oauth_var.removeprefix("DHCORE_"))
|
|
373
|
+
return read_var
|
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
|
|
5
5
|
from digitalhub.stores.configurator.credentials_store import CredentialsStore
|
|
6
|
-
from digitalhub.stores.configurator.ini_module import load_from_file, write_config
|
|
6
|
+
from digitalhub.stores.configurator.ini_module import load_from_file, read_env_from_file, set_current_env, write_config
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
class EnvConfigurator:
|
|
@@ -36,6 +36,7 @@ class EnvConfigurator:
|
|
|
36
36
|
None
|
|
37
37
|
"""
|
|
38
38
|
self._environment = creds_set
|
|
39
|
+
set_current_env(creds_set)
|
|
39
40
|
|
|
40
41
|
def get_current_env(self) -> str:
|
|
41
42
|
"""
|
|
@@ -105,6 +106,7 @@ class EnvConfigurator:
|
|
|
105
106
|
str | None
|
|
106
107
|
Environment variable value.
|
|
107
108
|
"""
|
|
109
|
+
self._environment = read_env_from_file()
|
|
108
110
|
return load_from_file(var)
|
|
109
111
|
|
|
110
112
|
def write_env(self, key_to_include: list[str] | None = None) -> None:
|
|
@@ -13,6 +13,23 @@ from digitalhub.utils.exceptions import ClientError
|
|
|
13
13
|
ENV_FILE = Path.home() / ".dhcore.ini"
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
def load_file() -> ConfigParser:
|
|
17
|
+
"""
|
|
18
|
+
Load current credentials set from the .dhcore.ini file.
|
|
19
|
+
|
|
20
|
+
Returns
|
|
21
|
+
-------
|
|
22
|
+
ConfigParser
|
|
23
|
+
Credentials set name.
|
|
24
|
+
"""
|
|
25
|
+
try:
|
|
26
|
+
file = ConfigParser()
|
|
27
|
+
file.read(ENV_FILE)
|
|
28
|
+
return file
|
|
29
|
+
except Exception as e:
|
|
30
|
+
raise ClientError(f"Failed to read env file: {e}")
|
|
31
|
+
|
|
32
|
+
|
|
16
33
|
def load_from_file(var: str) -> str | None:
|
|
17
34
|
"""
|
|
18
35
|
Load variable from config file.
|
|
@@ -29,9 +46,8 @@ def load_from_file(var: str) -> str | None:
|
|
|
29
46
|
str | None
|
|
30
47
|
Environment variable value.
|
|
31
48
|
"""
|
|
32
|
-
cfg = ConfigParser()
|
|
33
|
-
cfg.read(ENV_FILE)
|
|
34
49
|
try:
|
|
50
|
+
cfg = load_file()
|
|
35
51
|
profile = cfg["DEFAULT"]["current_environment"]
|
|
36
52
|
return cfg[profile].get(var)
|
|
37
53
|
except KeyError:
|
|
@@ -55,8 +71,7 @@ def write_config(creds: dict, environment: str) -> None:
|
|
|
55
71
|
None
|
|
56
72
|
"""
|
|
57
73
|
try:
|
|
58
|
-
cfg =
|
|
59
|
-
cfg.read(ENV_FILE)
|
|
74
|
+
cfg = load_file()
|
|
60
75
|
|
|
61
76
|
sections = cfg.sections()
|
|
62
77
|
if environment not in sections:
|
|
@@ -72,3 +87,42 @@ def write_config(creds: dict, environment: str) -> None:
|
|
|
72
87
|
|
|
73
88
|
except Exception as e:
|
|
74
89
|
raise ClientError(f"Failed to write env file: {e}")
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def set_current_env(environment: str) -> None:
|
|
93
|
+
"""
|
|
94
|
+
Set the current credentials set.
|
|
95
|
+
|
|
96
|
+
Parameters
|
|
97
|
+
----------
|
|
98
|
+
environment : str
|
|
99
|
+
Credentials set name.
|
|
100
|
+
|
|
101
|
+
Returns
|
|
102
|
+
-------
|
|
103
|
+
None
|
|
104
|
+
"""
|
|
105
|
+
try:
|
|
106
|
+
cfg = load_file()
|
|
107
|
+
cfg["DEFAULT"]["current_environment"] = environment
|
|
108
|
+
with open(ENV_FILE, "w") as inifile:
|
|
109
|
+
cfg.write(inifile)
|
|
110
|
+
|
|
111
|
+
except Exception as e:
|
|
112
|
+
raise ClientError(f"Failed to write env file: {e}")
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def read_env_from_file() -> str | None:
|
|
116
|
+
"""
|
|
117
|
+
Read the current credentials set from the .dhcore.ini file.
|
|
118
|
+
|
|
119
|
+
Returns
|
|
120
|
+
-------
|
|
121
|
+
str
|
|
122
|
+
Credentials set name.
|
|
123
|
+
"""
|
|
124
|
+
try:
|
|
125
|
+
cfg = load_file()
|
|
126
|
+
return cfg["DEFAULT"]["current_environment"]
|
|
127
|
+
except Exception:
|
|
128
|
+
return None
|
|
@@ -64,7 +64,7 @@ class StoreBuilder:
|
|
|
64
64
|
env = get_current_env()
|
|
65
65
|
if env not in self._instances:
|
|
66
66
|
self._instances[env] = {}
|
|
67
|
-
self._instances[env][store_type] = _get_class_from_type(store_type)(
|
|
67
|
+
self._instances[env][store_type] = _get_class_from_type(store_type)()
|
|
68
68
|
|
|
69
69
|
def get(self, uri: str, config: dict | None = None) -> Store:
|
|
70
70
|
"""
|
|
@@ -26,29 +26,10 @@ class S3StoreConfigurator:
|
|
|
26
26
|
S3StoreEnv.SESSION_TOKEN,
|
|
27
27
|
]
|
|
28
28
|
|
|
29
|
-
def __init__(self, config: dict | None = None) -> None:
|
|
30
|
-
self.configure(config)
|
|
31
|
-
|
|
32
29
|
##############################
|
|
33
30
|
# Configuration methods
|
|
34
31
|
##############################
|
|
35
32
|
|
|
36
|
-
def configure(self, config: dict | None = None) -> None:
|
|
37
|
-
"""
|
|
38
|
-
Configure the store by getting the credentials from user
|
|
39
|
-
provided config or from environment.
|
|
40
|
-
|
|
41
|
-
Parameters
|
|
42
|
-
----------
|
|
43
|
-
config : dict
|
|
44
|
-
Configuration dictionary.
|
|
45
|
-
|
|
46
|
-
Returns
|
|
47
|
-
-------
|
|
48
|
-
None
|
|
49
|
-
"""
|
|
50
|
-
self._get_env_config()
|
|
51
|
-
|
|
52
33
|
def get_boto3_client_config(self, origin: str) -> dict:
|
|
53
34
|
"""
|
|
54
35
|
Get S3 credentials (access key, secret key,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import typing
|
|
4
3
|
from io import BytesIO
|
|
5
4
|
from pathlib import Path
|
|
6
5
|
from typing import Any, Type
|
|
@@ -8,7 +7,7 @@ from urllib.parse import urlparse
|
|
|
8
7
|
|
|
9
8
|
import boto3
|
|
10
9
|
import botocore.client # pylint: disable=unused-import
|
|
11
|
-
from botocore.exceptions import ClientError
|
|
10
|
+
from botocore.exceptions import ClientError, NoCredentialsError
|
|
12
11
|
|
|
13
12
|
from digitalhub.stores.configurator.enums import CredsOrigin
|
|
14
13
|
from digitalhub.stores.data._base.store import Store
|
|
@@ -19,9 +18,6 @@ from digitalhub.utils.exceptions import StoreError
|
|
|
19
18
|
from digitalhub.utils.file_utils import get_file_info_from_s3, get_file_mime_type
|
|
20
19
|
from digitalhub.utils.types import SourcesOrListOfSources
|
|
21
20
|
|
|
22
|
-
if typing.TYPE_CHECKING:
|
|
23
|
-
pass
|
|
24
|
-
|
|
25
21
|
# Type aliases
|
|
26
22
|
S3Client = Type["botocore.client.S3"]
|
|
27
23
|
|
|
@@ -32,10 +28,9 @@ class S3Store(Store):
|
|
|
32
28
|
artifacts on S3 based storage.
|
|
33
29
|
"""
|
|
34
30
|
|
|
35
|
-
def __init__(self
|
|
31
|
+
def __init__(self) -> None:
|
|
36
32
|
super().__init__()
|
|
37
33
|
self._configurator = S3StoreConfigurator()
|
|
38
|
-
self._configurator.configure(config)
|
|
39
34
|
|
|
40
35
|
##############################
|
|
41
36
|
# I/O methods
|
|
@@ -655,7 +650,7 @@ class S3Store(Store):
|
|
|
655
650
|
"""
|
|
656
651
|
try:
|
|
657
652
|
client.head_bucket(Bucket=bucket)
|
|
658
|
-
except ClientError:
|
|
653
|
+
except (ClientError, NoCredentialsError):
|
|
659
654
|
raise StoreError("No access to s3 bucket!")
|
|
660
655
|
|
|
661
656
|
@staticmethod
|
|
@@ -12,31 +12,18 @@ class SqlStoreConfigurator:
|
|
|
12
12
|
provided config or from environment.
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
-
variables = [
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
variables = [
|
|
16
|
+
SqlStoreEnv.USERNAME,
|
|
17
|
+
SqlStoreEnv.PASSWORD,
|
|
18
|
+
SqlStoreEnv.HOST,
|
|
19
|
+
SqlStoreEnv.PORT,
|
|
20
|
+
SqlStoreEnv.DATABASE,
|
|
21
|
+
]
|
|
19
22
|
|
|
20
23
|
##############################
|
|
21
24
|
# Configuration methods
|
|
22
25
|
##############################
|
|
23
26
|
|
|
24
|
-
def configure(self, config: dict | None = None) -> None:
|
|
25
|
-
"""
|
|
26
|
-
Configure the store by getting the credentials from user
|
|
27
|
-
provided config or from environment.
|
|
28
|
-
|
|
29
|
-
Parameters
|
|
30
|
-
----------
|
|
31
|
-
config : dict
|
|
32
|
-
Configuration dictionary.
|
|
33
|
-
|
|
34
|
-
Returns
|
|
35
|
-
-------
|
|
36
|
-
None
|
|
37
|
-
"""
|
|
38
|
-
self._get_env_config()
|
|
39
|
-
|
|
40
27
|
def get_sql_conn_string(self, origin: str) -> str:
|
|
41
28
|
"""
|
|
42
29
|
Get the connection string from environment variables.
|
|
@@ -27,10 +27,9 @@ class SqlStore(Store):
|
|
|
27
27
|
artifacts on SQL based storage.
|
|
28
28
|
"""
|
|
29
29
|
|
|
30
|
-
def __init__(self
|
|
30
|
+
def __init__(self) -> None:
|
|
31
31
|
super().__init__()
|
|
32
32
|
self._configurator = SqlStoreConfigurator()
|
|
33
|
-
self._configurator.configure(config)
|
|
34
33
|
|
|
35
34
|
##############################
|
|
36
35
|
# I/O methods
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: digitalhub
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.3
|
|
4
4
|
Summary: Python SDK for Digitalhub
|
|
5
5
|
Project-URL: Homepage, https://github.com/scc-digitalhub/digitalhub-sdk
|
|
6
6
|
Author-email: Fondazione Bruno Kessler <dslab@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
|
|
@@ -168,8 +168,8 @@ digitalhub/runtimes/builder.py,sha256=CtwutbxRdLo6Qj5PfvmYnCusRG89yS1jI4Qu-Ha3XG
|
|
|
168
168
|
digitalhub/runtimes/enums.py,sha256=hhGNyuBcchqCcDKdR_foOyeNJn41nHCNEyRmoxE5dNA,182
|
|
169
169
|
digitalhub/stores/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
170
170
|
digitalhub/stores/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
171
|
-
digitalhub/stores/client/api.py,sha256=
|
|
172
|
-
digitalhub/stores/client/builder.py,sha256=
|
|
171
|
+
digitalhub/stores/client/api.py,sha256=jERu4_9VXMdCnzhbpNkmL2ks8NWOm85PPDh_uMTfWLc,592
|
|
172
|
+
digitalhub/stores/client/builder.py,sha256=wgMaporY00TS14tICwhYMKuzGkBo-J5yllotRO0Z57U,1182
|
|
173
173
|
digitalhub/stores/client/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
174
174
|
digitalhub/stores/client/_base/api_builder.py,sha256=2-3JPP9Q1xYvBbrxFYaw2cChC6zwDregpRtFwuowdF8,380
|
|
175
175
|
digitalhub/stores/client/_base/client.py,sha256=x0IezwqesbcsDZzx9vxtFwZoiOwIxIgn3kmVNLOkxlQ,3672
|
|
@@ -177,14 +177,14 @@ digitalhub/stores/client/_base/key_builder.py,sha256=xl3jM7z2eLP6HfPXusmZyLqsvfK
|
|
|
177
177
|
digitalhub/stores/client/_base/params_builder.py,sha256=lCk4WE6DqvGP7-cx0anZEC8GtwsA7win7MVqACQQF9g,427
|
|
178
178
|
digitalhub/stores/client/dhcore/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
179
179
|
digitalhub/stores/client/dhcore/api_builder.py,sha256=J1kOMw4B4_PZKkEs7GPNcEkd1w-ZyJeB9G1UBZiMbl0,3975
|
|
180
|
-
digitalhub/stores/client/dhcore/client.py,sha256=
|
|
181
|
-
digitalhub/stores/client/dhcore/configurator.py,sha256=
|
|
180
|
+
digitalhub/stores/client/dhcore/client.py,sha256=dkMOPzYyv6bjkkc_21a2MUwSzUa6x02BzLdtbkDoNrU,9856
|
|
181
|
+
digitalhub/stores/client/dhcore/configurator.py,sha256=fxdYGKeE4HKuRP9l5VsFJNEK466G-1kmj3JzyopzZDU,11013
|
|
182
182
|
digitalhub/stores/client/dhcore/enums.py,sha256=kaVXZTTa2WmsFbcc1CKWNLOM0JtUtcjL-KpspnTOhEE,523
|
|
183
183
|
digitalhub/stores/client/dhcore/error_parser.py,sha256=GJUUkhp12cvC_LBIrC0teh4msmyb5WFxY2g4WNOkUwM,3305
|
|
184
184
|
digitalhub/stores/client/dhcore/key_builder.py,sha256=YuSS5tRNRJTYlH14buetFSCU_bLuBBKLqMFO3MQ6r4g,1324
|
|
185
185
|
digitalhub/stores/client/dhcore/models.py,sha256=WX53m8B9YiUqebH9ZZuUm2fhIWGoqHkagrHn3swOQDI,642
|
|
186
186
|
digitalhub/stores/client/dhcore/params_builder.py,sha256=TOOiZ3UlfgGFbvQpEVfsqnKxlDqgbOHQRxp71o-Z4AU,5847
|
|
187
|
-
digitalhub/stores/client/dhcore/utils.py,sha256=
|
|
187
|
+
digitalhub/stores/client/dhcore/utils.py,sha256=kYRs-3tpOWzbwToHyIjJUoZlEG_w-bK7QFz57JPMQdY,1939
|
|
188
188
|
digitalhub/stores/client/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
189
189
|
digitalhub/stores/client/local/api_builder.py,sha256=nUO92IpPgnXBnPOh2486NzWfqQX4RE2t9nfIUSd-rAg,3043
|
|
190
190
|
digitalhub/stores/client/local/client.py,sha256=Vp93yq_Z-D03SNM6pmZrhThKvAbdgMCUjMFXNV1fUHk,18115
|
|
@@ -193,30 +193,28 @@ digitalhub/stores/client/local/key_builder.py,sha256=bS-a2zc3rklNGuhc94d04_CnL7O
|
|
|
193
193
|
digitalhub/stores/client/local/params_builder.py,sha256=ke8toBUDuSZiSo3WN6jeALnt-EPXZKi8_i5BHJx0HDk,3481
|
|
194
194
|
digitalhub/stores/configurator/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
195
195
|
digitalhub/stores/configurator/api.py,sha256=-dRdkXh99SztWaeRfqztVXhT8f95aVBjDK7JPElj_ug,560
|
|
196
|
-
digitalhub/stores/configurator/configurator.py,sha256=
|
|
196
|
+
digitalhub/stores/configurator/configurator.py,sha256=RLSo9G-kGFO-UCSnY3me0azU58LNxfiS9o0H15X2ngo,4659
|
|
197
197
|
digitalhub/stores/configurator/credentials_store.py,sha256=kiaCm37Sl1SN9OaMbsfZA1l1a9Xg6R6a00H7Upcf8Vg,1508
|
|
198
198
|
digitalhub/stores/configurator/enums.py,sha256=t0R-FJjiWAyEN3w2B6NQuaStohj8mZFQMPHjvFw7Clw,165
|
|
199
|
-
digitalhub/stores/configurator/ini_module.py,sha256=
|
|
199
|
+
digitalhub/stores/configurator/ini_module.py,sha256=VfBPFo-EVrFokDk2j9CtzstlKuxTXtsG1ro-nfTPSfs,2923
|
|
200
200
|
digitalhub/stores/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
201
201
|
digitalhub/stores/data/api.py,sha256=xWOwkqCcmTg2n75C6JBAG9_0UjGXrILJtMABIxysf50,570
|
|
202
|
-
digitalhub/stores/data/builder.py,sha256=
|
|
202
|
+
digitalhub/stores/data/builder.py,sha256=5SEmMQ1Prrele3OQsksBm6CkzinqgnyiUeaHETPZXCs,2340
|
|
203
203
|
digitalhub/stores/data/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
204
204
|
digitalhub/stores/data/_base/store.py,sha256=VC1r7b9EIoObuG2DiqtFk2DQDSOgaS9jYL_UmiOTMHg,5241
|
|
205
205
|
digitalhub/stores/data/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
206
|
-
digitalhub/stores/data/local/store.py,sha256=
|
|
206
|
+
digitalhub/stores/data/local/store.py,sha256=lzagCi_3-bvH5IaMNMNnGGT2mNE-KG_F-CMS45elcMo,7336
|
|
207
207
|
digitalhub/stores/data/remote/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
208
|
-
digitalhub/stores/data/remote/store.py,sha256=
|
|
208
|
+
digitalhub/stores/data/remote/store.py,sha256=9KCFk8Fz1Mr7AK8gEITMh2sMw_jQldNPaVpk5_Oko9w,6098
|
|
209
209
|
digitalhub/stores/data/s3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
210
|
-
digitalhub/stores/data/s3/configurator.py,sha256=
|
|
210
|
+
digitalhub/stores/data/s3/configurator.py,sha256=28cNphR-rhCgd06o-d_rL8hFzd36wwHmIYCaoRTfm5Q,3680
|
|
211
211
|
digitalhub/stores/data/s3/enums.py,sha256=tmSavz83jr6SBW-Gqn4D21TJpFytxvbtbW63htmZG2A,392
|
|
212
|
-
digitalhub/stores/data/s3/
|
|
213
|
-
digitalhub/stores/data/s3/store.py,sha256=pCoJ8DQWHWaXG8DdkTYUycgxzjFGgtFHtNtb4pcelyM,19771
|
|
212
|
+
digitalhub/stores/data/s3/store.py,sha256=obKis2BttQCeG-Ft-48DsxSSa0el3nMwbLOTOzp38QA,19691
|
|
214
213
|
digitalhub/stores/data/s3/utils.py,sha256=Su-7AbIuDItbaA2BSrnl7Tm-BrrqPQPOaDXb06C_BRw,1505
|
|
215
214
|
digitalhub/stores/data/sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
216
|
-
digitalhub/stores/data/sql/configurator.py,sha256=
|
|
215
|
+
digitalhub/stores/data/sql/configurator.py,sha256=CsK8ZUFldgjR3SWCo01-SEWo_7xZdnHSwmC_yxgebgM,3218
|
|
217
216
|
digitalhub/stores/data/sql/enums.py,sha256=FCpmIXxef6SQIX_564a1hYvaSVrpvld8gi7YAv25H-o,284
|
|
218
|
-
digitalhub/stores/data/sql/
|
|
219
|
-
digitalhub/stores/data/sql/store.py,sha256=75piNVIHIZoHIwpHmbo8D9JifATqxXhK42gA35_vN-w,11801
|
|
217
|
+
digitalhub/stores/data/sql/store.py,sha256=hETZ56NtmcH9ZsbqKELX0Z1AXCBrxPnkipZjzcUfPls,11728
|
|
220
218
|
digitalhub/stores/readers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
221
219
|
digitalhub/stores/readers/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
222
220
|
digitalhub/stores/readers/data/api.py,sha256=rHnhzsUWp6s23qVqXcBO3jGkI2IeiWyBictHnOPbBEw,1858
|
|
@@ -238,7 +236,7 @@ digitalhub/utils/io_utils.py,sha256=8jD4Rp_b7LZEpY5JSMxVUowZsnifKnbGpHT5Hijx9-g,
|
|
|
238
236
|
digitalhub/utils/logger.py,sha256=ml3ne6D8wuRdNZ4F6ywmvWotSxjmZWnmKgNiuHb4R5M,437
|
|
239
237
|
digitalhub/utils/types.py,sha256=x8zXsbivD8vdaNeNRZLKOPvGbz6d-59nncuvO0FsueY,109
|
|
240
238
|
digitalhub/utils/uri_utils.py,sha256=6W3ITWcOwlpmA42rmgld7f2t1RpNF2pYXadWpmEQeBM,3832
|
|
241
|
-
digitalhub-0.10.
|
|
242
|
-
digitalhub-0.10.
|
|
243
|
-
digitalhub-0.10.
|
|
244
|
-
digitalhub-0.10.
|
|
239
|
+
digitalhub-0.10.3.dist-info/METADATA,sha256=9F04ShnBo7GRwFe64mbEEUOJEeBq4oIq9-UXwBMscB8,15035
|
|
240
|
+
digitalhub-0.10.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
241
|
+
digitalhub-0.10.3.dist-info/licenses/LICENSE.txt,sha256=qmrTTXPlgU0kSRlRVbjhlyGs1IXs2QPxo_Y-Mn06J0k,11589
|
|
242
|
+
digitalhub-0.10.3.dist-info/RECORD,,
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class S3StoreConfig(BaseModel):
|
|
7
|
-
"""
|
|
8
|
-
S3 store configuration class.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
endpoint_url: str
|
|
12
|
-
"""S3 endpoint URL."""
|
|
13
|
-
|
|
14
|
-
aws_access_key_id: str
|
|
15
|
-
"""AWS access key ID."""
|
|
16
|
-
|
|
17
|
-
aws_secret_access_key: str
|
|
18
|
-
"""AWS secret access key."""
|
|
19
|
-
|
|
20
|
-
bucket_name: str
|
|
21
|
-
"""S3 bucket name."""
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class SqlStoreConfig(BaseModel):
|
|
7
|
-
"""
|
|
8
|
-
SQL store configuration class.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
host: str
|
|
12
|
-
"""SQL host."""
|
|
13
|
-
|
|
14
|
-
port: int
|
|
15
|
-
"""SQL port."""
|
|
16
|
-
|
|
17
|
-
user: str
|
|
18
|
-
"""SQL user."""
|
|
19
|
-
|
|
20
|
-
password: str
|
|
21
|
-
"""SQL password."""
|
|
22
|
-
|
|
23
|
-
database: str
|
|
24
|
-
"""SQL database name."""
|
|
File without changes
|
|
File without changes
|