tracdap-runtime 0.6.3__py3-none-any.whl → 0.6.5__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.
Files changed (52) hide show
  1. tracdap/rt/_exec/context.py +572 -112
  2. tracdap/rt/_exec/dev_mode.py +166 -97
  3. tracdap/rt/_exec/engine.py +120 -9
  4. tracdap/rt/_exec/functions.py +137 -35
  5. tracdap/rt/_exec/graph.py +38 -13
  6. tracdap/rt/_exec/graph_builder.py +120 -9
  7. tracdap/rt/_impl/data.py +183 -52
  8. tracdap/rt/_impl/grpc/tracdap/metadata/data_pb2.py +18 -18
  9. tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py +74 -30
  10. tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi +120 -2
  11. tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.py +20 -18
  12. tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.pyi +22 -6
  13. tracdap/rt/_impl/grpc/tracdap/metadata/resource_pb2.py +29 -0
  14. tracdap/rt/_impl/grpc/tracdap/metadata/resource_pb2.pyi +16 -0
  15. tracdap/rt/_impl/models.py +8 -0
  16. tracdap/rt/_impl/static_api.py +42 -10
  17. tracdap/rt/_impl/storage.py +37 -25
  18. tracdap/rt/_impl/validation.py +113 -11
  19. tracdap/rt/_plugins/repo_git.py +1 -1
  20. tracdap/rt/_version.py +1 -1
  21. tracdap/rt/api/experimental.py +220 -0
  22. tracdap/rt/api/hook.py +6 -4
  23. tracdap/rt/api/model_api.py +98 -13
  24. tracdap/rt/api/static_api.py +14 -6
  25. tracdap/rt/config/__init__.py +2 -2
  26. tracdap/rt/config/common.py +23 -17
  27. tracdap/rt/config/job.py +2 -2
  28. tracdap/rt/config/platform.py +25 -25
  29. tracdap/rt/config/result.py +2 -2
  30. tracdap/rt/config/runtime.py +3 -3
  31. tracdap/rt/launch/cli.py +7 -4
  32. tracdap/rt/launch/launch.py +19 -3
  33. tracdap/rt/metadata/__init__.py +25 -20
  34. tracdap/rt/metadata/common.py +2 -2
  35. tracdap/rt/metadata/custom.py +3 -3
  36. tracdap/rt/metadata/data.py +12 -12
  37. tracdap/rt/metadata/file.py +6 -6
  38. tracdap/rt/metadata/flow.py +6 -6
  39. tracdap/rt/metadata/job.py +62 -8
  40. tracdap/rt/metadata/model.py +33 -11
  41. tracdap/rt/metadata/object_id.py +8 -8
  42. tracdap/rt/metadata/resource.py +24 -0
  43. tracdap/rt/metadata/search.py +5 -5
  44. tracdap/rt/metadata/stoarge.py +6 -6
  45. tracdap/rt/metadata/tag.py +1 -1
  46. tracdap/rt/metadata/tag_update.py +1 -1
  47. tracdap/rt/metadata/type.py +4 -4
  48. {tracdap_runtime-0.6.3.dist-info → tracdap_runtime-0.6.5.dist-info}/METADATA +3 -1
  49. {tracdap_runtime-0.6.3.dist-info → tracdap_runtime-0.6.5.dist-info}/RECORD +52 -48
  50. {tracdap_runtime-0.6.3.dist-info → tracdap_runtime-0.6.5.dist-info}/LICENSE +0 -0
  51. {tracdap_runtime-0.6.3.dist-info → tracdap_runtime-0.6.5.dist-info}/WHEEL +0 -0
  52. {tracdap_runtime-0.6.3.dist-info → tracdap_runtime-0.6.5.dist-info}/top_level.txt +0 -0
@@ -17,7 +17,7 @@ from tracdap.rt._impl.grpc.tracdap.metadata import object_id_pb2 as tracdap_dot_
17
17
  from tracdap.rt._impl.grpc.tracdap.metadata import tag_update_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_tag__update__pb2
18
18
 
19
19
 
20
- 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\"\xe6\x01\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\x42\x0c\n\njobDetails\"\xac\x05\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\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\"\xae\x06\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\x30\n\x0boutputAttrs\x18\x07 \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\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\"\xd7\x01\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.TagUpdateB\x0f\n\r_packageGroup*_\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*\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\nB\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
20
+ 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\"\xd4\x02\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\x42\x0c\n\njobDetails\"\xac\x05\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\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\"\xae\x06\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\x30\n\x0boutputAttrs\x18\x07 \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\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\"\xd7\x01\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.TagUpdateB\x0f\n\r_packageGroup\"\x8d\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=\n\x07imports\x18\x07 \x03(\x0b\x32,.tracdap.metadata.ImportDataJob.ImportsEntry\x12\x30\n\x0boutputAttrs\x18\x08 \x03(\x0b\x32\x1b.tracdap.metadata.TagUpdate\x12\x30\n\x0bimportAttrs\x18\t \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\x1aM\n\x0cImportsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01\"\xdb\x06\n\rExportDataJob\x12,\n\x05model\x18\x01 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\x12\x43\n\nparameters\x18\x02 \x03(\x0b\x32/.tracdap.metadata.ExportDataJob.ParametersEntry\x12;\n\x06inputs\x18\x03 \x03(\x0b\x32+.tracdap.metadata.ExportDataJob.InputsEntry\x12=\n\x07outputs\x18\x04 \x03(\x0b\x32,.tracdap.metadata.ExportDataJob.OutputsEntry\x12G\n\x0cpriorOutputs\x18\x05 \x03(\x0b\x32\x31.tracdap.metadata.ExportDataJob.PriorOutputsEntry\x12\x15\n\rstorageAccess\x18\x06 \x03(\t\x12=\n\x07\x65xports\x18\x07 \x03(\x0b\x32,.tracdap.metadata.ExportDataJob.ExportsEntry\x12\x30\n\x0boutputAttrs\x18\x08 \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\x1aM\n\x0c\x45xportsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x05value\x18\x02 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector:\x02\x38\x01*p\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*\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\nB\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
21
21
 
22
22
  _globals = globals()
23
23
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -43,34 +43,78 @@ if _descriptor._USE_C_DESCRIPTORS == False:
43
43
  _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_options = b'8\001'
44
44
  _globals['_RUNFLOWJOB_MODELSENTRY']._options = None
45
45
  _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_options = b'8\001'
46
- _globals['_JOBTYPE']._serialized_start=2189
47
- _globals['_JOBTYPE']._serialized_end=2284
48
- _globals['_JOBSTATUSCODE']._serialized_start=2287
49
- _globals['_JOBSTATUSCODE']._serialized_end=2471
46
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._options = None
47
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_options = b'8\001'
48
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._options = None
49
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_options = b'8\001'
50
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._options = None
51
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_options = b'8\001'
52
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._options = None
53
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_options = b'8\001'
54
+ _globals['_IMPORTDATAJOB_IMPORTSENTRY']._options = None
55
+ _globals['_IMPORTDATAJOB_IMPORTSENTRY']._serialized_options = b'8\001'
56
+ _globals['_EXPORTDATAJOB_PARAMETERSENTRY']._options = None
57
+ _globals['_EXPORTDATAJOB_PARAMETERSENTRY']._serialized_options = b'8\001'
58
+ _globals['_EXPORTDATAJOB_INPUTSENTRY']._options = None
59
+ _globals['_EXPORTDATAJOB_INPUTSENTRY']._serialized_options = b'8\001'
60
+ _globals['_EXPORTDATAJOB_OUTPUTSENTRY']._options = None
61
+ _globals['_EXPORTDATAJOB_OUTPUTSENTRY']._serialized_options = b'8\001'
62
+ _globals['_EXPORTDATAJOB_PRIOROUTPUTSENTRY']._options = None
63
+ _globals['_EXPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_options = b'8\001'
64
+ _globals['_EXPORTDATAJOB_EXPORTSENTRY']._options = None
65
+ _globals['_EXPORTDATAJOB_EXPORTSENTRY']._serialized_options = b'8\001'
66
+ _globals['_JOBTYPE']._serialized_start=4073
67
+ _globals['_JOBTYPE']._serialized_end=4185
68
+ _globals['_JOBSTATUSCODE']._serialized_start=4188
69
+ _globals['_JOBSTATUSCODE']._serialized_end=4372
50
70
  _globals['_JOBDEFINITION']._serialized_start=235
51
- _globals['_JOBDEFINITION']._serialized_end=465
52
- _globals['_RUNMODELJOB']._serialized_start=468
53
- _globals['_RUNMODELJOB']._serialized_end=1152
54
- _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_start=837
55
- _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_end=911
56
- _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_start=913
57
- _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_end=989
58
- _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_start=991
59
- _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_end=1068
60
- _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_start=1070
61
- _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_end=1152
62
- _globals['_RUNFLOWJOB']._serialized_start=1155
63
- _globals['_RUNFLOWJOB']._serialized_end=1969
64
- _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_start=837
65
- _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_end=911
66
- _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_start=913
67
- _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_end=989
68
- _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_start=991
69
- _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_end=1068
70
- _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_start=1070
71
- _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_end=1152
72
- _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_start=1893
73
- _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_end=1969
74
- _globals['_IMPORTMODELJOB']._serialized_start=1972
75
- _globals['_IMPORTMODELJOB']._serialized_end=2187
71
+ _globals['_JOBDEFINITION']._serialized_end=575
72
+ _globals['_RUNMODELJOB']._serialized_start=578
73
+ _globals['_RUNMODELJOB']._serialized_end=1262
74
+ _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_start=947
75
+ _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_end=1021
76
+ _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_start=1023
77
+ _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_end=1099
78
+ _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_start=1101
79
+ _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_end=1178
80
+ _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_start=1180
81
+ _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_end=1262
82
+ _globals['_RUNFLOWJOB']._serialized_start=1265
83
+ _globals['_RUNFLOWJOB']._serialized_end=2079
84
+ _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_start=947
85
+ _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_end=1021
86
+ _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_start=1023
87
+ _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_end=1099
88
+ _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_start=1101
89
+ _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_end=1178
90
+ _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_start=1180
91
+ _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_end=1262
92
+ _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_start=2003
93
+ _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_end=2079
94
+ _globals['_IMPORTMODELJOB']._serialized_start=2082
95
+ _globals['_IMPORTMODELJOB']._serialized_end=2297
96
+ _globals['_IMPORTDATAJOB']._serialized_start=2300
97
+ _globals['_IMPORTDATAJOB']._serialized_end=3209
98
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_start=947
99
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_end=1021
100
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_start=1023
101
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_end=1099
102
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_start=1101
103
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_end=1178
104
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_start=1180
105
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_end=1262
106
+ _globals['_IMPORTDATAJOB_IMPORTSENTRY']._serialized_start=3132
107
+ _globals['_IMPORTDATAJOB_IMPORTSENTRY']._serialized_end=3209
108
+ _globals['_EXPORTDATAJOB']._serialized_start=3212
109
+ _globals['_EXPORTDATAJOB']._serialized_end=4071
110
+ _globals['_EXPORTDATAJOB_PARAMETERSENTRY']._serialized_start=947
111
+ _globals['_EXPORTDATAJOB_PARAMETERSENTRY']._serialized_end=1021
112
+ _globals['_EXPORTDATAJOB_INPUTSENTRY']._serialized_start=1023
113
+ _globals['_EXPORTDATAJOB_INPUTSENTRY']._serialized_end=1099
114
+ _globals['_EXPORTDATAJOB_OUTPUTSENTRY']._serialized_start=1101
115
+ _globals['_EXPORTDATAJOB_OUTPUTSENTRY']._serialized_end=1178
116
+ _globals['_EXPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_start=1180
117
+ _globals['_EXPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_end=1262
118
+ _globals['_EXPORTDATAJOB_EXPORTSENTRY']._serialized_start=3994
119
+ _globals['_EXPORTDATAJOB_EXPORTSENTRY']._serialized_end=4071
76
120
  # @@protoc_insertion_point(module_scope)
@@ -16,6 +16,7 @@ class JobType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
16
16
  RUN_FLOW: _ClassVar[JobType]
17
17
  IMPORT_MODEL: _ClassVar[JobType]
18
18
  IMPORT_DATA: _ClassVar[JobType]
19
+ EXPORT_DATA: _ClassVar[JobType]
19
20
 
20
21
  class JobStatusCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
21
22
  __slots__ = ()
@@ -35,6 +36,7 @@ RUN_MODEL: JobType
35
36
  RUN_FLOW: JobType
36
37
  IMPORT_MODEL: JobType
37
38
  IMPORT_DATA: JobType
39
+ EXPORT_DATA: JobType
38
40
  JOB_STATUS_CODE_NOT_SET: JobStatusCode
39
41
  PREPARING: JobStatusCode
40
42
  VALIDATED: JobStatusCode
@@ -48,16 +50,20 @@ FAILED: JobStatusCode
48
50
  CANCELLED: JobStatusCode
49
51
 
50
52
  class JobDefinition(_message.Message):
51
- __slots__ = ("jobType", "runModel", "runFlow", "importModel")
53
+ __slots__ = ("jobType", "runModel", "runFlow", "importModel", "importData", "exportData")
52
54
  JOBTYPE_FIELD_NUMBER: _ClassVar[int]
53
55
  RUNMODEL_FIELD_NUMBER: _ClassVar[int]
54
56
  RUNFLOW_FIELD_NUMBER: _ClassVar[int]
55
57
  IMPORTMODEL_FIELD_NUMBER: _ClassVar[int]
58
+ IMPORTDATA_FIELD_NUMBER: _ClassVar[int]
59
+ EXPORTDATA_FIELD_NUMBER: _ClassVar[int]
56
60
  jobType: JobType
57
61
  runModel: RunModelJob
58
62
  runFlow: RunFlowJob
59
63
  importModel: ImportModelJob
60
- def __init__(self, jobType: _Optional[_Union[JobType, str]] = ..., runModel: _Optional[_Union[RunModelJob, _Mapping]] = ..., runFlow: _Optional[_Union[RunFlowJob, _Mapping]] = ..., importModel: _Optional[_Union[ImportModelJob, _Mapping]] = ...) -> None: ...
64
+ importData: ImportDataJob
65
+ exportData: ExportDataJob
66
+ def __init__(self, jobType: _Optional[_Union[JobType, str]] = ..., runModel: _Optional[_Union[RunModelJob, _Mapping]] = ..., runFlow: _Optional[_Union[RunFlowJob, _Mapping]] = ..., importModel: _Optional[_Union[ImportModelJob, _Mapping]] = ..., importData: _Optional[_Union[ImportDataJob, _Mapping]] = ..., exportData: _Optional[_Union[ExportDataJob, _Mapping]] = ...) -> None: ...
61
67
 
62
68
  class RunModelJob(_message.Message):
63
69
  __slots__ = ("model", "parameters", "inputs", "outputs", "priorOutputs", "outputAttrs")
@@ -175,3 +181,115 @@ class ImportModelJob(_message.Message):
175
181
  path: str
176
182
  modelAttrs: _containers.RepeatedCompositeFieldContainer[_tag_update_pb2.TagUpdate]
177
183
  def __init__(self, language: _Optional[str] = ..., repository: _Optional[str] = ..., packageGroup: _Optional[str] = ..., package: _Optional[str] = ..., version: _Optional[str] = ..., entryPoint: _Optional[str] = ..., path: _Optional[str] = ..., modelAttrs: _Optional[_Iterable[_Union[_tag_update_pb2.TagUpdate, _Mapping]]] = ...) -> None: ...
184
+
185
+ class ImportDataJob(_message.Message):
186
+ __slots__ = ("model", "parameters", "inputs", "outputs", "priorOutputs", "storageAccess", "imports", "outputAttrs", "importAttrs")
187
+ class ParametersEntry(_message.Message):
188
+ __slots__ = ("key", "value")
189
+ KEY_FIELD_NUMBER: _ClassVar[int]
190
+ VALUE_FIELD_NUMBER: _ClassVar[int]
191
+ key: str
192
+ value: _type_pb2.Value
193
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_type_pb2.Value, _Mapping]] = ...) -> None: ...
194
+ class InputsEntry(_message.Message):
195
+ __slots__ = ("key", "value")
196
+ KEY_FIELD_NUMBER: _ClassVar[int]
197
+ VALUE_FIELD_NUMBER: _ClassVar[int]
198
+ key: str
199
+ value: _object_id_pb2.TagSelector
200
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
201
+ class OutputsEntry(_message.Message):
202
+ __slots__ = ("key", "value")
203
+ KEY_FIELD_NUMBER: _ClassVar[int]
204
+ VALUE_FIELD_NUMBER: _ClassVar[int]
205
+ key: str
206
+ value: _object_id_pb2.TagSelector
207
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
208
+ class PriorOutputsEntry(_message.Message):
209
+ __slots__ = ("key", "value")
210
+ KEY_FIELD_NUMBER: _ClassVar[int]
211
+ VALUE_FIELD_NUMBER: _ClassVar[int]
212
+ key: str
213
+ value: _object_id_pb2.TagSelector
214
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
215
+ class ImportsEntry(_message.Message):
216
+ __slots__ = ("key", "value")
217
+ KEY_FIELD_NUMBER: _ClassVar[int]
218
+ VALUE_FIELD_NUMBER: _ClassVar[int]
219
+ key: str
220
+ value: _object_id_pb2.TagSelector
221
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
222
+ MODEL_FIELD_NUMBER: _ClassVar[int]
223
+ PARAMETERS_FIELD_NUMBER: _ClassVar[int]
224
+ INPUTS_FIELD_NUMBER: _ClassVar[int]
225
+ OUTPUTS_FIELD_NUMBER: _ClassVar[int]
226
+ PRIOROUTPUTS_FIELD_NUMBER: _ClassVar[int]
227
+ STORAGEACCESS_FIELD_NUMBER: _ClassVar[int]
228
+ IMPORTS_FIELD_NUMBER: _ClassVar[int]
229
+ OUTPUTATTRS_FIELD_NUMBER: _ClassVar[int]
230
+ IMPORTATTRS_FIELD_NUMBER: _ClassVar[int]
231
+ model: _object_id_pb2.TagSelector
232
+ parameters: _containers.MessageMap[str, _type_pb2.Value]
233
+ inputs: _containers.MessageMap[str, _object_id_pb2.TagSelector]
234
+ outputs: _containers.MessageMap[str, _object_id_pb2.TagSelector]
235
+ priorOutputs: _containers.MessageMap[str, _object_id_pb2.TagSelector]
236
+ storageAccess: _containers.RepeatedScalarFieldContainer[str]
237
+ imports: _containers.MessageMap[str, _object_id_pb2.TagSelector]
238
+ outputAttrs: _containers.RepeatedCompositeFieldContainer[_tag_update_pb2.TagUpdate]
239
+ importAttrs: _containers.RepeatedCompositeFieldContainer[_tag_update_pb2.TagUpdate]
240
+ 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]] = ..., storageAccess: _Optional[_Iterable[str]] = ..., imports: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., outputAttrs: _Optional[_Iterable[_Union[_tag_update_pb2.TagUpdate, _Mapping]]] = ..., importAttrs: _Optional[_Iterable[_Union[_tag_update_pb2.TagUpdate, _Mapping]]] = ...) -> None: ...
241
+
242
+ class ExportDataJob(_message.Message):
243
+ __slots__ = ("model", "parameters", "inputs", "outputs", "priorOutputs", "storageAccess", "exports", "outputAttrs")
244
+ class ParametersEntry(_message.Message):
245
+ __slots__ = ("key", "value")
246
+ KEY_FIELD_NUMBER: _ClassVar[int]
247
+ VALUE_FIELD_NUMBER: _ClassVar[int]
248
+ key: str
249
+ value: _type_pb2.Value
250
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_type_pb2.Value, _Mapping]] = ...) -> None: ...
251
+ class InputsEntry(_message.Message):
252
+ __slots__ = ("key", "value")
253
+ KEY_FIELD_NUMBER: _ClassVar[int]
254
+ VALUE_FIELD_NUMBER: _ClassVar[int]
255
+ key: str
256
+ value: _object_id_pb2.TagSelector
257
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
258
+ class OutputsEntry(_message.Message):
259
+ __slots__ = ("key", "value")
260
+ KEY_FIELD_NUMBER: _ClassVar[int]
261
+ VALUE_FIELD_NUMBER: _ClassVar[int]
262
+ key: str
263
+ value: _object_id_pb2.TagSelector
264
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
265
+ class PriorOutputsEntry(_message.Message):
266
+ __slots__ = ("key", "value")
267
+ KEY_FIELD_NUMBER: _ClassVar[int]
268
+ VALUE_FIELD_NUMBER: _ClassVar[int]
269
+ key: str
270
+ value: _object_id_pb2.TagSelector
271
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
272
+ class ExportsEntry(_message.Message):
273
+ __slots__ = ("key", "value")
274
+ KEY_FIELD_NUMBER: _ClassVar[int]
275
+ VALUE_FIELD_NUMBER: _ClassVar[int]
276
+ key: str
277
+ value: _object_id_pb2.TagSelector
278
+ def __init__(self, key: _Optional[str] = ..., value: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
279
+ MODEL_FIELD_NUMBER: _ClassVar[int]
280
+ PARAMETERS_FIELD_NUMBER: _ClassVar[int]
281
+ INPUTS_FIELD_NUMBER: _ClassVar[int]
282
+ OUTPUTS_FIELD_NUMBER: _ClassVar[int]
283
+ PRIOROUTPUTS_FIELD_NUMBER: _ClassVar[int]
284
+ STORAGEACCESS_FIELD_NUMBER: _ClassVar[int]
285
+ EXPORTS_FIELD_NUMBER: _ClassVar[int]
286
+ OUTPUTATTRS_FIELD_NUMBER: _ClassVar[int]
287
+ model: _object_id_pb2.TagSelector
288
+ parameters: _containers.MessageMap[str, _type_pb2.Value]
289
+ inputs: _containers.MessageMap[str, _object_id_pb2.TagSelector]
290
+ outputs: _containers.MessageMap[str, _object_id_pb2.TagSelector]
291
+ priorOutputs: _containers.MessageMap[str, _object_id_pb2.TagSelector]
292
+ storageAccess: _containers.RepeatedScalarFieldContainer[str]
293
+ exports: _containers.MessageMap[str, _object_id_pb2.TagSelector]
294
+ outputAttrs: _containers.RepeatedCompositeFieldContainer[_tag_update_pb2.TagUpdate]
295
+ 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]] = ..., storageAccess: _Optional[_Iterable[str]] = ..., exports: _Optional[_Mapping[str, _object_id_pb2.TagSelector]] = ..., outputAttrs: _Optional[_Iterable[_Union[_tag_update_pb2.TagUpdate, _Mapping]]] = ...) -> None: ...
@@ -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\"\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')
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\"\x9b\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\x0f\n\x07\x64ynamic\x18\x05 \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\"\xa0\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\x12\x0f\n\x07\x64ynamic\x18\x05 \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\"\xce\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\x12.\n\tmodelType\x18\r \x01(\x0e\x32\x1b.tracdap.metadata.ModelType\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_path*M\n\tModelType\x12\x12\n\x0eSTANDARD_MODEL\x10\x00\x12\x15\n\x11\x44\x41TA_IMPORT_MODEL\x10\x01\x12\x15\n\x11\x44\x41TA_EXPORT_MODEL\x10\x02\x42\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
20
20
 
21
21
  _globals = globals()
22
22
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -38,26 +38,28 @@ if _descriptor._USE_C_DESCRIPTORS == False:
38
38
  _globals['_MODELDEFINITION_OUTPUTSENTRY']._serialized_options = b'8\001'
39
39
  _globals['_MODELDEFINITION_STATICATTRIBUTESENTRY']._options = None
40
40
  _globals['_MODELDEFINITION_STATICATTRIBUTESENTRY']._serialized_options = b'8\001'
41
+ _globals['_MODELTYPE']._serialized_start=1902
42
+ _globals['_MODELTYPE']._serialized_end=1979
41
43
  _globals['_MODELPARAMETER']._serialized_start=175
42
44
  _globals['_MODELPARAMETER']._serialized_end=474
43
45
  _globals['_MODELPARAMETER_PARAMPROPSENTRY']._serialized_start=383
44
46
  _globals['_MODELPARAMETER_PARAMPROPSENTRY']._serialized_end=457
45
47
  _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
48
+ _globals['_MODELINPUTSCHEMA']._serialized_end=760
49
+ _globals['_MODELINPUTSCHEMA_INPUTPROPSENTRY']._serialized_start=676
50
+ _globals['_MODELINPUTSCHEMA_INPUTPROPSENTRY']._serialized_end=750
51
+ _globals['_MODELOUTPUTSCHEMA']._serialized_start=763
52
+ _globals['_MODELOUTPUTSCHEMA']._serialized_end=1051
53
+ _globals['_MODELOUTPUTSCHEMA_OUTPUTPROPSENTRY']._serialized_start=966
54
+ _globals['_MODELOUTPUTSCHEMA_OUTPUTPROPSENTRY']._serialized_end=1041
55
+ _globals['_MODELDEFINITION']._serialized_start=1054
56
+ _globals['_MODELDEFINITION']._serialized_end=1900
57
+ _globals['_MODELDEFINITION_PARAMETERSENTRY']._serialized_start=1541
58
+ _globals['_MODELDEFINITION_PARAMETERSENTRY']._serialized_end=1624
59
+ _globals['_MODELDEFINITION_INPUTSENTRY']._serialized_start=1626
60
+ _globals['_MODELDEFINITION_INPUTSENTRY']._serialized_end=1707
61
+ _globals['_MODELDEFINITION_OUTPUTSENTRY']._serialized_start=1709
62
+ _globals['_MODELDEFINITION_OUTPUTSENTRY']._serialized_end=1792
63
+ _globals['_MODELDEFINITION_STATICATTRIBUTESENTRY']._serialized_start=1794
64
+ _globals['_MODELDEFINITION_STATICATTRIBUTESENTRY']._serialized_end=1874
63
65
  # @@protoc_insertion_point(module_scope)
@@ -1,12 +1,22 @@
1
1
  from tracdap.rt._impl.grpc.tracdap.metadata import type_pb2 as _type_pb2
2
2
  from tracdap.rt._impl.grpc.tracdap.metadata import data_pb2 as _data_pb2
3
3
  from google.protobuf.internal import containers as _containers
4
+ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
4
5
  from google.protobuf import descriptor as _descriptor
5
6
  from google.protobuf import message as _message
6
7
  from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
7
8
 
8
9
  DESCRIPTOR: _descriptor.FileDescriptor
9
10
 
11
+ class ModelType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
12
+ __slots__ = ()
13
+ STANDARD_MODEL: _ClassVar[ModelType]
14
+ DATA_IMPORT_MODEL: _ClassVar[ModelType]
15
+ DATA_EXPORT_MODEL: _ClassVar[ModelType]
16
+ STANDARD_MODEL: ModelType
17
+ DATA_IMPORT_MODEL: ModelType
18
+ DATA_EXPORT_MODEL: ModelType
19
+
10
20
  class ModelParameter(_message.Message):
11
21
  __slots__ = ("paramType", "label", "defaultValue", "paramProps")
12
22
  class ParamPropsEntry(_message.Message):
@@ -27,7 +37,7 @@ class ModelParameter(_message.Message):
27
37
  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: ...
28
38
 
29
39
  class ModelInputSchema(_message.Message):
30
- __slots__ = ("schema", "label", "optional", "inputProps")
40
+ __slots__ = ("schema", "label", "optional", "dynamic", "inputProps")
31
41
  class InputPropsEntry(_message.Message):
32
42
  __slots__ = ("key", "value")
33
43
  KEY_FIELD_NUMBER: _ClassVar[int]
@@ -38,15 +48,17 @@ class ModelInputSchema(_message.Message):
38
48
  SCHEMA_FIELD_NUMBER: _ClassVar[int]
39
49
  LABEL_FIELD_NUMBER: _ClassVar[int]
40
50
  OPTIONAL_FIELD_NUMBER: _ClassVar[int]
51
+ DYNAMIC_FIELD_NUMBER: _ClassVar[int]
41
52
  INPUTPROPS_FIELD_NUMBER: _ClassVar[int]
42
53
  schema: _data_pb2.SchemaDefinition
43
54
  label: str
44
55
  optional: bool
56
+ dynamic: bool
45
57
  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: ...
58
+ def __init__(self, schema: _Optional[_Union[_data_pb2.SchemaDefinition, _Mapping]] = ..., label: _Optional[str] = ..., optional: bool = ..., dynamic: bool = ..., inputProps: _Optional[_Mapping[str, _type_pb2.Value]] = ...) -> None: ...
47
59
 
48
60
  class ModelOutputSchema(_message.Message):
49
- __slots__ = ("schema", "label", "optional", "outputProps")
61
+ __slots__ = ("schema", "label", "optional", "dynamic", "outputProps")
50
62
  class OutputPropsEntry(_message.Message):
51
63
  __slots__ = ("key", "value")
52
64
  KEY_FIELD_NUMBER: _ClassVar[int]
@@ -57,15 +69,17 @@ class ModelOutputSchema(_message.Message):
57
69
  SCHEMA_FIELD_NUMBER: _ClassVar[int]
58
70
  LABEL_FIELD_NUMBER: _ClassVar[int]
59
71
  OPTIONAL_FIELD_NUMBER: _ClassVar[int]
72
+ DYNAMIC_FIELD_NUMBER: _ClassVar[int]
60
73
  OUTPUTPROPS_FIELD_NUMBER: _ClassVar[int]
61
74
  schema: _data_pb2.SchemaDefinition
62
75
  label: str
63
76
  optional: bool
77
+ dynamic: bool
64
78
  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: ...
79
+ def __init__(self, schema: _Optional[_Union[_data_pb2.SchemaDefinition, _Mapping]] = ..., label: _Optional[str] = ..., optional: bool = ..., dynamic: bool = ..., outputProps: _Optional[_Mapping[str, _type_pb2.Value]] = ...) -> None: ...
66
80
 
67
81
  class ModelDefinition(_message.Message):
68
- __slots__ = ("language", "repository", "packageGroup", "package", "version", "entryPoint", "path", "parameters", "inputs", "outputs", "staticAttributes")
82
+ __slots__ = ("language", "repository", "packageGroup", "package", "version", "entryPoint", "path", "parameters", "inputs", "outputs", "staticAttributes", "modelType")
69
83
  class ParametersEntry(_message.Message):
70
84
  __slots__ = ("key", "value")
71
85
  KEY_FIELD_NUMBER: _ClassVar[int]
@@ -105,6 +119,7 @@ class ModelDefinition(_message.Message):
105
119
  INPUTS_FIELD_NUMBER: _ClassVar[int]
106
120
  OUTPUTS_FIELD_NUMBER: _ClassVar[int]
107
121
  STATICATTRIBUTES_FIELD_NUMBER: _ClassVar[int]
122
+ MODELTYPE_FIELD_NUMBER: _ClassVar[int]
108
123
  language: str
109
124
  repository: str
110
125
  packageGroup: str
@@ -116,4 +131,5 @@ class ModelDefinition(_message.Message):
116
131
  inputs: _containers.MessageMap[str, ModelInputSchema]
117
132
  outputs: _containers.MessageMap[str, ModelOutputSchema]
118
133
  staticAttributes: _containers.MessageMap[str, _type_pb2.Value]
119
- def __init__(self, language: _Optional[str] = ..., repository: _Optional[str] = ..., packageGroup: _Optional[str] = ..., package: _Optional[str] = ..., version: _Optional[str] = ..., entryPoint: _Optional[str] = ..., path: _Optional[str] = ..., parameters: _Optional[_Mapping[str, ModelParameter]] = ..., inputs: _Optional[_Mapping[str, ModelInputSchema]] = ..., outputs: _Optional[_Mapping[str, ModelOutputSchema]] = ..., staticAttributes: _Optional[_Mapping[str, _type_pb2.Value]] = ...) -> None: ...
134
+ modelType: ModelType
135
+ def __init__(self, language: _Optional[str] = ..., repository: _Optional[str] = ..., packageGroup: _Optional[str] = ..., package: _Optional[str] = ..., version: _Optional[str] = ..., entryPoint: _Optional[str] = ..., path: _Optional[str] = ..., parameters: _Optional[_Mapping[str, ModelParameter]] = ..., inputs: _Optional[_Mapping[str, ModelInputSchema]] = ..., outputs: _Optional[_Mapping[str, ModelOutputSchema]] = ..., staticAttributes: _Optional[_Mapping[str, _type_pb2.Value]] = ..., modelType: _Optional[_Union[ModelType, str]] = ...) -> None: ...
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: tracdap/rt/_impl/grpc/tracdap/metadata/resource.proto
4
+ # Protobuf Python Version: 4.25.3
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
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 object_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_object__pb2
17
+
18
+
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n5tracdap/rt/_impl/grpc/tracdap/metadata/resource.proto\x12\x10tracdap.metadata\x1a\x36tracdap/rt/_impl/grpc/tracdap/metadata/object_id.proto\x1a\x33tracdap/rt/_impl/grpc/tracdap/metadata/object.proto*m\n\x0cResourceType\x12\x19\n\x15RESOURCE_TYPE_NOT_SET\x10\x00\x12\x14\n\x10MODEL_REPOSITORY\x10\x01\x12\x14\n\x10INTERNAL_STORAGE\x10\x02\"\x04\x08\x03\x10\x03*\x10\x45XTERNAL_STORAGEB\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
20
+
21
+ _globals = globals()
22
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
23
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tracdap.rt._impl.grpc.tracdap.metadata.resource_pb2', _globals)
24
+ if _descriptor._USE_C_DESCRIPTORS == False:
25
+ _globals['DESCRIPTOR']._options = None
26
+ _globals['DESCRIPTOR']._serialized_options = b'\n\032org.finos.tracdap.metadataP\001'
27
+ _globals['_RESOURCETYPE']._serialized_start=184
28
+ _globals['_RESOURCETYPE']._serialized_end=293
29
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,16 @@
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 object_pb2 as _object_pb2
3
+ from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
4
+ from google.protobuf import descriptor as _descriptor
5
+ from typing import ClassVar as _ClassVar
6
+
7
+ DESCRIPTOR: _descriptor.FileDescriptor
8
+
9
+ class ResourceType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
10
+ __slots__ = ()
11
+ RESOURCE_TYPE_NOT_SET: _ClassVar[ResourceType]
12
+ MODEL_REPOSITORY: _ClassVar[ResourceType]
13
+ INTERNAL_STORAGE: _ClassVar[ResourceType]
14
+ RESOURCE_TYPE_NOT_SET: ResourceType
15
+ MODEL_REPOSITORY: ResourceType
16
+ INTERNAL_STORAGE: ResourceType
@@ -19,6 +19,7 @@ import pathlib
19
19
  import copy
20
20
 
21
21
  import tracdap.rt.api as _api
22
+ import tracdap.rt.api.experimental as _eapi
22
23
  import tracdap.rt.metadata as _meta
23
24
  import tracdap.rt.config as _cfg
24
25
  import tracdap.rt.exceptions as _ex
@@ -208,6 +209,13 @@ class ModelLoader:
208
209
  model_def.inputs = inputs
209
210
  model_def.outputs = outputs
210
211
 
212
+ if isinstance(model, _eapi.TracDataImport):
213
+ model_def.modelType = _meta.ModelType.DATA_IMPORT_MODEL
214
+ elif isinstance(model, _eapi.TracDataExport):
215
+ model_def.modelType = _meta.ModelType.DATA_EXPORT_MODEL
216
+ else:
217
+ model_def.modelType = _meta.ModelType.STANDARD_MODEL
218
+
211
219
  _val.quick_validate_model_def(model_def)
212
220
 
213
221
  for attr_name, attr_value in attributes.items():
@@ -17,6 +17,7 @@ import types as _ts
17
17
 
18
18
  import tracdap.rt.metadata as _meta
19
19
  import tracdap.rt.exceptions as _ex
20
+ import tracdap.rt._impl.data as _data
20
21
  import tracdap.rt._impl.schemas as _schemas
21
22
  import tracdap.rt._impl.type_system as _type_system
22
23
  import tracdap.rt._impl.validation as _val
@@ -152,35 +153,66 @@ class StaticApiImpl(_StaticApiHook):
152
153
 
153
154
  return _schemas.SchemaLoader.load_schema(package, schema_file)
154
155
 
156
+ def infer_schema(self, dataset: _tp.Any) -> _meta.SchemaDefinition:
157
+
158
+ if _data.pandas and isinstance(dataset, _data.pandas.DataFrame):
159
+ arrow_schema = _data.DataMapping.pandas_to_arrow_schema(dataset)
160
+
161
+ elif _data.polars and isinstance(dataset, _data.polars.DataFrame):
162
+ arrow_schema = _data.DataMapping.polars_to_arrow_schema(dataset)
163
+
164
+ else:
165
+ dataset_type = f"{type(dataset).__module__}.{type(dataset).__name__}"
166
+ message = f"Schema inference is not available for dataset type [{dataset_type}]"
167
+ raise _ex.ERuntimeValidation(message)
168
+
169
+ return _data.DataMapping.arrow_to_trac_schema(arrow_schema)
170
+
155
171
  def define_input_table(
156
172
  self, *fields: _tp.Union[_meta.FieldSchema, _tp.List[_meta.FieldSchema]],
157
- label: _tp.Optional[str] = None,
158
- optional: bool = False,
173
+ label: _tp.Optional[str] = None, optional: bool = False, dynamic: bool = False,
159
174
  input_props: _tp.Optional[_tp.Dict[str, _tp.Any]] = None) \
160
175
  -> _meta.ModelInputSchema:
161
176
 
162
177
  _val.validate_signature(
163
178
  self.define_input_table, *fields,
164
- label=label, optional=optional,
179
+ label=label, optional=optional, dynamic=dynamic,
165
180
  input_props=input_props)
166
181
 
167
- schema_def = self.define_schema(*fields, schema_type=_meta.SchemaType.TABLE)
168
- return _meta.ModelInputSchema(schema=schema_def, label=label, optional=optional, inputProps=input_props)
182
+ # Do not define details for dynamic schemas
183
+
184
+ if dynamic:
185
+ schema_def = _meta.SchemaDefinition(_meta.SchemaType.TABLE)
186
+ else:
187
+ schema_def = self.define_schema(*fields, schema_type=_meta.SchemaType.TABLE)
188
+
189
+ return _meta.ModelInputSchema(
190
+ schema=schema_def, label=label,
191
+ optional=optional, dynamic=dynamic,
192
+ inputProps=input_props)
169
193
 
170
194
  def define_output_table(
171
195
  self, *fields: _tp.Union[_meta.FieldSchema, _tp.List[_meta.FieldSchema]],
172
- label: _tp.Optional[str] = None,
173
- optional: bool = False,
196
+ label: _tp.Optional[str] = None, optional: bool = False, dynamic: bool = False,
174
197
  output_props: _tp.Optional[_tp.Dict[str, _tp.Any]] = None) \
175
198
  -> _meta.ModelOutputSchema:
176
199
 
177
200
  _val.validate_signature(
178
201
  self.define_output_table, *fields,
179
- label=label, optional=optional,
202
+ label=label, optional=optional, dynamic=dynamic,
180
203
  output_props=output_props)
181
204
 
182
- schema_def = self.define_schema(*fields, schema_type=_meta.SchemaType.TABLE)
183
- return _meta.ModelOutputSchema(schema=schema_def, label=label, optional=optional, outputProps=output_props)
205
+ # Do not define details for dynamic schemas
206
+
207
+ if dynamic:
208
+ schema_def = _meta.SchemaDefinition(_meta.SchemaType.TABLE)
209
+ else:
210
+ schema_def = self.define_schema(*fields, schema_type=_meta.SchemaType.TABLE)
211
+
212
+ return _meta.ModelOutputSchema(
213
+ schema=schema_def, label=label,
214
+ optional=optional, dynamic=dynamic,
215
+ outputProps=output_props)
184
216
 
185
217
  @staticmethod
186
218
  def _build_named_dict(