tracdap-runtime 0.7.0rc1__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.
- tracdap/rt/_impl/core/__init__.py +14 -0
- tracdap/rt/_impl/{config_parser.py → core/config_parser.py} +61 -36
- tracdap/rt/_impl/{data.py → core/data.py} +136 -32
- tracdap/rt/_impl/core/logging.py +195 -0
- tracdap/rt/_impl/{models.py → core/models.py} +15 -12
- tracdap/rt/_impl/{repos.py → core/repos.py} +12 -3
- tracdap/rt/_impl/{schemas.py → core/schemas.py} +5 -5
- tracdap/rt/_impl/{shim.py → core/shim.py} +5 -4
- tracdap/rt/_impl/{storage.py → core/storage.py} +21 -10
- tracdap/rt/_impl/core/struct.py +547 -0
- tracdap/rt/_impl/{type_system.py → core/type_system.py} +73 -33
- tracdap/rt/_impl/{util.py → core/util.py} +1 -111
- tracdap/rt/_impl/{validation.py → core/validation.py} +99 -31
- tracdap/rt/_impl/exec/__init__.py +14 -0
- tracdap/rt/{_exec → _impl/exec}/actors.py +12 -14
- tracdap/rt/{_exec → _impl/exec}/context.py +228 -82
- tracdap/rt/{_exec → _impl/exec}/dev_mode.py +176 -89
- tracdap/rt/{_exec → _impl/exec}/engine.py +230 -105
- tracdap/rt/{_exec → _impl/exec}/functions.py +191 -100
- tracdap/rt/{_exec → _impl/exec}/graph.py +24 -36
- tracdap/rt/{_exec → _impl/exec}/graph_builder.py +252 -115
- tracdap/rt/_impl/grpc/codec.py +1 -1
- tracdap/rt/{_exec → _impl/grpc}/server.py +7 -6
- tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2.py +3 -3
- tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2_grpc.py +1 -1
- tracdap/rt/_impl/grpc/tracdap/metadata/common_pb2.py +1 -1
- tracdap/rt/_impl/grpc/tracdap/metadata/config_pb2.py +40 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/config_pb2.pyi +62 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/custom_pb2.py +1 -1
- tracdap/rt/_impl/grpc/tracdap/metadata/data_pb2.py +32 -20
- tracdap/rt/_impl/grpc/tracdap/metadata/data_pb2.pyi +48 -2
- tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.py +4 -2
- tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.pyi +8 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.py +1 -1
- tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py +65 -63
- tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi +16 -2
- tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.py +28 -26
- tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.pyi +14 -4
- tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.py +4 -4
- tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.pyi +6 -0
- tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.py +9 -7
- tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.pyi +12 -4
- tracdap/rt/_impl/grpc/tracdap/metadata/resource_pb2.py +18 -5
- tracdap/rt/_impl/grpc/tracdap/metadata/resource_pb2.pyi +42 -2
- tracdap/rt/_impl/grpc/tracdap/metadata/search_pb2.py +1 -1
- tracdap/rt/_impl/grpc/tracdap/metadata/{stoarge_pb2.py → storage_pb2.py} +4 -4
- tracdap/rt/_impl/grpc/tracdap/metadata/tag_pb2.py +1 -1
- tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.py +1 -1
- tracdap/rt/_impl/grpc/tracdap/metadata/type_pb2.py +1 -1
- tracdap/rt/{_exec → _impl}/runtime.py +32 -18
- tracdap/rt/_impl/static_api.py +66 -38
- tracdap/rt/_plugins/format_csv.py +1 -1
- tracdap/rt/_plugins/repo_git.py +56 -11
- tracdap/rt/_plugins/storage_sql.py +13 -6
- tracdap/rt/_version.py +1 -1
- tracdap/rt/api/__init__.py +5 -24
- tracdap/rt/api/constants.py +57 -0
- tracdap/rt/api/experimental.py +32 -0
- tracdap/rt/api/hook.py +26 -7
- tracdap/rt/api/model_api.py +16 -0
- tracdap/rt/api/static_api.py +265 -127
- tracdap/rt/config/__init__.py +11 -11
- tracdap/rt/config/common.py +2 -26
- tracdap/rt/config/dynamic.py +28 -0
- tracdap/rt/config/platform.py +17 -31
- tracdap/rt/config/runtime.py +2 -0
- tracdap/rt/ext/embed.py +2 -2
- tracdap/rt/ext/plugins.py +3 -3
- tracdap/rt/launch/launch.py +12 -14
- tracdap/rt/metadata/__init__.py +31 -21
- tracdap/rt/metadata/config.py +95 -0
- tracdap/rt/metadata/data.py +40 -0
- tracdap/rt/metadata/file.py +10 -0
- tracdap/rt/metadata/job.py +16 -0
- tracdap/rt/metadata/model.py +12 -2
- tracdap/rt/metadata/object.py +9 -1
- tracdap/rt/metadata/object_id.py +6 -0
- tracdap/rt/metadata/resource.py +41 -1
- {tracdap_runtime-0.7.0rc1.dist-info → tracdap_runtime-0.8.0.dist-info}/METADATA +33 -27
- tracdap_runtime-0.8.0.dist-info/RECORD +129 -0
- {tracdap_runtime-0.7.0rc1.dist-info → tracdap_runtime-0.8.0.dist-info}/WHEEL +1 -1
- tracdap/rt/_exec/__init__.py +0 -0
- tracdap_runtime-0.7.0rc1.dist-info/RECORD +0 -121
- /tracdap/rt/_impl/{guard_rails.py → core/guard_rails.py} +0 -0
- /tracdap/rt/_impl/grpc/tracdap/metadata/{stoarge_pb2.pyi → storage_pb2.pyi} +0 -0
- /tracdap/rt/metadata/{stoarge.py → storage.py} +0 -0
- {tracdap_runtime-0.7.0rc1.dist-info → tracdap_runtime-0.8.0.dist-info/licenses}/LICENSE +0 -0
- {tracdap_runtime-0.7.0rc1.dist-info → tracdap_runtime-0.8.0.dist-info}/top_level.txt +0 -0
tracdap/rt/ext/plugins.py
CHANGED
@@ -14,13 +14,13 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
|
16
16
|
import typing as _tp
|
17
|
-
import logging as _log
|
18
17
|
import pkgutil as _pkg
|
19
18
|
import importlib as _il
|
20
19
|
|
21
20
|
import tracdap.rt.config as _cfg
|
22
21
|
import tracdap.rt.exceptions as _ex
|
23
|
-
import tracdap.rt._impl.guard_rails as _guard # noqa
|
22
|
+
import tracdap.rt._impl.core.guard_rails as _guard # noqa
|
23
|
+
import tracdap.rt._impl.core.logging as _logging # noqa
|
24
24
|
from tracdap.rt.exceptions import EStartup
|
25
25
|
|
26
26
|
|
@@ -28,7 +28,7 @@ class PluginManager:
|
|
28
28
|
|
29
29
|
T_SERVICE = _tp.TypeVar("T_SERVICE")
|
30
30
|
|
31
|
-
__log =
|
31
|
+
__log = _logging.getLogger(f"{__name__}.PluginManager")
|
32
32
|
|
33
33
|
__core_registered = False
|
34
34
|
__3rd_party_registered = list()
|
tracdap/rt/launch/launch.py
CHANGED
@@ -20,9 +20,9 @@ import pathlib as _pathlib
|
|
20
20
|
import typing as _tp
|
21
21
|
|
22
22
|
import tracdap.rt.api as _api
|
23
|
-
import tracdap.rt._impl.config_parser as _cparse # noqa
|
24
|
-
import tracdap.rt._impl.util as _util # noqa
|
25
|
-
import tracdap.rt.
|
23
|
+
import tracdap.rt._impl.core.config_parser as _cparse # noqa
|
24
|
+
import tracdap.rt._impl.core.util as _util # noqa
|
25
|
+
import tracdap.rt._impl.runtime as _runtime # noqa
|
26
26
|
|
27
27
|
from .cli import _cli_args
|
28
28
|
|
@@ -112,9 +112,10 @@ def launch_model(
|
|
112
112
|
runtime_instance = _runtime.TracRuntime(_sys_config, dev_mode=True, plugin_packages=plugin_packages)
|
113
113
|
runtime_instance.pre_start()
|
114
114
|
|
115
|
-
job = runtime_instance.load_job_config(_job_config, model_class=model_class)
|
116
|
-
|
117
115
|
with runtime_instance as rt:
|
116
|
+
|
117
|
+
job = rt.load_job_config(_job_config, model_class=model_class)
|
118
|
+
|
118
119
|
rt.submit_job(job)
|
119
120
|
rt.wait_for_job(job.jobId)
|
120
121
|
|
@@ -160,9 +161,10 @@ def launch_job(
|
|
160
161
|
runtime_instance = _runtime.TracRuntime(_sys_config, dev_mode=dev_mode, plugin_packages=plugin_packages)
|
161
162
|
runtime_instance.pre_start()
|
162
163
|
|
163
|
-
job = runtime_instance.load_job_config(_job_config)
|
164
|
-
|
165
164
|
with runtime_instance as rt:
|
165
|
+
|
166
|
+
job = rt.load_job_config(_job_config)
|
167
|
+
|
166
168
|
rt.submit_job(job)
|
167
169
|
rt.wait_for_job(job.jobId)
|
168
170
|
|
@@ -184,6 +186,7 @@ def launch_cli(programmatic_args: _tp.Optional[_tp.List[str]] = None):
|
|
184
186
|
launch_args = _cli_args()
|
185
187
|
|
186
188
|
_sys_config = _resolve_config_file(launch_args.sys_config, None)
|
189
|
+
_job_config = _resolve_config_file(launch_args.job_config, None) if launch_args.job_config else None
|
187
190
|
|
188
191
|
runtime_instance = _runtime.TracRuntime(
|
189
192
|
_sys_config,
|
@@ -196,15 +199,10 @@ def launch_cli(programmatic_args: _tp.Optional[_tp.List[str]] = None):
|
|
196
199
|
|
197
200
|
runtime_instance.pre_start()
|
198
201
|
|
199
|
-
if launch_args.job_config is not None:
|
200
|
-
_job_config = _resolve_config_file(launch_args.job_config, None)
|
201
|
-
job = runtime_instance.load_job_config(_job_config)
|
202
|
-
else:
|
203
|
-
job = None
|
204
|
-
|
205
202
|
with runtime_instance as rt:
|
206
203
|
|
207
|
-
if
|
204
|
+
if _job_config is not None:
|
205
|
+
job = rt.load_job_config(_job_config)
|
208
206
|
rt.submit_job(job)
|
209
207
|
|
210
208
|
if rt.is_oneshot():
|
tracdap/rt/metadata/__init__.py
CHANGED
@@ -13,27 +13,32 @@ from .object_id import ObjectType
|
|
13
13
|
from .object_id import TagHeader
|
14
14
|
from .object_id import TagSelector
|
15
15
|
|
16
|
+
from .search import SearchOperator
|
17
|
+
from .search import LogicalOperator
|
18
|
+
from .search import SearchTerm
|
19
|
+
from .search import LogicalExpression
|
20
|
+
from .search import SearchExpression
|
21
|
+
from .search import SearchParameters
|
22
|
+
|
16
23
|
from .data import SchemaType
|
17
24
|
from .data import PartType
|
18
25
|
from .data import FieldSchema
|
19
26
|
from .data import TableSchema
|
27
|
+
from .data import StructField
|
28
|
+
from .data import StructSchema
|
20
29
|
from .data import SchemaDefinition
|
21
30
|
from .data import PartKey
|
22
31
|
from .data import DataDefinition
|
23
32
|
|
33
|
+
from .file import FileDefinition
|
34
|
+
from .file import FileType
|
35
|
+
|
24
36
|
from .model import ModelType
|
25
37
|
from .model import ModelParameter
|
26
38
|
from .model import ModelInputSchema
|
27
39
|
from .model import ModelOutputSchema
|
28
40
|
from .model import ModelDefinition
|
29
41
|
|
30
|
-
from .search import SearchOperator
|
31
|
-
from .search import LogicalOperator
|
32
|
-
from .search import SearchTerm
|
33
|
-
from .search import LogicalExpression
|
34
|
-
from .search import SearchExpression
|
35
|
-
from .search import SearchParameters
|
36
|
-
|
37
42
|
from .tag_update import TagOperation
|
38
43
|
from .tag_update import TagUpdate
|
39
44
|
|
@@ -43,10 +48,16 @@ from .flow import FlowSocket
|
|
43
48
|
from .flow import FlowEdge
|
44
49
|
from .flow import FlowDefinition
|
45
50
|
|
51
|
+
from .custom import CustomDefinition
|
52
|
+
|
53
|
+
from .resource import ResourceType
|
54
|
+
from .resource import ResourceDefinition
|
55
|
+
|
46
56
|
from .job import JobType
|
47
57
|
from .job import JobStatusCode
|
48
58
|
from .job import JobGroupType
|
49
59
|
from .job import JobDefinition
|
60
|
+
from .job import ResultDefinition
|
50
61
|
from .job import RunModelJob
|
51
62
|
from .job import RunFlowJob
|
52
63
|
from .job import ImportModelJob
|
@@ -56,23 +67,22 @@ from .job import JobGroup
|
|
56
67
|
from .job import SequentialJobGroup
|
57
68
|
from .job import ParallelJobGroup
|
58
69
|
|
59
|
-
from .
|
70
|
+
from .common import MetadataFormat
|
71
|
+
from .common import MetadataVersion
|
72
|
+
from .common import TenantInfo
|
60
73
|
|
61
|
-
from .
|
74
|
+
from .config import ConfigType
|
75
|
+
from .config import ConfigEntry
|
76
|
+
from .config import ConfigDetails
|
77
|
+
from .config import ConfigDefinition
|
62
78
|
|
63
|
-
from .
|
64
|
-
from .
|
65
|
-
from .
|
66
|
-
from .
|
67
|
-
from .
|
68
|
-
from .
|
79
|
+
from .storage import CopyStatus
|
80
|
+
from .storage import IncarnationStatus
|
81
|
+
from .storage import StorageCopy
|
82
|
+
from .storage import StorageIncarnation
|
83
|
+
from .storage import StorageItem
|
84
|
+
from .storage import StorageDefinition
|
69
85
|
|
70
86
|
from .object import ObjectDefinition
|
71
87
|
|
72
|
-
from .resource import ResourceType
|
73
|
-
|
74
|
-
from .common import MetadataFormat
|
75
|
-
from .common import MetadataVersion
|
76
|
-
from .common import TenantInfo
|
77
|
-
|
78
88
|
from .tag import Tag
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# Code generated by TRAC
|
2
|
+
|
3
|
+
import typing as _tp # noqa
|
4
|
+
import dataclasses as _dc # noqa
|
5
|
+
import enum as _enum # noqa
|
6
|
+
|
7
|
+
from .type import * # noqa
|
8
|
+
from .object_id import * # noqa
|
9
|
+
from .resource import * # noqa
|
10
|
+
|
11
|
+
|
12
|
+
class ConfigType(_enum.Enum):
|
13
|
+
|
14
|
+
"""Enumeration of available config types"""
|
15
|
+
|
16
|
+
CONFIG_TYPE_NOT_SET = 0
|
17
|
+
|
18
|
+
PROPERTIES = 1
|
19
|
+
|
20
|
+
"""A key-value properties map, follows the convention used for .properties files"""
|
21
|
+
|
22
|
+
|
23
|
+
@_dc.dataclass
|
24
|
+
class ConfigEntry:
|
25
|
+
|
26
|
+
"""Represents the mapping of a config key to a config object."""
|
27
|
+
|
28
|
+
configClass: "str" = ""
|
29
|
+
|
30
|
+
"""Config class for this config entry."""
|
31
|
+
|
32
|
+
configKey: "str" = ""
|
33
|
+
|
34
|
+
"""Config key for this config entry."""
|
35
|
+
|
36
|
+
configVersion: "int" = 0
|
37
|
+
|
38
|
+
"""Version of the config entry."""
|
39
|
+
|
40
|
+
configTimestamp: "DatetimeValue" = _dc.field(default_factory=lambda: DatetimeValue())
|
41
|
+
|
42
|
+
"""Timestamp for when this version of the config entry was created."""
|
43
|
+
|
44
|
+
isLatestConfig: "bool" = False
|
45
|
+
|
46
|
+
"""Flag indicating whether this is the latest version of the config entry."""
|
47
|
+
|
48
|
+
configDeleted: "bool" = False
|
49
|
+
|
50
|
+
"""Flag indicating whether this config entry has been deleted."""
|
51
|
+
|
52
|
+
details: "_tp.Optional[ConfigDetails]" = None
|
53
|
+
|
54
|
+
"""Describes the content of this config entry, can be used for list / summary views (optional)."""
|
55
|
+
|
56
|
+
|
57
|
+
@_dc.dataclass
|
58
|
+
class ConfigDetails:
|
59
|
+
|
60
|
+
"""
|
61
|
+
Summary content of a config entry.
|
62
|
+
|
63
|
+
.. seealso::
|
64
|
+
:py:obj:`ConfigEntry <ConfigEntry>`
|
65
|
+
"""
|
66
|
+
|
67
|
+
objectSelector: "TagSelector" = _dc.field(default_factory=lambda: TagSelector())
|
68
|
+
|
69
|
+
"""Selector for the metadata object holding the content of this config entry."""
|
70
|
+
|
71
|
+
objectType: "ObjectType" = ObjectType.OBJECT_TYPE_NOT_SET
|
72
|
+
|
73
|
+
"""Type of the metadata object referred to by this config entry."""
|
74
|
+
|
75
|
+
configType: "_tp.Optional[ConfigType]" = None
|
76
|
+
|
77
|
+
"""Indicate the config type (for CONFIG objects only)"""
|
78
|
+
|
79
|
+
resourceType: "_tp.Optional[ResourceType]" = None
|
80
|
+
|
81
|
+
"""Indicate the resource type (for RESOURCE objects only)"""
|
82
|
+
|
83
|
+
|
84
|
+
@_dc.dataclass
|
85
|
+
class ConfigDefinition:
|
86
|
+
|
87
|
+
"""Definition of an individual config entry"""
|
88
|
+
|
89
|
+
configType: "ConfigType" = ConfigType.CONFIG_TYPE_NOT_SET
|
90
|
+
|
91
|
+
"""The type of this config entry"""
|
92
|
+
|
93
|
+
properties: "_tp.Dict[str, str]" = _dc.field(default_factory=dict)
|
94
|
+
|
95
|
+
"""The map of config properties (only available for PROPERTIES config entries)"""
|
tracdap/rt/metadata/data.py
CHANGED
@@ -25,6 +25,10 @@ class SchemaType(_enum.Enum):
|
|
25
25
|
|
26
26
|
"""Tabular data"""
|
27
27
|
|
28
|
+
STRUCT = 2
|
29
|
+
|
30
|
+
"""Structured objects"""
|
31
|
+
|
28
32
|
|
29
33
|
class PartType(_enum.Enum):
|
30
34
|
|
@@ -80,6 +84,40 @@ class TableSchema:
|
|
80
84
|
fields: "_tp.List[FieldSchema]" = _dc.field(default_factory=list)
|
81
85
|
|
82
86
|
|
87
|
+
@_dc.dataclass
|
88
|
+
class StructField:
|
89
|
+
|
90
|
+
"""Schema for an individual field in a structured object dataset"""
|
91
|
+
|
92
|
+
fieldType: "TypeDescriptor" = _dc.field(default_factory=lambda: TypeDescriptor())
|
93
|
+
|
94
|
+
label: "str" = ""
|
95
|
+
|
96
|
+
businessKey: "bool" = False
|
97
|
+
|
98
|
+
categorical: "bool" = False
|
99
|
+
|
100
|
+
notNull: "_tp.Optional[bool]" = None
|
101
|
+
|
102
|
+
"""This could become mandatory with the next metadata update"""
|
103
|
+
|
104
|
+
formatCode: "_tp.Optional[str]" = None
|
105
|
+
|
106
|
+
defaultValue: "Value" = _dc.field(default_factory=lambda: Value())
|
107
|
+
|
108
|
+
structType: "_tp.Optional[str]" = None
|
109
|
+
|
110
|
+
|
111
|
+
@_dc.dataclass
|
112
|
+
class StructSchema:
|
113
|
+
|
114
|
+
"""Schema for a structured object dataset"""
|
115
|
+
|
116
|
+
fields: "_tp.Dict[str, StructField]" = _dc.field(default_factory=dict)
|
117
|
+
|
118
|
+
namedTypes: "_tp.Dict[str, StructSchema]" = _dc.field(default_factory=dict)
|
119
|
+
|
120
|
+
|
83
121
|
@_dc.dataclass
|
84
122
|
class SchemaDefinition:
|
85
123
|
|
@@ -103,6 +141,8 @@ class SchemaDefinition:
|
|
103
141
|
|
104
142
|
table: "_tp.Optional[TableSchema]" = None
|
105
143
|
|
144
|
+
struct: "_tp.Optional[StructSchema]" = None
|
145
|
+
|
106
146
|
|
107
147
|
@_dc.dataclass
|
108
148
|
class PartKey:
|
tracdap/rt/metadata/file.py
CHANGED
@@ -24,3 +24,13 @@ class FileDefinition:
|
|
24
24
|
storageId: "TagSelector" = _dc.field(default_factory=lambda: TagSelector())
|
25
25
|
|
26
26
|
dataItem: "str" = ""
|
27
|
+
|
28
|
+
|
29
|
+
@_dc.dataclass
|
30
|
+
class FileType:
|
31
|
+
|
32
|
+
"""Specify a file type that is produced or consumed by a model, flow or job"""
|
33
|
+
|
34
|
+
extension: "str" = ""
|
35
|
+
|
36
|
+
mimeType: "str" = ""
|
tracdap/rt/metadata/job.py
CHANGED
@@ -117,6 +117,22 @@ class JobDefinition:
|
|
117
117
|
|
118
118
|
jobGroup: "_tp.Optional[JobGroup]" = None
|
119
119
|
|
120
|
+
resultId: "TagSelector" = _dc.field(default_factory=lambda: TagSelector())
|
121
|
+
|
122
|
+
|
123
|
+
@_dc.dataclass
|
124
|
+
class ResultDefinition:
|
125
|
+
|
126
|
+
"""Define the result of a job after it has completed"""
|
127
|
+
|
128
|
+
jobId: "TagSelector" = _dc.field(default_factory=lambda: TagSelector())
|
129
|
+
|
130
|
+
statusCode: "JobStatusCode" = JobStatusCode.JOB_STATUS_CODE_NOT_SET
|
131
|
+
|
132
|
+
statusMessage: "str" = ""
|
133
|
+
|
134
|
+
logFileId: "TagSelector" = _dc.field(default_factory=lambda: TagSelector())
|
135
|
+
|
120
136
|
|
121
137
|
@_dc.dataclass
|
122
138
|
class RunModelJob:
|
tracdap/rt/metadata/model.py
CHANGED
@@ -5,7 +5,9 @@ import dataclasses as _dc # noqa
|
|
5
5
|
import enum as _enum # noqa
|
6
6
|
|
7
7
|
from .type import * # noqa
|
8
|
+
from .object_id import * # noqa
|
8
9
|
from .data import * # noqa
|
10
|
+
from .file import * # noqa
|
9
11
|
|
10
12
|
|
11
13
|
class ModelType(_enum.Enum):
|
@@ -54,7 +56,11 @@ class ModelInputSchema:
|
|
54
56
|
other options may be required. These capabilities may be added in future releases.
|
55
57
|
"""
|
56
58
|
|
57
|
-
|
59
|
+
objectType: "ObjectType" = ObjectType.OBJECT_TYPE_NOT_SET
|
60
|
+
|
61
|
+
schema: "_tp.Optional[SchemaDefinition]" = None
|
62
|
+
|
63
|
+
fileType: "_tp.Optional[FileType]" = None
|
58
64
|
|
59
65
|
label: "_tp.Optional[str]" = None
|
60
66
|
|
@@ -81,7 +87,11 @@ class ModelOutputSchema:
|
|
81
87
|
added in future releases.
|
82
88
|
"""
|
83
89
|
|
84
|
-
|
90
|
+
objectType: "ObjectType" = ObjectType.OBJECT_TYPE_NOT_SET
|
91
|
+
|
92
|
+
schema: "_tp.Optional[SchemaDefinition]" = None
|
93
|
+
|
94
|
+
fileType: "_tp.Optional[FileType]" = None
|
85
95
|
|
86
96
|
label: "_tp.Optional[str]" = None
|
87
97
|
|
tracdap/rt/metadata/object.py
CHANGED
@@ -12,7 +12,9 @@ from .flow import * # noqa
|
|
12
12
|
from .job import * # noqa
|
13
13
|
from .file import * # noqa
|
14
14
|
from .custom import * # noqa
|
15
|
-
from .
|
15
|
+
from .storage import * # noqa
|
16
|
+
from .config import * # noqa
|
17
|
+
from .resource import * # noqa
|
16
18
|
|
17
19
|
|
18
20
|
|
@@ -70,4 +72,10 @@ class ObjectDefinition:
|
|
70
72
|
|
71
73
|
schema: "_tp.Optional[SchemaDefinition]" = None
|
72
74
|
|
75
|
+
result: "_tp.Optional[ResultDefinition]" = None
|
76
|
+
|
77
|
+
config: "_tp.Optional[ConfigDefinition]" = None
|
78
|
+
|
79
|
+
resource: "_tp.Optional[ResourceDefinition]" = None
|
80
|
+
|
73
81
|
objectProps: "_tp.Dict[str, Value]" = _dc.field(default_factory=dict)
|
tracdap/rt/metadata/object_id.py
CHANGED
tracdap/rt/metadata/resource.py
CHANGED
@@ -5,7 +5,6 @@ import dataclasses as _dc # noqa
|
|
5
5
|
import enum as _enum # noqa
|
6
6
|
|
7
7
|
from .object_id import * # noqa
|
8
|
-
from .object import * # noqa
|
9
8
|
|
10
9
|
|
11
10
|
class ResourceType(_enum.Enum):
|
@@ -21,3 +20,44 @@ class ResourceType(_enum.Enum):
|
|
21
20
|
INTERNAL_STORAGE = 2
|
22
21
|
|
23
22
|
"""Storage location for data held internally by the TRAC platform"""
|
23
|
+
|
24
|
+
EXTERNAL_STORAGE = 3
|
25
|
+
|
26
|
+
"""Storage location for upstream downstream integration points"""
|
27
|
+
|
28
|
+
|
29
|
+
@_dc.dataclass
|
30
|
+
class ResourceDefinition:
|
31
|
+
|
32
|
+
"""Definition of a platform resource"""
|
33
|
+
|
34
|
+
resourceType: "ResourceType" = ResourceType.RESOURCE_TYPE_NOT_SET
|
35
|
+
|
36
|
+
"""The type of this resource"""
|
37
|
+
|
38
|
+
protocol: "str" = ""
|
39
|
+
|
40
|
+
"""The protocol used to communicate with this resource (usually corresponds to a TRAC plugin)"""
|
41
|
+
|
42
|
+
subProtocol: "_tp.Optional[str]" = None
|
43
|
+
|
44
|
+
"""Optional sub-protocol, to further distinguish the behavior of resources within a protocol"""
|
45
|
+
|
46
|
+
publicProperties: "_tp.Dict[str, str]" = _dc.field(default_factory=dict)
|
47
|
+
|
48
|
+
"""Configuration properties for this resource, made visible to client applications"""
|
49
|
+
|
50
|
+
properties: "_tp.Dict[str, str]" = _dc.field(default_factory=dict)
|
51
|
+
|
52
|
+
"""Configuration properties for this resource, not visible to client applications"""
|
53
|
+
|
54
|
+
secrets: "_tp.Dict[str, str]" = _dc.field(default_factory=dict)
|
55
|
+
|
56
|
+
"""
|
57
|
+
Configuration properties that are stored as secrets using TRAC's secret handling mechanism
|
58
|
+
|
59
|
+
Only the secret alias is stored in metadata, handling of secret storage is delegated to the
|
60
|
+
configured secrets plugin. Secret values may be sent by clients when resource definitions are
|
61
|
+
created / updated, in which case they will be written to the configured secret store and
|
62
|
+
metadata values will be replaced with an alias.
|
63
|
+
"""
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: tracdap-runtime
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.8.0
|
4
4
|
Summary: Runtime package for building models on the TRAC Data & Analytics Platform
|
5
5
|
Home-page: https://tracdap.finos.org/
|
6
6
|
Author: Martin Traverse
|
@@ -13,38 +13,42 @@ Platform: any
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
14
14
|
Classifier: License :: OSI Approved :: Apache Software License
|
15
15
|
Classifier: Operating System :: OS Independent
|
16
|
-
Requires-Python: <3.
|
16
|
+
Requires-Python: <3.14,>=3.9
|
17
17
|
Description-Content-Type: text/markdown
|
18
18
|
License-File: LICENSE
|
19
|
-
Requires-Dist: protobuf==5.
|
20
|
-
Requires-Dist: pyarrow==
|
19
|
+
Requires-Dist: protobuf==5.29.3
|
20
|
+
Requires-Dist: pyarrow==18.1.0
|
21
21
|
Requires-Dist: pyyaml==6.0.2
|
22
|
-
Requires-Dist: dulwich==0.22.
|
22
|
+
Requires-Dist: dulwich==0.22.7
|
23
23
|
Requires-Dist: requests==2.32.3
|
24
|
-
Requires-Dist:
|
25
|
-
Requires-Dist:
|
24
|
+
Requires-Dist: typing_extensions<4.13
|
25
|
+
Requires-Dist: urllib3<2.4.0
|
26
|
+
Provides-Extra: grpc
|
27
|
+
Requires-Dist: grpcio==1.70.0; extra == "grpc"
|
28
|
+
Requires-Dist: grpcio-status==1.70.0; extra == "grpc"
|
29
|
+
Provides-Extra: pandas
|
30
|
+
Requires-Dist: pandas<2.3.0,>=1.2.0; extra == "pandas"
|
31
|
+
Requires-Dist: numpy<2.3.0,>=1.20; extra == "pandas"
|
32
|
+
Provides-Extra: polars
|
33
|
+
Requires-Dist: polars<2.0.0,>=1.0.0; extra == "polars"
|
34
|
+
Provides-Extra: pyspark
|
35
|
+
Requires-Dist: pyspark<3.6.0,>=3.0.0; extra == "pyspark"
|
36
|
+
Provides-Extra: sql
|
37
|
+
Requires-Dist: sqlalchemy<2.1.0,>=2.0.0; extra == "sql"
|
26
38
|
Provides-Extra: aws
|
27
39
|
Requires-Dist: botocore==1.34.93; extra == "aws"
|
28
40
|
Requires-Dist: boto3==1.34.93; extra == "aws"
|
29
|
-
Provides-Extra: azure
|
30
|
-
Requires-Dist: azure-core==1.30.1; extra == "azure"
|
31
|
-
Requires-Dist: azure-identity==1.16.1; extra == "azure"
|
32
|
-
Requires-Dist: azure-storage-blob==12.19.1; extra == "azure"
|
33
|
-
Requires-Dist: adlfs==2024.4.1; extra == "azure"
|
34
41
|
Provides-Extra: gcp
|
35
42
|
Requires-Dist: google-auth==2.34.0; extra == "gcp"
|
36
43
|
Requires-Dist: google-api-core==2.19.2; extra == "gcp"
|
37
44
|
Requires-Dist: google-cloud-storage==2.18.2; extra == "gcp"
|
38
45
|
Requires-Dist: gcsfs==2024.3.1; extra == "gcp"
|
39
|
-
Provides-Extra:
|
40
|
-
Requires-Dist:
|
41
|
-
Requires-Dist:
|
42
|
-
|
43
|
-
Requires-Dist:
|
44
|
-
|
45
|
-
Requires-Dist: pyspark<3.6.0,>=3.0.0; extra == "spark"
|
46
|
-
Provides-Extra: sql
|
47
|
-
Requires-Dist: sqlalchemy<2.1.0,>=2.0.0; extra == "sql"
|
46
|
+
Provides-Extra: azure
|
47
|
+
Requires-Dist: azure-core==1.30.1; extra == "azure"
|
48
|
+
Requires-Dist: azure-identity==1.16.1; extra == "azure"
|
49
|
+
Requires-Dist: azure-storage-blob==12.19.1; extra == "azure"
|
50
|
+
Requires-Dist: adlfs==2024.4.1; extra == "azure"
|
51
|
+
Dynamic: license-file
|
48
52
|
|
49
53
|
# TRAC Model Runtime for Python
|
50
54
|
|
@@ -64,12 +68,14 @@ Documentation for the TRAC platform is available on our website at
|
|
64
68
|
|
65
69
|
The TRAC runtime for Python has these requirements:
|
66
70
|
|
67
|
-
* Python: 3.
|
68
|
-
* Pandas: 1.2 up to 2.2
|
69
|
-
*
|
71
|
+
* Python: 3.9 up to 3.13
|
72
|
+
* Pandas: 1.2 up to 2.2 (optional)
|
73
|
+
* NumPy: 1.2 up to 2.2 (optional, required by Pandas)
|
74
|
+
* Polars: 1.X (optional)
|
70
75
|
|
71
|
-
3rd party libraries may impose additional constraints on supported versions of
|
72
|
-
|
76
|
+
3rd party libraries may impose additional constraints on supported versions of key libraries.
|
77
|
+
For example, Pandas 1.5 is not available for Python 3.12 or 3.13, while NumPy 2.0 is only
|
78
|
+
compatible with Pandas 2.1 and later.
|
73
79
|
|
74
80
|
## Installing the runtime
|
75
81
|
|