tracdap-runtime 0.12.0.dev2__py3-none-any.whl → 0.12.0.dev3__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/__init__.py CHANGED
@@ -13,4 +13,4 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
- __version__ = "0.12.0.dev2"
16
+ __version__ = "0.12.0.dev3"
@@ -647,18 +647,67 @@ class DevModeTranslator:
647
647
  model_parameter = cls._infer_parameter(node_name, targets, job_def, job_config)
648
648
  updated_flow.parameters[node_name] = model_parameter
649
649
 
650
- if node.nodeType == _meta.FlowNodeType.INPUT_NODE and node_name not in flow.inputs:
650
+ if node.nodeType == _meta.FlowNodeType.INPUT_NODE:
651
651
  targets = edges_by_source.get(node_name) or []
652
- model_input = cls._infer_input_schema(node_name, targets, job_def, job_config)
653
- updated_flow.inputs[node_name] = model_input
652
+ declared_input = flow.inputs.get(node_name)
653
+ if declared_input is not None:
654
+ cls._check_declared_type("Input", node_name, declared_input, targets, lambda model: model.inputs, job_def, job_config)
655
+ if declared_input is None or cls._is_type_only(declared_input):
656
+ model_input = cls._infer_input_schema(node_name, targets, job_def, job_config)
657
+ updated_flow.inputs[node_name] = cls._apply_type_only(declared_input, model_input, "inputProps")
654
658
 
655
- if node.nodeType == _meta.FlowNodeType.OUTPUT_NODE and node_name not in flow.outputs:
659
+ if node.nodeType == _meta.FlowNodeType.OUTPUT_NODE:
656
660
  sources = edges_by_target.get(node_name) or []
657
- model_output = cls._infer_output_schema(node_name, sources, job_def, job_config)
658
- updated_flow.outputs[node_name] = model_output
661
+ declared_output = flow.outputs.get(node_name)
662
+ if declared_output is not None:
663
+ cls._check_declared_type("Output", node_name, declared_output, sources, lambda model: model.outputs, job_def, job_config)
664
+ if declared_output is None or cls._is_type_only(declared_output):
665
+ model_output = cls._infer_output_schema(node_name, sources, job_def, job_config)
666
+ updated_flow.outputs[node_name] = cls._apply_type_only(declared_output, model_output, "outputProps")
659
667
 
660
668
  return updated_flow
661
669
 
670
+ @classmethod
671
+ def _check_declared_type(
672
+ cls, socket_kind: str, node_name: str, declared, sockets: tp.List[_meta.FlowSocket],
673
+ socket_func: tp.Callable[[_meta.ModelDefinition], dict],
674
+ job_def: _meta.JobDefinition, job_config: _cfg.JobConfig):
675
+
676
+ # Same wording as the object type checks in the platform's job validation
677
+ for socket in sockets:
678
+ model_selector = job_def.runFlow.models.get(socket.node)
679
+ if model_selector is None:
680
+ continue
681
+ model_obj = _util.get_job_metadata(model_selector, job_config)
682
+ model_socket = socket_func(model_obj.model).get(socket.socket)
683
+ if model_socket is not None and model_socket.objectType != declared.objectType:
684
+ err = f"{socket_kind} [{node_name}] is not the right object type" \
685
+ + f" (expected {declared.objectType.name}, got {model_socket.objectType.name})"
686
+ cls._log.error(err)
687
+ raise _ex.EJobValidation(err)
688
+
689
+ @staticmethod
690
+ def _is_type_only(declared: tp.Union[_meta.ModelInputSchema, _meta.ModelOutputSchema]) -> bool:
691
+ return declared.schema is None and declared.fileType is None
692
+
693
+ @staticmethod
694
+ def _apply_type_only(declared, inferred, props_field: str):
695
+
696
+ # A type-only declaration keeps its label and props, everything else comes from inference
697
+ if declared is None:
698
+ return inferred
699
+
700
+ schema = copy.copy(inferred)
701
+
702
+ if declared.label is not None:
703
+ schema.label = declared.label
704
+
705
+ declared_props = getattr(declared, props_field)
706
+ if declared_props:
707
+ setattr(schema, props_field, {**(getattr(inferred, props_field) or {}), **declared_props})
708
+
709
+ return schema
710
+
662
711
  @classmethod
663
712
  def _infer_resource(
664
713
  cls, resource_name: str, targets: tp.List[_meta.FlowSocket],
@@ -28,7 +28,7 @@ from tracdap.rt._impl.grpc.tracdap.metadata import tag_update_pb2 as tracdap_dot
28
28
  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
29
29
 
30
30
 
31
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n0tracdap/rt/_impl/grpc/tracdap/metadata/job.proto\x12\x10tracdap.metadata\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/type.proto\x1a\x36tracdap/rt/_impl/grpc/tracdap/metadata/object_id.proto\x1a\x37tracdap/rt/_impl/grpc/tracdap/metadata/tag_update.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/data.proto\"\xb5\x03\n\rJobDefinition\x12*\n\x07jobType\x18\x01 \x01(\x0e\x32\x19.tracdap.metadata.JobType\x12\x31\n\x08runModel\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.RunModelJobH\x00\x12/\n\x07runFlow\x18\x03 \x01(\x0b\x32\x1c.tracdap.metadata.RunFlowJobH\x00\x12\x37\n\x0bimportModel\x18\x04 \x01(\x0b\x32 .tracdap.metadata.ImportModelJobH\x00\x12\x35\n\nimportData\x18\x05 \x01(\x0b\x32\x1f.tracdap.metadata.ImportDataJobH\x00\x12\x35\n\nexportData\x18\x06 \x01(\x0b\x32\x1f.tracdap.metadata.ExportDataJobH\x00\x12.\n\x08jobGroup\x18\x07 \x01(\x0b\x32\x1a.tracdap.metadata.JobGroupH\x00\x12/\n\x08resultId\x18\x08 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorB\x0c\n\njobDetails\"\x80\x04\n\x10ResultDefinition\x12,\n\x05jobId\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12\x33\n\nstatusCode\x18\x02 \x01(\x0e\x32\x1f.tracdap.metadata.JobStatusCode\x12\x15\n\rstatusMessage\x18\x03 \x01(\t\x12\x35\n\tlogFileId\x18\x04 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorH\x00\x88\x01\x01\x12@\n\x07outputs\x18\x05 \x03(\x0b\x32/.tracdap.metadata.ResultDefinition.OutputsEntry\x12\x46\n\nplacements\x18\x06 \x03(\x0b\x32\x32.tracdap.metadata.ResultDefinition.PlacementsEntry\x1aM\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aT\n\x0fPlacementsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.tracdap.metadata.PlacementRecord:\x02\x38\x01\x42\x0c\n\n_logFileId\"\xbb\x01\n\x0fPlacementRecord\x12-\n\x06\x64\x61taId\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12\x34\n\x08location\x18\x02 \x01(\x0b\x32\".tracdap.metadata.ExternalLocation\x12\x0e\n\x06\x66ormat\x18\x03 \x01(\t\x12\x10\n\x08mimeType\x18\x04 \x01(\t\x12\x0c\n\x04size\x18\x05 \x01(\x03\x12\x13\n\x0b\x63ontentHash\x18\x06 \x01(\t\"\x9f\x06\n\x0bRunModelJob\x12,\n\x05model\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12\x41\n\nparameters\x18\x02 \x03(\x0b\x32-.tracdap.metadata.RunModelJob.ParametersEntry\x12\x39\n\x06inputs\x18\x03 \x03(\x0b\x32).tracdap.metadata.RunModelJob.InputsEntry\x12;\n\x07outputs\x18\x04 \x03(\x0b\x32*.tracdap.metadata.RunModelJob.OutputsEntry\x12\x45\n\x0cpriorOutputs\x18\x05 \x03(\x0b\x32/.tracdap.metadata.RunModelJob.PriorOutputsEntry\x12?\n\tresources\x18\x07 \x03(\x0b\x32,.tracdap.metadata.RunModelJob.ResourcesEntry\x12\x30\n\x0boutputAttrs\x18\x06 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x1aJ\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x1aL\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aM\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aR\n\x11PriorOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1a\x30\n\x0eResourcesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xbd\x07\n\nRunFlowJob\x12+\n\x04\x66low\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12@\n\nparameters\x18\x02 \x03(\x0b\x32,.tracdap.metadata.RunFlowJob.ParametersEntry\x12\x38\n\x06inputs\x18\x03 \x03(\x0b\x32(.tracdap.metadata.RunFlowJob.InputsEntry\x12:\n\x07outputs\x18\x04 \x03(\x0b\x32).tracdap.metadata.RunFlowJob.OutputsEntry\x12\x44\n\x0cpriorOutputs\x18\x05 \x03(\x0b\x32..tracdap.metadata.RunFlowJob.PriorOutputsEntry\x12\x38\n\x06models\x18\x06 \x03(\x0b\x32(.tracdap.metadata.RunFlowJob.ModelsEntry\x12>\n\tresources\x18\x08 \x03(\x0b\x32+.tracdap.metadata.RunFlowJob.ResourcesEntry\x12\x30\n\x0boutputAttrs\x18\x07 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12\x1b\n\x13\x65xportStorageAccess\x18\t \x03(\t\x1aJ\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x1aL\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aM\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aR\n\x11PriorOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aL\n\x0bModelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1a\x30\n\x0eResourcesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x9e\x02\n\x0eImportModelJob\x12\x10\n\x08language\x18\x01 \x01(\t\x12\x12\n\nrepository\x18\x02 \x01(\t\x12\x19\n\x0cpackageGroup\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07package\x18\x08 \x01(\t\x12\x0f\n\x07version\x18\x05 \x01(\t\x12\x12\n\nentryPoint\x18\x04 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\x12/\n\nmodelAttrs\x18\x06 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12\x36\n\npriorModel\x18\t \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorH\x01\x88\x01\x01\x42\x0f\n\r_packageGroupB\r\n\x0b_priorModel\"\x82\x07\n\rImportDataJob\x12,\n\x05model\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12\x43\n\nparameters\x18\x02 \x03(\x0b\x32/.tracdap.metadata.ImportDataJob.ParametersEntry\x12;\n\x06inputs\x18\x03 \x03(\x0b\x32+.tracdap.metadata.ImportDataJob.InputsEntry\x12=\n\x07outputs\x18\x04 \x03(\x0b\x32,.tracdap.metadata.ImportDataJob.OutputsEntry\x12G\n\x0cpriorOutputs\x18\x05 \x03(\x0b\x32\x31.tracdap.metadata.ImportDataJob.PriorOutputsEntry\x12\x15\n\rstorageAccess\x18\x06 \x03(\t\x12\x30\n\x0boutputAttrs\x18\x08 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12?\n\x08\x63\x61ptures\x18\n \x03(\x0b\x32-.tracdap.metadata.ImportDataJob.CapturesEntry\x1aJ\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x1aL\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aM\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aR\n\x11PriorOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aP\n\rCapturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.tracdap.metadata.CaptureSource:\x02\x38\x01J\x04\x08\x07\x10\x08J\x04\x08\t\x10\nR\x07importsR\x0bimportAttrs\"\xea\x02\n\rCaptureSource\x12\x36\n\x08location\x18\x01 \x01(\x0b\x32\".tracdap.metadata.ExternalLocationH\x00\x12;\n\x0cschemaSource\x18\x04 \x01(\x0e\x32%.tracdap.metadata.CaptureSchemaSource\x12\x31\n\x08schemaId\x18\x05 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorH\x01\x12\x34\n\x06schema\x18\x06 \x01(\x0b\x32\".tracdap.metadata.SchemaDefinitionH\x01\x12.\n\tdataAttrs\x18\x08 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12.\n\tfileAttrs\x18\t \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdateB\x08\n\x06sourceB\x11\n\x0fschemaSpecifier\"\xd7\x01\n\x10\x45xternalLocation\x12\x12\n\nstorageKey\x18\x01 \x01(\t\x12\x13\n\x0bstoragePath\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\t\x12P\n\x0flocationDetails\x18\x04 \x03(\x0b\x32\x37.tracdap.metadata.ExternalLocation.LocationDetailsEntry\x1a\x36\n\x14LocationDetailsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf1\x02\n\rExportDataJob\x12\x43\n\nplacements\x18\t \x03(\x0b\x32/.tracdap.metadata.ExportDataJob.PlacementsEntry\x12>\n\x11placementConflict\x18\n \x01(\x0e\x32#.tracdap.metadata.PlacementConflict\x1aT\n\x0fPlacementsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.tracdap.metadata.PlacementTarget:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tR\x05modelR\nparametersR\x06inputsR\x07outputsR\x0cpriorOutputsR\rstorageAccessR\x07\x65xportsR\x0boutputAttrs\"\x82\x01\n\x0fPlacementTarget\x12/\n\x06\x64\x61taId\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorH\x00\x12\x34\n\x08location\x18\x03 \x01(\x0b\x32\".tracdap.metadata.ExternalLocationB\x08\n\x06source\"\xc7\x01\n\x08JobGroup\x12\x34\n\x0cjobGroupType\x18\x01 \x01(\x0e\x32\x1e.tracdap.metadata.JobGroupType\x12:\n\nsequential\x18\x02 \x01(\x0b\x32$.tracdap.metadata.SequentialJobGroupH\x00\x12\x36\n\x08parallel\x18\x03 \x01(\x0b\x32\".tracdap.metadata.ParallelJobGroupH\x00\x42\x11\n\x0fjobGroupDetails\"C\n\x12SequentialJobGroup\x12-\n\x04jobs\x18\x01 \x03(\x0b\x32\x1f.tracdap.metadata.JobDefinition\"A\n\x10ParallelJobGroup\x12-\n\x04jobs\x18\x01 \x03(\x0b\x32\x1f.tracdap.metadata.JobDefinition*\x7f\n\x07JobType\x12\x14\n\x10JOB_TYPE_NOT_SET\x10\x00\x12\r\n\tRUN_MODEL\x10\x01\x12\x0c\n\x08RUN_FLOW\x10\x02\x12\x10\n\x0cIMPORT_MODEL\x10\x03\x12\x0f\n\x0bIMPORT_DATA\x10\x04\x12\x0f\n\x0b\x45XPORT_DATA\x10\x05\x12\r\n\tJOB_GROUP\x10\x06*\xb8\x01\n\rJobStatusCode\x12\x1b\n\x17JOB_STATUS_CODE_NOT_SET\x10\x00\x12\r\n\tPREPARING\x10\x01\x12\r\n\tVALIDATED\x10\x02\x12\x0b\n\x07PENDING\x10\x03\x12\n\n\x06QUEUED\x10\x04\x12\r\n\tSUBMITTED\x10\x05\x12\x0b\n\x07RUNNING\x10\x06\x12\r\n\tFINISHING\x10\x07\x12\r\n\tSUCCEEDED\x10\x08\x12\n\n\x06\x46\x41ILED\x10\t\x12\r\n\tCANCELLED\x10\n*n\n\x13\x43\x61ptureSchemaSource\x12!\n\x1d\x43\x41PTURE_SCHEMA_SOURCE_NOT_SET\x10\x00\x12\x1b\n\x17\x43\x41PTURE_SCHEMA_DECLARED\x10\x01\x12\x17\n\x13\x43\x41PTURE_SCHEMA_FILE\x10\x02*v\n\x11PlacementConflict\x12\x1e\n\x1aPLACEMENT_CONFLICT_NOT_SET\x10\x00\x12\x14\n\x10PLACEMENT_SUFFIX\x10\x01\x12\x17\n\x13PLACEMENT_OVERWRITE\x10\x02\x12\x12\n\x0ePLACEMENT_FAIL\x10\x03*\\\n\x0cJobGroupType\x12\x1a\n\x16JOB_GROUP_TYPE_NOT_SET\x10\x00\x12\x18\n\x14SEQUENTIAL_JOB_GROUP\x10\x01\x12\x16\n\x12PARALLEL_JOB_GROUP\x10\x02\x42\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
31
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n0tracdap/rt/_impl/grpc/tracdap/metadata/job.proto\x12\x10tracdap.metadata\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/type.proto\x1a\x36tracdap/rt/_impl/grpc/tracdap/metadata/object_id.proto\x1a\x37tracdap/rt/_impl/grpc/tracdap/metadata/tag_update.proto\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/data.proto\"\xb5\x03\n\rJobDefinition\x12*\n\x07jobType\x18\x01 \x01(\x0e\x32\x19.tracdap.metadata.JobType\x12\x31\n\x08runModel\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.RunModelJobH\x00\x12/\n\x07runFlow\x18\x03 \x01(\x0b\x32\x1c.tracdap.metadata.RunFlowJobH\x00\x12\x37\n\x0bimportModel\x18\x04 \x01(\x0b\x32 .tracdap.metadata.ImportModelJobH\x00\x12\x35\n\nimportData\x18\x05 \x01(\x0b\x32\x1f.tracdap.metadata.ImportDataJobH\x00\x12\x35\n\nexportData\x18\x06 \x01(\x0b\x32\x1f.tracdap.metadata.ExportDataJobH\x00\x12.\n\x08jobGroup\x18\x07 \x01(\x0b\x32\x1a.tracdap.metadata.JobGroupH\x00\x12/\n\x08resultId\x18\x08 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorB\x0c\n\njobDetails\"\x80\x04\n\x10ResultDefinition\x12,\n\x05jobId\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12\x33\n\nstatusCode\x18\x02 \x01(\x0e\x32\x1f.tracdap.metadata.JobStatusCode\x12\x15\n\rstatusMessage\x18\x03 \x01(\t\x12\x35\n\tlogFileId\x18\x04 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorH\x00\x88\x01\x01\x12@\n\x07outputs\x18\x05 \x03(\x0b\x32/.tracdap.metadata.ResultDefinition.OutputsEntry\x12\x46\n\nplacements\x18\x06 \x03(\x0b\x32\x32.tracdap.metadata.ResultDefinition.PlacementsEntry\x1aM\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aT\n\x0fPlacementsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.tracdap.metadata.PlacementRecord:\x02\x38\x01\x42\x0c\n\n_logFileId\"\xbb\x01\n\x0fPlacementRecord\x12-\n\x06\x64\x61taId\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12\x34\n\x08location\x18\x02 \x01(\x0b\x32\".tracdap.metadata.ExternalLocation\x12\x0e\n\x06\x66ormat\x18\x03 \x01(\t\x12\x10\n\x08mimeType\x18\x04 \x01(\t\x12\x0c\n\x04size\x18\x05 \x01(\x03\x12\x13\n\x0b\x63ontentHash\x18\x06 \x01(\t\"\xc2\x07\n\x0bRunModelJob\x12,\n\x05model\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12\x41\n\nparameters\x18\x02 \x03(\x0b\x32-.tracdap.metadata.RunModelJob.ParametersEntry\x12\x39\n\x06inputs\x18\x03 \x03(\x0b\x32).tracdap.metadata.RunModelJob.InputsEntry\x12;\n\x07outputs\x18\x04 \x03(\x0b\x32*.tracdap.metadata.RunModelJob.OutputsEntry\x12\x45\n\x0cpriorOutputs\x18\x05 \x03(\x0b\x32/.tracdap.metadata.RunModelJob.PriorOutputsEntry\x12?\n\tresources\x18\x07 \x03(\x0b\x32,.tracdap.metadata.RunModelJob.ResourcesEntry\x12\x30\n\x0boutputAttrs\x18\x06 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12I\n\x0eperOutputAttrs\x18\x08 \x03(\x0b\x32\x31.tracdap.metadata.RunModelJob.PerOutputAttrsEntry\x1aJ\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x1aL\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aM\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aR\n\x11PriorOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1a\x30\n\x0eResourcesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1aV\n\x13PerOutputAttrsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.tracdap.metadata.TagUpdateList:\x02\x38\x01\"\xdf\x08\n\nRunFlowJob\x12+\n\x04\x66low\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12@\n\nparameters\x18\x02 \x03(\x0b\x32,.tracdap.metadata.RunFlowJob.ParametersEntry\x12\x38\n\x06inputs\x18\x03 \x03(\x0b\x32(.tracdap.metadata.RunFlowJob.InputsEntry\x12:\n\x07outputs\x18\x04 \x03(\x0b\x32).tracdap.metadata.RunFlowJob.OutputsEntry\x12\x44\n\x0cpriorOutputs\x18\x05 \x03(\x0b\x32..tracdap.metadata.RunFlowJob.PriorOutputsEntry\x12\x38\n\x06models\x18\x06 \x03(\x0b\x32(.tracdap.metadata.RunFlowJob.ModelsEntry\x12>\n\tresources\x18\x08 \x03(\x0b\x32+.tracdap.metadata.RunFlowJob.ResourcesEntry\x12\x30\n\x0boutputAttrs\x18\x07 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12H\n\x0eperOutputAttrs\x18\n \x03(\x0b\x32\x30.tracdap.metadata.RunFlowJob.PerOutputAttrsEntry\x12\x1b\n\x13\x65xportStorageAccess\x18\t \x03(\t\x1aJ\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x1aL\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aM\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aR\n\x11PriorOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aL\n\x0bModelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1a\x30\n\x0eResourcesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1aV\n\x13PerOutputAttrsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.tracdap.metadata.TagUpdateList:\x02\x38\x01\"\x9e\x02\n\x0eImportModelJob\x12\x10\n\x08language\x18\x01 \x01(\t\x12\x12\n\nrepository\x18\x02 \x01(\t\x12\x19\n\x0cpackageGroup\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x0f\n\x07package\x18\x08 \x01(\t\x12\x0f\n\x07version\x18\x05 \x01(\t\x12\x12\n\nentryPoint\x18\x04 \x01(\t\x12\x0c\n\x04path\x18\x03 \x01(\t\x12/\n\nmodelAttrs\x18\x06 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12\x36\n\npriorModel\x18\t \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorH\x01\x88\x01\x01\x42\x0f\n\r_packageGroupB\r\n\x0b_priorModel\"\x82\x07\n\rImportDataJob\x12,\n\x05model\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12\x43\n\nparameters\x18\x02 \x03(\x0b\x32/.tracdap.metadata.ImportDataJob.ParametersEntry\x12;\n\x06inputs\x18\x03 \x03(\x0b\x32+.tracdap.metadata.ImportDataJob.InputsEntry\x12=\n\x07outputs\x18\x04 \x03(\x0b\x32,.tracdap.metadata.ImportDataJob.OutputsEntry\x12G\n\x0cpriorOutputs\x18\x05 \x03(\x0b\x32\x31.tracdap.metadata.ImportDataJob.PriorOutputsEntry\x12\x15\n\rstorageAccess\x18\x06 \x03(\t\x12\x30\n\x0boutputAttrs\x18\x08 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12?\n\x08\x63\x61ptures\x18\n \x03(\x0b\x32-.tracdap.metadata.ImportDataJob.CapturesEntry\x1aJ\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.tracdap.metadata.Value:\x02\x38\x01\x1aL\n\x0bInputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aM\n\x0cOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aR\n\x11PriorOutputsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\x1aP\n\rCapturesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x1f.tracdap.metadata.CaptureSource:\x02\x38\x01J\x04\x08\x07\x10\x08J\x04\x08\t\x10\nR\x07importsR\x0bimportAttrs\"\xea\x02\n\rCaptureSource\x12\x36\n\x08location\x18\x01 \x01(\x0b\x32\".tracdap.metadata.ExternalLocationH\x00\x12;\n\x0cschemaSource\x18\x04 \x01(\x0e\x32%.tracdap.metadata.CaptureSchemaSource\x12\x31\n\x08schemaId\x18\x05 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorH\x01\x12\x34\n\x06schema\x18\x06 \x01(\x0b\x32\".tracdap.metadata.SchemaDefinitionH\x01\x12.\n\tdataAttrs\x18\x08 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12.\n\tfileAttrs\x18\t \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdateB\x08\n\x06sourceB\x11\n\x0fschemaSpecifier\"\xd7\x01\n\x10\x45xternalLocation\x12\x12\n\nstorageKey\x18\x01 \x01(\t\x12\x13\n\x0bstoragePath\x18\x02 \x01(\t\x12\x10\n\x08protocol\x18\x03 \x01(\t\x12P\n\x0flocationDetails\x18\x04 \x03(\x0b\x32\x37.tracdap.metadata.ExternalLocation.LocationDetailsEntry\x1a\x36\n\x14LocationDetailsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xf1\x02\n\rExportDataJob\x12\x43\n\nplacements\x18\t \x03(\x0b\x32/.tracdap.metadata.ExportDataJob.PlacementsEntry\x12>\n\x11placementConflict\x18\n \x01(\x0e\x32#.tracdap.metadata.PlacementConflict\x1aT\n\x0fPlacementsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32!.tracdap.metadata.PlacementTarget:\x02\x38\x01J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\tR\x05modelR\nparametersR\x06inputsR\x07outputsR\x0cpriorOutputsR\rstorageAccessR\x07\x65xportsR\x0boutputAttrs\"\x82\x01\n\x0fPlacementTarget\x12/\n\x06\x64\x61taId\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelectorH\x00\x12\x34\n\x08location\x18\x03 \x01(\x0b\x32\".tracdap.metadata.ExternalLocationB\x08\n\x06source\"\xc7\x01\n\x08JobGroup\x12\x34\n\x0cjobGroupType\x18\x01 \x01(\x0e\x32\x1e.tracdap.metadata.JobGroupType\x12:\n\nsequential\x18\x02 \x01(\x0b\x32$.tracdap.metadata.SequentialJobGroupH\x00\x12\x36\n\x08parallel\x18\x03 \x01(\x0b\x32\".tracdap.metadata.ParallelJobGroupH\x00\x42\x11\n\x0fjobGroupDetails\"C\n\x12SequentialJobGroup\x12-\n\x04jobs\x18\x01 \x03(\x0b\x32\x1f.tracdap.metadata.JobDefinition\"A\n\x10ParallelJobGroup\x12-\n\x04jobs\x18\x01 \x03(\x0b\x32\x1f.tracdap.metadata.JobDefinition*\x7f\n\x07JobType\x12\x14\n\x10JOB_TYPE_NOT_SET\x10\x00\x12\r\n\tRUN_MODEL\x10\x01\x12\x0c\n\x08RUN_FLOW\x10\x02\x12\x10\n\x0cIMPORT_MODEL\x10\x03\x12\x0f\n\x0bIMPORT_DATA\x10\x04\x12\x0f\n\x0b\x45XPORT_DATA\x10\x05\x12\r\n\tJOB_GROUP\x10\x06*\xb8\x01\n\rJobStatusCode\x12\x1b\n\x17JOB_STATUS_CODE_NOT_SET\x10\x00\x12\r\n\tPREPARING\x10\x01\x12\r\n\tVALIDATED\x10\x02\x12\x0b\n\x07PENDING\x10\x03\x12\n\n\x06QUEUED\x10\x04\x12\r\n\tSUBMITTED\x10\x05\x12\x0b\n\x07RUNNING\x10\x06\x12\r\n\tFINISHING\x10\x07\x12\r\n\tSUCCEEDED\x10\x08\x12\n\n\x06\x46\x41ILED\x10\t\x12\r\n\tCANCELLED\x10\n*n\n\x13\x43\x61ptureSchemaSource\x12!\n\x1d\x43\x41PTURE_SCHEMA_SOURCE_NOT_SET\x10\x00\x12\x1b\n\x17\x43\x41PTURE_SCHEMA_DECLARED\x10\x01\x12\x17\n\x13\x43\x41PTURE_SCHEMA_FILE\x10\x02*v\n\x11PlacementConflict\x12\x1e\n\x1aPLACEMENT_CONFLICT_NOT_SET\x10\x00\x12\x14\n\x10PLACEMENT_SUFFIX\x10\x01\x12\x17\n\x13PLACEMENT_OVERWRITE\x10\x02\x12\x12\n\x0ePLACEMENT_FAIL\x10\x03*\\\n\x0cJobGroupType\x12\x1a\n\x16JOB_GROUP_TYPE_NOT_SET\x10\x00\x12\x18\n\x14SEQUENTIAL_JOB_GROUP\x10\x01\x12\x16\n\x12PARALLEL_JOB_GROUP\x10\x02\x42\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
32
32
 
33
33
  _globals = globals()
34
34
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -50,6 +50,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
50
50
  _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_options = b'8\001'
51
51
  _globals['_RUNMODELJOB_RESOURCESENTRY']._loaded_options = None
52
52
  _globals['_RUNMODELJOB_RESOURCESENTRY']._serialized_options = b'8\001'
53
+ _globals['_RUNMODELJOB_PEROUTPUTATTRSENTRY']._loaded_options = None
54
+ _globals['_RUNMODELJOB_PEROUTPUTATTRSENTRY']._serialized_options = b'8\001'
53
55
  _globals['_RUNFLOWJOB_PARAMETERSENTRY']._loaded_options = None
54
56
  _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_options = b'8\001'
55
57
  _globals['_RUNFLOWJOB_INPUTSENTRY']._loaded_options = None
@@ -62,6 +64,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
62
64
  _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_options = b'8\001'
63
65
  _globals['_RUNFLOWJOB_RESOURCESENTRY']._loaded_options = None
64
66
  _globals['_RUNFLOWJOB_RESOURCESENTRY']._serialized_options = b'8\001'
67
+ _globals['_RUNFLOWJOB_PEROUTPUTATTRSENTRY']._loaded_options = None
68
+ _globals['_RUNFLOWJOB_PEROUTPUTATTRSENTRY']._serialized_options = b'8\001'
65
69
  _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._loaded_options = None
66
70
  _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_options = b'8\001'
67
71
  _globals['_IMPORTDATAJOB_INPUTSENTRY']._loaded_options = None
@@ -76,16 +80,16 @@ if not _descriptor._USE_C_DESCRIPTORS:
76
80
  _globals['_EXTERNALLOCATION_LOCATIONDETAILSENTRY']._serialized_options = b'8\001'
77
81
  _globals['_EXPORTDATAJOB_PLACEMENTSENTRY']._loaded_options = None
78
82
  _globals['_EXPORTDATAJOB_PLACEMENTSENTRY']._serialized_options = b'8\001'
79
- _globals['_JOBTYPE']._serialized_start=5808
80
- _globals['_JOBTYPE']._serialized_end=5935
81
- _globals['_JOBSTATUSCODE']._serialized_start=5938
82
- _globals['_JOBSTATUSCODE']._serialized_end=6122
83
- _globals['_CAPTURESCHEMASOURCE']._serialized_start=6124
84
- _globals['_CAPTURESCHEMASOURCE']._serialized_end=6234
85
- _globals['_PLACEMENTCONFLICT']._serialized_start=6236
86
- _globals['_PLACEMENTCONFLICT']._serialized_end=6354
87
- _globals['_JOBGROUPTYPE']._serialized_start=6356
88
- _globals['_JOBGROUPTYPE']._serialized_end=6448
83
+ _globals['_JOBTYPE']._serialized_start=6133
84
+ _globals['_JOBTYPE']._serialized_end=6260
85
+ _globals['_JOBSTATUSCODE']._serialized_start=6263
86
+ _globals['_JOBSTATUSCODE']._serialized_end=6447
87
+ _globals['_CAPTURESCHEMASOURCE']._serialized_start=6449
88
+ _globals['_CAPTURESCHEMASOURCE']._serialized_end=6559
89
+ _globals['_PLACEMENTCONFLICT']._serialized_start=6561
90
+ _globals['_PLACEMENTCONFLICT']._serialized_end=6679
91
+ _globals['_JOBGROUPTYPE']._serialized_start=6681
92
+ _globals['_JOBGROUPTYPE']._serialized_end=6773
89
93
  _globals['_JOBDEFINITION']._serialized_start=286
90
94
  _globals['_JOBDEFINITION']._serialized_end=723
91
95
  _globals['_RESULTDEFINITION']._serialized_start=726
@@ -97,61 +101,65 @@ if not _descriptor._USE_C_DESCRIPTORS:
97
101
  _globals['_PLACEMENTRECORD']._serialized_start=1241
98
102
  _globals['_PLACEMENTRECORD']._serialized_end=1428
99
103
  _globals['_RUNMODELJOB']._serialized_start=1431
100
- _globals['_RUNMODELJOB']._serialized_end=2230
101
- _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_start=1865
102
- _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_end=1939
103
- _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_start=1941
104
- _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_end=2017
104
+ _globals['_RUNMODELJOB']._serialized_end=2393
105
+ _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_start=1940
106
+ _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_end=2014
107
+ _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_start=2016
108
+ _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_end=2092
105
109
  _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_start=1061
106
110
  _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_end=1138
107
- _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_start=2098
108
- _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_end=2180
109
- _globals['_RUNMODELJOB_RESOURCESENTRY']._serialized_start=2182
110
- _globals['_RUNMODELJOB_RESOURCESENTRY']._serialized_end=2230
111
- _globals['_RUNFLOWJOB']._serialized_start=2233
112
- _globals['_RUNFLOWJOB']._serialized_end=3190
113
- _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_start=1865
114
- _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_end=1939
115
- _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_start=1941
116
- _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_end=2017
111
+ _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_start=2173
112
+ _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_end=2255
113
+ _globals['_RUNMODELJOB_RESOURCESENTRY']._serialized_start=2257
114
+ _globals['_RUNMODELJOB_RESOURCESENTRY']._serialized_end=2305
115
+ _globals['_RUNMODELJOB_PEROUTPUTATTRSENTRY']._serialized_start=2307
116
+ _globals['_RUNMODELJOB_PEROUTPUTATTRSENTRY']._serialized_end=2393
117
+ _globals['_RUNFLOWJOB']._serialized_start=2396
118
+ _globals['_RUNFLOWJOB']._serialized_end=3515
119
+ _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_start=1940
120
+ _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_end=2014
121
+ _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_start=2016
122
+ _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_end=2092
117
123
  _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_start=1061
118
124
  _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_end=1138
119
- _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_start=2098
120
- _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_end=2180
121
- _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_start=3064
122
- _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_end=3140
123
- _globals['_RUNFLOWJOB_RESOURCESENTRY']._serialized_start=2182
124
- _globals['_RUNFLOWJOB_RESOURCESENTRY']._serialized_end=2230
125
- _globals['_IMPORTMODELJOB']._serialized_start=3193
126
- _globals['_IMPORTMODELJOB']._serialized_end=3479
127
- _globals['_IMPORTDATAJOB']._serialized_start=3482
128
- _globals['_IMPORTDATAJOB']._serialized_end=4380
129
- _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_start=1865
130
- _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_end=1939
131
- _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_start=1941
132
- _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_end=2017
125
+ _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_start=2173
126
+ _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_end=2255
127
+ _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_start=3301
128
+ _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_end=3377
129
+ _globals['_RUNFLOWJOB_RESOURCESENTRY']._serialized_start=2257
130
+ _globals['_RUNFLOWJOB_RESOURCESENTRY']._serialized_end=2305
131
+ _globals['_RUNFLOWJOB_PEROUTPUTATTRSENTRY']._serialized_start=2307
132
+ _globals['_RUNFLOWJOB_PEROUTPUTATTRSENTRY']._serialized_end=2393
133
+ _globals['_IMPORTMODELJOB']._serialized_start=3518
134
+ _globals['_IMPORTMODELJOB']._serialized_end=3804
135
+ _globals['_IMPORTDATAJOB']._serialized_start=3807
136
+ _globals['_IMPORTDATAJOB']._serialized_end=4705
137
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_start=1940
138
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_end=2014
139
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_start=2016
140
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_end=2092
133
141
  _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_start=1061
134
142
  _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_end=1138
135
- _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_start=2098
136
- _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_end=2180
137
- _globals['_IMPORTDATAJOB_CAPTURESENTRY']._serialized_start=4266
138
- _globals['_IMPORTDATAJOB_CAPTURESENTRY']._serialized_end=4346
139
- _globals['_CAPTURESOURCE']._serialized_start=4383
140
- _globals['_CAPTURESOURCE']._serialized_end=4745
141
- _globals['_EXTERNALLOCATION']._serialized_start=4748
142
- _globals['_EXTERNALLOCATION']._serialized_end=4963
143
- _globals['_EXTERNALLOCATION_LOCATIONDETAILSENTRY']._serialized_start=4909
144
- _globals['_EXTERNALLOCATION_LOCATIONDETAILSENTRY']._serialized_end=4963
145
- _globals['_EXPORTDATAJOB']._serialized_start=4966
146
- _globals['_EXPORTDATAJOB']._serialized_end=5335
147
- _globals['_EXPORTDATAJOB_PLACEMENTSENTRY']._serialized_start=5116
148
- _globals['_EXPORTDATAJOB_PLACEMENTSENTRY']._serialized_end=5200
149
- _globals['_PLACEMENTTARGET']._serialized_start=5338
150
- _globals['_PLACEMENTTARGET']._serialized_end=5468
151
- _globals['_JOBGROUP']._serialized_start=5471
152
- _globals['_JOBGROUP']._serialized_end=5670
153
- _globals['_SEQUENTIALJOBGROUP']._serialized_start=5672
154
- _globals['_SEQUENTIALJOBGROUP']._serialized_end=5739
155
- _globals['_PARALLELJOBGROUP']._serialized_start=5741
156
- _globals['_PARALLELJOBGROUP']._serialized_end=5806
143
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_start=2173
144
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_end=2255
145
+ _globals['_IMPORTDATAJOB_CAPTURESENTRY']._serialized_start=4591
146
+ _globals['_IMPORTDATAJOB_CAPTURESENTRY']._serialized_end=4671
147
+ _globals['_CAPTURESOURCE']._serialized_start=4708
148
+ _globals['_CAPTURESOURCE']._serialized_end=5070
149
+ _globals['_EXTERNALLOCATION']._serialized_start=5073
150
+ _globals['_EXTERNALLOCATION']._serialized_end=5288
151
+ _globals['_EXTERNALLOCATION_LOCATIONDETAILSENTRY']._serialized_start=5234
152
+ _globals['_EXTERNALLOCATION_LOCATIONDETAILSENTRY']._serialized_end=5288
153
+ _globals['_EXPORTDATAJOB']._serialized_start=5291
154
+ _globals['_EXPORTDATAJOB']._serialized_end=5660
155
+ _globals['_EXPORTDATAJOB_PLACEMENTSENTRY']._serialized_start=5441
156
+ _globals['_EXPORTDATAJOB_PLACEMENTSENTRY']._serialized_end=5525
157
+ _globals['_PLACEMENTTARGET']._serialized_start=5663
158
+ _globals['_PLACEMENTTARGET']._serialized_end=5793
159
+ _globals['_JOBGROUP']._serialized_start=5796
160
+ _globals['_JOBGROUP']._serialized_end=5995
161
+ _globals['_SEQUENTIALJOBGROUP']._serialized_start=5997
162
+ _globals['_SEQUENTIALJOBGROUP']._serialized_end=6064
163
+ _globals['_PARALLELJOBGROUP']._serialized_start=6066
164
+ _globals['_PARALLELJOBGROUP']._serialized_end=6131
157
165
  # @@protoc_insertion_point(module_scope)
@@ -149,7 +149,7 @@ class PlacementRecord(_message.Message):
149
149
  def __init__(self, dataId: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ..., location: _Optional[_Union[ExternalLocation, _Mapping]] = ..., format: _Optional[str] = ..., mimeType: _Optional[str] = ..., size: _Optional[int] = ..., contentHash: _Optional[str] = ...) -> None: ...
150
150
 
151
151
  class RunModelJob(_message.Message):
152
- __slots__ = ("model", "parameters", "inputs", "outputs", "priorOutputs", "resources", "outputAttrs")
152
+ __slots__ = ("model", "parameters", "inputs", "outputs", "priorOutputs", "resources", "outputAttrs", "perOutputAttrs")
153
153
  class ParametersEntry(_message.Message):
154
154
  __slots__ = ("key", "value")
155
155
  KEY_FIELD_NUMBER: _ClassVar[int]
@@ -185,6 +185,13 @@ class RunModelJob(_message.Message):
185
185
  key: str
186
186
  value: str
187
187
  def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
188
+ class PerOutputAttrsEntry(_message.Message):
189
+ __slots__ = ("key", "value")
190
+ KEY_FIELD_NUMBER: _ClassVar[int]
191
+ VALUE_FIELD_NUMBER: _ClassVar[int]
192
+ key: str
193
+ value: _tag_update_pb2.TagUpdateList
194
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_tag_update_pb2.TagUpdateList, _Mapping]] = ...) -> None: ...
188
195
  MODEL_FIELD_NUMBER: _ClassVar[int]
189
196
  PARAMETERS_FIELD_NUMBER: _ClassVar[int]
190
197
  INPUTS_FIELD_NUMBER: _ClassVar[int]
@@ -192,6 +199,7 @@ class RunModelJob(_message.Message):
192
199
  PRIOROUTPUTS_FIELD_NUMBER: _ClassVar[int]
193
200
  RESOURCES_FIELD_NUMBER: _ClassVar[int]
194
201
  OUTPUTATTRS_FIELD_NUMBER: _ClassVar[int]
202
+ PEROUTPUTATTRS_FIELD_NUMBER: _ClassVar[int]
195
203
  model: _object_id_pb2.TagSelector
196
204
  parameters: _containers.MessageMap[str, _type_pb2.Value]
197
205
  inputs: _containers.MessageMap[str, _object_id_pb2.TagSelector]
@@ -199,10 +207,11 @@ class RunModelJob(_message.Message):
199
207
  priorOutputs: _containers.MessageMap[str, _object_id_pb2.TagSelector]
200
208
  resources: _containers.ScalarMap[str, str]
201
209
  outputAttrs: _containers.RepeatedCompositeFieldContainer[_tag_update_pb2.TagUpdate]
202
- def __init__(self, model: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ..., parameters: _Optional[_Mapping[str, _type_pb2.Value]] = ..., inputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., outputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., priorOutputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., resources: _Optional[_Mapping[str, str]] = ..., outputAttrs: _Optional[_Iterable[_Union[_tag_update_pb2.TagUpdate, _Mapping]]] = ...) -> None: ...
210
+ perOutputAttrs: _containers.MessageMap[str, _tag_update_pb2.TagUpdateList]
211
+ def __init__(self, model: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ..., parameters: _Optional[_Mapping[str, _type_pb2.Value]] = ..., inputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., outputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., priorOutputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., resources: _Optional[_Mapping[str, str]] = ..., outputAttrs: _Optional[_Iterable[_Union[_tag_update_pb2.TagUpdate, _Mapping]]] = ..., perOutputAttrs: _Optional[_Mapping[str, _tag_update_pb2.TagUpdateList]] = ...) -> None: ...
203
212
 
204
213
  class RunFlowJob(_message.Message):
205
- __slots__ = ("flow", "parameters", "inputs", "outputs", "priorOutputs", "models", "resources", "outputAttrs", "exportStorageAccess")
214
+ __slots__ = ("flow", "parameters", "inputs", "outputs", "priorOutputs", "models", "resources", "outputAttrs", "perOutputAttrs", "exportStorageAccess")
206
215
  class ParametersEntry(_message.Message):
207
216
  __slots__ = ("key", "value")
208
217
  KEY_FIELD_NUMBER: _ClassVar[int]
@@ -245,6 +254,13 @@ class RunFlowJob(_message.Message):
245
254
  key: str
246
255
  value: str
247
256
  def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
257
+ class PerOutputAttrsEntry(_message.Message):
258
+ __slots__ = ("key", "value")
259
+ KEY_FIELD_NUMBER: _ClassVar[int]
260
+ VALUE_FIELD_NUMBER: _ClassVar[int]
261
+ key: str
262
+ value: _tag_update_pb2.TagUpdateList
263
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_tag_update_pb2.TagUpdateList, _Mapping]] = ...) -> None: ...
248
264
  FLOW_FIELD_NUMBER: _ClassVar[int]
249
265
  PARAMETERS_FIELD_NUMBER: _ClassVar[int]
250
266
  INPUTS_FIELD_NUMBER: _ClassVar[int]
@@ -253,6 +269,7 @@ class RunFlowJob(_message.Message):
253
269
  MODELS_FIELD_NUMBER: _ClassVar[int]
254
270
  RESOURCES_FIELD_NUMBER: _ClassVar[int]
255
271
  OUTPUTATTRS_FIELD_NUMBER: _ClassVar[int]
272
+ PEROUTPUTATTRS_FIELD_NUMBER: _ClassVar[int]
256
273
  EXPORTSTORAGEACCESS_FIELD_NUMBER: _ClassVar[int]
257
274
  flow: _object_id_pb2.TagSelector
258
275
  parameters: _containers.MessageMap[str, _type_pb2.Value]
@@ -262,8 +279,9 @@ class RunFlowJob(_message.Message):
262
279
  models: _containers.MessageMap[str, _object_id_pb2.TagSelector]
263
280
  resources: _containers.ScalarMap[str, str]
264
281
  outputAttrs: _containers.RepeatedCompositeFieldContainer[_tag_update_pb2.TagUpdate]
282
+ perOutputAttrs: _containers.MessageMap[str, _tag_update_pb2.TagUpdateList]
265
283
  exportStorageAccess: _containers.RepeatedScalarFieldContainer[str]
266
- def __init__(self, flow: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ..., parameters: _Optional[_Mapping[str, _type_pb2.Value]] = ..., inputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., outputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., priorOutputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., models: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., resources: _Optional[_Mapping[str, str]] = ..., outputAttrs: _Optional[_Iterable[_Union[_tag_update_pb2.TagUpdate, _Mapping]]] = ..., exportStorageAccess: _Optional[_Iterable[str]] = ...) -> None: ...
284
+ def __init__(self, flow: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ..., parameters: _Optional[_Mapping[str, _type_pb2.Value]] = ..., inputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., outputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., priorOutputs: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., models: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., resources: _Optional[_Mapping[str, str]] = ..., outputAttrs: _Optional[_Iterable[_Union[_tag_update_pb2.TagUpdate, _Mapping]]] = ..., perOutputAttrs: _Optional[_Mapping[str, _tag_update_pb2.TagUpdateList]] = ..., exportStorageAccess: _Optional[_Iterable[str]] = ...) -> None: ...
267
285
 
268
286
  class ImportModelJob(_message.Message):
269
287
  __slots__ = ("language", "repository", "packageGroup", "package", "version", "entryPoint", "path", "modelAttrs", "priorModel")
@@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default()
25
25
  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
26
26
 
27
27
 
28
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7tracdap/rt/_impl/grpc/tracdap/metadata/tag_update.proto\x12\x10tracdap.metadata\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/type.proto\"\x87\x01\n\tTagUpdate\x12\x31\n\toperation\x18\x01 \x01(\x0e\x32\x1e.tracdap.metadata.TagOperation\x12\x10\n\x08\x61ttrName\x18\x02 \x01(\t\x12+\n\x05value\x18\x03 \x01(\x0b\x32\x17.tracdap.metadata.ValueH\x00\x88\x01\x01\x42\x08\n\x06_value*\x9e\x01\n\x0cTagOperation\x12\x1a\n\x16\x43REATE_OR_REPLACE_ATTR\x10\x00\x12\x19\n\x15\x43REATE_OR_APPEND_ATTR\x10\x01\x12\x0f\n\x0b\x43REATE_ATTR\x10\x02\x12\x10\n\x0cREPLACE_ATTR\x10\x03\x12\x0f\n\x0b\x41PPEND_ATTR\x10\x04\x12\x0f\n\x0b\x44\x45LETE_ATTR\x10\x05\x12\x12\n\x0e\x43LEAR_ALL_ATTR\x10\x06\x42\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
28
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n7tracdap/rt/_impl/grpc/tracdap/metadata/tag_update.proto\x12\x10tracdap.metadata\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/type.proto\"\x87\x01\n\tTagUpdate\x12\x31\n\toperation\x18\x01 \x01(\x0e\x32\x1e.tracdap.metadata.TagOperation\x12\x10\n\x08\x61ttrName\x18\x02 \x01(\t\x12+\n\x05value\x18\x03 \x01(\x0b\x32\x17.tracdap.metadata.ValueH\x00\x88\x01\x01\x42\x08\n\x06_value\";\n\rTagUpdateList\x12*\n\x05\x61ttrs\x18\x01 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate*\x9e\x01\n\x0cTagOperation\x12\x1a\n\x16\x43REATE_OR_REPLACE_ATTR\x10\x00\x12\x19\n\x15\x43REATE_OR_APPEND_ATTR\x10\x01\x12\x0f\n\x0b\x43REATE_ATTR\x10\x02\x12\x10\n\x0cREPLACE_ATTR\x10\x03\x12\x0f\n\x0b\x41PPEND_ATTR\x10\x04\x12\x0f\n\x0b\x44\x45LETE_ATTR\x10\x05\x12\x12\n\x0e\x43LEAR_ALL_ATTR\x10\x06\x42\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
29
29
 
30
30
  _globals = globals()
31
31
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -33,8 +33,10 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tracdap.rt._impl.grpc.tracd
33
33
  if not _descriptor._USE_C_DESCRIPTORS:
34
34
  _globals['DESCRIPTOR']._loaded_options = None
35
35
  _globals['DESCRIPTOR']._serialized_options = b'\n\032org.finos.tracdap.metadataP\001'
36
- _globals['_TAGOPERATION']._serialized_start=267
37
- _globals['_TAGOPERATION']._serialized_end=425
36
+ _globals['_TAGOPERATION']._serialized_start=328
37
+ _globals['_TAGOPERATION']._serialized_end=486
38
38
  _globals['_TAGUPDATE']._serialized_start=129
39
39
  _globals['_TAGUPDATE']._serialized_end=264
40
+ _globals['_TAGUPDATELIST']._serialized_start=266
41
+ _globals['_TAGUPDATELIST']._serialized_end=325
40
42
  # @@protoc_insertion_point(module_scope)
@@ -1,8 +1,9 @@
1
1
  from tracdap.rt._impl.grpc.tracdap.metadata import type_pb2 as _type_pb2
2
+ from google.protobuf.internal import containers as _containers
2
3
  from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
3
4
  from google.protobuf import descriptor as _descriptor
4
5
  from google.protobuf import message as _message
5
- from collections.abc import Mapping as _Mapping
6
+ from collections.abc import Iterable as _Iterable, Mapping as _Mapping
6
7
  from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
7
8
 
8
9
  DESCRIPTOR: _descriptor.FileDescriptor
@@ -33,3 +34,9 @@ class TagUpdate(_message.Message):
33
34
  attrName: str
34
35
  value: _type_pb2.Value
35
36
  def __init__(self, operation: _Optional[_Union[TagOperation, str]] = ..., attrName: _Optional[str] = ..., value: _Optional[_Union[_type_pb2.Value, _Mapping]] = ...) -> None: ...
37
+
38
+ class TagUpdateList(_message.Message):
39
+ __slots__ = ("attrs",)
40
+ ATTRS_FIELD_NUMBER: _ClassVar[int]
41
+ attrs: _containers.RepeatedCompositeFieldContainer[TagUpdate]
42
+ def __init__(self, attrs: _Optional[_Iterable[_Union[TagUpdate, _Mapping]]] = ...) -> None: ...
@@ -17,7 +17,7 @@
17
17
  TRAC model API for Python
18
18
  """
19
19
 
20
- __version__ = "0.12.0.dev2"
20
+ __version__ = "0.12.0.dev3"
21
21
 
22
22
  # Make metadata classes available to client code when importing the API package
23
23
  # Remove this import when generating docs, so metadata classes are only documented once
@@ -1,10 +1,5 @@
1
1
  # Code generated by TRAC
2
2
 
3
- from .tenant import TenantConfigMap
4
- from .tenant import TenantConfig
5
-
6
- from .job import JobConfig
7
-
8
3
  from .common import _ConfigFile
9
4
  from .common import PluginConfig
10
5
  from .common import PlatformInfo
@@ -14,6 +9,12 @@ from .runtime import RuntimeConfig
14
9
 
15
10
  from .dynamic import DynamicConfig
16
11
 
12
+ from .result import JobResultAttrs
13
+ from .result import JobResult
14
+
15
+ from .tenant import TenantConfigMap
16
+ from .tenant import TenantConfig
17
+
17
18
  from .platform import RoutingProtocol
18
19
  from .platform import ServicesLayout
19
20
  from .platform import PlatformConfig
@@ -24,5 +25,4 @@ from .platform import RoutingMatch
24
25
  from .platform import RoutingTarget
25
26
  from .platform import DeploymentConfig
26
27
 
27
- from .result import JobResultAttrs
28
- from .result import JobResult
28
+ from .job import JobConfig
@@ -13,15 +13,6 @@ 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
-
23
- from .custom import CustomDefinition
24
-
25
16
  from .data import SchemaType
26
17
  from .data import PartType
27
18
  from .data import FieldSchema
@@ -35,8 +26,38 @@ from .data import DataSnapshot
35
26
  from .data import DataPartition
36
27
  from .data import DataDefinition
37
28
 
29
+ from .file import FileDefinition
30
+ from .file import FileType
31
+
32
+ from .resource import ResourceType
33
+ from .resource import ResourceDefinition
34
+ from .resource import CredentialDefinition
35
+ from .resource import IdentityDefinition
36
+
37
+ from .model import ModelType
38
+ from .model import ModelParameter
39
+ from .model import ModelInputSchema
40
+ from .model import ModelOutputSchema
41
+ from .model import ModelResource
42
+ from .model import ModelSystemDetails
43
+ from .model import ModelDefinition
44
+
45
+ from .search import SearchOperator
46
+ from .search import LogicalOperator
47
+ from .search import SearchTerm
48
+ from .search import LogicalExpression
49
+ from .search import SearchExpression
50
+ from .search import SearchParameters
51
+
38
52
  from .tag_update import TagOperation
39
53
  from .tag_update import TagUpdate
54
+ from .tag_update import TagUpdateList
55
+
56
+ from .flow import FlowNodeType
57
+ from .flow import FlowNode
58
+ from .flow import FlowSocket
59
+ from .flow import FlowEdge
60
+ from .flow import FlowDefinition
40
61
 
41
62
  from .job import JobType
42
63
  from .job import JobStatusCode
@@ -58,21 +79,7 @@ from .job import JobGroup
58
79
  from .job import SequentialJobGroup
59
80
  from .job import ParallelJobGroup
60
81
 
61
- from .file import FileDefinition
62
- from .file import FileType
63
-
64
- from .resource import ResourceType
65
- from .resource import ResourceDefinition
66
- from .resource import CredentialDefinition
67
- from .resource import IdentityDefinition
68
-
69
- from .model import ModelType
70
- from .model import ModelParameter
71
- from .model import ModelInputSchema
72
- from .model import ModelOutputSchema
73
- from .model import ModelResource
74
- from .model import ModelSystemDetails
75
- from .model import ModelDefinition
82
+ from .custom import CustomDefinition
76
83
 
77
84
  from .storage import CopyStatus
78
85
  from .storage import IncarnationStatus
@@ -88,16 +95,10 @@ from .config import ConfigDetails
88
95
  from .config import ConfigDefinition
89
96
  from .config import PlatformConfigEntry
90
97
 
91
- from .flow import FlowNodeType
92
- from .flow import FlowNode
93
- from .flow import FlowSocket
94
- from .flow import FlowEdge
95
- from .flow import FlowDefinition
96
-
97
98
  from .object import ObjectDefinition
98
99
 
99
- from .tag import Tag
100
-
101
100
  from .common import MetadataFormat
102
101
  from .common import MetadataVersion
103
102
  from .common import TenantInfo
103
+
104
+ from .tag import Tag
@@ -136,6 +136,22 @@ class FlowDefinition:
136
136
 
137
137
  inputs: "_tp.Dict[str, ModelInputSchema]" = _dc.field(default_factory=dict)
138
138
 
139
+ """
140
+ Explicit declarations for the flow's input nodes
141
+
142
+ Inputs can be left undeclared, in which case TRAC infers them from the models they connect to.
143
+ An input declared with only its object type (and optionally a label and props) is checked against
144
+ that type, and the rest of its schema is inferred. An input declared in full, with a schema or file type,
145
+ is used as it is. If any inputs are declared, every input node must be declared.
146
+ """
147
+
139
148
  outputs: "_tp.Dict[str, ModelOutputSchema]" = _dc.field(default_factory=dict)
140
149
 
150
+ """
151
+ Explicit declarations for the flow's output nodes
152
+
153
+ Outputs can be undeclared, declared with only their object type, or declared in full, as for inputs.
154
+ If any outputs are declared, every output node must be declared.
155
+ """
156
+
141
157
  resources: "_tp.Dict[str, ModelResource]" = _dc.field(default_factory=dict)
@@ -212,6 +212,8 @@ class RunModelJob:
212
212
 
213
213
  outputAttrs: "_tp.List[TagUpdate]" = _dc.field(default_factory=list)
214
214
 
215
+ perOutputAttrs: "_tp.Dict[str, TagUpdateList]" = _dc.field(default_factory=dict)
216
+
215
217
 
216
218
  @_dc.dataclass
217
219
  class RunFlowJob:
@@ -234,6 +236,8 @@ class RunFlowJob:
234
236
 
235
237
  outputAttrs: "_tp.List[TagUpdate]" = _dc.field(default_factory=list)
236
238
 
239
+ perOutputAttrs: "_tp.Dict[str, TagUpdateList]" = _dc.field(default_factory=dict)
240
+
237
241
  exportStorageAccess: "_tp.List[str]" = _dc.field(default_factory=list)
238
242
 
239
243
 
@@ -128,3 +128,23 @@ class TagUpdate:
128
128
  .. seealso::
129
129
  :py:obj:`Value <metadata.Value>`
130
130
  """
131
+
132
+
133
+ @_dc.dataclass
134
+ class TagUpdateList:
135
+
136
+ """
137
+ A list of tag updates, where updates are grouped by a key.
138
+
139
+ Protobuf map values can't be repeated, so a map from a key to its tag updates
140
+ uses this message as the value. For example, the tags for each output of a job
141
+ are held as a map from output name to a tag update list.
142
+
143
+ .. seealso::
144
+ :py:obj:`RunModelJob <RunModelJob>`,
145
+ :py:obj:`RunFlowJob <RunFlowJob>`
146
+ """
147
+
148
+ attrs: "_tp.List[TagUpdate]" = _dc.field(default_factory=list)
149
+
150
+ """Tag updates for the key this list belongs to"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tracdap-runtime
3
- Version: 0.12.0.dev2
3
+ Version: 0.12.0.dev3
4
4
  Summary: Portable, production-grade models in Python
5
5
  Home-page: https://www.fintrac.co.uk/
6
6
  Author: Martin Traverse
@@ -1,4 +1,4 @@
1
- tracdap/rt/__init__.py,sha256=76uPL5JziZFZZnX23NK6Daro0L7bePz3ROGCgTyHWEo,824
1
+ tracdap/rt/__init__.py,sha256=QnNfE3R8WjWXNJ1XuM4OP5ts5aSjFvw18NPQOe5h-Mw,824
2
2
  tracdap/rt/exceptions.py,sha256=BPgY5XFN_WEBAALUrGaGSRyjsL7ZBRKRcne6ZZEu4IA,8593
3
3
  tracdap/rt/_impl/__init__.py,sha256=nFn00zysNlcEFHQJWs4l6vLm9RS5zsJ_IF9-eRwEXlo,796
4
4
  tracdap/rt/_impl/runtime.py,sha256=11n_9HJ8quzd8wZO-U5sihPRJE-90Pwsw1XS0tALRSY,17542
@@ -26,7 +26,7 @@ tracdap/rt/_impl/core/validation.py,sha256=lwNqjcdOTaPHrzX-Qm0Wy9nyDUWF0Ji_ahQGr
26
26
  tracdap/rt/_impl/exec/__init__.py,sha256=7VEb_giQUbvBBO8OSTjTtgFgu7WSA43qslcZvhweO10,795
27
27
  tracdap/rt/_impl/exec/actors.py,sha256=ebPBsIsgok02YM-Ql277Tbz8s-_xDhsteMa3sLV0xFw,35135
28
28
  tracdap/rt/_impl/exec/context.py,sha256=3qT8FbkbCs4l5kcrLq1b53z-BMIRyUen1bkPdrUFAs0,55065
29
- tracdap/rt/_impl/exec/dev_mode.py,sha256=RY7xoDHuPTjxS53mNoghvMLm2bnEVlWBzm1G_2ukRmU,53453
29
+ tracdap/rt/_impl/exec/dev_mode.py,sha256=P-_xLMX2plfoOmdeFB2L0FudE4So4V7NZe9vaGhGQWs,55967
30
30
  tracdap/rt/_impl/exec/engine.py,sha256=nhc7MEC6c8gdb20-rSOM0Oe3qJ6FnmvcNXRjf433CXU,51645
31
31
  tracdap/rt/_impl/exec/functions.py,sha256=348hUnMPKMEAPSfJxx67jdQ9A4Yssgp0vhGKPoraYpc,39990
32
32
  tracdap/rt/_impl/exec/graph.py,sha256=dYNZY42VUMZY3n9DlTDed4B-mjDdfbRlUjbadCzuxz0,14415
@@ -52,8 +52,8 @@ tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.py,sha256=UUC7VPuVKLsVOE6o-v3Ngl
52
52
  tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.pyi,sha256=a-MK2oWzjC5rqlw-fbKW94sBbo41g5EBkJ8IO0ceCQc,1412
53
53
  tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.py,sha256=7kziQR37eju6QkUaAT48RhUm4V1hAkIiWZ8d3EE-k2Q,6756
54
54
  tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.pyi,sha256=DpQKLvEzF-nV1umgwx5pVsoLKjKFZ1VzrcP1CZM-keE,6845
55
- tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py,sha256=GNNTb8hV6ugSW-t_LFyW2m9T5d9nTwV77l_lF4rOxMU,19551
56
- tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi,sha256=7FAB-UMQkCGOunKIlIlxTGI387-D-1uKkRrxa_wh2wY,23037
55
+ tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py,sha256=BA2cMn7Smf0YPs7xaRR6OI_3EkHxOqwhB5FaidQtEbg,20614
56
+ tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi,sha256=sBlAcNF8W3zuf5x4lffiSCVA6mpdNhDiQ43RVAI39YU,24229
57
57
  tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.py,sha256=RqY26XwagUSTArcFEpyo4yJ9mX5KF7rPGf2K0KH51d8,10103
58
58
  tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.pyi,sha256=SXrygEFW5aRmq80eSjNchaY6qHiQu2IspMM5HkNENrE,9915
59
59
  tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.py,sha256=YlhMeiEkQsgf-yLWm2dQ4ZgQHIR8bjT5Lif3RTFU9Gc,3353
@@ -68,8 +68,8 @@ tracdap/rt/_impl/grpc/tracdap/metadata/storage_pb2.py,sha256=W59Ua-YOjFI9TN8qNnK
68
68
  tracdap/rt/_impl/grpc/tracdap/metadata/storage_pb2.pyi,sha256=sQjQY8Ip06HhZhKLKjPD_bAZnZZxTZWX--bGvTwZ_10,5322
69
69
  tracdap/rt/_impl/grpc/tracdap/metadata/tag_pb2.py,sha256=rw-7HOwjIRh34NJ3hR96cmkfYTBM28gycLm1VTIFCCA,2719
70
70
  tracdap/rt/_impl/grpc/tracdap/metadata/tag_pb2.pyi,sha256=oX-LckEZq3wPz0PEBDIo7H5oT_GE8KchTcfClEBSsvk,1481
71
- tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.py,sha256=UXSXKbrWu-gZbePF8WCHAwbr1OQRzPzhX6gipQze4ys,2368
72
- tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.pyi,sha256=AXh3zMkeEpiKj1uM1hhl2-yr2M5PBXbNXGHSrmJsYLs,1497
71
+ tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.py,sha256=6-tvjJUiZypTkKfAYdggOv2rB6knhGWgy47UJGUThP8,2560
72
+ tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.pyi,sha256=ze02XlF0in4xLufcqfuDAEwZ1D-KqhRNNJmuYSRuN2c,1855
73
73
  tracdap/rt/_impl/grpc/tracdap/metadata/type_pb2.py,sha256=-NlYgZ3K107oIOdd-gDfsDB3gvBWtBu0WVz2t6lumMs,5156
74
74
  tracdap/rt/_impl/grpc/tracdap/metadata/type_pb2.pyi,sha256=QvPrVHh0mn6njeEsJhbBoex2-kiSsyaOk5fnYZBfa1E,5059
75
75
  tracdap/rt/_plugins/__init__.py,sha256=nFn00zysNlcEFHQJWs4l6vLm9RS5zsJ_IF9-eRwEXlo,796
@@ -85,13 +85,13 @@ tracdap/rt/_plugins/storage_gcp.py,sha256=C_vlToIBUZfRYuwjZWrZkACMKQix8bA6iZD86y
85
85
  tracdap/rt/_plugins/storage_local.py,sha256=KY1CsT0GzjYWo5YYetTnQDWu18RhVrmEGBrEUSQHPKU,15742
86
86
  tracdap/rt/_plugins/storage_sql.py,sha256=QoSDLpxzeAQP-jb3IW9E6cLVXGq9wnVEPAk0JY6Jz1w,16080
87
87
  tracdap/rt/_plugins/storage_sql_dialects.py,sha256=4HWx5Gm50TRf5BTmc3hMREJIFsFgqo4g7wkVEVZzPz0,3550
88
- tracdap/rt/api/__init__.py,sha256=VT8A7fzWGCDr2acdBcZP6jFojr7UBmHk4O2md_Laf54,1290
88
+ tracdap/rt/api/__init__.py,sha256=42elZ013J-cpur9WzlcsgTi-F_DpHTNiT_ozx7E5yNU,1290
89
89
  tracdap/rt/api/constants.py,sha256=5C3SKUMcVONq0ICIVDkA5x7dz9BkWIksMsK9mZjtIds,2716
90
90
  tracdap/rt/api/experimental.py,sha256=f0ELh4Xb2fxawF2yH4xms9rh12cFLjg3I8tEs7IWOpU,7942
91
91
  tracdap/rt/api/hook.py,sha256=O0f5gJWGyyIztVHr4frX-ao0dWMv3s-0BntTEHT729Q,6301
92
92
  tracdap/rt/api/model_api.py,sha256=1SOmeQzikv515XQEUkQK8C15edjlASvgBE9GN-Q6Zs4,32306
93
93
  tracdap/rt/api/static_api.py,sha256=rV46skXYwMayzU43X8x1kcZ0xrt1nEBBtQW95VPqdPI,43834
94
- tracdap/rt/config/__init__.py,sha256=mpLHdcOR7iqaRhfLggZyRWgNwR2VJjq2_kqVi9LiBGo,725
94
+ tracdap/rt/config/__init__.py,sha256=P65g44KH3ugZOpUtrpyXXfaa7gA7zwwCP2yRC1CW-u0,725
95
95
  tracdap/rt/config/common.py,sha256=eIPOwgyTemixyEo4j-aCMExwE7KhSt9qrrea1s53kHA,944
96
96
  tracdap/rt/config/dynamic.py,sha256=3PaL3IVDxb1_PSxdp820U4uEmLlKBLBBIwCHyVQZ1l4,738
97
97
  tracdap/rt/config/job.py,sha256=rlOA6k2dPJoKLKvg-JSMdt2QShoYK3wyZjfEyV1nmzU,1127
@@ -111,14 +111,14 @@ tracdap/rt/launch/__init__.py,sha256=SPIwj5Bwa-IlhrfY1OJspYnL_mPLvz4F9XTAYKeu6IE
111
111
  tracdap/rt/launch/__main__.py,sha256=tfr5wL1gHm0oj4tcX6pv6bl-3Z1K7VMpmmNMQzfMFzU,841
112
112
  tracdap/rt/launch/cli.py,sha256=FCML9LE8qLLA9tx4U_n2rbvA4TAOqh0mddIshrJSmbI,2211
113
113
  tracdap/rt/launch/launch.py,sha256=XpMIL6rD1CCMZwa012hhWkXkN4FsKX2RZirsnPDxHwg,9587
114
- tracdap/rt/metadata/__init__.py,sha256=9TE350VUiHA_6PAW__fxVTb2fqHrx4E88c3NdFx0EoY,2853
114
+ tracdap/rt/metadata/__init__.py,sha256=Zh_hAxvNHhR53xTr4aneXEKYfEDql1KiZXTi1xIMR_0,2891
115
115
  tracdap/rt/metadata/common.py,sha256=Iq_vUHml9hwaVc0kSQffhNijVS3sA4A_b3fpV2p7sZ8,1644
116
116
  tracdap/rt/metadata/config.py,sha256=aTnHcCGSRDSAepIRzZFYFhb2lmvOyRQ1RD40aPPe6F0,3206
117
117
  tracdap/rt/metadata/custom.py,sha256=GhCO8xjjsjZzlfSefqmCFX80rXJnxDCDq_STWi0ZL_0,352
118
118
  tracdap/rt/metadata/data.py,sha256=99BO0inatBiwtXTq7k5LXt8b11U9MJKXGMU8FM_ud5c,4548
119
119
  tracdap/rt/metadata/file.py,sha256=d4VLinEXiXZamLtPbZSqZQamQbxR8dsU1m680vDaxoY,628
120
- tracdap/rt/metadata/flow.py,sha256=IGCTyXf8vgSXYTgxlfWpSU4Z6f6Djc3j5ycPxAGPZ8g,3869
121
- tracdap/rt/metadata/job.py,sha256=5_tFPRMEt5t4cvl2SPrdbWf9gXK43ytjdqAnxKEKDjU,9998
120
+ tracdap/rt/metadata/flow.py,sha256=Nb-bmsTCaioGl3aaPym7ooSnamNyJt0QJmwIFDIoe-4,4590
121
+ tracdap/rt/metadata/job.py,sha256=sLRIokmtOU4kTlr1f2ujsZbWqRg6yjR793FKEySs0DM,10170
122
122
  tracdap/rt/metadata/model.py,sha256=CNcbBpg8vsdz8qOYzwGfVIAWxloJliZ95IXVYU4_zEQ,4516
123
123
  tracdap/rt/metadata/object.py,sha256=p2oXGNm6VHWQHPXDjZc34E93K3lD31iaLXQL_FG1x6k,3139
124
124
  tracdap/rt/metadata/object_id.py,sha256=lfwvU9C4Bp7pTDtF118Odfq_LFeUa7Il_AzLll17nfU,4475
@@ -126,10 +126,10 @@ tracdap/rt/metadata/resource.py,sha256=jcE9Br263i15cxeaztc-hmzynUfogSMDPNVFMb8Lp
126
126
  tracdap/rt/metadata/search.py,sha256=BaH0mL80QEQ6iDmef1bIqEBIlm70orkc18DQv3pya6Y,9931
127
127
  tracdap/rt/metadata/storage.py,sha256=IabYqI-pPBr6_zZJpJg2QlxB9NQzVVtKnCxYK46SUMk,3366
128
128
  tracdap/rt/metadata/tag.py,sha256=cjKF5gdNECHDtA9sc09Dc2Q4WNZQA_7iJsUEHSKFXiQ,5097
129
- tracdap/rt/metadata/tag_update.py,sha256=I7iDJiHEcSQ2vhOlhIc0fzeOoqTg6N1LJZU1R6tG_8g,3779
129
+ tracdap/rt/metadata/tag_update.py,sha256=i5GhINw4Lvckhos4JvZAe5OC3DTpoX-DKZNhOryaGF8,4361
130
130
  tracdap/rt/metadata/type.py,sha256=hSx1RoB4Pj9SskC8Lh325LLeF1GbOhhgYQHNMrwf0XA,9516
131
- tracdap_runtime-0.12.0.dev2.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
132
- tracdap_runtime-0.12.0.dev2.dist-info/METADATA,sha256=1dBOi4y8a81QF33Tl7jBY_c3TEJfBoT42kkITfibvJU,11063
133
- tracdap_runtime-0.12.0.dev2.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
134
- tracdap_runtime-0.12.0.dev2.dist-info/top_level.txt,sha256=Uv0JfaE1Lp4JnCzqW8lqXNJAEcsAFpAUGOghJolVNdM,8
135
- tracdap_runtime-0.12.0.dev2.dist-info/RECORD,,
131
+ tracdap_runtime-0.12.0.dev3.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
132
+ tracdap_runtime-0.12.0.dev3.dist-info/METADATA,sha256=AVOgL-tqoJuOq5yACSS-BB7bBEl1DcJuZiXQC5QDH3I,11063
133
+ tracdap_runtime-0.12.0.dev3.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
134
+ tracdap_runtime-0.12.0.dev3.dist-info/top_level.txt,sha256=Uv0JfaE1Lp4JnCzqW8lqXNJAEcsAFpAUGOghJolVNdM,8
135
+ tracdap_runtime-0.12.0.dev3.dist-info/RECORD,,