digitalhub 0.8.0b11__py3-none-any.whl → 0.8.0b13__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.

Potentially problematic release.


This version of digitalhub might be problematic. Click here for more details.

@@ -87,7 +87,7 @@ class ClientDHCore(Client):
87
87
  """
88
88
  if "headers" not in kwargs:
89
89
  kwargs["headers"] = {}
90
- kwargs["headers"]['Content-Type'] = "application/json"
90
+ kwargs["headers"]["Content-Type"] = "application/json"
91
91
  kwargs["data"] = json.dumps(obj, default=ClientDHCore._json_serialize)
92
92
  return self._prepare_call("POST", api, **kwargs)
93
93
 
@@ -129,7 +129,7 @@ class ClientDHCore(Client):
129
129
  """
130
130
  if "headers" not in kwargs:
131
131
  kwargs["headers"] = {}
132
- kwargs["headers"]['Content-Type'] = "application/json"
132
+ kwargs["headers"]["Content-Type"] = "application/json"
133
133
  kwargs["data"] = json.dumps(obj, default=ClientDHCore._json_serialize)
134
134
  return self._prepare_call("PUT", api, **kwargs)
135
135
 
@@ -234,7 +234,7 @@ class ClientDHCore(Client):
234
234
  """
235
235
  if isinstance(obj, (datetime.datetime, datetime.date)):
236
236
  return obj.isoformat()
237
- raise TypeError ("Type %s not serializable" % type(obj))
237
+ raise TypeError("Type %s not serializable" % type(obj))
238
238
 
239
239
  def _prepare_call(self, call_type: str, api: str, **kwargs) -> dict:
240
240
  """
@@ -229,7 +229,8 @@ class Project(Entity):
229
229
  # Entity types are stored as a list of entities
230
230
  for idx, entity in enumerate(obj.get("spec", {}).get(entity_type, [])):
231
231
  # Export entity if not embedded is in metadata, else do nothing
232
- if not entity["metadata"]["embedded"]:
232
+ embedded = entity["metadata"].get("embedded", False)
233
+ if not embedded:
233
234
  # Get entity object from backend
234
235
  obj_dict: dict = read_entity_api_ctx(entity["key"])
235
236
 
@@ -243,10 +244,15 @@ class Project(Entity):
243
244
  # Return updated object
244
245
  return obj
245
246
 
246
- def _import_entities(self) -> None:
247
+ def _import_entities(self, obj: dict) -> None:
247
248
  """
248
249
  Import project entities.
249
250
 
251
+ Parameters
252
+ ----------
253
+ obj : dict
254
+ Project object in dictionary format.
255
+
250
256
  Returns
251
257
  -------
252
258
  None
@@ -256,10 +262,9 @@ class Project(Entity):
256
262
  # Cycle over entity types
257
263
  for entity_type in entity_types:
258
264
  # Entity types are stored as a list of entities
259
- for entity in getattr(self.spec, entity_type, []):
260
- entity_metadata = entity["metadata"]
261
- embedded = entity_metadata.get("embedded", False)
262
- ref = entity_metadata.get("ref", None)
265
+ for entity in obj.get("spec", {}).get(entity_type, []):
266
+ embedded = self._is_embedded(entity)
267
+ ref = entity["metadata"].get("ref")
263
268
 
264
269
  # Import entity if not embedded
265
270
  if not embedded and ref is not None:
@@ -278,11 +283,34 @@ class Project(Entity):
278
283
 
279
284
  # If entity is embedded, create it and try to save
280
285
  elif embedded:
286
+ # It's possible that embedded field in metadata is not shown
287
+ if entity["metadata"].get("embedded") is None:
288
+ entity["metadata"]["embedded"] = True
289
+
281
290
  try:
282
291
  build_entity_from_dict(entity).save()
283
292
  except EntityAlreadyExistsError:
284
293
  pass
285
294
 
295
+ def _is_embedded(self, entity: dict) -> bool:
296
+ """
297
+ Check if entity is embedded.
298
+
299
+ Parameters
300
+ ----------
301
+ entity : dict
302
+ Entity in dictionary format.
303
+
304
+ Returns
305
+ -------
306
+ bool
307
+ True if entity is embedded.
308
+ """
309
+ metadata_embedded = entity["metadata"].get("embedded", False)
310
+ no_status = entity.get("status", None) is None
311
+ no_spec = entity.get("spec", None) is None
312
+ return metadata_embedded or not (no_status and no_spec)
313
+
286
314
  def _get_entity_types(self) -> list[str]:
287
315
  """
288
316
  Get entity types.
@@ -9,7 +9,7 @@ from digitalhub.context.api import delete_context
9
9
  from digitalhub.entities._base.api_utils import delete_entity_api_base, read_entity_api_base, update_entity_api_base
10
10
  from digitalhub.entities.utils.entity_types import EntityTypes
11
11
  from digitalhub.factory.api import build_entity_from_dict, build_entity_from_params
12
- from digitalhub.utils.exceptions import BackendError, EntityError
12
+ from digitalhub.utils.exceptions import BackendError, EntityAlreadyExistsError, EntityError
13
13
  from digitalhub.utils.io_utils import read_yaml
14
14
 
15
15
  if typing.TYPE_CHECKING:
@@ -151,8 +151,13 @@ def import_project(
151
151
  obj = build_entity_from_dict(dict_obj)
152
152
  obj = _setup_project(obj, setup_kwargs)
153
153
 
154
+ try:
155
+ obj.save()
156
+ except EntityAlreadyExistsError:
157
+ pass
158
+
154
159
  # Import related entities
155
- obj._import_entities()
160
+ obj._import_entities(dict_obj)
156
161
 
157
162
  return obj
158
163
 
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.entities._base.runtime_entity.builder import RuntimeEntityBuilder, EntityError
5
+ from digitalhub.entities._base.runtime_entity.builder import EntityError, RuntimeEntityBuilder
6
6
  from digitalhub.entities._base.unversioned.builder import UnversionedBuilder
7
7
  from digitalhub.entities.utils.entity_types import EntityTypes
8
8
 
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import typing
4
4
 
5
- from digitalhub.entities._base.runtime_entity.builder import RuntimeEntityBuilder, EntityError
5
+ from digitalhub.entities._base.runtime_entity.builder import EntityError, RuntimeEntityBuilder
6
6
  from digitalhub.entities._base.unversioned.builder import UnversionedBuilder
7
7
  from digitalhub.entities.utils.entity_types import EntityTypes
8
8
 
@@ -37,7 +37,6 @@ def write_yaml(filepath: str | Path, obj: dict | list[dict]) -> None:
37
37
  ##############################
38
38
 
39
39
 
40
-
41
40
  class NoDatesSafeLoader(yaml.SafeLoader):
42
41
  """
43
42
  Loader implementation to exclude implicit resolvers.
@@ -63,15 +62,17 @@ class NoDatesSafeLoader(yaml.SafeLoader):
63
62
  -------
64
63
  None
65
64
  """
66
- if not 'yaml_implicit_resolvers' in cls.__dict__:
65
+ if not "yaml_implicit_resolvers" in cls.__dict__:
67
66
  cls.yaml_implicit_resolvers = cls.yaml_implicit_resolvers.copy()
68
67
 
69
68
  for first_letter, mappings in cls.yaml_implicit_resolvers.items():
70
- cls.yaml_implicit_resolvers[first_letter] = [(tag, regexp)
71
- for tag, regexp in mappings
72
- if tag != tag_to_remove]
69
+ cls.yaml_implicit_resolvers[first_letter] = [
70
+ (tag, regexp) for tag, regexp in mappings if tag != tag_to_remove
71
+ ]
72
+
73
+
74
+ NoDatesSafeLoader.remove_implicit_resolver("tag:yaml.org,2002:timestamp")
73
75
 
74
- NoDatesSafeLoader.remove_implicit_resolver('tag:yaml.org,2002:timestamp')
75
76
 
76
77
  def read_yaml(filepath: str | Path) -> dict | list[dict]:
77
78
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: digitalhub
3
- Version: 0.8.0b11
3
+ Version: 0.8.0b13
4
4
  Summary: Python SDK for Digitalhub
5
5
  Author-email: Fondazione Bruno Kessler <dslab@fbk.eu>, Matteo Martini <mmartini@fbk.eu>
6
6
  License: Apache License
@@ -5,7 +5,7 @@ digitalhub/client/builder.py,sha256=83PoMCus4s4nbkoWmvcjW2hIpXbNx74sUW93wgQgbuo,
5
5
  digitalhub/client/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  digitalhub/client/_base/client.py,sha256=HDv9Vr9DZpoaZVsAT5SSBD9j1oHoVuxA4ILGDl0mBz4,1299
7
7
  digitalhub/client/dhcore/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- digitalhub/client/dhcore/client.py,sha256=CyCJwPgMqK3hH3nfnRLkNL9XU_lvcXiw0W7phfA_1d8,19170
8
+ digitalhub/client/dhcore/client.py,sha256=eh-IQu72Kz4K82uUlMRtatQAQNymvOCMJZZPjB9TdqQ,19169
9
9
  digitalhub/client/dhcore/env.py,sha256=F5A5dPTliwd4UUbpw7hQQ3hoVjZYjcVF8MbniTuTFHE,563
10
10
  digitalhub/client/dhcore/models.py,sha256=KiTg5xR8EzI7Xa1pmYmzixabLdnqlnn5kn-IILZDGIw,900
11
11
  digitalhub/client/dhcore/utils.py,sha256=TaLjA3LT6heKpPclmufZx-kZKZNOe4OzS_Jtpj2S5wY,2990
@@ -136,16 +136,16 @@ digitalhub/entities/model/sklearn/entity.py,sha256=pPy4mOqOmbkqNkKFUnhrsIQNt2mGN
136
136
  digitalhub/entities/model/sklearn/spec.py,sha256=Md0aKlfNHZ2fhZbJgp9wZxF0Hu6XIkcniQHCgwoRdkk,301
137
137
  digitalhub/entities/model/sklearn/status.py,sha256=eqkPPtERX-6_BjPb_GD8j1FIeavpl43k-dfXZGqzGI0,187
138
138
  digitalhub/entities/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
- digitalhub/entities/project/crud.py,sha256=ih3mwEJ7bbD3HG9S-8YMu4UyTJMmIZT-mB1m2FGzLz8,8858
139
+ digitalhub/entities/project/crud.py,sha256=P2IhKR2-YNmiNy0rpu0PG-LKD9nJGKsAahxvhsovmJA,8971
140
140
  digitalhub/entities/project/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
141
  digitalhub/entities/project/_base/builder.py,sha256=Fx_p8M75SkE_ssVBvKGu45wwqwqAZ5N6l6UZZj9LSNc,3612
142
- digitalhub/entities/project/_base/entity.py,sha256=pKlRTpbM7_ctGip8Emj7Qe9UbhZxuvsLRtrWXtO3Gjs,52680
142
+ digitalhub/entities/project/_base/entity.py,sha256=nkPrYyn18xrglWT9WZICJ9SyLmmaupMJOL7ce4qeNKY,53532
143
143
  digitalhub/entities/project/_base/spec.py,sha256=zRJKFztK7z79LU4spxX7Rykv_1sK6kV9F9Qg95HBc6s,1346
144
144
  digitalhub/entities/project/_base/status.py,sha256=w1Hj_yFwr_5X7ZH7SmtZRto4qUdCWb010viFfvbqX48,168
145
145
  digitalhub/entities/run/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
146
146
  digitalhub/entities/run/crud.py,sha256=F-t9pI0NPKt0430SwGMdL7ky2eprXqUf6UUz9GzCgGQ,4369
147
147
  digitalhub/entities/run/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
148
- digitalhub/entities/run/_base/builder.py,sha256=7FpgCUGFr0yCgnUCYuQLLH7_aOZNrByt7fqsWgr5tEg,2427
148
+ digitalhub/entities/run/_base/builder.py,sha256=T1kRlKHQlKPRepXIFr_hecaOmaS6E49L45WZvE7yCpo,2427
149
149
  digitalhub/entities/run/_base/entity.py,sha256=H0YViqBYxLQRDnqXUNXoUrxnfxd6Q5jJJu0hCeus4ig,7894
150
150
  digitalhub/entities/run/_base/spec.py,sha256=XXPZ5Fl5yLA74XCiuaCjdDGIqMIQ7K1a5cVnDXuohec,1388
151
151
  digitalhub/entities/run/_base/status.py,sha256=_oqF8AM-N6XGi-xc-xgthdmCpsuI_rGgVaNKgQ4UDJQ,160
@@ -159,7 +159,7 @@ digitalhub/entities/secret/_base/status.py,sha256=TK9CUKA6eg9qegqgR9t-u1g-vEeFGB
159
159
  digitalhub/entities/task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
160
  digitalhub/entities/task/crud.py,sha256=_DOnCpuBNPWgk4RP1wvgAxNiEa8Bh3MzHQpkRNyqKjk,4666
161
161
  digitalhub/entities/task/_base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
- digitalhub/entities/task/_base/builder.py,sha256=6UsCo-j5NJH1H_P2CZDYQI78dpuAqNjtwniNKjd_z5g,2320
162
+ digitalhub/entities/task/_base/builder.py,sha256=8NXl9Mp3zjHd1E3mawUVjzOcccpcUE18_dkLMhehVBA,2320
163
163
  digitalhub/entities/task/_base/entity.py,sha256=ihGyXV_MDNUnmNOj5uWSkHA2IR8UAF_jfmFQyTH1DH8,3127
164
164
  digitalhub/entities/task/_base/models.py,sha256=Vkequ03zsI1n4L-VGO0vMYDnrhK63rB5I0NshB3s6k4,4254
165
165
  digitalhub/entities/task/_base/spec.py,sha256=wc9-i0VguS99WG4jQhYF3s2d_mwwtg_Yrkm8RbDa_vk,1289
@@ -211,7 +211,7 @@ digitalhub/utils/exceptions.py,sha256=MjLhgaGSAe0oJXoR-dnEtAh02RYDj3wZ1ZS1SLFUD4
211
211
  digitalhub/utils/file_utils.py,sha256=Qe71D2b6mOil_Y0Hy2QCJbnIaQOyXvhjFRbJoZXhsGQ,4006
212
212
  digitalhub/utils/generic_utils.py,sha256=YHWCCF77JFqgm4TNr3_U2GbX4SjEQjUmxA6i9PkRqG8,3527
213
213
  digitalhub/utils/git_utils.py,sha256=aFYL1cpfY-2VnlW7eHmjjjlTLECc5UUUfjb_IQPOY5k,3244
214
- digitalhub/utils/io_utils.py,sha256=ggHX10QTM8Glu2IKZ9QAIaCmW7iPvQjgwEe5LRkXzho,3080
214
+ digitalhub/utils/io_utils.py,sha256=Yg24Lt_0aAUaj4Yv5-1iy7VIA0umLxQGW6lkDRWcjrE,2997
215
215
  digitalhub/utils/logger.py,sha256=ml3ne6D8wuRdNZ4F6ywmvWotSxjmZWnmKgNiuHb4R5M,437
216
216
  digitalhub/utils/s3_utils.py,sha256=oXLzp4K7o45IwK0XOMt4OElDyB09fKRic5WTNA82WUA,1113
217
217
  digitalhub/utils/uri_utils.py,sha256=wArWRQ3ygGUNHexGKP3YM-aBE7TyGxhPvfEc7R4T4p4,1144
@@ -224,8 +224,8 @@ test/local/CRUD/test_artifacts.py,sha256=Y3J_C7SDRSsQd2SGIZjPIOvyTL92B1sTFrUONG3
224
224
  test/local/CRUD/test_dataitems.py,sha256=LQqTzI59uwTGy4zoq8jL0yWVe2W9vXlatkgDU9aB6xg,2968
225
225
  test/local/CRUD/test_models.py,sha256=msosbZuRwIMbZtmi3ZaOva4TjQ4lrzkNu9AguIFhrSo,2929
226
226
  test/local/imports/test_imports.py,sha256=W-YugO0rpJwvtWp57MXaXfEmE-f5iWuCiLY-n0ZU4z8,1271
227
- digitalhub-0.8.0b11.dist-info/LICENSE.txt,sha256=_yVOtnbW7Ss28mp058UEEc1X4Rgj8-kQBP_kj8_Sc88,11585
228
- digitalhub-0.8.0b11.dist-info/METADATA,sha256=WzRECOzwiBp6biINFlZtPTLzrc4Xk7v-PsD02omQsd8,15289
229
- digitalhub-0.8.0b11.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
230
- digitalhub-0.8.0b11.dist-info/top_level.txt,sha256=ae9pDfCF27ZoaVAxuBKONMP0lm5P-N_I-e-no1WlvD8,16
231
- digitalhub-0.8.0b11.dist-info/RECORD,,
227
+ digitalhub-0.8.0b13.dist-info/LICENSE.txt,sha256=_yVOtnbW7Ss28mp058UEEc1X4Rgj8-kQBP_kj8_Sc88,11585
228
+ digitalhub-0.8.0b13.dist-info/METADATA,sha256=nGqQ6XVBy4IemsnJhaksOtDXpUrHOzcikQJW3TRkhoI,15289
229
+ digitalhub-0.8.0b13.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
230
+ digitalhub-0.8.0b13.dist-info/top_level.txt,sha256=ae9pDfCF27ZoaVAxuBKONMP0lm5P-N_I-e-no1WlvD8,16
231
+ digitalhub-0.8.0b13.dist-info/RECORD,,