digitalhub 0.7.0b2__py3-none-any.whl → 0.8.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.
- digitalhub/__init__.py +63 -93
- digitalhub/client/__init__.py +0 -0
- digitalhub/client/_base/__init__.py +0 -0
- digitalhub/client/_base/client.py +56 -0
- digitalhub/client/api.py +63 -0
- digitalhub/client/builder.py +50 -0
- digitalhub/client/dhcore/__init__.py +0 -0
- digitalhub/client/dhcore/client.py +669 -0
- digitalhub/client/dhcore/env.py +21 -0
- digitalhub/client/dhcore/models.py +46 -0
- digitalhub/client/dhcore/utils.py +111 -0
- digitalhub/client/local/__init__.py +0 -0
- digitalhub/client/local/client.py +533 -0
- digitalhub/context/__init__.py +0 -0
- digitalhub/context/api.py +93 -0
- digitalhub/context/builder.py +94 -0
- digitalhub/context/context.py +136 -0
- digitalhub/datastores/__init__.py +0 -0
- digitalhub/datastores/_base/__init__.py +0 -0
- digitalhub/datastores/_base/datastore.py +85 -0
- digitalhub/datastores/api.py +37 -0
- digitalhub/datastores/builder.py +110 -0
- digitalhub/datastores/local/__init__.py +0 -0
- digitalhub/datastores/local/datastore.py +50 -0
- digitalhub/datastores/remote/__init__.py +0 -0
- digitalhub/datastores/remote/datastore.py +31 -0
- digitalhub/datastores/s3/__init__.py +0 -0
- digitalhub/datastores/s3/datastore.py +46 -0
- digitalhub/datastores/sql/__init__.py +0 -0
- digitalhub/datastores/sql/datastore.py +68 -0
- digitalhub/entities/__init__.py +0 -0
- digitalhub/entities/_base/__init__.py +0 -0
- digitalhub/entities/_base/_base/__init__.py +0 -0
- digitalhub/entities/_base/_base/entity.py +82 -0
- digitalhub/entities/_base/api_utils.py +620 -0
- digitalhub/entities/_base/context/__init__.py +0 -0
- digitalhub/entities/_base/context/entity.py +118 -0
- digitalhub/entities/_base/crud.py +468 -0
- digitalhub/entities/_base/entity/__init__.py +0 -0
- digitalhub/entities/_base/entity/_constructors/__init__.py +0 -0
- digitalhub/entities/_base/entity/_constructors/metadata.py +44 -0
- digitalhub/entities/_base/entity/_constructors/name.py +31 -0
- digitalhub/entities/_base/entity/_constructors/spec.py +33 -0
- digitalhub/entities/_base/entity/_constructors/status.py +52 -0
- digitalhub/entities/_base/entity/_constructors/uuid.py +26 -0
- digitalhub/entities/_base/entity/builder.py +175 -0
- digitalhub/entities/_base/entity/entity.py +106 -0
- digitalhub/entities/_base/entity/metadata.py +59 -0
- digitalhub/entities/_base/entity/spec.py +58 -0
- digitalhub/entities/_base/entity/status.py +43 -0
- digitalhub/entities/_base/executable/__init__.py +0 -0
- digitalhub/entities/_base/executable/entity.py +405 -0
- digitalhub/entities/_base/material/__init__.py +0 -0
- digitalhub/entities/_base/material/entity.py +214 -0
- digitalhub/entities/_base/material/spec.py +22 -0
- digitalhub/entities/_base/material/status.py +49 -0
- digitalhub/entities/_base/runtime_entity/__init__.py +0 -0
- digitalhub/entities/_base/runtime_entity/builder.py +106 -0
- digitalhub/entities/_base/unversioned/__init__.py +0 -0
- digitalhub/entities/_base/unversioned/builder.py +66 -0
- digitalhub/entities/_base/unversioned/entity.py +49 -0
- digitalhub/entities/_base/versioned/__init__.py +0 -0
- digitalhub/entities/_base/versioned/builder.py +68 -0
- digitalhub/entities/_base/versioned/entity.py +53 -0
- digitalhub/entities/artifact/__init__.py +0 -0
- digitalhub/entities/artifact/_base/__init__.py +0 -0
- digitalhub/entities/artifact/_base/builder.py +86 -0
- digitalhub/entities/artifact/_base/entity.py +39 -0
- digitalhub/entities/artifact/_base/spec.py +15 -0
- digitalhub/entities/artifact/_base/status.py +9 -0
- digitalhub/entities/artifact/artifact/__init__.py +0 -0
- digitalhub/entities/artifact/artifact/builder.py +18 -0
- digitalhub/entities/artifact/artifact/entity.py +32 -0
- digitalhub/entities/artifact/artifact/spec.py +27 -0
- digitalhub/entities/artifact/artifact/status.py +15 -0
- digitalhub/entities/artifact/crud.py +332 -0
- digitalhub/entities/builders.py +63 -0
- digitalhub/entities/dataitem/__init__.py +0 -0
- digitalhub/entities/dataitem/_base/__init__.py +0 -0
- digitalhub/entities/dataitem/_base/builder.py +86 -0
- digitalhub/entities/dataitem/_base/entity.py +75 -0
- digitalhub/entities/dataitem/_base/spec.py +15 -0
- digitalhub/entities/dataitem/_base/status.py +20 -0
- digitalhub/entities/dataitem/crud.py +372 -0
- digitalhub/entities/dataitem/dataitem/__init__.py +0 -0
- digitalhub/entities/dataitem/dataitem/builder.py +18 -0
- digitalhub/entities/dataitem/dataitem/entity.py +32 -0
- digitalhub/entities/dataitem/dataitem/spec.py +15 -0
- digitalhub/entities/dataitem/dataitem/status.py +9 -0
- digitalhub/entities/dataitem/iceberg/__init__.py +0 -0
- digitalhub/entities/dataitem/iceberg/builder.py +18 -0
- digitalhub/entities/dataitem/iceberg/entity.py +32 -0
- digitalhub/entities/dataitem/iceberg/spec.py +15 -0
- digitalhub/entities/dataitem/iceberg/status.py +9 -0
- digitalhub/entities/dataitem/table/__init__.py +0 -0
- digitalhub/entities/dataitem/table/builder.py +18 -0
- digitalhub/entities/dataitem/table/entity.py +146 -0
- digitalhub/entities/dataitem/table/models.py +62 -0
- digitalhub/entities/dataitem/table/spec.py +25 -0
- digitalhub/entities/dataitem/table/status.py +9 -0
- digitalhub/entities/function/__init__.py +0 -0
- digitalhub/entities/function/_base/__init__.py +0 -0
- digitalhub/entities/function/_base/builder.py +79 -0
- digitalhub/entities/function/_base/entity.py +98 -0
- digitalhub/entities/function/_base/models.py +118 -0
- digitalhub/entities/function/_base/spec.py +15 -0
- digitalhub/entities/function/_base/status.py +9 -0
- digitalhub/entities/function/crud.py +279 -0
- digitalhub/entities/model/__init__.py +0 -0
- digitalhub/entities/model/_base/__init__.py +0 -0
- digitalhub/entities/model/_base/builder.py +86 -0
- digitalhub/entities/model/_base/entity.py +34 -0
- digitalhub/entities/model/_base/spec.py +49 -0
- digitalhub/entities/model/_base/status.py +9 -0
- digitalhub/entities/model/crud.py +331 -0
- digitalhub/entities/model/huggingface/__init__.py +0 -0
- digitalhub/entities/model/huggingface/builder.py +18 -0
- digitalhub/entities/model/huggingface/entity.py +32 -0
- digitalhub/entities/model/huggingface/spec.py +36 -0
- digitalhub/entities/model/huggingface/status.py +9 -0
- digitalhub/entities/model/mlflow/__init__.py +0 -0
- digitalhub/entities/model/mlflow/builder.py +18 -0
- digitalhub/entities/model/mlflow/entity.py +32 -0
- digitalhub/entities/model/mlflow/models.py +26 -0
- digitalhub/entities/model/mlflow/spec.py +44 -0
- digitalhub/entities/model/mlflow/status.py +9 -0
- digitalhub/entities/model/mlflow/utils.py +81 -0
- digitalhub/entities/model/model/__init__.py +0 -0
- digitalhub/entities/model/model/builder.py +18 -0
- digitalhub/entities/model/model/entity.py +32 -0
- digitalhub/entities/model/model/spec.py +15 -0
- digitalhub/entities/model/model/status.py +9 -0
- digitalhub/entities/model/sklearn/__init__.py +0 -0
- digitalhub/entities/model/sklearn/builder.py +18 -0
- digitalhub/entities/model/sklearn/entity.py +32 -0
- digitalhub/entities/model/sklearn/spec.py +15 -0
- digitalhub/entities/model/sklearn/status.py +9 -0
- digitalhub/entities/project/__init__.py +0 -0
- digitalhub/entities/project/_base/__init__.py +0 -0
- digitalhub/entities/project/_base/builder.py +128 -0
- digitalhub/entities/project/_base/entity.py +2078 -0
- digitalhub/entities/project/_base/spec.py +50 -0
- digitalhub/entities/project/_base/status.py +9 -0
- digitalhub/entities/project/crud.py +357 -0
- digitalhub/entities/run/__init__.py +0 -0
- digitalhub/entities/run/_base/__init__.py +0 -0
- digitalhub/entities/run/_base/builder.py +94 -0
- digitalhub/entities/run/_base/entity.py +307 -0
- digitalhub/entities/run/_base/spec.py +50 -0
- digitalhub/entities/run/_base/status.py +9 -0
- digitalhub/entities/run/crud.py +219 -0
- digitalhub/entities/secret/__init__.py +0 -0
- digitalhub/entities/secret/_base/__init__.py +0 -0
- digitalhub/entities/secret/_base/builder.py +81 -0
- digitalhub/entities/secret/_base/entity.py +74 -0
- digitalhub/entities/secret/_base/spec.py +35 -0
- digitalhub/entities/secret/_base/status.py +9 -0
- digitalhub/entities/secret/crud.py +290 -0
- digitalhub/entities/task/__init__.py +0 -0
- digitalhub/entities/task/_base/__init__.py +0 -0
- digitalhub/entities/task/_base/builder.py +91 -0
- digitalhub/entities/task/_base/entity.py +136 -0
- digitalhub/entities/task/_base/models.py +208 -0
- digitalhub/entities/task/_base/spec.py +53 -0
- digitalhub/entities/task/_base/status.py +9 -0
- digitalhub/entities/task/crud.py +228 -0
- digitalhub/entities/utils/__init__.py +0 -0
- digitalhub/entities/utils/api.py +346 -0
- digitalhub/entities/utils/entity_types.py +19 -0
- digitalhub/entities/utils/state.py +31 -0
- digitalhub/entities/utils/utils.py +202 -0
- digitalhub/entities/workflow/__init__.py +0 -0
- digitalhub/entities/workflow/_base/__init__.py +0 -0
- digitalhub/entities/workflow/_base/builder.py +79 -0
- digitalhub/entities/workflow/_base/entity.py +74 -0
- digitalhub/entities/workflow/_base/spec.py +15 -0
- digitalhub/entities/workflow/_base/status.py +9 -0
- digitalhub/entities/workflow/crud.py +278 -0
- digitalhub/factory/__init__.py +0 -0
- digitalhub/factory/api.py +277 -0
- digitalhub/factory/factory.py +268 -0
- digitalhub/factory/utils.py +90 -0
- digitalhub/readers/__init__.py +0 -0
- digitalhub/readers/_base/__init__.py +0 -0
- digitalhub/readers/_base/builder.py +26 -0
- digitalhub/readers/_base/reader.py +70 -0
- digitalhub/readers/api.py +80 -0
- digitalhub/readers/factory.py +133 -0
- digitalhub/readers/pandas/__init__.py +0 -0
- digitalhub/readers/pandas/builder.py +29 -0
- digitalhub/readers/pandas/reader.py +207 -0
- digitalhub/runtimes/__init__.py +0 -0
- digitalhub/runtimes/_base.py +102 -0
- digitalhub/runtimes/builder.py +32 -0
- digitalhub/stores/__init__.py +0 -0
- digitalhub/stores/_base/__init__.py +0 -0
- digitalhub/stores/_base/store.py +189 -0
- digitalhub/stores/api.py +54 -0
- digitalhub/stores/builder.py +211 -0
- digitalhub/stores/local/__init__.py +0 -0
- digitalhub/stores/local/store.py +230 -0
- digitalhub/stores/remote/__init__.py +0 -0
- digitalhub/stores/remote/store.py +143 -0
- digitalhub/stores/s3/__init__.py +0 -0
- digitalhub/stores/s3/store.py +563 -0
- digitalhub/stores/sql/__init__.py +0 -0
- digitalhub/stores/sql/store.py +328 -0
- digitalhub/utils/__init__.py +0 -0
- digitalhub/utils/data_utils.py +127 -0
- digitalhub/utils/exceptions.py +67 -0
- digitalhub/utils/file_utils.py +204 -0
- digitalhub/utils/generic_utils.py +183 -0
- digitalhub/utils/git_utils.py +148 -0
- digitalhub/utils/io_utils.py +116 -0
- digitalhub/utils/logger.py +17 -0
- digitalhub/utils/s3_utils.py +58 -0
- digitalhub/utils/uri_utils.py +56 -0
- {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/METADATA +30 -13
- digitalhub-0.8.0.dist-info/RECORD +231 -0
- {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/WHEEL +1 -1
- test/local/CRUD/test_artifacts.py +96 -0
- test/local/CRUD/test_dataitems.py +96 -0
- test/local/CRUD/test_models.py +95 -0
- test/test_crud_functions.py +1 -1
- test/test_crud_runs.py +1 -1
- test/test_crud_tasks.py +1 -1
- digitalhub-0.7.0b2.dist-info/RECORD +0 -14
- test/test_crud_artifacts.py +0 -96
- test/test_crud_dataitems.py +0 -96
- {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/LICENSE.txt +0 -0
- {digitalhub-0.7.0b2.dist-info → digitalhub-0.8.0.dist-info}/top_level.txt +0 -0
- /test/{test_imports.py → local/imports/test_imports.py} +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities.model._base.spec import ModelSpec, ModelValidator
|
|
4
|
+
from digitalhub.entities.model.mlflow.models import Dataset, Signature
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ModelSpecMlflow(ModelSpec):
|
|
8
|
+
"""
|
|
9
|
+
ModelSpecMlflow specifications.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
def __init__(
|
|
13
|
+
self,
|
|
14
|
+
path: str,
|
|
15
|
+
framework: str | None = None,
|
|
16
|
+
algorithm: str | None = None,
|
|
17
|
+
base_model: str | None = None,
|
|
18
|
+
parameters: dict | None = None,
|
|
19
|
+
metrics: dict | None = None,
|
|
20
|
+
flavor: str | None = None,
|
|
21
|
+
model_config: dict | None = None,
|
|
22
|
+
input_datasets: list[Dataset] | None = None,
|
|
23
|
+
signature: Signature = None,
|
|
24
|
+
) -> None:
|
|
25
|
+
super().__init__(path, framework, algorithm, base_model, parameters, metrics)
|
|
26
|
+
self.flavor = flavor
|
|
27
|
+
self.model_config = model_config
|
|
28
|
+
self.input_datasets = input_datasets
|
|
29
|
+
self.signature = signature
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class ModelValidatorMlflow(ModelValidator):
|
|
33
|
+
"""
|
|
34
|
+
ModelValidatorMlflow validator.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
flavor: str = None
|
|
38
|
+
"""Mlflow model flavor."""
|
|
39
|
+
model_config: dict = None
|
|
40
|
+
"""Mlflow model config."""
|
|
41
|
+
input_datasets: list[Dataset] = None
|
|
42
|
+
"""Mlflow input datasets."""
|
|
43
|
+
signature: Signature = None
|
|
44
|
+
"""Mlflow model signature."""
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
from urllib.parse import urlparse
|
|
2
|
+
|
|
3
|
+
import mlflow
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities.model.mlflow.models import Dataset, Signature
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def from_mlflow_run(run_id: str) -> dict:
|
|
9
|
+
"""
|
|
10
|
+
Extract from mlflow run spec for Digitalhub Model.
|
|
11
|
+
|
|
12
|
+
Parameters
|
|
13
|
+
----------
|
|
14
|
+
run_id : str
|
|
15
|
+
The id of the mlflow run.
|
|
16
|
+
|
|
17
|
+
Returns
|
|
18
|
+
-------
|
|
19
|
+
dict
|
|
20
|
+
The extracted spec.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
# Get MLFlow run
|
|
24
|
+
client = mlflow.MlflowClient()
|
|
25
|
+
run = client.get_run(run_id)
|
|
26
|
+
|
|
27
|
+
# Extract spec
|
|
28
|
+
data = run.data
|
|
29
|
+
parameters = data.params
|
|
30
|
+
metrics = data.metrics
|
|
31
|
+
source_path = urlparse(run.info.artifact_uri).path
|
|
32
|
+
model_uri = f"runs:/{run_id}/model"
|
|
33
|
+
model = mlflow.pyfunc.load_model(model_uri=model_uri)
|
|
34
|
+
model_config = model.model_config
|
|
35
|
+
flavor = None
|
|
36
|
+
for f in model.metadata.flavors:
|
|
37
|
+
if f != "python_function":
|
|
38
|
+
flavor = f
|
|
39
|
+
break
|
|
40
|
+
|
|
41
|
+
# Extract signature
|
|
42
|
+
mlflow_signature = model.metadata.signature
|
|
43
|
+
signature = Signature(
|
|
44
|
+
inputs=mlflow_signature.inputs.to_json() if mlflow_signature.inputs else None,
|
|
45
|
+
outputs=mlflow_signature.outputs.to_json() if mlflow_signature.outputs else None,
|
|
46
|
+
params=mlflow_signature.params.to_json() if mlflow_signature.params else None,
|
|
47
|
+
).dict()
|
|
48
|
+
|
|
49
|
+
# Extract datasets
|
|
50
|
+
datasets = []
|
|
51
|
+
if run.inputs and run.inputs.dataset_inputs:
|
|
52
|
+
datasets = [
|
|
53
|
+
Dataset(
|
|
54
|
+
name=d.dataset.name,
|
|
55
|
+
digest=d.dataset.digest,
|
|
56
|
+
profile=d.dataset.profile,
|
|
57
|
+
schema=d.dataset.schema,
|
|
58
|
+
source=d.dataset.source,
|
|
59
|
+
source_type=d.dataset.source_type,
|
|
60
|
+
).dict()
|
|
61
|
+
for d in run.inputs.dataset_inputs
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
# Create model params
|
|
65
|
+
model_params = {}
|
|
66
|
+
|
|
67
|
+
# source path
|
|
68
|
+
model_params["source"] = source_path
|
|
69
|
+
|
|
70
|
+
# common properties
|
|
71
|
+
model_params["framework"] = flavor
|
|
72
|
+
model_params["parameters"] = parameters
|
|
73
|
+
model_params["metrics"] = metrics
|
|
74
|
+
|
|
75
|
+
# specific to MLFlow
|
|
76
|
+
model_params["flavor"] = flavor
|
|
77
|
+
model_params["model_config"] = model_config
|
|
78
|
+
model_params["input_datasets"] = datasets
|
|
79
|
+
model_params["signature"] = signature
|
|
80
|
+
|
|
81
|
+
return model_params
|
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities.model._base.builder import ModelBuilder
|
|
4
|
+
from digitalhub.entities.model.model.entity import ModelModel
|
|
5
|
+
from digitalhub.entities.model.model.spec import ModelSpecModel, ModelValidatorModel
|
|
6
|
+
from digitalhub.entities.model.model.status import ModelStatusModel
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ModelMlflowBuilder(ModelBuilder):
|
|
10
|
+
"""
|
|
11
|
+
ModelModel builder.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
ENTITY_CLASS = ModelModel
|
|
15
|
+
ENTITY_SPEC_CLASS = ModelSpecModel
|
|
16
|
+
ENTITY_SPEC_VALIDATOR = ModelValidatorModel
|
|
17
|
+
ENTITY_STATUS_CLASS = ModelStatusModel
|
|
18
|
+
ENTITY_KIND = "model"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities.model._base.entity import Model
|
|
6
|
+
|
|
7
|
+
if typing.TYPE_CHECKING:
|
|
8
|
+
from digitalhub.entities._base.entity.metadata import Metadata
|
|
9
|
+
from digitalhub.entities.model.model.spec import ModelSpecModel
|
|
10
|
+
from digitalhub.entities.model.model.status import ModelStatusModel
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ModelModel(Model):
|
|
14
|
+
"""
|
|
15
|
+
ModelModel class.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
project: str,
|
|
21
|
+
name: str,
|
|
22
|
+
uuid: str,
|
|
23
|
+
kind: str,
|
|
24
|
+
metadata: Metadata,
|
|
25
|
+
spec: ModelSpecModel,
|
|
26
|
+
status: ModelStatusModel,
|
|
27
|
+
user: str | None = None,
|
|
28
|
+
) -> None:
|
|
29
|
+
super().__init__(project, name, uuid, kind, metadata, spec, status, user)
|
|
30
|
+
|
|
31
|
+
self.spec: ModelSpecModel
|
|
32
|
+
self.status: ModelStatusModel
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities.model._base.spec import ModelSpec, ModelValidator
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ModelSpecModel(ModelSpec):
|
|
7
|
+
"""
|
|
8
|
+
ModelSpecModel specifications.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ModelValidatorModel(ModelValidator):
|
|
13
|
+
"""
|
|
14
|
+
ModelValidatorModel validator.
|
|
15
|
+
"""
|
|
File without changes
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities.model._base.builder import ModelBuilder
|
|
4
|
+
from digitalhub.entities.model.sklearn.entity import ModelSklearn
|
|
5
|
+
from digitalhub.entities.model.sklearn.spec import ModelSpecSklearn, ModelValidatorSklearn
|
|
6
|
+
from digitalhub.entities.model.sklearn.status import ModelStatusSklearn
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ModelSklearnBuilder(ModelBuilder):
|
|
10
|
+
"""
|
|
11
|
+
ModelSklearn builder.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
ENTITY_CLASS = ModelSklearn
|
|
15
|
+
ENTITY_SPEC_CLASS = ModelSpecSklearn
|
|
16
|
+
ENTITY_SPEC_VALIDATOR = ModelValidatorSklearn
|
|
17
|
+
ENTITY_STATUS_CLASS = ModelStatusSklearn
|
|
18
|
+
ENTITY_KIND = "sklearn"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities.model._base.entity import Model
|
|
6
|
+
|
|
7
|
+
if typing.TYPE_CHECKING:
|
|
8
|
+
from digitalhub.entities._base.entity.metadata import Metadata
|
|
9
|
+
from digitalhub.entities.model.sklearn.spec import ModelSpecSklearn
|
|
10
|
+
from digitalhub.entities.model.sklearn.status import ModelStatusSklearn
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ModelSklearn(Model):
|
|
14
|
+
"""
|
|
15
|
+
ModelSklearn class.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
project: str,
|
|
21
|
+
name: str,
|
|
22
|
+
uuid: str,
|
|
23
|
+
kind: str,
|
|
24
|
+
metadata: Metadata,
|
|
25
|
+
spec: ModelSpecSklearn,
|
|
26
|
+
status: ModelStatusSklearn,
|
|
27
|
+
user: str | None = None,
|
|
28
|
+
) -> None:
|
|
29
|
+
super().__init__(project, name, uuid, kind, metadata, spec, status, user)
|
|
30
|
+
|
|
31
|
+
self.spec: ModelSpecSklearn
|
|
32
|
+
self.status: ModelStatusSklearn
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities.model._base.spec import ModelSpec, ModelValidator
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ModelSpecSklearn(ModelSpec):
|
|
7
|
+
"""
|
|
8
|
+
ModelSpecSklearn specifications.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ModelValidatorSklearn(ModelValidator):
|
|
13
|
+
"""
|
|
14
|
+
ModelValidatorSklearn validator.
|
|
15
|
+
"""
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._base.entity.builder import EntityBuilder
|
|
4
|
+
from digitalhub.entities.project._base.entity import Project
|
|
5
|
+
from digitalhub.entities.project._base.spec import ProjectSpec, ProjectValidator
|
|
6
|
+
from digitalhub.entities.project._base.status import ProjectStatus
|
|
7
|
+
from digitalhub.entities.utils.entity_types import EntityTypes
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ProjectProjectBuilder(EntityBuilder):
|
|
11
|
+
"""
|
|
12
|
+
ProjectProject builder.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
ENTITY_TYPE = EntityTypes.PROJECT.value
|
|
16
|
+
ENTITY_CLASS = Project
|
|
17
|
+
ENTITY_SPEC_CLASS = ProjectSpec
|
|
18
|
+
ENTITY_SPEC_VALIDATOR = ProjectValidator
|
|
19
|
+
ENTITY_STATUS_CLASS = ProjectStatus
|
|
20
|
+
ENTITY_KIND = "project"
|
|
21
|
+
|
|
22
|
+
def build(
|
|
23
|
+
self,
|
|
24
|
+
name: str,
|
|
25
|
+
kind: str,
|
|
26
|
+
description: str | None = None,
|
|
27
|
+
labels: list[str] | None = None,
|
|
28
|
+
local: bool = False,
|
|
29
|
+
context: str | None = None,
|
|
30
|
+
**kwargs,
|
|
31
|
+
) -> Project:
|
|
32
|
+
"""
|
|
33
|
+
Create a new object.
|
|
34
|
+
|
|
35
|
+
Parameters
|
|
36
|
+
----------
|
|
37
|
+
name : str
|
|
38
|
+
Object name.
|
|
39
|
+
kind : str
|
|
40
|
+
Kind the object.
|
|
41
|
+
description : str
|
|
42
|
+
Description of the object (human readable).
|
|
43
|
+
labels : list[str]
|
|
44
|
+
List of labels.
|
|
45
|
+
local : bool
|
|
46
|
+
If True, use local backend, if False use DHCore backend. Default to False.
|
|
47
|
+
context : str
|
|
48
|
+
The context local folder of the project.
|
|
49
|
+
**kwargs : dict
|
|
50
|
+
Spec keyword arguments.
|
|
51
|
+
|
|
52
|
+
Returns
|
|
53
|
+
-------
|
|
54
|
+
Project
|
|
55
|
+
Object instance.
|
|
56
|
+
"""
|
|
57
|
+
name = self.build_name(name)
|
|
58
|
+
metadata = self.build_metadata(
|
|
59
|
+
project=name,
|
|
60
|
+
name=name,
|
|
61
|
+
description=description,
|
|
62
|
+
labels=labels,
|
|
63
|
+
)
|
|
64
|
+
spec = self.build_spec(
|
|
65
|
+
context=context,
|
|
66
|
+
**kwargs,
|
|
67
|
+
)
|
|
68
|
+
status = self.build_status()
|
|
69
|
+
return self.build_entity(
|
|
70
|
+
name=name,
|
|
71
|
+
kind=kind,
|
|
72
|
+
metadata=metadata,
|
|
73
|
+
spec=spec,
|
|
74
|
+
status=status,
|
|
75
|
+
local=local,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
def from_dict(self, obj: dict, validate: bool = True) -> Project:
|
|
79
|
+
"""
|
|
80
|
+
Create a new object from dictionary.
|
|
81
|
+
|
|
82
|
+
Parameters
|
|
83
|
+
----------
|
|
84
|
+
obj : dict
|
|
85
|
+
Dictionary to create object from.
|
|
86
|
+
validate : bool
|
|
87
|
+
Flag to indicate if arguments must be validated.
|
|
88
|
+
|
|
89
|
+
Returns
|
|
90
|
+
-------
|
|
91
|
+
Project
|
|
92
|
+
Object instance.
|
|
93
|
+
"""
|
|
94
|
+
parsed_dict = self._parse_dict(obj, validate=validate)
|
|
95
|
+
return self.build_entity(**parsed_dict)
|
|
96
|
+
|
|
97
|
+
def _parse_dict(self, obj: dict, validate: bool = True) -> dict:
|
|
98
|
+
"""
|
|
99
|
+
Get dictionary and parse it to a valid entity dictionary.
|
|
100
|
+
|
|
101
|
+
Parameters
|
|
102
|
+
----------
|
|
103
|
+
entity : str
|
|
104
|
+
Entity type.
|
|
105
|
+
obj : dict
|
|
106
|
+
Dictionary to parse.
|
|
107
|
+
|
|
108
|
+
Returns
|
|
109
|
+
-------
|
|
110
|
+
dict
|
|
111
|
+
A dictionary containing the attributes of the entity instance.
|
|
112
|
+
"""
|
|
113
|
+
name = self.build_name(obj.get("name"))
|
|
114
|
+
kind = obj.get("kind")
|
|
115
|
+
local = obj.get("local", False)
|
|
116
|
+
metadata = self.build_metadata(**obj.get("metadata", {}))
|
|
117
|
+
spec = self.build_spec(validate=validate, **obj.get("spec", {}))
|
|
118
|
+
status = self.build_status(**obj.get("status", {}))
|
|
119
|
+
user = obj.get("user")
|
|
120
|
+
return {
|
|
121
|
+
"name": name,
|
|
122
|
+
"kind": kind,
|
|
123
|
+
"metadata": metadata,
|
|
124
|
+
"spec": spec,
|
|
125
|
+
"status": status,
|
|
126
|
+
"user": user,
|
|
127
|
+
"local": local,
|
|
128
|
+
}
|