tracdap-runtime 0.6.1.dev3__py3-none-any.whl → 0.6.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.
- tracdap/rt/_exec/actors.py +87 -10
- tracdap/rt/_exec/context.py +25 -1
- tracdap/rt/_exec/dev_mode.py +277 -221
- tracdap/rt/_exec/engine.py +79 -14
- tracdap/rt/_exec/functions.py +37 -8
- tracdap/rt/_exec/graph.py +2 -0
- tracdap/rt/_exec/graph_builder.py +118 -56
- tracdap/rt/_exec/runtime.py +108 -37
- tracdap/rt/_exec/server.py +345 -0
- tracdap/rt/_impl/config_parser.py +219 -49
- tracdap/rt/_impl/data.py +14 -0
- tracdap/rt/_impl/grpc/__init__.py +13 -0
- tracdap/rt/_impl/grpc/codec.py +99 -0
- tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2.py +51 -0
- tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2.pyi +61 -0
- tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2_grpc.py +183 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/common_pb2.py +33 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/common_pb2.pyi +34 -0
- tracdap/rt/{metadata → _impl/grpc/tracdap/metadata}/custom_pb2.py +5 -5
- tracdap/rt/_impl/grpc/tracdap/metadata/custom_pb2.pyi +15 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/data_pb2.py +51 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/data_pb2.pyi +115 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.py +28 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.pyi +22 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.py +59 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.pyi +109 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py +76 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi +177 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.py +63 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.pyi +119 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.py +32 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.pyi +68 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.py +40 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.pyi +46 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/search_pb2.py +39 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/search_pb2.pyi +83 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/stoarge_pb2.py +50 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/stoarge_pb2.pyi +89 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/tag_pb2.py +34 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/tag_pb2.pyi +26 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.py +30 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.pyi +34 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/type_pb2.py +47 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/type_pb2.pyi +101 -0
- tracdap/rt/_impl/guard_rails.py +26 -6
- tracdap/rt/_impl/models.py +25 -0
- tracdap/rt/_impl/static_api.py +27 -9
- tracdap/rt/_impl/type_system.py +17 -0
- tracdap/rt/_impl/validation.py +10 -0
- tracdap/rt/_plugins/config_local.py +49 -0
- tracdap/rt/_version.py +1 -1
- tracdap/rt/api/hook.py +10 -3
- tracdap/rt/api/model_api.py +22 -0
- tracdap/rt/api/static_api.py +79 -19
- tracdap/rt/config/__init__.py +3 -3
- tracdap/rt/config/common.py +10 -0
- tracdap/rt/config/platform.py +9 -19
- tracdap/rt/config/runtime.py +2 -0
- tracdap/rt/ext/config.py +34 -0
- tracdap/rt/ext/embed.py +1 -3
- tracdap/rt/ext/plugins.py +47 -6
- tracdap/rt/launch/cli.py +7 -5
- tracdap/rt/launch/launch.py +49 -12
- tracdap/rt/metadata/__init__.py +24 -24
- tracdap/rt/metadata/common.py +7 -7
- tracdap/rt/metadata/custom.py +2 -0
- tracdap/rt/metadata/data.py +28 -5
- tracdap/rt/metadata/file.py +2 -0
- tracdap/rt/metadata/flow.py +66 -4
- tracdap/rt/metadata/job.py +56 -16
- tracdap/rt/metadata/model.py +10 -0
- tracdap/rt/metadata/object.py +3 -0
- tracdap/rt/metadata/object_id.py +9 -9
- tracdap/rt/metadata/search.py +35 -13
- tracdap/rt/metadata/stoarge.py +64 -6
- tracdap/rt/metadata/tag_update.py +21 -7
- tracdap/rt/metadata/type.py +28 -13
- {tracdap_runtime-0.6.1.dev3.dist-info → tracdap_runtime-0.6.3.dist-info}/METADATA +22 -19
- tracdap_runtime-0.6.3.dist-info/RECORD +112 -0
- {tracdap_runtime-0.6.1.dev3.dist-info → tracdap_runtime-0.6.3.dist-info}/WHEEL +1 -1
- tracdap/rt/config/common_pb2.py +0 -55
- tracdap/rt/config/job_pb2.py +0 -42
- tracdap/rt/config/platform_pb2.py +0 -71
- tracdap/rt/config/result_pb2.py +0 -37
- tracdap/rt/config/runtime_pb2.py +0 -42
- tracdap/rt/ext/_guard.py +0 -37
- tracdap/rt/metadata/common_pb2.py +0 -33
- tracdap/rt/metadata/data_pb2.py +0 -51
- tracdap/rt/metadata/file_pb2.py +0 -28
- tracdap/rt/metadata/flow_pb2.py +0 -55
- tracdap/rt/metadata/job_pb2.py +0 -76
- tracdap/rt/metadata/model_pb2.py +0 -51
- tracdap/rt/metadata/object_id_pb2.py +0 -32
- tracdap/rt/metadata/object_pb2.py +0 -35
- tracdap/rt/metadata/search_pb2.py +0 -39
- tracdap/rt/metadata/stoarge_pb2.py +0 -50
- tracdap/rt/metadata/tag_pb2.py +0 -34
- tracdap/rt/metadata/tag_update_pb2.py +0 -30
- tracdap/rt/metadata/type_pb2.py +0 -48
- tracdap_runtime-0.6.1.dev3.dist-info/RECORD +0 -96
- {tracdap_runtime-0.6.1.dev3.dist-info → tracdap_runtime-0.6.3.dist-info}/LICENSE +0 -0
- {tracdap_runtime-0.6.1.dev3.dist-info → tracdap_runtime-0.6.3.dist-info}/top_level.txt +0 -0
tracdap/rt/metadata/__init__.py
CHANGED
@@ -1,11 +1,5 @@
|
|
1
1
|
# Code generated by TRAC
|
2
2
|
|
3
|
-
from .custom import CustomDefinition
|
4
|
-
|
5
|
-
from .common import MetadataFormat
|
6
|
-
from .common import MetadataVersion
|
7
|
-
from .common import TenantInfo
|
8
|
-
|
9
3
|
from .type import BasicType
|
10
4
|
from .type import TypeDescriptor
|
11
5
|
from .type import DecimalValue
|
@@ -19,11 +13,6 @@ from .object_id import ObjectType
|
|
19
13
|
from .object_id import TagHeader
|
20
14
|
from .object_id import TagSelector
|
21
15
|
|
22
|
-
from .file import FileDefinition
|
23
|
-
|
24
|
-
from .tag_update import TagOperation
|
25
|
-
from .tag_update import TagUpdate
|
26
|
-
|
27
16
|
from .data import SchemaType
|
28
17
|
from .data import PartType
|
29
18
|
from .data import FieldSchema
|
@@ -32,11 +21,30 @@ from .data import SchemaDefinition
|
|
32
21
|
from .data import PartKey
|
33
22
|
from .data import DataDefinition
|
34
23
|
|
24
|
+
from .stoarge import CopyStatus
|
25
|
+
from .stoarge import IncarnationStatus
|
26
|
+
from .stoarge import StorageCopy
|
27
|
+
from .stoarge import StorageIncarnation
|
28
|
+
from .stoarge import StorageItem
|
29
|
+
from .stoarge import StorageDefinition
|
30
|
+
|
35
31
|
from .model import ModelParameter
|
36
32
|
from .model import ModelInputSchema
|
37
33
|
from .model import ModelOutputSchema
|
38
34
|
from .model import ModelDefinition
|
39
35
|
|
36
|
+
from .tag_update import TagOperation
|
37
|
+
from .tag_update import TagUpdate
|
38
|
+
|
39
|
+
from .job import JobType
|
40
|
+
from .job import JobStatusCode
|
41
|
+
from .job import JobDefinition
|
42
|
+
from .job import RunModelJob
|
43
|
+
from .job import RunFlowJob
|
44
|
+
from .job import ImportModelJob
|
45
|
+
|
46
|
+
from .file import FileDefinition
|
47
|
+
|
40
48
|
from .search import SearchOperator
|
41
49
|
from .search import LogicalOperator
|
42
50
|
from .search import SearchTerm
|
@@ -50,20 +58,12 @@ from .flow import FlowSocket
|
|
50
58
|
from .flow import FlowEdge
|
51
59
|
from .flow import FlowDefinition
|
52
60
|
|
53
|
-
from .
|
54
|
-
from .stoarge import IncarnationStatus
|
55
|
-
from .stoarge import StorageCopy
|
56
|
-
from .stoarge import StorageIncarnation
|
57
|
-
from .stoarge import StorageItem
|
58
|
-
from .stoarge import StorageDefinition
|
59
|
-
|
60
|
-
from .job import JobType
|
61
|
-
from .job import JobStatusCode
|
62
|
-
from .job import JobDefinition
|
63
|
-
from .job import RunModelJob
|
64
|
-
from .job import RunFlowJob
|
65
|
-
from .job import ImportModelJob
|
61
|
+
from .custom import CustomDefinition
|
66
62
|
|
67
63
|
from .object import ObjectDefinition
|
68
64
|
|
69
65
|
from .tag import Tag
|
66
|
+
|
67
|
+
from .common import MetadataFormat
|
68
|
+
from .common import MetadataVersion
|
69
|
+
from .common import TenantInfo
|
tracdap/rt/metadata/common.py
CHANGED
@@ -14,13 +14,13 @@ class MetadataFormat(_enum.Enum):
|
|
14
14
|
metadata stored in the metadata database.
|
15
15
|
"""
|
16
16
|
|
17
|
-
METADATA_FORMAT_NOT_SET = 0
|
17
|
+
METADATA_FORMAT_NOT_SET = 0
|
18
18
|
|
19
|
-
PROTO = 1
|
19
|
+
PROTO = 1
|
20
20
|
|
21
|
-
JSON = 2
|
21
|
+
JSON = 2
|
22
22
|
|
23
|
-
YAML = 3
|
23
|
+
YAML = 3
|
24
24
|
|
25
25
|
|
26
26
|
class MetadataVersion(_enum.Enum):
|
@@ -37,11 +37,11 @@ class MetadataVersion(_enum.Enum):
|
|
37
37
|
or to run upgrades of metadata stored in an older metadata format.
|
38
38
|
"""
|
39
39
|
|
40
|
-
METADATA_VERSION_NOT_SET = 0
|
40
|
+
METADATA_VERSION_NOT_SET = 0
|
41
41
|
|
42
|
-
V1 = 1
|
42
|
+
V1 = 1
|
43
43
|
|
44
|
-
CURRENT = 1
|
44
|
+
CURRENT = 1
|
45
45
|
|
46
46
|
|
47
47
|
@_dc.dataclass
|
tracdap/rt/metadata/custom.py
CHANGED
tracdap/rt/metadata/data.py
CHANGED
@@ -20,23 +20,40 @@ class SchemaType(_enum.Enum):
|
|
20
20
|
:class:`SchemaDefinition <SchemaDefinition>`
|
21
21
|
"""
|
22
22
|
|
23
|
-
SCHEMA_TYPE_NOT_SET = 0
|
23
|
+
SCHEMA_TYPE_NOT_SET = 0
|
24
24
|
|
25
|
-
TABLE = 1
|
25
|
+
TABLE = 1
|
26
|
+
|
27
|
+
"""Tabular data"""
|
26
28
|
|
27
29
|
|
28
30
|
class PartType(_enum.Enum):
|
29
31
|
|
30
|
-
|
32
|
+
"""Partitioning scheme applied to a dataset"""
|
33
|
+
|
34
|
+
PART_ROOT = 0
|
35
|
+
|
36
|
+
"""Dataset has a single partition called the root partition (this is the default)"""
|
37
|
+
|
38
|
+
PART_BY_RANGE = 1
|
31
39
|
|
32
|
-
|
40
|
+
"""Partition by range over an ordered variable (not available yet)"""
|
33
41
|
|
34
|
-
PART_BY_VALUE = 2
|
42
|
+
PART_BY_VALUE = 2
|
43
|
+
|
44
|
+
"""Partition by value over a categorical variable (not available yet)"""
|
35
45
|
|
36
46
|
|
37
47
|
@_dc.dataclass
|
38
48
|
class FieldSchema:
|
39
49
|
|
50
|
+
"""
|
51
|
+
Schema for an individual field in a tabular dataset
|
52
|
+
|
53
|
+
.. seealso::
|
54
|
+
:class:`TableSchema <TableSchema>`
|
55
|
+
"""
|
56
|
+
|
40
57
|
fieldName: str = None
|
41
58
|
|
42
59
|
fieldOrder: int = None
|
@@ -59,6 +76,8 @@ class FieldSchema:
|
|
59
76
|
@_dc.dataclass
|
60
77
|
class TableSchema:
|
61
78
|
|
79
|
+
"""Schema for a tabular dataset"""
|
80
|
+
|
62
81
|
fields: _tp.List[FieldSchema] = _dc.field(default_factory=list)
|
63
82
|
|
64
83
|
|
@@ -89,6 +108,8 @@ class SchemaDefinition:
|
|
89
108
|
@_dc.dataclass
|
90
109
|
class PartKey:
|
91
110
|
|
111
|
+
"""Partition key for tabular datasets"""
|
112
|
+
|
92
113
|
opaqueKey: str = None
|
93
114
|
|
94
115
|
partType: PartType = PartType.PART_ROOT
|
@@ -103,6 +124,8 @@ class PartKey:
|
|
103
124
|
@_dc.dataclass
|
104
125
|
class DataDefinition:
|
105
126
|
|
127
|
+
"""Define a dataset that can be stored and managed in the TRAC platform"""
|
128
|
+
|
106
129
|
@_dc.dataclass
|
107
130
|
class Delta:
|
108
131
|
|
tracdap/rt/metadata/file.py
CHANGED
tracdap/rt/metadata/flow.py
CHANGED
@@ -13,20 +13,48 @@ from .tag_update import * # noqa
|
|
13
13
|
|
14
14
|
class FlowNodeType(_enum.Enum):
|
15
15
|
|
16
|
-
|
16
|
+
"""
|
17
|
+
Specify the type of an individual flow node
|
18
|
+
|
19
|
+
.. seealso::
|
20
|
+
:class:`FlowNode <FlowNode>`
|
21
|
+
"""
|
17
22
|
|
18
|
-
|
23
|
+
NODE_TYPE_NOT_SET = 0
|
19
24
|
|
20
|
-
|
25
|
+
INPUT_NODE = 1
|
21
26
|
|
22
|
-
|
27
|
+
"""Input nodes described inputs to the flow, such as a files or datasets"""
|
28
|
+
|
29
|
+
OUTPUT_NODE = 2
|
30
|
+
|
31
|
+
"""Output nodes describe outputs the flow produces, such as a files or datasets"""
|
32
|
+
|
33
|
+
MODEL_NODE = 3
|
34
|
+
|
35
|
+
"""Model nodes are placeholders for TRAC models that will be supplied at runtime"""
|
36
|
+
|
37
|
+
PARAMETER_NODE = 4
|
38
|
+
|
39
|
+
"""Parameter nodes allow explicit mapping of parameters into models
|
40
|
+
(TRAC can infer parameters by name if they are not defined explicitly)
|
41
|
+
"""
|
23
42
|
|
24
43
|
|
25
44
|
@_dc.dataclass
|
26
45
|
class FlowNode:
|
27
46
|
|
47
|
+
"""
|
48
|
+
Describes an individual node in a flow
|
49
|
+
|
50
|
+
.. seealso::
|
51
|
+
:class:`FlowDefinition <FlowDefinition>`
|
52
|
+
"""
|
53
|
+
|
28
54
|
nodeType: FlowNodeType = FlowNodeType.NODE_TYPE_NOT_SET
|
29
55
|
|
56
|
+
parameters: _tp.List[str] = _dc.field(default_factory=list)
|
57
|
+
|
30
58
|
inputs: _tp.List[str] = _dc.field(default_factory=list)
|
31
59
|
|
32
60
|
outputs: _tp.List[str] = _dc.field(default_factory=list)
|
@@ -35,12 +63,28 @@ class FlowNode:
|
|
35
63
|
|
36
64
|
nodeAttrs: _tp.List[TagUpdate] = _dc.field(default_factory=list)
|
37
65
|
|
66
|
+
nodeProps: _tp.Dict[str, Value] = _dc.field(default_factory=dict)
|
67
|
+
|
38
68
|
label: str = None
|
39
69
|
|
40
70
|
|
41
71
|
@_dc.dataclass
|
42
72
|
class FlowSocket:
|
43
73
|
|
74
|
+
"""
|
75
|
+
A socket is a point of connection for wiring up the edges in a flow
|
76
|
+
|
77
|
+
For parameter, input and output nodes the socket is just the node name and the socket field will be blank.
|
78
|
+
For models, the node name refers to a model node and the socket is the name of the parameter, input or output
|
79
|
+
being connected. E.g. these two sockets could be used to connect a flow input to a model, using an edge::
|
80
|
+
|
81
|
+
flow_input_socket = { "node": "my_input_dataset", socket: "" }
|
82
|
+
model_input_socket = { "node": "my_model", "socket": "input_1" }.
|
83
|
+
|
84
|
+
.. seealso::
|
85
|
+
:class:`FlowEdge <FlowEdge>`
|
86
|
+
"""
|
87
|
+
|
44
88
|
node: str = None
|
45
89
|
|
46
90
|
socket: str = None
|
@@ -49,6 +93,13 @@ class FlowSocket:
|
|
49
93
|
@_dc.dataclass
|
50
94
|
class FlowEdge:
|
51
95
|
|
96
|
+
"""
|
97
|
+
A connection between two nodes in a flow
|
98
|
+
|
99
|
+
.. seealso::
|
100
|
+
:class:`FlowSocket <FlowSocket>`
|
101
|
+
"""
|
102
|
+
|
52
103
|
source: FlowSocket = None
|
53
104
|
|
54
105
|
target: FlowSocket = None
|
@@ -57,6 +108,17 @@ class FlowEdge:
|
|
57
108
|
@_dc.dataclass
|
58
109
|
class FlowDefinition:
|
59
110
|
|
111
|
+
"""
|
112
|
+
A flow defines an execution graph as a set of connections between models and data
|
113
|
+
|
114
|
+
A flow describes the shape of the execution graph, it does not fix in advance the set
|
115
|
+
of models and datasets that will go into it. When a RUN_FLOW job is created, the job
|
116
|
+
matches the flow with a set of models, inputs, outputs and parameters.
|
117
|
+
|
118
|
+
.. seealso::
|
119
|
+
:class:`JobDefinition <JobDefinition>`
|
120
|
+
"""
|
121
|
+
|
60
122
|
nodes: _tp.Dict[str, FlowNode] = _dc.field(default_factory=dict)
|
61
123
|
|
62
124
|
edges: _tp.List[FlowEdge] = _dc.field(default_factory=list)
|
tracdap/rt/metadata/job.py
CHANGED
@@ -12,45 +12,79 @@ from .tag_update import * # noqa
|
|
12
12
|
|
13
13
|
class JobType(_enum.Enum):
|
14
14
|
|
15
|
-
|
15
|
+
"""Specify the type of an individual TRAC job"""
|
16
16
|
|
17
|
-
|
17
|
+
JOB_TYPE_NOT_SET = 0
|
18
18
|
|
19
|
-
|
19
|
+
RUN_MODEL = 1
|
20
20
|
|
21
|
-
|
21
|
+
"""Run a single model, with parameters and inputs"""
|
22
22
|
|
23
|
-
|
23
|
+
RUN_FLOW = 2
|
24
|
+
|
25
|
+
"""Run a flow with all its models, parameters and inputs"""
|
26
|
+
|
27
|
+
IMPORT_MODEL = 3
|
28
|
+
|
29
|
+
"""Import a model into the platform"""
|
30
|
+
|
31
|
+
IMPORT_DATA = 4
|
32
|
+
|
33
|
+
"""Import data into the platform"""
|
24
34
|
|
25
35
|
|
26
36
|
class JobStatusCode(_enum.Enum):
|
27
37
|
|
28
|
-
|
38
|
+
"""Indicate the status of a job in the TRAC platform"""
|
39
|
+
|
40
|
+
JOB_STATUS_CODE_NOT_SET = 0
|
41
|
+
|
42
|
+
PREPARING = 1
|
43
|
+
|
44
|
+
"""The job is being set up"""
|
45
|
+
|
46
|
+
VALIDATED = 2
|
47
|
+
|
48
|
+
"""The job has passed validation and is ok to run (dry-run operations may return this status)"""
|
29
49
|
|
30
|
-
|
50
|
+
PENDING = 3
|
31
51
|
|
32
|
-
|
52
|
+
"""The job is being set up"""
|
33
53
|
|
34
|
-
|
54
|
+
QUEUED = 4
|
35
55
|
|
36
|
-
|
56
|
+
"""The job is queued in TRAC, waiting for available resources"""
|
37
57
|
|
38
|
-
SUBMITTED = 5
|
58
|
+
SUBMITTED = 5
|
39
59
|
|
40
|
-
|
60
|
+
"""The job has been submitted for execution but has not yet started"""
|
41
61
|
|
42
|
-
|
62
|
+
RUNNING = 6
|
43
63
|
|
44
|
-
|
64
|
+
"""The job is currently running"""
|
45
65
|
|
46
|
-
|
66
|
+
FINISHING = 7
|
47
67
|
|
48
|
-
|
68
|
+
"""Job execution completed, the platform is cleaning up and validating the outputs"""
|
69
|
+
|
70
|
+
SUCCEEDED = 8
|
71
|
+
|
72
|
+
"""The job completed successfully and the results are available"""
|
73
|
+
|
74
|
+
FAILED = 9
|
75
|
+
|
76
|
+
"""The job failed and has been terminated or rejected"""
|
77
|
+
|
78
|
+
CANCELLED = 10
|
79
|
+
|
80
|
+
"""The job was cancelled by a user of the platform"""
|
49
81
|
|
50
82
|
|
51
83
|
@_dc.dataclass
|
52
84
|
class JobDefinition:
|
53
85
|
|
86
|
+
"""Define a job to run on the TRAC platform"""
|
87
|
+
|
54
88
|
jobType: JobType = JobType.JOB_TYPE_NOT_SET
|
55
89
|
|
56
90
|
runModel: _tp.Optional[RunModelJob] = None
|
@@ -63,6 +97,8 @@ class JobDefinition:
|
|
63
97
|
@_dc.dataclass
|
64
98
|
class RunModelJob:
|
65
99
|
|
100
|
+
"""Specification for a RuN_MODEL job"""
|
101
|
+
|
66
102
|
model: TagSelector = None
|
67
103
|
|
68
104
|
parameters: _tp.Dict[str, Value] = _dc.field(default_factory=dict)
|
@@ -79,6 +115,8 @@ class RunModelJob:
|
|
79
115
|
@_dc.dataclass
|
80
116
|
class RunFlowJob:
|
81
117
|
|
118
|
+
"""Specification for a RUN_FLOW job"""
|
119
|
+
|
82
120
|
flow: TagSelector = None
|
83
121
|
|
84
122
|
parameters: _tp.Dict[str, Value] = _dc.field(default_factory=dict)
|
@@ -97,6 +135,8 @@ class RunFlowJob:
|
|
97
135
|
@_dc.dataclass
|
98
136
|
class ImportModelJob:
|
99
137
|
|
138
|
+
"""Specification for an IMPORT_MODEL job"""
|
139
|
+
|
100
140
|
language: str = None
|
101
141
|
|
102
142
|
repository: str = None
|
tracdap/rt/metadata/model.py
CHANGED
@@ -21,6 +21,8 @@ class ModelParameter:
|
|
21
21
|
|
22
22
|
defaultValue: _tp.Optional[Value] = None
|
23
23
|
|
24
|
+
paramProps: _tp.Dict[str, Value] = _dc.field(default_factory=dict)
|
25
|
+
|
24
26
|
|
25
27
|
@_dc.dataclass
|
26
28
|
class ModelInputSchema:
|
@@ -41,6 +43,10 @@ class ModelInputSchema:
|
|
41
43
|
|
42
44
|
label: _tp.Optional[str] = None
|
43
45
|
|
46
|
+
optional: bool = None
|
47
|
+
|
48
|
+
inputProps: _tp.Dict[str, Value] = _dc.field(default_factory=dict)
|
49
|
+
|
44
50
|
|
45
51
|
@_dc.dataclass
|
46
52
|
class ModelOutputSchema:
|
@@ -62,6 +68,10 @@ class ModelOutputSchema:
|
|
62
68
|
|
63
69
|
label: _tp.Optional[str] = None
|
64
70
|
|
71
|
+
optional: bool = None
|
72
|
+
|
73
|
+
outputProps: _tp.Dict[str, Value] = _dc.field(default_factory=dict)
|
74
|
+
|
65
75
|
|
66
76
|
@_dc.dataclass
|
67
77
|
class ModelDefinition:
|
tracdap/rt/metadata/object.py
CHANGED
@@ -6,6 +6,7 @@ import dataclasses as _dc # noqa
|
|
6
6
|
import enum as _enum # noqa
|
7
7
|
|
8
8
|
from .object_id import * # noqa
|
9
|
+
from .type import * # noqa
|
9
10
|
from .data import * # noqa
|
10
11
|
from .model import * # noqa
|
11
12
|
from .flow import * # noqa
|
@@ -69,3 +70,5 @@ class ObjectDefinition:
|
|
69
70
|
storage: _tp.Optional[StorageDefinition] = None
|
70
71
|
|
71
72
|
schema: _tp.Optional[SchemaDefinition] = None
|
73
|
+
|
74
|
+
objectProps: _tp.Dict[str, Value] = _dc.field(default_factory=dict)
|
tracdap/rt/metadata/object_id.py
CHANGED
@@ -17,23 +17,23 @@ class ObjectType(_enum.Enum):
|
|
17
17
|
:class:`ObjectDefinition <ObjectDefinition>`
|
18
18
|
"""
|
19
19
|
|
20
|
-
OBJECT_TYPE_NOT_SET = 0
|
20
|
+
OBJECT_TYPE_NOT_SET = 0
|
21
21
|
|
22
|
-
DATA = 1
|
22
|
+
DATA = 1
|
23
23
|
|
24
|
-
MODEL = 2
|
24
|
+
MODEL = 2
|
25
25
|
|
26
|
-
FLOW = 3
|
26
|
+
FLOW = 3
|
27
27
|
|
28
|
-
JOB = 4
|
28
|
+
JOB = 4
|
29
29
|
|
30
|
-
FILE = 5
|
30
|
+
FILE = 5
|
31
31
|
|
32
|
-
CUSTOM = 6
|
32
|
+
CUSTOM = 6
|
33
33
|
|
34
|
-
STORAGE = 7
|
34
|
+
STORAGE = 7
|
35
35
|
|
36
|
-
SCHEMA = 8
|
36
|
+
SCHEMA = 8
|
37
37
|
|
38
38
|
|
39
39
|
@_dc.dataclass
|
tracdap/rt/metadata/search.py
CHANGED
@@ -18,9 +18,11 @@ class SearchOperator(_enum.Enum):
|
|
18
18
|
:class:`SearchTerm <SearchTerm>`
|
19
19
|
"""
|
20
20
|
|
21
|
-
SEARCH_OPERATOR_NOT_SET = 0
|
21
|
+
SEARCH_OPERATOR_NOT_SET = 0
|
22
22
|
|
23
|
-
EQ = 1
|
23
|
+
EQ = 1
|
24
|
+
|
25
|
+
"""EQUALS
|
24
26
|
|
25
27
|
The EQ operator matches a tag when the tag has an attribute that matches the
|
26
28
|
search term exactly, i.e. attribute name, type and value all match. For
|
@@ -32,7 +34,9 @@ class SearchOperator(_enum.Enum):
|
|
32
34
|
for this reason it is not recommended to use the EQ operator with FLOAT values.
|
33
35
|
"""
|
34
36
|
|
35
|
-
NE = 2
|
37
|
+
NE = 2
|
38
|
+
|
39
|
+
"""DOES NOT EQUAL
|
36
40
|
|
37
41
|
The NE operator matches a tag precisely when the EQ operator does not match it.
|
38
42
|
This could be because the tag attribute does not match the search term, or because
|
@@ -48,7 +52,9 @@ class SearchOperator(_enum.Enum):
|
|
48
52
|
for this reason it is not recommended to use the NE operator with FLOAT values.
|
49
53
|
"""
|
50
54
|
|
51
|
-
LT = 3
|
55
|
+
LT = 3
|
56
|
+
|
57
|
+
"""LESS THAN
|
52
58
|
|
53
59
|
The LT operator matches a tag when the tag has an attribute with a value less than
|
54
60
|
the search parameter. The LT operator will only match single-valued attributes.
|
@@ -58,7 +64,9 @@ class SearchOperator(_enum.Enum):
|
|
58
64
|
even if one or more of the individual values matches the search term.
|
59
65
|
"""
|
60
66
|
|
61
|
-
LE = 4
|
67
|
+
LE = 4
|
68
|
+
|
69
|
+
"""LESS THAN OR EQUAL TO
|
62
70
|
|
63
71
|
The LE operator matches a tag when the tag has an attribute with a value less than
|
64
72
|
or equal to the search parameter. The LE operator will only match single-valued
|
@@ -69,7 +77,9 @@ class SearchOperator(_enum.Enum):
|
|
69
77
|
even if one or more of the individual values matches the search term.
|
70
78
|
"""
|
71
79
|
|
72
|
-
GT = 5
|
80
|
+
GT = 5
|
81
|
+
|
82
|
+
"""GREATER THAN
|
73
83
|
|
74
84
|
The GT operator matches a tag when the tag has an attribute with a value greater than
|
75
85
|
the search parameter. The GT operator will only match single-valued attributes.
|
@@ -79,7 +89,9 @@ class SearchOperator(_enum.Enum):
|
|
79
89
|
even if one or more of the individual values matches the search term.
|
80
90
|
"""
|
81
91
|
|
82
|
-
GE = 6
|
92
|
+
GE = 6
|
93
|
+
|
94
|
+
"""GREATER THAN OR EQUAL TO
|
83
95
|
|
84
96
|
The GE operator matches a tag when the tag has an attribute with a value greater than
|
85
97
|
or equal to the search parameter. The GE operator will only match single-valued
|
@@ -90,7 +102,9 @@ class SearchOperator(_enum.Enum):
|
|
90
102
|
even if one or more of the individual values matches the search term.
|
91
103
|
"""
|
92
104
|
|
93
|
-
IN = 7
|
105
|
+
IN = 7
|
106
|
+
|
107
|
+
"""IN
|
94
108
|
|
95
109
|
The IN operator matches a tag when the tag has an attribute whose value is matched
|
96
110
|
exactly by an item in the list of values provided. For multi-valued attributes, the
|
@@ -103,7 +117,9 @@ class SearchOperator(_enum.Enum):
|
|
103
117
|
for this reason it is not recommended to use the IN operator with FLOAT values.
|
104
118
|
"""
|
105
119
|
|
106
|
-
EXISTS = 8
|
120
|
+
EXISTS = 8
|
121
|
+
|
122
|
+
"""EXISTS
|
107
123
|
|
108
124
|
If an attribute type is provided the EXISTS operator matches a tag of specified
|
109
125
|
name when the tag has an attribute whose type is matched with type provided attribute
|
@@ -121,23 +137,29 @@ class LogicalOperator(_enum.Enum):
|
|
121
137
|
:class:`LogicalExpression <LogicalExpression>`
|
122
138
|
"""
|
123
139
|
|
124
|
-
LOGICAL_OPERATOR_NOT_SET = 0
|
140
|
+
LOGICAL_OPERATOR_NOT_SET = 0
|
141
|
+
|
142
|
+
AND = 1
|
125
143
|
|
126
|
-
|
144
|
+
"""LOGICAL AND
|
127
145
|
|
128
146
|
The AND operator combines two or more search expressions, the logical expression
|
129
147
|
will match only when all sub-expressions match. The order of sub-expressions is
|
130
148
|
not important.
|
131
149
|
"""
|
132
150
|
|
133
|
-
OR = 2
|
151
|
+
OR = 2
|
152
|
+
|
153
|
+
"""LOGICAL OR
|
134
154
|
|
135
155
|
The OR operator combines two or more search expressions, the logical expression
|
136
156
|
will match when any of the sub-expressions match. The order of sub-expressions
|
137
157
|
is not important.
|
138
158
|
"""
|
139
159
|
|
140
|
-
NOT = 3
|
160
|
+
NOT = 3
|
161
|
+
|
162
|
+
"""LOGICAL NOT
|
141
163
|
|
142
164
|
The NOT operator applies to a single sub-expression, the logical expression will
|
143
165
|
match precisely when the sub-expression does not match.
|