digitalhub 0.8.0b0__py3-none-any.whl → 0.8.0b2__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 +62 -94
- digitalhub/client/__init__.py +0 -0
- digitalhub/client/builder.py +105 -0
- digitalhub/client/objects/__init__.py +0 -0
- digitalhub/client/objects/base.py +56 -0
- digitalhub/client/objects/dhcore.py +681 -0
- digitalhub/client/objects/local.py +533 -0
- digitalhub/context/__init__.py +0 -0
- digitalhub/context/builder.py +178 -0
- digitalhub/context/context.py +136 -0
- digitalhub/datastores/__init__.py +0 -0
- digitalhub/datastores/builder.py +134 -0
- digitalhub/datastores/objects/__init__.py +0 -0
- digitalhub/datastores/objects/base.py +85 -0
- digitalhub/datastores/objects/local.py +42 -0
- digitalhub/datastores/objects/remote.py +23 -0
- digitalhub/datastores/objects/s3.py +38 -0
- digitalhub/datastores/objects/sql.py +60 -0
- digitalhub/entities/__init__.py +0 -0
- digitalhub/entities/_base/__init__.py +0 -0
- digitalhub/entities/_base/api.py +346 -0
- digitalhub/entities/_base/base.py +82 -0
- digitalhub/entities/_base/crud.py +610 -0
- digitalhub/entities/_base/entity/__init__.py +0 -0
- digitalhub/entities/_base/entity/base.py +132 -0
- digitalhub/entities/_base/entity/context.py +118 -0
- digitalhub/entities/_base/entity/executable.py +380 -0
- digitalhub/entities/_base/entity/material.py +214 -0
- digitalhub/entities/_base/entity/unversioned.py +87 -0
- digitalhub/entities/_base/entity/versioned.py +94 -0
- digitalhub/entities/_base/metadata.py +59 -0
- digitalhub/entities/_base/spec/__init__.py +0 -0
- digitalhub/entities/_base/spec/base.py +58 -0
- digitalhub/entities/_base/spec/material.py +22 -0
- digitalhub/entities/_base/state.py +31 -0
- digitalhub/entities/_base/status/__init__.py +0 -0
- digitalhub/entities/_base/status/base.py +32 -0
- digitalhub/entities/_base/status/material.py +49 -0
- digitalhub/entities/_builders/__init__.py +0 -0
- digitalhub/entities/_builders/metadata.py +60 -0
- digitalhub/entities/_builders/name.py +31 -0
- digitalhub/entities/_builders/spec.py +43 -0
- digitalhub/entities/_builders/status.py +62 -0
- digitalhub/entities/_builders/uuid.py +33 -0
- digitalhub/entities/artifact/__init__.py +0 -0
- digitalhub/entities/artifact/builder.py +133 -0
- digitalhub/entities/artifact/crud.py +358 -0
- digitalhub/entities/artifact/entity/__init__.py +0 -0
- digitalhub/entities/artifact/entity/_base.py +39 -0
- digitalhub/entities/artifact/entity/artifact.py +9 -0
- digitalhub/entities/artifact/spec.py +39 -0
- digitalhub/entities/artifact/status.py +15 -0
- digitalhub/entities/dataitem/__init__.py +0 -0
- digitalhub/entities/dataitem/builder.py +144 -0
- digitalhub/entities/dataitem/crud.py +395 -0
- digitalhub/entities/dataitem/entity/__init__.py +0 -0
- digitalhub/entities/dataitem/entity/_base.py +75 -0
- digitalhub/entities/dataitem/entity/dataitem.py +9 -0
- digitalhub/entities/dataitem/entity/iceberg.py +7 -0
- digitalhub/entities/dataitem/entity/table.py +125 -0
- digitalhub/entities/dataitem/models.py +62 -0
- digitalhub/entities/dataitem/spec.py +61 -0
- digitalhub/entities/dataitem/status.py +38 -0
- digitalhub/entities/entity_types.py +19 -0
- digitalhub/entities/function/__init__.py +0 -0
- digitalhub/entities/function/builder.py +86 -0
- digitalhub/entities/function/crud.py +305 -0
- digitalhub/entities/function/entity.py +101 -0
- digitalhub/entities/function/models.py +118 -0
- digitalhub/entities/function/spec.py +81 -0
- digitalhub/entities/function/status.py +9 -0
- digitalhub/entities/model/__init__.py +0 -0
- digitalhub/entities/model/builder.py +152 -0
- digitalhub/entities/model/crud.py +358 -0
- digitalhub/entities/model/entity/__init__.py +0 -0
- digitalhub/entities/model/entity/_base.py +34 -0
- digitalhub/entities/model/entity/huggingface.py +9 -0
- digitalhub/entities/model/entity/mlflow.py +90 -0
- digitalhub/entities/model/entity/model.py +9 -0
- digitalhub/entities/model/entity/sklearn.py +9 -0
- digitalhub/entities/model/models.py +26 -0
- digitalhub/entities/model/spec.py +146 -0
- digitalhub/entities/model/status.py +33 -0
- digitalhub/entities/project/__init__.py +0 -0
- digitalhub/entities/project/builder.py +82 -0
- digitalhub/entities/project/crud.py +350 -0
- digitalhub/entities/project/entity.py +2060 -0
- digitalhub/entities/project/spec.py +50 -0
- digitalhub/entities/project/status.py +9 -0
- digitalhub/entities/registries.py +48 -0
- digitalhub/entities/run/__init__.py +0 -0
- digitalhub/entities/run/builder.py +77 -0
- digitalhub/entities/run/crud.py +232 -0
- digitalhub/entities/run/entity.py +461 -0
- digitalhub/entities/run/spec.py +153 -0
- digitalhub/entities/run/status.py +114 -0
- digitalhub/entities/secret/__init__.py +0 -0
- digitalhub/entities/secret/builder.py +93 -0
- digitalhub/entities/secret/crud.py +294 -0
- digitalhub/entities/secret/entity.py +73 -0
- digitalhub/entities/secret/spec.py +35 -0
- digitalhub/entities/secret/status.py +9 -0
- digitalhub/entities/task/__init__.py +0 -0
- digitalhub/entities/task/builder.py +74 -0
- digitalhub/entities/task/crud.py +241 -0
- digitalhub/entities/task/entity.py +135 -0
- digitalhub/entities/task/models.py +199 -0
- digitalhub/entities/task/spec.py +51 -0
- digitalhub/entities/task/status.py +9 -0
- digitalhub/entities/utils.py +184 -0
- digitalhub/entities/workflow/__init__.py +0 -0
- digitalhub/entities/workflow/builder.py +91 -0
- digitalhub/entities/workflow/crud.py +304 -0
- digitalhub/entities/workflow/entity.py +77 -0
- digitalhub/entities/workflow/spec.py +15 -0
- digitalhub/entities/workflow/status.py +9 -0
- digitalhub/readers/__init__.py +0 -0
- digitalhub/readers/builder.py +54 -0
- digitalhub/readers/objects/__init__.py +0 -0
- digitalhub/readers/objects/base.py +70 -0
- digitalhub/readers/objects/pandas.py +207 -0
- digitalhub/readers/registry.py +15 -0
- digitalhub/registry/__init__.py +0 -0
- digitalhub/registry/models.py +87 -0
- digitalhub/registry/registry.py +74 -0
- digitalhub/registry/utils.py +150 -0
- digitalhub/runtimes/__init__.py +0 -0
- digitalhub/runtimes/base.py +164 -0
- digitalhub/runtimes/builder.py +53 -0
- digitalhub/runtimes/kind_registry.py +170 -0
- digitalhub/stores/__init__.py +0 -0
- digitalhub/stores/builder.py +257 -0
- digitalhub/stores/objects/__init__.py +0 -0
- digitalhub/stores/objects/base.py +189 -0
- digitalhub/stores/objects/local.py +230 -0
- digitalhub/stores/objects/remote.py +143 -0
- digitalhub/stores/objects/s3.py +563 -0
- digitalhub/stores/objects/sql.py +328 -0
- digitalhub/utils/__init__.py +0 -0
- digitalhub/utils/data_utils.py +127 -0
- digitalhub/utils/env_utils.py +123 -0
- digitalhub/utils/exceptions.py +55 -0
- digitalhub/utils/file_utils.py +204 -0
- digitalhub/utils/generic_utils.py +207 -0
- digitalhub/utils/git_utils.py +148 -0
- digitalhub/utils/io_utils.py +79 -0
- digitalhub/utils/logger.py +17 -0
- digitalhub/utils/uri_utils.py +56 -0
- {digitalhub-0.8.0b0.dist-info → digitalhub-0.8.0b2.dist-info}/METADATA +27 -12
- digitalhub-0.8.0b2.dist-info/RECORD +161 -0
- test/test_crud_artifacts.py +1 -1
- test/test_crud_dataitems.py +1 -1
- test/test_crud_functions.py +1 -1
- test/test_crud_runs.py +1 -1
- test/test_crud_tasks.py +1 -1
- digitalhub-0.8.0b0.dist-info/RECORD +0 -14
- {digitalhub-0.8.0b0.dist-info → digitalhub-0.8.0b2.dist-info}/LICENSE.txt +0 -0
- {digitalhub-0.8.0b0.dist-info → digitalhub-0.8.0b2.dist-info}/WHEEL +0 -0
- {digitalhub-0.8.0b0.dist-info → digitalhub-0.8.0b2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from digitalhub.entities._base.entity.material import MaterialEntity
|
|
6
|
+
from digitalhub.entities.entity_types import EntityTypes
|
|
7
|
+
|
|
8
|
+
if typing.TYPE_CHECKING:
|
|
9
|
+
from digitalhub.entities._base.metadata import Metadata
|
|
10
|
+
from digitalhub.entities.model.spec import ModelSpec
|
|
11
|
+
from digitalhub.entities.model.status import ModelStatus
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Model(MaterialEntity):
|
|
15
|
+
"""
|
|
16
|
+
A class representing a model.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
ENTITY_TYPE = EntityTypes.MODEL.value
|
|
20
|
+
|
|
21
|
+
def __init__(
|
|
22
|
+
self,
|
|
23
|
+
project: str,
|
|
24
|
+
name: str,
|
|
25
|
+
uuid: str,
|
|
26
|
+
kind: str,
|
|
27
|
+
metadata: Metadata,
|
|
28
|
+
spec: ModelSpec,
|
|
29
|
+
status: ModelStatus,
|
|
30
|
+
user: str | None = None,
|
|
31
|
+
) -> None:
|
|
32
|
+
super().__init__(project, name, uuid, kind, metadata, spec, status, user)
|
|
33
|
+
self.spec: ModelSpec
|
|
34
|
+
self.status: ModelStatus
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from urllib.parse import urlparse
|
|
4
|
+
|
|
5
|
+
import mlflow
|
|
6
|
+
|
|
7
|
+
from digitalhub.entities.model.entity._base import Model
|
|
8
|
+
from digitalhub.entities.model.models import Dataset, Signature
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ModelMlflow(Model):
|
|
12
|
+
"""
|
|
13
|
+
Mlflow model.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def from_mlflow_run(run_id: str) -> dict:
|
|
18
|
+
"""
|
|
19
|
+
Extract from mlflow run spec for Digitalhub Model.
|
|
20
|
+
|
|
21
|
+
Parameters
|
|
22
|
+
----------
|
|
23
|
+
run_id : str
|
|
24
|
+
The id of the mlflow run.
|
|
25
|
+
|
|
26
|
+
Returns
|
|
27
|
+
-------
|
|
28
|
+
dict
|
|
29
|
+
The extracted spec.
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
# Get MLFlow run
|
|
33
|
+
client = mlflow.MlflowClient()
|
|
34
|
+
run = client.get_run(run_id)
|
|
35
|
+
|
|
36
|
+
# Extract spec
|
|
37
|
+
data = run.data
|
|
38
|
+
parameters = data.params
|
|
39
|
+
metrics = data.metrics
|
|
40
|
+
source_path = urlparse(run.info.artifact_uri).path
|
|
41
|
+
model_uri = f"runs:/{run_id}/model"
|
|
42
|
+
model = mlflow.pyfunc.load_model(model_uri=model_uri)
|
|
43
|
+
model_config = model.model_config
|
|
44
|
+
flavor = None
|
|
45
|
+
for f in model.metadata.flavors:
|
|
46
|
+
if f != "python_function":
|
|
47
|
+
flavor = f
|
|
48
|
+
break
|
|
49
|
+
|
|
50
|
+
# Extract signature
|
|
51
|
+
mlflow_signature = model.metadata.signature
|
|
52
|
+
signature = Signature(
|
|
53
|
+
inputs=mlflow_signature.inputs.to_json() if mlflow_signature.inputs else None,
|
|
54
|
+
outputs=mlflow_signature.outputs.to_json() if mlflow_signature.outputs else None,
|
|
55
|
+
params=mlflow_signature.params.to_json() if mlflow_signature.params else None,
|
|
56
|
+
).dict()
|
|
57
|
+
|
|
58
|
+
# Extract datasets
|
|
59
|
+
datasets = []
|
|
60
|
+
if run.inputs and run.inputs.dataset_inputs:
|
|
61
|
+
datasets = [
|
|
62
|
+
Dataset(
|
|
63
|
+
name=d.dataset.name,
|
|
64
|
+
digest=d.dataset.digest,
|
|
65
|
+
profile=d.dataset.profile,
|
|
66
|
+
schema=d.dataset.schema,
|
|
67
|
+
source=d.dataset.source,
|
|
68
|
+
source_type=d.dataset.source_type,
|
|
69
|
+
).dict()
|
|
70
|
+
for d in run.inputs.dataset_inputs
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
# Create model params
|
|
74
|
+
model_params = {}
|
|
75
|
+
|
|
76
|
+
# source path
|
|
77
|
+
model_params["source"] = source_path
|
|
78
|
+
|
|
79
|
+
# common properties
|
|
80
|
+
model_params["framework"] = flavor
|
|
81
|
+
model_params["parameters"] = parameters
|
|
82
|
+
model_params["metrics"] = metrics
|
|
83
|
+
|
|
84
|
+
# specific to MLFlow
|
|
85
|
+
model_params["flavor"] = flavor
|
|
86
|
+
model_params["model_config"] = model_config
|
|
87
|
+
model_params["input_datasets"] = datasets
|
|
88
|
+
model_params["signature"] = signature
|
|
89
|
+
|
|
90
|
+
return model_params
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Signature(BaseModel):
|
|
7
|
+
"""
|
|
8
|
+
MLFlow model signature.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
inputs: str = None
|
|
12
|
+
outputs: str = None
|
|
13
|
+
params: str = None
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Dataset(BaseModel):
|
|
17
|
+
"""
|
|
18
|
+
MLFlow model dataset.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
name: str = None
|
|
22
|
+
digest: str = None
|
|
23
|
+
profile: str = None
|
|
24
|
+
schema_: str = Field(default=None, alias="schema")
|
|
25
|
+
source: str = None
|
|
26
|
+
source_type: str = None
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._base.spec.material import MaterialParams, MaterialSpec
|
|
4
|
+
from digitalhub.entities.model.models import Dataset, Signature
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ModelSpec(MaterialSpec):
|
|
8
|
+
"""
|
|
9
|
+
Model 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
|
+
) -> None:
|
|
21
|
+
self.path = path
|
|
22
|
+
self.framework = framework
|
|
23
|
+
self.algorithm = algorithm
|
|
24
|
+
self.base_model = base_model
|
|
25
|
+
self.parameters = parameters
|
|
26
|
+
self.metrics = metrics
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ModelParams(MaterialParams):
|
|
30
|
+
"""
|
|
31
|
+
Model parameters.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
path: str
|
|
35
|
+
"""Path to the model."""
|
|
36
|
+
|
|
37
|
+
framework: str = None
|
|
38
|
+
"""Model framework (e.g. 'pytorch')."""
|
|
39
|
+
|
|
40
|
+
algorithm: str = None
|
|
41
|
+
"""Model algorithm (e.g. 'resnet')."""
|
|
42
|
+
|
|
43
|
+
base_model: str = None
|
|
44
|
+
"""Base model."""
|
|
45
|
+
|
|
46
|
+
parameters: dict = None
|
|
47
|
+
"""Model parameters."""
|
|
48
|
+
|
|
49
|
+
metrics: dict = None
|
|
50
|
+
"""Model metrics."""
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class ModelSpecModel(ModelSpec):
|
|
54
|
+
"""
|
|
55
|
+
Model specifications.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class ModelParamsModel(ModelParams):
|
|
60
|
+
"""
|
|
61
|
+
Model parameters.
|
|
62
|
+
"""
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class ModelSpecMlflow(ModelSpec):
|
|
66
|
+
"""
|
|
67
|
+
Mlflow model specifications.
|
|
68
|
+
"""
|
|
69
|
+
|
|
70
|
+
def __init__(
|
|
71
|
+
self,
|
|
72
|
+
path: str,
|
|
73
|
+
framework: str | None = None,
|
|
74
|
+
algorithm: str | None = None,
|
|
75
|
+
base_model: str | None = None,
|
|
76
|
+
parameters: dict | None = None,
|
|
77
|
+
metrics: dict | None = None,
|
|
78
|
+
flavor: str | None = None,
|
|
79
|
+
model_config: dict | None = None,
|
|
80
|
+
input_datasets: list[Dataset] | None = None,
|
|
81
|
+
signature: Signature = None,
|
|
82
|
+
) -> None:
|
|
83
|
+
super().__init__(path, framework, algorithm, base_model, parameters, metrics)
|
|
84
|
+
self.flavor = flavor
|
|
85
|
+
self.model_config = model_config
|
|
86
|
+
self.input_datasets = input_datasets
|
|
87
|
+
self.signature = signature
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class ModelParamsMlflow(ModelParams):
|
|
91
|
+
"""
|
|
92
|
+
Mlflow model parameters.
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
flavor: str = None
|
|
96
|
+
"""Mlflow model flavor."""
|
|
97
|
+
model_config: dict = None
|
|
98
|
+
"""Mlflow model config."""
|
|
99
|
+
input_datasets: list[Dataset] = None
|
|
100
|
+
"""Mlflow input datasets."""
|
|
101
|
+
signature: Signature = None
|
|
102
|
+
"""Mlflow model signature."""
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class ModelSpecSklearn(ModelSpec):
|
|
106
|
+
"""
|
|
107
|
+
SKLearn model specifications.
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class ModelParamsSklearn(ModelParams):
|
|
112
|
+
"""
|
|
113
|
+
SKLearn model parameters.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class ModelSpecHuggingface(ModelSpec):
|
|
118
|
+
"""
|
|
119
|
+
Huggingface model specifications.
|
|
120
|
+
"""
|
|
121
|
+
|
|
122
|
+
def __init__(
|
|
123
|
+
self,
|
|
124
|
+
path: str,
|
|
125
|
+
framework: str | None = None,
|
|
126
|
+
algorithm: str | None = None,
|
|
127
|
+
base_model: str | None = None,
|
|
128
|
+
parameters: dict | None = None,
|
|
129
|
+
metrics: dict | None = None,
|
|
130
|
+
model_id: str | None = None,
|
|
131
|
+
model_revision: str = None,
|
|
132
|
+
) -> None:
|
|
133
|
+
super().__init__(path, framework, algorithm, base_model, parameters, metrics)
|
|
134
|
+
self.model_id = model_id
|
|
135
|
+
self.model_revision = model_revision
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
class ModelParamsHuggingface(ModelParams):
|
|
139
|
+
"""
|
|
140
|
+
Huggingface model parameters.
|
|
141
|
+
"""
|
|
142
|
+
|
|
143
|
+
model_id: str = None
|
|
144
|
+
"""Huggingface model id. Optional. If not specified, the model is loaded from the model path"""
|
|
145
|
+
model_revision: str = None
|
|
146
|
+
"""Huggingface model revision. Optional."""
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._base.status.material import MaterialStatus
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ModelStatus(MaterialStatus):
|
|
7
|
+
"""
|
|
8
|
+
Status class for model entities.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ModelStatusModel(ModelStatus):
|
|
13
|
+
"""
|
|
14
|
+
Status class for model entities.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ModelStatusMlflow(ModelStatus):
|
|
19
|
+
"""
|
|
20
|
+
Status class for model entities.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class ModelStatusSklearn(ModelStatus):
|
|
25
|
+
"""
|
|
26
|
+
Status class for model entities.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ModelStatusHuggingface(ModelStatus):
|
|
31
|
+
"""
|
|
32
|
+
Status class for model entities.
|
|
33
|
+
"""
|
|
File without changes
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from digitalhub.entities._builders.metadata import build_metadata
|
|
4
|
+
from digitalhub.entities._builders.name import build_name
|
|
5
|
+
from digitalhub.entities._builders.spec import build_spec
|
|
6
|
+
from digitalhub.entities._builders.status import build_status
|
|
7
|
+
from digitalhub.entities.project.entity import Project
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def project_from_parameters(
|
|
11
|
+
name: str,
|
|
12
|
+
kind: str,
|
|
13
|
+
description: str | None = None,
|
|
14
|
+
labels: list[str] | None = None,
|
|
15
|
+
local: bool = False,
|
|
16
|
+
context: str | None = None,
|
|
17
|
+
**kwargs,
|
|
18
|
+
) -> Project:
|
|
19
|
+
"""
|
|
20
|
+
Create a new object.
|
|
21
|
+
|
|
22
|
+
Parameters
|
|
23
|
+
----------
|
|
24
|
+
name : str
|
|
25
|
+
Object name.
|
|
26
|
+
kind : str
|
|
27
|
+
Kind the object.
|
|
28
|
+
description : str
|
|
29
|
+
Description of the object (human readable).
|
|
30
|
+
labels : list[str]
|
|
31
|
+
List of labels.
|
|
32
|
+
local : bool
|
|
33
|
+
If True, use local backend, if False use DHCore backend. Default to False.
|
|
34
|
+
context : str
|
|
35
|
+
The context local folder of the project.
|
|
36
|
+
**kwargs : dict
|
|
37
|
+
Spec keyword arguments.
|
|
38
|
+
|
|
39
|
+
Returns
|
|
40
|
+
-------
|
|
41
|
+
Project
|
|
42
|
+
Object instance.
|
|
43
|
+
"""
|
|
44
|
+
name = build_name(name)
|
|
45
|
+
spec = build_spec(
|
|
46
|
+
kind,
|
|
47
|
+
context=context,
|
|
48
|
+
**kwargs,
|
|
49
|
+
)
|
|
50
|
+
metadata = build_metadata(
|
|
51
|
+
kind,
|
|
52
|
+
project=name,
|
|
53
|
+
name=name,
|
|
54
|
+
description=description,
|
|
55
|
+
labels=labels,
|
|
56
|
+
)
|
|
57
|
+
status = build_status(kind)
|
|
58
|
+
return Project(
|
|
59
|
+
name=name,
|
|
60
|
+
kind=kind,
|
|
61
|
+
metadata=metadata,
|
|
62
|
+
spec=spec,
|
|
63
|
+
status=status,
|
|
64
|
+
local=local,
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def project_from_dict(obj: dict) -> Project:
|
|
69
|
+
"""
|
|
70
|
+
Create a new object from dictionary.
|
|
71
|
+
|
|
72
|
+
Parameters
|
|
73
|
+
----------
|
|
74
|
+
obj : dict
|
|
75
|
+
Dictionary to create object from.
|
|
76
|
+
|
|
77
|
+
Returns
|
|
78
|
+
-------
|
|
79
|
+
Project
|
|
80
|
+
Object instance.
|
|
81
|
+
"""
|
|
82
|
+
return Project.from_dict(obj)
|