digitalhub 0.10.1__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.
@@ -24,4 +24,4 @@ def get_client(local: bool = False, config: dict | None = None) -> Client:
24
24
  Client
25
25
  The client instance.
26
26
  """
27
- return client_builder.build(local, config)
27
+ return client_builder.build(local)
@@ -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, config: dict | None = None) -> Client:
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(config)
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, config: dict | None = None) -> None:
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(config)
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 configure(self, config: dict | None = None) -> None:
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 = configurator.load_var(DhcoreEnvVar.ACCESS_TOKEN.value)
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 = list_enum(DhcoreEnvVar) + list_enum(S3StoreEnv) + list_enum(SqlStoreEnv)
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().removeprefix("dhcore_"))) is not None:
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 = configurator.load_var(DhcoreEnvVar.ISSUER.value)
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
@@ -68,4 +68,5 @@ def refresh_token() -> None:
68
68
  None
69
69
  """
70
70
  client: ClientDHCore = get_client(local=False)
71
+ client._configurator.check_config()
71
72
  client._configurator.get_new_access_token()
@@ -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 = ConfigParser()
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)(config)
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
  """
@@ -17,9 +17,6 @@ class LocalStore(Store):
17
17
  artifacts on local filesystem based storage.
18
18
  """
19
19
 
20
- def __init__(self, config: dict | None = None) -> None:
21
- super().__init__()
22
-
23
20
  ##############################
24
21
  # I/O methods
25
22
  ##############################
@@ -16,9 +16,6 @@ class RemoteStore(Store):
16
16
  artifacts from remote HTTP based storage.
17
17
  """
18
18
 
19
- def __init__(self, config: dict | None = None) -> None:
20
- super().__init__()
21
-
22
19
  ##############################
23
20
  # I/O methods
24
21
  ##############################
@@ -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, config: dict | None = None) -> None:
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 = [SqlStoreEnv.USERNAME, SqlStoreEnv.PASSWORD, SqlStoreEnv.HOST, SqlStoreEnv.PORT, SqlStoreEnv.DATABASE]
16
-
17
- def __init__(self, config: dict | None = None) -> None:
18
- self.configure(config)
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, config: dict | None = None) -> None:
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.1
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>
@@ -230,11 +230,10 @@ Classifier: Programming Language :: Python :: 3.12
230
230
  Requires-Python: <3.13,>=3.9
231
231
  Requires-Dist: boto3
232
232
  Requires-Dist: gitpython>=3
233
- Requires-Dist: numpy<2
233
+ Requires-Dist: numpy
234
234
  Requires-Dist: psycopg2-binary
235
235
  Requires-Dist: pyarrow
236
236
  Requires-Dist: pydantic
237
- Requires-Dist: python-dotenv
238
237
  Requires-Dist: python-slugify
239
238
  Requires-Dist: pyyaml
240
239
  Requires-Dist: requests
@@ -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=BCVQjsuRLz8hWjybuEW-5RHxdX7ryk6KKRWO9Ex2ApU,600
172
- digitalhub/stores/client/builder.py,sha256=7XeCzYmQXWFAX_HHYKH0BFdemdFh4csEM9BJUp2mqMw,1216
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=lZDZipcLu5ZjojTmrim5C5s3NvPsKxMpNALRGyoChqI,9848
181
- digitalhub/stores/client/dhcore/configurator.py,sha256=_7u1CXwRnmyhgYVIHFsvOxOmqKRwlotyLweVUz1yJR0,9331
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=Gmk-jsv0jG3u39sO88HKhjkaP2cNKWN0LhqgyWmMGSI,1899
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=RF1aUBVWenI2HgBzueh9baw_1PVANRWXGW3RqZZSzBQ,4538
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=3NfAFAwIoAV4QhHoY-_4frCk2A2iYANuIvWMbn5vG_Y,1826
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=wnLyncrXOE8YF1Ajdqga57ZHG0OaunR0cT236MTy8XI,2346
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=P8m1LTA_kjTU44_OGrISanp0pfqAOKH2evIuDmRZ-pE,7424
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=dG9hwohwBbQc4t_knPvc1tjKyN7q2po58zveTtcMKb4,6186
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=HO98fZPqyUllSm972j-52_58tf0RElsutGVzkQgszLk,4144
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/models.py,sha256=qeXeL7iP76EBO35wzP6bYeMj-sBOY634Tjwx8h3Di2g,371
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=CfOvuB-3cIb7QFXk9Jo3t1EnrmNL960681rZO_g5apo,3635
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/models.py,sha256=_itIXoCfRLzUpG0OaM44qbv2u87Lyl5e0tmAXNTvfjQ,349
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.1.dist-info/METADATA,sha256=RsV8iZGxrPDoth3CbsFjl5hGe7BMW5zn-H3HZH_FG5A,15066
242
- digitalhub-0.10.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
243
- digitalhub-0.10.1.dist-info/licenses/LICENSE.txt,sha256=qmrTTXPlgU0kSRlRVbjhlyGs1IXs2QPxo_Y-Mn06J0k,11589
244
- digitalhub-0.10.1.dist-info/RECORD,,
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."""