digitalhub 0.8.1__py3-none-any.whl → 0.9.0__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.

Files changed (134) hide show
  1. digitalhub/__init__.py +19 -2
  2. digitalhub/client/_base/api_builder.py +16 -0
  3. digitalhub/client/_base/client.py +67 -0
  4. digitalhub/client/_base/key_builder.py +52 -0
  5. digitalhub/client/api.py +2 -38
  6. digitalhub/client/dhcore/api_builder.py +100 -0
  7. digitalhub/client/dhcore/client.py +81 -25
  8. digitalhub/client/dhcore/enums.py +27 -0
  9. digitalhub/client/dhcore/env.py +2 -2
  10. digitalhub/client/dhcore/key_builder.py +58 -0
  11. digitalhub/client/dhcore/utils.py +17 -17
  12. digitalhub/client/local/api_builder.py +100 -0
  13. digitalhub/client/local/client.py +22 -0
  14. digitalhub/client/local/key_builder.py +58 -0
  15. digitalhub/context/api.py +3 -38
  16. digitalhub/context/builder.py +10 -23
  17. digitalhub/context/context.py +20 -92
  18. digitalhub/entities/_base/context/entity.py +30 -22
  19. digitalhub/entities/_base/entity/_constructors/metadata.py +12 -1
  20. digitalhub/entities/_base/entity/_constructors/name.py +1 -1
  21. digitalhub/entities/_base/entity/_constructors/spec.py +1 -1
  22. digitalhub/entities/_base/entity/_constructors/status.py +3 -2
  23. digitalhub/entities/_base/entity/builder.py +6 -1
  24. digitalhub/entities/_base/entity/entity.py +32 -10
  25. digitalhub/entities/_base/entity/metadata.py +22 -0
  26. digitalhub/entities/_base/entity/spec.py +7 -2
  27. digitalhub/entities/_base/executable/entity.py +8 -8
  28. digitalhub/entities/_base/material/entity.py +49 -17
  29. digitalhub/entities/_base/material/status.py +0 -31
  30. digitalhub/entities/_base/material/utils.py +106 -0
  31. digitalhub/entities/_base/project/entity.py +341 -0
  32. digitalhub/entities/_base/unversioned/entity.py +3 -24
  33. digitalhub/entities/_base/versioned/entity.py +2 -26
  34. digitalhub/entities/_commons/enums.py +103 -0
  35. digitalhub/entities/_commons/utils.py +83 -0
  36. digitalhub/entities/_operations/processor.py +1873 -0
  37. digitalhub/entities/artifact/_base/builder.py +1 -1
  38. digitalhub/entities/artifact/_base/entity.py +1 -1
  39. digitalhub/entities/artifact/artifact/builder.py +2 -1
  40. digitalhub/entities/artifact/crud.py +46 -29
  41. digitalhub/entities/artifact/utils.py +62 -0
  42. digitalhub/entities/dataitem/_base/builder.py +1 -1
  43. digitalhub/entities/dataitem/_base/entity.py +6 -6
  44. digitalhub/entities/dataitem/crud.py +50 -66
  45. digitalhub/entities/dataitem/dataitem/builder.py +2 -1
  46. digitalhub/entities/dataitem/iceberg/builder.py +2 -1
  47. digitalhub/entities/dataitem/table/builder.py +2 -1
  48. digitalhub/entities/dataitem/table/entity.py +5 -10
  49. digitalhub/entities/dataitem/table/models.py +4 -5
  50. digitalhub/entities/dataitem/utils.py +137 -0
  51. digitalhub/entities/function/_base/builder.py +1 -1
  52. digitalhub/entities/function/_base/entity.py +6 -2
  53. digitalhub/entities/function/crud.py +36 -17
  54. digitalhub/entities/model/_base/builder.py +1 -1
  55. digitalhub/entities/model/_base/entity.py +1 -1
  56. digitalhub/entities/model/crud.py +46 -29
  57. digitalhub/entities/model/huggingface/builder.py +2 -1
  58. digitalhub/entities/model/huggingface/spec.py +4 -2
  59. digitalhub/entities/model/mlflow/builder.py +2 -1
  60. digitalhub/entities/model/mlflow/models.py +17 -9
  61. digitalhub/entities/model/mlflow/spec.py +6 -1
  62. digitalhub/entities/model/mlflow/utils.py +4 -2
  63. digitalhub/entities/model/model/builder.py +2 -1
  64. digitalhub/entities/model/sklearn/builder.py +2 -1
  65. digitalhub/entities/model/utils.py +62 -0
  66. digitalhub/entities/project/_base/builder.py +2 -2
  67. digitalhub/entities/project/_base/entity.py +82 -272
  68. digitalhub/entities/project/crud.py +110 -91
  69. digitalhub/entities/project/utils.py +35 -0
  70. digitalhub/entities/run/_base/builder.py +3 -1
  71. digitalhub/entities/run/_base/entity.py +52 -54
  72. digitalhub/entities/run/_base/spec.py +15 -7
  73. digitalhub/entities/run/crud.py +35 -17
  74. digitalhub/entities/secret/_base/builder.py +2 -2
  75. digitalhub/entities/secret/_base/entity.py +4 -10
  76. digitalhub/entities/secret/crud.py +36 -21
  77. digitalhub/entities/task/_base/builder.py +14 -14
  78. digitalhub/entities/task/_base/entity.py +21 -14
  79. digitalhub/entities/task/_base/models.py +35 -6
  80. digitalhub/entities/task/_base/spec.py +50 -13
  81. digitalhub/entities/task/_base/utils.py +18 -0
  82. digitalhub/entities/task/crud.py +35 -15
  83. digitalhub/entities/workflow/_base/builder.py +1 -1
  84. digitalhub/entities/workflow/_base/entity.py +22 -6
  85. digitalhub/entities/workflow/crud.py +36 -17
  86. digitalhub/factory/utils.py +1 -1
  87. digitalhub/readers/_base/reader.py +2 -2
  88. digitalhub/readers/_commons/enums.py +13 -0
  89. digitalhub/readers/api.py +3 -2
  90. digitalhub/readers/factory.py +12 -6
  91. digitalhub/readers/pandas/reader.py +20 -8
  92. digitalhub/runtimes/_base.py +0 -7
  93. digitalhub/runtimes/enums.py +12 -0
  94. digitalhub/stores/_base/store.py +59 -11
  95. digitalhub/stores/builder.py +5 -5
  96. digitalhub/stores/local/store.py +43 -4
  97. digitalhub/stores/remote/store.py +31 -5
  98. digitalhub/stores/s3/store.py +129 -48
  99. digitalhub/stores/sql/store.py +122 -47
  100. digitalhub/utils/exceptions.py +6 -0
  101. digitalhub/utils/file_utils.py +60 -2
  102. digitalhub/utils/generic_utils.py +45 -4
  103. digitalhub/utils/io_utils.py +18 -0
  104. digitalhub/utils/s3_utils.py +17 -0
  105. digitalhub/utils/uri_utils.py +153 -15
  106. {digitalhub-0.8.1.dist-info → digitalhub-0.9.0.dist-info}/LICENSE.txt +1 -1
  107. {digitalhub-0.8.1.dist-info → digitalhub-0.9.0.dist-info}/METADATA +3 -3
  108. {digitalhub-0.8.1.dist-info → digitalhub-0.9.0.dist-info}/RECORD +116 -114
  109. test/local/instances/test_validate.py +55 -0
  110. test/testkfp.py +4 -1
  111. digitalhub/datastores/_base/datastore.py +0 -85
  112. digitalhub/datastores/api.py +0 -37
  113. digitalhub/datastores/builder.py +0 -110
  114. digitalhub/datastores/local/datastore.py +0 -50
  115. digitalhub/datastores/remote/__init__.py +0 -0
  116. digitalhub/datastores/remote/datastore.py +0 -31
  117. digitalhub/datastores/s3/__init__.py +0 -0
  118. digitalhub/datastores/s3/datastore.py +0 -46
  119. digitalhub/datastores/sql/__init__.py +0 -0
  120. digitalhub/datastores/sql/datastore.py +0 -68
  121. digitalhub/entities/_base/api_utils.py +0 -620
  122. digitalhub/entities/_base/crud.py +0 -468
  123. digitalhub/entities/function/_base/models.py +0 -118
  124. digitalhub/entities/utils/__init__.py +0 -0
  125. digitalhub/entities/utils/api.py +0 -346
  126. digitalhub/entities/utils/entity_types.py +0 -19
  127. digitalhub/entities/utils/state.py +0 -31
  128. digitalhub/entities/utils/utils.py +0 -202
  129. /digitalhub/{context → entities/_base/project}/__init__.py +0 -0
  130. /digitalhub/{datastores → entities/_commons}/__init__.py +0 -0
  131. /digitalhub/{datastores/_base → entities/_operations}/__init__.py +0 -0
  132. /digitalhub/{datastores/local → readers/_commons}/__init__.py +0 -0
  133. {digitalhub-0.8.1.dist-info → digitalhub-0.9.0.dist-info}/WHEEL +0 -0
  134. {digitalhub-0.8.1.dist-info → digitalhub-0.9.0.dist-info}/top_level.txt +0 -0
@@ -1,110 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import typing
4
-
5
- from digitalhub.datastores.local.datastore import LocalDatastore
6
- from digitalhub.datastores.remote.datastore import RemoteDatastore
7
- from digitalhub.datastores.s3.datastore import S3Datastore
8
- from digitalhub.datastores.sql.datastore import SqlDatastore
9
- from digitalhub.stores.api import get_default_store, get_store
10
- from digitalhub.utils.uri_utils import map_uri_scheme
11
-
12
- if typing.TYPE_CHECKING:
13
- from digitalhub.datastores._base.datastore import Datastore
14
- from digitalhub.stores._base.store import Store
15
-
16
-
17
- REGISTRY_DATASTORES = {
18
- "local": LocalDatastore,
19
- "remote": RemoteDatastore,
20
- "s3": S3Datastore,
21
- "sql": SqlDatastore,
22
- }
23
-
24
-
25
- class DatastoreBuilder:
26
- """
27
- Datastore builder class.
28
- """
29
-
30
- def __init__(self) -> None:
31
- self._instances: dict[str, Datastore] = {}
32
- self._default: Datastore | None = None
33
- self._def_scheme = "s3"
34
-
35
- def build(self, uri: str) -> None:
36
- """
37
- Build a datastore instance and register it.
38
- It overrides any existing instance.
39
-
40
- Parameters
41
- ----------
42
- uri : str
43
- URI to parse.
44
-
45
- Returns
46
- -------
47
- None
48
- """
49
- store = get_store(uri)
50
- self._instances[store.type] = self.build_datastore(store)
51
-
52
- def get(self, uri: str) -> Datastore:
53
- """
54
- Get a store instance by URI.
55
-
56
- Parameters
57
- ----------
58
- uri : str
59
- URI to parse.
60
-
61
- Returns
62
- -------
63
- Datastore
64
- The datastore instance.
65
- """
66
- scheme = map_uri_scheme(uri)
67
- if scheme not in self._instances:
68
- self.build(uri)
69
- return self._instances[scheme]
70
-
71
- def default(self) -> Datastore:
72
- """
73
- Get the default store instance.
74
-
75
- Returns
76
- -------
77
- Datastore
78
- The default datastore instance.
79
- """
80
- if self._default is None:
81
- store = get_default_store()
82
- self._default = self.build_datastore(store)
83
- return self._default
84
-
85
- def build_datastore(self, store: Store) -> Datastore:
86
- """
87
- Build a datastore instance.
88
-
89
- Parameters
90
- ----------
91
- store : Store
92
- Store instance.
93
-
94
- Returns
95
- -------
96
- Datastore
97
- The datastore instance.
98
-
99
- Raises
100
- ------
101
- NotImplementedError
102
- If the store type is not implemented.
103
- """
104
- try:
105
- return REGISTRY_DATASTORES[store.type](store)
106
- except KeyError as e:
107
- raise NotImplementedError from e
108
-
109
-
110
- builder = DatastoreBuilder()
@@ -1,50 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import typing
4
- from pathlib import Path
5
- from typing import Any
6
-
7
- from digitalhub.datastores._base.datastore import Datastore
8
- from digitalhub.readers.api import get_reader_by_object
9
-
10
- if typing.TYPE_CHECKING:
11
- from digitalhub.stores.local.store import LocalStore
12
-
13
-
14
- class LocalDatastore(Datastore):
15
- """
16
- Local Datastore class.
17
- """
18
-
19
- def __init__(self, store: LocalStore, **kwargs) -> None:
20
- super().__init__(store, **kwargs)
21
- self.store: LocalStore
22
-
23
- def write_df(self, df: Any, dst: str, extension: str | None = None, **kwargs) -> str:
24
- """
25
- Method to write a dataframe to a file. Kwargs are passed to df.to_parquet().
26
- If destination is not provided, the dataframe is written to the default
27
- store path with generated name.
28
-
29
- Parameters
30
- ----------
31
- df : Any
32
- The dataframe to write.
33
- dst : str
34
- The destination of the dataframe.
35
- **kwargs : dict
36
- Keyword arguments.
37
-
38
- Returns
39
- -------
40
- str
41
- Path of written dataframe.
42
- """
43
- self.store._check_local_dst(dst)
44
- self._validate_extension(Path(dst).suffix.removeprefix("."))
45
-
46
- # Write dataframe
47
- reader = get_reader_by_object(df)
48
- reader.write_df(df, dst, extension=extension, **kwargs)
49
-
50
- return dst
File without changes
@@ -1,31 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import typing
4
- from typing import Any
5
-
6
- from digitalhub.datastores._base.datastore import Datastore
7
-
8
- if typing.TYPE_CHECKING:
9
- from digitalhub.stores.remote.store import RemoteStore
10
-
11
-
12
- class RemoteDatastore(Datastore):
13
- """
14
- Remote Datastore class.
15
- """
16
-
17
- def __init__(self, store: RemoteStore, **kwargs) -> None:
18
- super().__init__(store, **kwargs)
19
- self.store: RemoteStore
20
-
21
- def write_df(self, df: Any, dst: str, extension: str | None = None, **kwargs) -> str:
22
- """
23
- Method to write a dataframe to a file. Note that this method is not implemented
24
- since the remote store is not meant to write dataframes.
25
-
26
- Raises
27
- ------
28
- NotImplementedError
29
- This method is not implemented.
30
- """
31
- raise NotImplementedError("Remote store does not support write_df.")
File without changes
@@ -1,46 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import typing
4
- from io import BytesIO
5
- from typing import Any
6
-
7
- from digitalhub.datastores._base.datastore import Datastore
8
- from digitalhub.readers.api import get_reader_by_object
9
-
10
- if typing.TYPE_CHECKING:
11
- from digitalhub.stores.s3.store import S3Store
12
-
13
-
14
- class S3Datastore(Datastore):
15
- """
16
- S3 Datastore class.
17
- """
18
-
19
- def __init__(self, store: S3Store, **kwargs) -> None:
20
- super().__init__(store, **kwargs)
21
- self.store: S3Store
22
-
23
- def write_df(self, df: Any, dst: str, extension: str | None = None, **kwargs) -> str:
24
- """
25
- Write a dataframe to S3 based storage. Kwargs are passed to df.to_parquet().
26
-
27
- Parameters
28
- ----------
29
- df : Any
30
- The dataframe.
31
- dst : str
32
- The destination path on S3 based storage.
33
- **kwargs : dict
34
- Keyword arguments.
35
-
36
- Returns
37
- -------
38
- str
39
- The S3 path where the dataframe was saved.
40
- """
41
- fileobj = BytesIO()
42
- reader = get_reader_by_object(df)
43
- reader.write_df(df, fileobj, extension=extension, **kwargs)
44
-
45
- key = self.store._get_key(dst)
46
- return self.store.upload_fileobject(fileobj, key)
File without changes
@@ -1,68 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import typing
4
- from typing import Any
5
-
6
- from digitalhub.datastores._base.datastore import Datastore
7
- from digitalhub.readers.api import get_reader_by_object
8
-
9
- if typing.TYPE_CHECKING:
10
- from digitalhub.stores.sql.store import SqlStore
11
-
12
-
13
- class SqlDatastore(Datastore):
14
- """
15
- Sql Datastore class.
16
- """
17
-
18
- def __init__(self, store: SqlStore, **kwargs) -> None:
19
- super().__init__(store, **kwargs)
20
- self.store: SqlStore
21
-
22
- def write_df(self, df: Any, dst: str, extension: str | None = None, **kwargs) -> str:
23
- """
24
- Write a dataframe to a database. Kwargs are passed to df.to_sql().
25
-
26
- Parameters
27
- ----------
28
- df : Any
29
- The dataframe to write.
30
- dst : str
31
- The destination of the dataframe.
32
- **kwargs : dict
33
- Keyword arguments.
34
-
35
- Returns
36
- -------
37
- str
38
- Path of written dataframe.
39
- """
40
- schema = self.store._get_schema(dst)
41
- table = self.store._get_table_name(dst)
42
- return self._upload_table(df, schema, table, **kwargs)
43
-
44
- def _upload_table(self, df: Any, schema: str, table: str, **kwargs) -> str:
45
- """
46
- Upload a table to SQL based storage.
47
-
48
- Parameters
49
- ----------
50
- df : DataFrame
51
- The dataframe.
52
- schema : str
53
- Destination schema.
54
- table : str
55
- Destination table.
56
- **kwargs : dict
57
- Keyword arguments.
58
-
59
- Returns
60
- -------
61
- str
62
- The SQL URI where the dataframe was saved.
63
- """
64
- reader = get_reader_by_object(df)
65
- engine = self.store._check_factory()
66
- reader.write_table(df, table, engine, schema, **kwargs)
67
- engine.dispose()
68
- return f"sql://{engine.url.database}/{schema}/{table}"