tracdap-runtime 0.6.2__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/dev_mode.py +9 -17
- tracdap/rt/_exec/engine.py +79 -14
- tracdap/rt/_exec/runtime.py +83 -40
- tracdap/rt/_exec/server.py +306 -29
- tracdap/rt/_impl/config_parser.py +219 -49
- tracdap/rt/_impl/grpc/codec.py +60 -5
- tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2.py +19 -19
- tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2.pyi +11 -9
- tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2_grpc.py +25 -25
- tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.py +28 -16
- tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.pyi +33 -6
- tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.py +8 -3
- tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.pyi +13 -2
- tracdap/rt/_impl/guard_rails.py +21 -0
- tracdap/rt/_impl/models.py +25 -0
- tracdap/rt/_impl/static_api.py +23 -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 +6 -3
- tracdap/rt/api/static_api.py +71 -21
- tracdap/rt/config/__init__.py +4 -4
- tracdap/rt/config/common.py +10 -0
- tracdap/rt/config/platform.py +0 -10
- 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 +4 -0
- tracdap/rt/launch/launch.py +34 -9
- tracdap/rt/metadata/__init__.py +17 -17
- tracdap/rt/metadata/model.py +6 -0
- tracdap/rt/metadata/object.py +3 -0
- {tracdap_runtime-0.6.2.dist-info → tracdap_runtime-0.6.3.dist-info}/METADATA +4 -4
- {tracdap_runtime-0.6.2.dist-info → tracdap_runtime-0.6.3.dist-info}/RECORD +40 -49
- {tracdap_runtime-0.6.2.dist-info → tracdap_runtime-0.6.3.dist-info}/WHEEL +1 -1
- tracdap/rt/_impl/grpc/tracdap/config/common_pb2.py +0 -55
- tracdap/rt/_impl/grpc/tracdap/config/common_pb2.pyi +0 -103
- tracdap/rt/_impl/grpc/tracdap/config/job_pb2.py +0 -42
- tracdap/rt/_impl/grpc/tracdap/config/job_pb2.pyi +0 -44
- tracdap/rt/_impl/grpc/tracdap/config/platform_pb2.py +0 -71
- tracdap/rt/_impl/grpc/tracdap/config/platform_pb2.pyi +0 -197
- tracdap/rt/_impl/grpc/tracdap/config/result_pb2.py +0 -37
- tracdap/rt/_impl/grpc/tracdap/config/result_pb2.pyi +0 -35
- tracdap/rt/_impl/grpc/tracdap/config/runtime_pb2.py +0 -42
- tracdap/rt/_impl/grpc/tracdap/config/runtime_pb2.pyi +0 -46
- tracdap/rt/ext/_guard.py +0 -37
- {tracdap_runtime-0.6.2.dist-info → tracdap_runtime-0.6.3.dist-info}/LICENSE +0 -0
- {tracdap_runtime-0.6.2.dist-info → tracdap_runtime-0.6.3.dist-info}/top_level.txt +0 -0
tracdap/rt/_impl/grpc/codec.py
CHANGED
@@ -15,6 +15,58 @@
|
|
15
15
|
import enum
|
16
16
|
import typing as tp
|
17
17
|
|
18
|
+
import tracdap.rt.exceptions as ex
|
19
|
+
import tracdap.rt.metadata as metadata
|
20
|
+
|
21
|
+
import tracdap.rt._impl.grpc.tracdap.metadata.type_pb2 as type_pb2
|
22
|
+
import tracdap.rt._impl.grpc.tracdap.metadata.object_id_pb2 as object_id_pb2
|
23
|
+
import tracdap.rt._impl.grpc.tracdap.metadata.object_pb2 as object_pb2
|
24
|
+
from tracdap.rt._impl.grpc.tracdap.metadata import model_pb2
|
25
|
+
import tracdap.rt._impl.grpc.tracdap.metadata.data_pb2 as data_pb2
|
26
|
+
import tracdap.rt._impl.grpc.tracdap.metadata.stoarge_pb2 as storage_pb2
|
27
|
+
|
28
|
+
from google.protobuf import message as _message
|
29
|
+
|
30
|
+
|
31
|
+
__METADATA_MAPPING = {
|
32
|
+
metadata.TypeDescriptor: type_pb2.TypeDescriptor,
|
33
|
+
metadata.Value: type_pb2.Value,
|
34
|
+
metadata.DecimalValue: type_pb2.DecimalValue,
|
35
|
+
metadata.DateValue: type_pb2.DateValue,
|
36
|
+
metadata.DatetimeValue: type_pb2.DatetimeValue,
|
37
|
+
metadata.ArrayValue: type_pb2.ArrayValue,
|
38
|
+
metadata.MapValue: type_pb2.MapValue,
|
39
|
+
metadata.TagHeader: object_id_pb2.TagHeader,
|
40
|
+
metadata.TagSelector: object_id_pb2.TagSelector,
|
41
|
+
metadata.ObjectDefinition: object_pb2.ObjectDefinition,
|
42
|
+
metadata.ModelDefinition: model_pb2.ModelDefinition,
|
43
|
+
metadata.ModelParameter: model_pb2.ModelParameter,
|
44
|
+
metadata.ModelInputSchema: model_pb2.ModelInputSchema,
|
45
|
+
metadata.ModelOutputSchema: model_pb2.ModelOutputSchema,
|
46
|
+
metadata.SchemaDefinition: data_pb2.SchemaDefinition,
|
47
|
+
metadata.TableSchema: data_pb2.TableSchema,
|
48
|
+
metadata.FieldSchema: data_pb2.FieldSchema,
|
49
|
+
metadata.PartKey: data_pb2.PartKey,
|
50
|
+
metadata.DataDefinition: data_pb2.DataDefinition,
|
51
|
+
metadata.DataDefinition.Part: data_pb2.DataDefinition.Part,
|
52
|
+
metadata.DataDefinition.Snap: data_pb2.DataDefinition.Snap,
|
53
|
+
metadata.DataDefinition.Delta: data_pb2.DataDefinition.Delta,
|
54
|
+
metadata.StorageDefinition: storage_pb2.StorageDefinition,
|
55
|
+
metadata.StorageIncarnation: storage_pb2.StorageIncarnation,
|
56
|
+
metadata.StorageCopy: storage_pb2.StorageCopy,
|
57
|
+
metadata.StorageItem: storage_pb2.StorageItem
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
_T_MSG = tp.TypeVar('_T_MSG', bound=_message.Message)
|
62
|
+
|
63
|
+
|
64
|
+
def encode_message(msg_class: _T_MSG.__class__, obj: tp.Any) -> _T_MSG:
|
65
|
+
|
66
|
+
attrs = dict((k, encode(v)) for k, v in obj.__dict__.items())
|
67
|
+
|
68
|
+
return msg_class(**attrs)
|
69
|
+
|
18
70
|
|
19
71
|
def encode(obj: tp.Any) -> tp.Any:
|
20
72
|
|
@@ -35,10 +87,13 @@ def encode(obj: tp.Any) -> tp.Any:
|
|
35
87
|
return list(map(encode, obj))
|
36
88
|
|
37
89
|
if isinstance(obj, dict):
|
38
|
-
return dict(
|
90
|
+
return dict((k, encode(v)) for k, v in obj.items())
|
91
|
+
|
92
|
+
msg_class = __METADATA_MAPPING.get(type(obj))
|
93
|
+
|
94
|
+
if msg_class is None:
|
95
|
+
raise ex.ETracInternal(f"No gRPC metadata mapping is available for type {type(obj).__name__}")
|
39
96
|
|
40
|
-
|
41
|
-
if hasattr(obj, "__module__") and "tracdap" in obj.__module__:
|
42
|
-
return dict(map(lambda kv: (kv[0], encode(kv[1])), obj.__dict__.items()))
|
97
|
+
attrs = dict((k, encode(v)) for k, v in obj.__dict__.items() if v is not None)
|
43
98
|
|
44
|
-
|
99
|
+
return msg_class(**attrs)
|
@@ -18,7 +18,7 @@ from tracdap.rt._impl.grpc.tracdap.metadata import object_pb2 as tracdap_dot_rt_
|
|
18
18
|
from google.api import annotations_pb2 as google_dot_api_dot_annotations__pb2
|
19
19
|
|
20
20
|
|
21
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n8tracdap/rt/_impl/grpc/tracdap/api/internal/runtime.proto\x12\x14tracdap.api.internal\x1a\x36tracdap/rt/_impl/grpc/tracdap/metadata/object_id.proto\x1a\x30tracdap/rt/_impl/grpc/tracdap/metadata/job.proto\x1a\x33tracdap/rt/_impl/grpc/tracdap/metadata/object.proto\x1a\x1cgoogle/api/annotations.proto\"
|
21
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n8tracdap/rt/_impl/grpc/tracdap/api/internal/runtime.proto\x12\x14tracdap.api.internal\x1a\x36tracdap/rt/_impl/grpc/tracdap/metadata/object_id.proto\x1a\x30tracdap/rt/_impl/grpc/tracdap/metadata/job.proto\x1a\x33tracdap/rt/_impl/grpc/tracdap/metadata/object.proto\x1a\x1cgoogle/api/annotations.proto\"6\n\x16RuntimeListJobsRequest\x12\x12\n\x05limit\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\x08\n\x06_limit\"O\n\x17RuntimeListJobsResponse\x12\x34\n\x04jobs\x18\x01 \x03(\x0b\x32&.tracdap.api.internal.RuntimeJobStatus\"f\n\x15RuntimeJobInfoRequest\x12\x34\n\x0bjobSelector\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorH\x00\x12\x10\n\x06jobKey\x18\x02 \x01(\tH\x00\x42\x05\n\x03job\"\x9f\x01\n\x10RuntimeJobStatus\x12*\n\x05jobId\x18\x01 \x01(\x0b\x32\x1b.tracdap.metadata.TagHeader\x12\x33\n\nstatusCode\x18\x02 \x01(\x0e\x32\x1f.tracdap.metadata.JobStatusCode\x12\x15\n\rstatusMessage\x18\x03 \x01(\t\x12\x13\n\x0b\x65rrorDetail\x18\x04 \x01(\t\"\xa4\x02\n\x10RuntimeJobResult\x12*\n\x05jobId\x18\x01 \x01(\x0b\x32\x1b.tracdap.metadata.TagHeader\x12\x33\n\nstatusCode\x18\x02 \x01(\x0e\x32\x1f.tracdap.metadata.JobStatusCode\x12\x15\n\rstatusMessage\x18\x03 \x01(\t\x12\x44\n\x07results\x18\x04 \x03(\x0b\x32\x33.tracdap.api.internal.RuntimeJobResult.ResultsEntry\x1aR\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x31\n\x05value\x18\x02 \x01(\x0b\x32\".tracdap.metadata.ObjectDefinition:\x02\x38\x01\x32\x95\x03\n\x0eTracRuntimeApi\x12{\n\x08listJobs\x12,.tracdap.api.internal.RuntimeListJobsRequest\x1a-.tracdap.api.internal.RuntimeListJobsResponse\"\x12\x82\xd3\xe4\x93\x02\x0c\x12\n/list-jobs\x12\x81\x01\n\x0cgetJobStatus\x12+.tracdap.api.internal.RuntimeJobInfoRequest\x1a&.tracdap.api.internal.RuntimeJobStatus\"\x1c\x82\xd3\xe4\x93\x02\x16\x12\x14/job-status/{jobKey}\x12\x81\x01\n\x0cgetJobResult\x12+.tracdap.api.internal.RuntimeJobInfoRequest\x1a&.tracdap.api.internal.RuntimeJobResult\"\x1c\x82\xd3\xe4\x93\x02\x16\x12\x14/job-result/{jobKey}B\"\n\x1eorg.finos.tracdap.api.internalP\x01\x62\x06proto3')
|
22
22
|
|
23
23
|
_globals = globals()
|
24
24
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -26,26 +26,26 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tracdap.rt._impl.grpc.tracd
|
|
26
26
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
27
27
|
_globals['DESCRIPTOR']._options = None
|
28
28
|
_globals['DESCRIPTOR']._serialized_options = b'\n\036org.finos.tracdap.api.internalP\001'
|
29
|
-
_globals['
|
30
|
-
_globals['
|
29
|
+
_globals['_RUNTIMEJOBRESULT_RESULTSENTRY']._options = None
|
30
|
+
_globals['_RUNTIMEJOBRESULT_RESULTSENTRY']._serialized_options = b'8\001'
|
31
31
|
_globals['_TRACRUNTIMEAPI'].methods_by_name['listJobs']._options = None
|
32
32
|
_globals['_TRACRUNTIMEAPI'].methods_by_name['listJobs']._serialized_options = b'\202\323\344\223\002\014\022\n/list-jobs'
|
33
33
|
_globals['_TRACRUNTIMEAPI'].methods_by_name['getJobStatus']._options = None
|
34
34
|
_globals['_TRACRUNTIMEAPI'].methods_by_name['getJobStatus']._serialized_options = b'\202\323\344\223\002\026\022\024/job-status/{jobKey}'
|
35
|
-
_globals['_TRACRUNTIMEAPI'].methods_by_name['
|
36
|
-
_globals['_TRACRUNTIMEAPI'].methods_by_name['
|
37
|
-
_globals['
|
38
|
-
_globals['
|
39
|
-
_globals['
|
40
|
-
_globals['
|
41
|
-
_globals['
|
42
|
-
_globals['
|
43
|
-
_globals['
|
44
|
-
_globals['
|
45
|
-
_globals['
|
46
|
-
_globals['
|
47
|
-
_globals['
|
48
|
-
_globals['
|
49
|
-
_globals['_TRACRUNTIMEAPI']._serialized_start=
|
50
|
-
_globals['_TRACRUNTIMEAPI']._serialized_end=
|
35
|
+
_globals['_TRACRUNTIMEAPI'].methods_by_name['getJobResult']._options = None
|
36
|
+
_globals['_TRACRUNTIMEAPI'].methods_by_name['getJobResult']._serialized_options = b'\202\323\344\223\002\026\022\024/job-result/{jobKey}'
|
37
|
+
_globals['_RUNTIMELISTJOBSREQUEST']._serialized_start=271
|
38
|
+
_globals['_RUNTIMELISTJOBSREQUEST']._serialized_end=325
|
39
|
+
_globals['_RUNTIMELISTJOBSRESPONSE']._serialized_start=327
|
40
|
+
_globals['_RUNTIMELISTJOBSRESPONSE']._serialized_end=406
|
41
|
+
_globals['_RUNTIMEJOBINFOREQUEST']._serialized_start=408
|
42
|
+
_globals['_RUNTIMEJOBINFOREQUEST']._serialized_end=510
|
43
|
+
_globals['_RUNTIMEJOBSTATUS']._serialized_start=513
|
44
|
+
_globals['_RUNTIMEJOBSTATUS']._serialized_end=672
|
45
|
+
_globals['_RUNTIMEJOBRESULT']._serialized_start=675
|
46
|
+
_globals['_RUNTIMEJOBRESULT']._serialized_end=967
|
47
|
+
_globals['_RUNTIMEJOBRESULT_RESULTSENTRY']._serialized_start=885
|
48
|
+
_globals['_RUNTIMEJOBRESULT_RESULTSENTRY']._serialized_end=967
|
49
|
+
_globals['_TRACRUNTIMEAPI']._serialized_start=970
|
50
|
+
_globals['_TRACRUNTIMEAPI']._serialized_end=1375
|
51
51
|
# @@protoc_insertion_point(module_scope)
|
@@ -9,19 +9,19 @@ from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Map
|
|
9
9
|
|
10
10
|
DESCRIPTOR: _descriptor.FileDescriptor
|
11
11
|
|
12
|
-
class
|
12
|
+
class RuntimeListJobsRequest(_message.Message):
|
13
13
|
__slots__ = ("limit",)
|
14
14
|
LIMIT_FIELD_NUMBER: _ClassVar[int]
|
15
15
|
limit: int
|
16
16
|
def __init__(self, limit: _Optional[int] = ...) -> None: ...
|
17
17
|
|
18
|
-
class
|
18
|
+
class RuntimeListJobsResponse(_message.Message):
|
19
19
|
__slots__ = ("jobs",)
|
20
20
|
JOBS_FIELD_NUMBER: _ClassVar[int]
|
21
|
-
jobs: _containers.RepeatedCompositeFieldContainer[
|
22
|
-
def __init__(self, jobs: _Optional[_Iterable[_Union[
|
21
|
+
jobs: _containers.RepeatedCompositeFieldContainer[RuntimeJobStatus]
|
22
|
+
def __init__(self, jobs: _Optional[_Iterable[_Union[RuntimeJobStatus, _Mapping]]] = ...) -> None: ...
|
23
23
|
|
24
|
-
class
|
24
|
+
class RuntimeJobInfoRequest(_message.Message):
|
25
25
|
__slots__ = ("jobSelector", "jobKey")
|
26
26
|
JOBSELECTOR_FIELD_NUMBER: _ClassVar[int]
|
27
27
|
JOBKEY_FIELD_NUMBER: _ClassVar[int]
|
@@ -29,17 +29,19 @@ class BatchJobStatusRequest(_message.Message):
|
|
29
29
|
jobKey: str
|
30
30
|
def __init__(self, jobSelector: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ..., jobKey: _Optional[str] = ...) -> None: ...
|
31
31
|
|
32
|
-
class
|
33
|
-
__slots__ = ("jobId", "statusCode", "statusMessage")
|
32
|
+
class RuntimeJobStatus(_message.Message):
|
33
|
+
__slots__ = ("jobId", "statusCode", "statusMessage", "errorDetail")
|
34
34
|
JOBID_FIELD_NUMBER: _ClassVar[int]
|
35
35
|
STATUSCODE_FIELD_NUMBER: _ClassVar[int]
|
36
36
|
STATUSMESSAGE_FIELD_NUMBER: _ClassVar[int]
|
37
|
+
ERRORDETAIL_FIELD_NUMBER: _ClassVar[int]
|
37
38
|
jobId: _object_id_pb2.TagHeader
|
38
39
|
statusCode: _job_pb2.JobStatusCode
|
39
40
|
statusMessage: str
|
40
|
-
|
41
|
+
errorDetail: str
|
42
|
+
def __init__(self, jobId: _Optional[_Union[_object_id_pb2.TagHeader, _Mapping]] = ..., statusCode: _Optional[_Union[_job_pb2.JobStatusCode, str]] = ..., statusMessage: _Optional[str] = ..., errorDetail: _Optional[str] = ...) -> None: ...
|
41
43
|
|
42
|
-
class
|
44
|
+
class RuntimeJobResult(_message.Message):
|
43
45
|
__slots__ = ("jobId", "statusCode", "statusMessage", "results")
|
44
46
|
class ResultsEntry(_message.Message):
|
45
47
|
__slots__ = ("key", "value")
|
@@ -36,18 +36,18 @@ class TracRuntimeApiStub(object):
|
|
36
36
|
"""
|
37
37
|
self.listJobs = channel.unary_unary(
|
38
38
|
'/tracdap.api.internal.TracRuntimeApi/listJobs',
|
39
|
-
request_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
40
|
-
response_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
39
|
+
request_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeListJobsRequest.SerializeToString,
|
40
|
+
response_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeListJobsResponse.FromString,
|
41
41
|
_registered_method=True)
|
42
42
|
self.getJobStatus = channel.unary_unary(
|
43
43
|
'/tracdap.api.internal.TracRuntimeApi/getJobStatus',
|
44
|
-
request_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
45
|
-
response_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
44
|
+
request_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobInfoRequest.SerializeToString,
|
45
|
+
response_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobStatus.FromString,
|
46
46
|
_registered_method=True)
|
47
|
-
self.
|
48
|
-
'/tracdap.api.internal.TracRuntimeApi/
|
49
|
-
request_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
50
|
-
response_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
47
|
+
self.getJobResult = channel.unary_unary(
|
48
|
+
'/tracdap.api.internal.TracRuntimeApi/getJobResult',
|
49
|
+
request_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobInfoRequest.SerializeToString,
|
50
|
+
response_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobResult.FromString,
|
51
51
|
_registered_method=True)
|
52
52
|
|
53
53
|
|
@@ -66,7 +66,7 @@ class TracRuntimeApiServicer(object):
|
|
66
66
|
context.set_details('Method not implemented!')
|
67
67
|
raise NotImplementedError('Method not implemented!')
|
68
68
|
|
69
|
-
def
|
69
|
+
def getJobResult(self, request, context):
|
70
70
|
"""Missing associated documentation comment in .proto file."""
|
71
71
|
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
72
72
|
context.set_details('Method not implemented!')
|
@@ -77,18 +77,18 @@ def add_TracRuntimeApiServicer_to_server(servicer, server):
|
|
77
77
|
rpc_method_handlers = {
|
78
78
|
'listJobs': grpc.unary_unary_rpc_method_handler(
|
79
79
|
servicer.listJobs,
|
80
|
-
request_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
81
|
-
response_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
80
|
+
request_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeListJobsRequest.FromString,
|
81
|
+
response_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeListJobsResponse.SerializeToString,
|
82
82
|
),
|
83
83
|
'getJobStatus': grpc.unary_unary_rpc_method_handler(
|
84
84
|
servicer.getJobStatus,
|
85
|
-
request_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
86
|
-
response_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
85
|
+
request_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobInfoRequest.FromString,
|
86
|
+
response_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobStatus.SerializeToString,
|
87
87
|
),
|
88
|
-
'
|
89
|
-
servicer.
|
90
|
-
request_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
91
|
-
response_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
88
|
+
'getJobResult': grpc.unary_unary_rpc_method_handler(
|
89
|
+
servicer.getJobResult,
|
90
|
+
request_deserializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobInfoRequest.FromString,
|
91
|
+
response_serializer=tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobResult.SerializeToString,
|
92
92
|
),
|
93
93
|
}
|
94
94
|
generic_handler = grpc.method_handlers_generic_handler(
|
@@ -116,8 +116,8 @@ class TracRuntimeApi(object):
|
|
116
116
|
request,
|
117
117
|
target,
|
118
118
|
'/tracdap.api.internal.TracRuntimeApi/listJobs',
|
119
|
-
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
120
|
-
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
119
|
+
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeListJobsRequest.SerializeToString,
|
120
|
+
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeListJobsResponse.FromString,
|
121
121
|
options,
|
122
122
|
channel_credentials,
|
123
123
|
insecure,
|
@@ -143,8 +143,8 @@ class TracRuntimeApi(object):
|
|
143
143
|
request,
|
144
144
|
target,
|
145
145
|
'/tracdap.api.internal.TracRuntimeApi/getJobStatus',
|
146
|
-
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
147
|
-
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
146
|
+
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobInfoRequest.SerializeToString,
|
147
|
+
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobStatus.FromString,
|
148
148
|
options,
|
149
149
|
channel_credentials,
|
150
150
|
insecure,
|
@@ -156,7 +156,7 @@ class TracRuntimeApi(object):
|
|
156
156
|
_registered_method=True)
|
157
157
|
|
158
158
|
@staticmethod
|
159
|
-
def
|
159
|
+
def getJobResult(request,
|
160
160
|
target,
|
161
161
|
options=(),
|
162
162
|
channel_credentials=None,
|
@@ -169,9 +169,9 @@ class TracRuntimeApi(object):
|
|
169
169
|
return grpc.experimental.unary_unary(
|
170
170
|
request,
|
171
171
|
target,
|
172
|
-
'/tracdap.api.internal.TracRuntimeApi/
|
173
|
-
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
174
|
-
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.
|
172
|
+
'/tracdap.api.internal.TracRuntimeApi/getJobResult',
|
173
|
+
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobInfoRequest.SerializeToString,
|
174
|
+
tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_api_dot_internal_dot_runtime__pb2.RuntimeJobResult.FromString,
|
175
175
|
options,
|
176
176
|
channel_credentials,
|
177
177
|
insecure,
|
@@ -16,7 +16,7 @@ from tracdap.rt._impl.grpc.tracdap.metadata import type_pb2 as tracdap_dot_rt_do
|
|
16
16
|
from tracdap.rt._impl.grpc.tracdap.metadata import data_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_data__pb2
|
17
17
|
|
18
18
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2tracdap/rt/_impl/grpc/tracdap/metadata/model.proto\x12\x10tracdap.metadata\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/type.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/data.proto\"\
|
19
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n2tracdap/rt/_impl/grpc/tracdap/metadata/model.proto\x12\x10tracdap.metadata\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/type.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/data.proto\"\xab\x02\n\x0eModelParameter\x12\x33\n\tparamType\x18\x01 \x01(\x0b\x32 .tracdap.metadata.TypeDescriptor\x12\r\n\x05label\x18\x02 \x01(\t\x12\x32\n\x0c\x64\x65\x66\x61ultValue\x18\x03 \x01(\x0b\x32\x17.tracdap.metadata.ValueH\x00\x88\x01\x01\x12\x44\n\nparamProps\x18\x04 \x03(\x0b\x32\x30.tracdap.metadata.ModelParameter.ParamPropsEntry\x1aJ\n\x0fParamPropsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x42\x0f\n\r_defaultValue\"\x8a\x02\n\x10ModelInputSchema\x12\x32\n\x06schema\x18\x01 \x01(\x0b\x32\".tracdap.metadata.SchemaDefinition\x12\x12\n\x05label\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08optional\x18\x03 \x01(\x08\x12\x46\n\ninputProps\x18\x04 \x03(\x0b\x32\x32.tracdap.metadata.ModelInputSchema.InputPropsEntry\x1aJ\n\x0fInputPropsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x42\x08\n\x06_label\"\x8f\x02\n\x11ModelOutputSchema\x12\x32\n\x06schema\x18\x01 \x01(\x0b\x32\".tracdap.metadata.SchemaDefinition\x12\x12\n\x05label\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x10\n\x08optional\x18\x03 \x01(\x08\x12I\n\x0boutputProps\x18\x04 \x03(\x0b\x32\x34.tracdap.metadata.ModelOutputSchema.OutputPropsEntry\x1aK\n\x10OutputPropsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x42\x08\n\x06_label\"\x9e\x06\n\x0fModelDefinition\x12\x10\n\x08language\x18\x01 \x01(\t\x12\x12\n\nrepository\x18\x02 \x01(\t\x12\x19\n\x0cpackageGroup\x18\n \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07package\x18\x0b \x01(\t\x12\x0f\n\x07version\x18\x06 \x01(\t\x12\x12\n\nentryPoint\x18\x05 \x01(\t\x12\x11\n\x04path\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x45\n\nparameters\x18\x07 \x03(\x0b\x32\x31.tracdap.metadata.ModelDefinition.ParametersEntry\x12=\n\x06inputs\x18\x08 \x03(\x0b\x32-.tracdap.metadata.ModelDefinition.InputsEntry\x12?\n\x07outputs\x18\t \x03(\x0b\x32..tracdap.metadata.ModelDefinition.OutputsEntry\x12Q\n\x10staticAttributes\x18\x0c \x03(\x0b\x32\x37.tracdap.metadata.ModelDefinition.StaticAttributesEntry\x1aS\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12/\n\x05value\x18\x02 \x01(\x0b\x32 .tracdap.metadata.ModelParameter:\x02\x38\x01\x1aQ\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x31\n\x05value\x18\x02 \x01(\x0b\x32\".tracdap.metadata.ModelInputSchema:\x02\x38\x01\x1aS\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32#.tracdap.metadata.ModelOutputSchema:\x02\x38\x01\x1aP\n\x15StaticAttributesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x42\x0f\n\r_packageGroupB\x07\n\x05_pathB\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
|
20
20
|
|
21
21
|
_globals = globals()
|
22
22
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -24,6 +24,12 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tracdap.rt._impl.grpc.tracd
|
|
24
24
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
25
25
|
_globals['DESCRIPTOR']._options = None
|
26
26
|
_globals['DESCRIPTOR']._serialized_options = b'\n\032org.finos.tracdap.metadataP\001'
|
27
|
+
_globals['_MODELPARAMETER_PARAMPROPSENTRY']._options = None
|
28
|
+
_globals['_MODELPARAMETER_PARAMPROPSENTRY']._serialized_options = b'8\001'
|
29
|
+
_globals['_MODELINPUTSCHEMA_INPUTPROPSENTRY']._options = None
|
30
|
+
_globals['_MODELINPUTSCHEMA_INPUTPROPSENTRY']._serialized_options = b'8\001'
|
31
|
+
_globals['_MODELOUTPUTSCHEMA_OUTPUTPROPSENTRY']._options = None
|
32
|
+
_globals['_MODELOUTPUTSCHEMA_OUTPUTPROPSENTRY']._serialized_options = b'8\001'
|
27
33
|
_globals['_MODELDEFINITION_PARAMETERSENTRY']._options = None
|
28
34
|
_globals['_MODELDEFINITION_PARAMETERSENTRY']._serialized_options = b'8\001'
|
29
35
|
_globals['_MODELDEFINITION_INPUTSENTRY']._options = None
|
@@ -33,19 +39,25 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
33
39
|
_globals['_MODELDEFINITION_STATICATTRIBUTESENTRY']._options = None
|
34
40
|
_globals['_MODELDEFINITION_STATICATTRIBUTESENTRY']._serialized_options = b'8\001'
|
35
41
|
_globals['_MODELPARAMETER']._serialized_start=175
|
36
|
-
_globals['_MODELPARAMETER']._serialized_end=
|
37
|
-
_globals['
|
38
|
-
_globals['
|
39
|
-
_globals['
|
40
|
-
_globals['
|
41
|
-
_globals['
|
42
|
-
_globals['
|
43
|
-
_globals['
|
44
|
-
_globals['
|
45
|
-
_globals['
|
46
|
-
_globals['
|
47
|
-
_globals['
|
48
|
-
_globals['
|
49
|
-
_globals['
|
50
|
-
_globals['
|
42
|
+
_globals['_MODELPARAMETER']._serialized_end=474
|
43
|
+
_globals['_MODELPARAMETER_PARAMPROPSENTRY']._serialized_start=383
|
44
|
+
_globals['_MODELPARAMETER_PARAMPROPSENTRY']._serialized_end=457
|
45
|
+
_globals['_MODELINPUTSCHEMA']._serialized_start=477
|
46
|
+
_globals['_MODELINPUTSCHEMA']._serialized_end=743
|
47
|
+
_globals['_MODELINPUTSCHEMA_INPUTPROPSENTRY']._serialized_start=659
|
48
|
+
_globals['_MODELINPUTSCHEMA_INPUTPROPSENTRY']._serialized_end=733
|
49
|
+
_globals['_MODELOUTPUTSCHEMA']._serialized_start=746
|
50
|
+
_globals['_MODELOUTPUTSCHEMA']._serialized_end=1017
|
51
|
+
_globals['_MODELOUTPUTSCHEMA_OUTPUTPROPSENTRY']._serialized_start=932
|
52
|
+
_globals['_MODELOUTPUTSCHEMA_OUTPUTPROPSENTRY']._serialized_end=1007
|
53
|
+
_globals['_MODELDEFINITION']._serialized_start=1020
|
54
|
+
_globals['_MODELDEFINITION']._serialized_end=1818
|
55
|
+
_globals['_MODELDEFINITION_PARAMETERSENTRY']._serialized_start=1459
|
56
|
+
_globals['_MODELDEFINITION_PARAMETERSENTRY']._serialized_end=1542
|
57
|
+
_globals['_MODELDEFINITION_INPUTSENTRY']._serialized_start=1544
|
58
|
+
_globals['_MODELDEFINITION_INPUTSENTRY']._serialized_end=1625
|
59
|
+
_globals['_MODELDEFINITION_OUTPUTSENTRY']._serialized_start=1627
|
60
|
+
_globals['_MODELDEFINITION_OUTPUTSENTRY']._serialized_end=1710
|
61
|
+
_globals['_MODELDEFINITION_STATICATTRIBUTESENTRY']._serialized_start=1712
|
62
|
+
_globals['_MODELDEFINITION_STATICATTRIBUTESENTRY']._serialized_end=1792
|
51
63
|
# @@protoc_insertion_point(module_scope)
|
@@ -8,34 +8,61 @@ from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Opti
|
|
8
8
|
DESCRIPTOR: _descriptor.FileDescriptor
|
9
9
|
|
10
10
|
class ModelParameter(_message.Message):
|
11
|
-
__slots__ = ("paramType", "label", "defaultValue")
|
11
|
+
__slots__ = ("paramType", "label", "defaultValue", "paramProps")
|
12
|
+
class ParamPropsEntry(_message.Message):
|
13
|
+
__slots__ = ("key", "value")
|
14
|
+
KEY_FIELD_NUMBER: _ClassVar[int]
|
15
|
+
VALUE_FIELD_NUMBER: _ClassVar[int]
|
16
|
+
key: str
|
17
|
+
value: _type_pb2.Value
|
18
|
+
def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_type_pb2.Value, _Mapping]] = ...) -> None: ...
|
12
19
|
PARAMTYPE_FIELD_NUMBER: _ClassVar[int]
|
13
20
|
LABEL_FIELD_NUMBER: _ClassVar[int]
|
14
21
|
DEFAULTVALUE_FIELD_NUMBER: _ClassVar[int]
|
22
|
+
PARAMPROPS_FIELD_NUMBER: _ClassVar[int]
|
15
23
|
paramType: _type_pb2.TypeDescriptor
|
16
24
|
label: str
|
17
25
|
defaultValue: _type_pb2.Value
|
18
|
-
|
26
|
+
paramProps: _containers.MessageMap[str, _type_pb2.Value]
|
27
|
+
def __init__(self, paramType: _Optional[_Union[_type_pb2.TypeDescriptor, _Mapping]] = ..., label: _Optional[str] = ..., defaultValue: _Optional[_Union[_type_pb2.Value, _Mapping]] = ..., paramProps: _Optional[_Mapping[str, _type_pb2.Value]] = ...) -> None: ...
|
19
28
|
|
20
29
|
class ModelInputSchema(_message.Message):
|
21
|
-
__slots__ = ("schema", "label", "optional")
|
30
|
+
__slots__ = ("schema", "label", "optional", "inputProps")
|
31
|
+
class InputPropsEntry(_message.Message):
|
32
|
+
__slots__ = ("key", "value")
|
33
|
+
KEY_FIELD_NUMBER: _ClassVar[int]
|
34
|
+
VALUE_FIELD_NUMBER: _ClassVar[int]
|
35
|
+
key: str
|
36
|
+
value: _type_pb2.Value
|
37
|
+
def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_type_pb2.Value, _Mapping]] = ...) -> None: ...
|
22
38
|
SCHEMA_FIELD_NUMBER: _ClassVar[int]
|
23
39
|
LABEL_FIELD_NUMBER: _ClassVar[int]
|
24
40
|
OPTIONAL_FIELD_NUMBER: _ClassVar[int]
|
41
|
+
INPUTPROPS_FIELD_NUMBER: _ClassVar[int]
|
25
42
|
schema: _data_pb2.SchemaDefinition
|
26
43
|
label: str
|
27
44
|
optional: bool
|
28
|
-
|
45
|
+
inputProps: _containers.MessageMap[str, _type_pb2.Value]
|
46
|
+
def __init__(self, schema: _Optional[_Union[_data_pb2.SchemaDefinition, _Mapping]] = ..., label: _Optional[str] = ..., optional: bool = ..., inputProps: _Optional[_Mapping[str, _type_pb2.Value]] = ...) -> None: ...
|
29
47
|
|
30
48
|
class ModelOutputSchema(_message.Message):
|
31
|
-
__slots__ = ("schema", "label", "optional")
|
49
|
+
__slots__ = ("schema", "label", "optional", "outputProps")
|
50
|
+
class OutputPropsEntry(_message.Message):
|
51
|
+
__slots__ = ("key", "value")
|
52
|
+
KEY_FIELD_NUMBER: _ClassVar[int]
|
53
|
+
VALUE_FIELD_NUMBER: _ClassVar[int]
|
54
|
+
key: str
|
55
|
+
value: _type_pb2.Value
|
56
|
+
def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_type_pb2.Value, _Mapping]] = ...) -> None: ...
|
32
57
|
SCHEMA_FIELD_NUMBER: _ClassVar[int]
|
33
58
|
LABEL_FIELD_NUMBER: _ClassVar[int]
|
34
59
|
OPTIONAL_FIELD_NUMBER: _ClassVar[int]
|
60
|
+
OUTPUTPROPS_FIELD_NUMBER: _ClassVar[int]
|
35
61
|
schema: _data_pb2.SchemaDefinition
|
36
62
|
label: str
|
37
63
|
optional: bool
|
38
|
-
|
64
|
+
outputProps: _containers.MessageMap[str, _type_pb2.Value]
|
65
|
+
def __init__(self, schema: _Optional[_Union[_data_pb2.SchemaDefinition, _Mapping]] = ..., label: _Optional[str] = ..., optional: bool = ..., outputProps: _Optional[_Mapping[str, _type_pb2.Value]] = ...) -> None: ...
|
39
66
|
|
40
67
|
class ModelDefinition(_message.Message):
|
41
68
|
__slots__ = ("language", "repository", "packageGroup", "package", "version", "entryPoint", "path", "parameters", "inputs", "outputs", "staticAttributes")
|
@@ -13,6 +13,7 @@ _sym_db = _symbol_database.Default()
|
|
13
13
|
|
14
14
|
|
15
15
|
from tracdap.rt._impl.grpc.tracdap.metadata import object_id_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_object__id__pb2
|
16
|
+
from tracdap.rt._impl.grpc.tracdap.metadata import type_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_type__pb2
|
16
17
|
from tracdap.rt._impl.grpc.tracdap.metadata import data_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_data__pb2
|
17
18
|
from tracdap.rt._impl.grpc.tracdap.metadata import model_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_model__pb2
|
18
19
|
from tracdap.rt._impl.grpc.tracdap.metadata import flow_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_flow__pb2
|
@@ -22,7 +23,7 @@ from tracdap.rt._impl.grpc.tracdap.metadata import custom_pb2 as tracdap_dot_rt_
|
|
22
23
|
from tracdap.rt._impl.grpc.tracdap.metadata import stoarge_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_stoarge__pb2
|
23
24
|
|
24
25
|
|
25
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n3tracdap/rt/_impl/grpc/tracdap/metadata/object.proto\x12\x10tracdap.metadata\x1a\x36tracdap/rt/_impl/grpc/tracdap/metadata/object_id.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/data.proto\x1a\x32tracdap/rt/_impl/grpc/tracdap/metadata/model.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/flow.proto\x1a\x30tracdap/rt/_impl/grpc/tracdap/metadata/job.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/file.proto\x1a\x33tracdap/rt/_impl/grpc/tracdap/metadata/custom.proto\x1a\x34tracdap/rt/_impl/grpc/tracdap/metadata/stoarge.proto\"\
|
26
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n3tracdap/rt/_impl/grpc/tracdap/metadata/object.proto\x12\x10tracdap.metadata\x1a\x36tracdap/rt/_impl/grpc/tracdap/metadata/object_id.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/type.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/data.proto\x1a\x32tracdap/rt/_impl/grpc/tracdap/metadata/model.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/flow.proto\x1a\x30tracdap/rt/_impl/grpc/tracdap/metadata/job.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/file.proto\x1a\x33tracdap/rt/_impl/grpc/tracdap/metadata/custom.proto\x1a\x34tracdap/rt/_impl/grpc/tracdap/metadata/stoarge.proto\"\x87\x05\n\x10ObjectDefinition\x12\x30\n\nobjectType\x18\x01 \x01(\x0e\x32\x1c.tracdap.metadata.ObjectType\x12\x30\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32 .tracdap.metadata.DataDefinitionH\x00\x12\x32\n\x05model\x18\x03 \x01(\x0b\x32!.tracdap.metadata.ModelDefinitionH\x00\x12\x30\n\x04\x66low\x18\x04 \x01(\x0b\x32 .tracdap.metadata.FlowDefinitionH\x00\x12.\n\x03job\x18\x05 \x01(\x0b\x32\x1f.tracdap.metadata.JobDefinitionH\x00\x12\x30\n\x04\x66ile\x18\x06 \x01(\x0b\x32 .tracdap.metadata.FileDefinitionH\x00\x12\x34\n\x06\x63ustom\x18\x07 \x01(\x0b\x32\".tracdap.metadata.CustomDefinitionH\x00\x12\x36\n\x07storage\x18\x08 \x01(\x0b\x32#.tracdap.metadata.StorageDefinitionH\x00\x12\x34\n\x06schema\x18\t \x01(\x0b\x32\".tracdap.metadata.SchemaDefinitionH\x00\x12H\n\x0bobjectProps\x18\x64 \x03(\x0b\x32\x33.tracdap.metadata.ObjectDefinition.ObjectPropsEntry\x1aK\n\x10ObjectPropsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x42\x0c\n\ndefinitionB2\n\x1aorg.finos.tracdap.metadataB\x12ObjectProtoWrapperP\x01\x62\x06proto3')
|
26
27
|
|
27
28
|
_globals = globals()
|
28
29
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -30,6 +31,10 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tracdap.rt._impl.grpc.tracd
|
|
30
31
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
31
32
|
_globals['DESCRIPTOR']._options = None
|
32
33
|
_globals['DESCRIPTOR']._serialized_options = b'\n\032org.finos.tracdap.metadataB\022ObjectProtoWrapperP\001'
|
33
|
-
_globals['
|
34
|
-
_globals['
|
34
|
+
_globals['_OBJECTDEFINITION_OBJECTPROPSENTRY']._options = None
|
35
|
+
_globals['_OBJECTDEFINITION_OBJECTPROPSENTRY']._serialized_options = b'8\001'
|
36
|
+
_globals['_OBJECTDEFINITION']._serialized_start=543
|
37
|
+
_globals['_OBJECTDEFINITION']._serialized_end=1190
|
38
|
+
_globals['_OBJECTDEFINITION_OBJECTPROPSENTRY']._serialized_start=1101
|
39
|
+
_globals['_OBJECTDEFINITION_OBJECTPROPSENTRY']._serialized_end=1176
|
35
40
|
# @@protoc_insertion_point(module_scope)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from tracdap.rt._impl.grpc.tracdap.metadata import object_id_pb2 as _object_id_pb2
|
2
|
+
from tracdap.rt._impl.grpc.tracdap.metadata import type_pb2 as _type_pb2
|
2
3
|
from tracdap.rt._impl.grpc.tracdap.metadata import data_pb2 as _data_pb2
|
3
4
|
from tracdap.rt._impl.grpc.tracdap.metadata import model_pb2 as _model_pb2
|
4
5
|
from tracdap.rt._impl.grpc.tracdap.metadata import flow_pb2 as _flow_pb2
|
@@ -6,6 +7,7 @@ from tracdap.rt._impl.grpc.tracdap.metadata import job_pb2 as _job_pb2
|
|
6
7
|
from tracdap.rt._impl.grpc.tracdap.metadata import file_pb2 as _file_pb2
|
7
8
|
from tracdap.rt._impl.grpc.tracdap.metadata import custom_pb2 as _custom_pb2
|
8
9
|
from tracdap.rt._impl.grpc.tracdap.metadata import stoarge_pb2 as _stoarge_pb2
|
10
|
+
from google.protobuf.internal import containers as _containers
|
9
11
|
from google.protobuf import descriptor as _descriptor
|
10
12
|
from google.protobuf import message as _message
|
11
13
|
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
|
@@ -13,7 +15,14 @@ from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Opti
|
|
13
15
|
DESCRIPTOR: _descriptor.FileDescriptor
|
14
16
|
|
15
17
|
class ObjectDefinition(_message.Message):
|
16
|
-
__slots__ = ("objectType", "data", "model", "flow", "job", "file", "custom", "storage", "schema")
|
18
|
+
__slots__ = ("objectType", "data", "model", "flow", "job", "file", "custom", "storage", "schema", "objectProps")
|
19
|
+
class ObjectPropsEntry(_message.Message):
|
20
|
+
__slots__ = ("key", "value")
|
21
|
+
KEY_FIELD_NUMBER: _ClassVar[int]
|
22
|
+
VALUE_FIELD_NUMBER: _ClassVar[int]
|
23
|
+
key: str
|
24
|
+
value: _type_pb2.Value
|
25
|
+
def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_type_pb2.Value, _Mapping]] = ...) -> None: ...
|
17
26
|
OBJECTTYPE_FIELD_NUMBER: _ClassVar[int]
|
18
27
|
DATA_FIELD_NUMBER: _ClassVar[int]
|
19
28
|
MODEL_FIELD_NUMBER: _ClassVar[int]
|
@@ -23,6 +32,7 @@ class ObjectDefinition(_message.Message):
|
|
23
32
|
CUSTOM_FIELD_NUMBER: _ClassVar[int]
|
24
33
|
STORAGE_FIELD_NUMBER: _ClassVar[int]
|
25
34
|
SCHEMA_FIELD_NUMBER: _ClassVar[int]
|
35
|
+
OBJECTPROPS_FIELD_NUMBER: _ClassVar[int]
|
26
36
|
objectType: _object_id_pb2.ObjectType
|
27
37
|
data: _data_pb2.DataDefinition
|
28
38
|
model: _model_pb2.ModelDefinition
|
@@ -32,4 +42,5 @@ class ObjectDefinition(_message.Message):
|
|
32
42
|
custom: _custom_pb2.CustomDefinition
|
33
43
|
storage: _stoarge_pb2.StorageDefinition
|
34
44
|
schema: _data_pb2.SchemaDefinition
|
35
|
-
|
45
|
+
objectProps: _containers.MessageMap[str, _type_pb2.Value]
|
46
|
+
def __init__(self, objectType: _Optional[_Union[_object_id_pb2.ObjectType, str]] = ..., data: _Optional[_Union[_data_pb2.DataDefinition, _Mapping]] = ..., model: _Optional[_Union[_model_pb2.ModelDefinition, _Mapping]] = ..., flow: _Optional[_Union[_flow_pb2.FlowDefinition, _Mapping]] = ..., job: _Optional[_Union[_job_pb2.JobDefinition, _Mapping]] = ..., file: _Optional[_Union[_file_pb2.FileDefinition, _Mapping]] = ..., custom: _Optional[_Union[_custom_pb2.CustomDefinition, _Mapping]] = ..., storage: _Optional[_Union[_stoarge_pb2.StorageDefinition, _Mapping]] = ..., schema: _Optional[_Union[_data_pb2.SchemaDefinition, _Mapping]] = ..., objectProps: _Optional[_Mapping[str, _type_pb2.Value]] = ...) -> None: ...
|
tracdap/rt/_impl/guard_rails.py
CHANGED
@@ -46,6 +46,27 @@ def _get_package_path(module_name):
|
|
46
46
|
return module_path.parents[depth]
|
47
47
|
|
48
48
|
|
49
|
+
def run_model_guard(operation: str = None):
|
50
|
+
|
51
|
+
# A simple guard method to block model code from accessing parts of the TRAC runtime framework
|
52
|
+
# To blocks calls to the Python stdlib or 3rd party libs, use PythonGuardRails instead
|
53
|
+
|
54
|
+
stack = inspect.stack()
|
55
|
+
frame = stack[-1]
|
56
|
+
|
57
|
+
if operation is None:
|
58
|
+
operation = f"Calling {frame.function}()"
|
59
|
+
|
60
|
+
for frame_index in range(len(stack) - 2, 0, -1):
|
61
|
+
|
62
|
+
parent_frame = frame
|
63
|
+
frame = stack[frame_index]
|
64
|
+
|
65
|
+
if frame.function == "run_model" and parent_frame.function == "_execute":
|
66
|
+
err = f"{operation} is not allowed inside run_model()"
|
67
|
+
raise ex.ERuntimeValidation(err)
|
68
|
+
|
69
|
+
|
49
70
|
class PythonGuardRails:
|
50
71
|
|
51
72
|
DANGEROUS_BUILTIN_FUNCTIONS = ["exec", "eval", "compile", "open", "input", "memoryview"]
|
tracdap/rt/_impl/models.py
CHANGED
@@ -215,12 +215,15 @@ class ModelLoader:
|
|
215
215
|
|
216
216
|
for name, param in model_def.parameters.items():
|
217
217
|
self.__log.info(f"Parameter [{name}] - {param.paramType.basicType.name}")
|
218
|
+
param.paramProps = self._encoded_props(param.paramProps, "parameter", name)
|
218
219
|
|
219
220
|
for name, schema in model_def.inputs.items():
|
220
221
|
self.__log.info(f"Input [{name}] - {schema.schema.schemaType.name}")
|
222
|
+
schema.inputProps = self._encoded_props(schema.inputProps, "input", name)
|
221
223
|
|
222
224
|
for name, schema in model_def.outputs.items():
|
223
225
|
self.__log.info(f"Output [{name}] - {schema.schema.schemaType.name}")
|
226
|
+
schema.outputProps = self._encoded_props(schema.outputProps, "input", name)
|
224
227
|
|
225
228
|
return model_def
|
226
229
|
|
@@ -231,3 +234,25 @@ class ModelLoader:
|
|
231
234
|
|
232
235
|
self.__log.error(msg, exc_info=True)
|
233
236
|
raise _ex.EModelValidation(msg) from e
|
237
|
+
|
238
|
+
@staticmethod
|
239
|
+
def _encoded_props(
|
240
|
+
raw_props: tp.Dict[str, tp.Any],
|
241
|
+
item_type: str, item_name: str) \
|
242
|
+
-> tp.Dict[str, _meta.Value]:
|
243
|
+
|
244
|
+
if raw_props is None:
|
245
|
+
return dict()
|
246
|
+
|
247
|
+
encoded_props = dict()
|
248
|
+
|
249
|
+
for key, raw_value in raw_props.items():
|
250
|
+
|
251
|
+
if raw_value is None:
|
252
|
+
raise _ex.EModelValidation(f"Invalid null property [{key}] for {item_type} [{item_name}]")
|
253
|
+
elif isinstance(raw_value, _meta.Value):
|
254
|
+
encoded_props[key] = raw_value
|
255
|
+
else:
|
256
|
+
encoded_props[key] = _types.MetadataCodec.encode_value(raw_value)
|
257
|
+
|
258
|
+
return encoded_props
|