tracdap-runtime 0.11.1.dev0__tar.gz → 0.12.0.dev3__tar.gz

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 (141) hide show
  1. {tracdap_runtime-0.11.1.dev0/tracdap_runtime.egg-info → tracdap_runtime-0.12.0.dev3}/PKG-INFO +1 -1
  2. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/setup.cfg +1 -1
  3. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/__init__.py +1 -1
  4. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/exec/dev_mode.py +55 -6
  5. tracdap_runtime-0.12.0.dev3/src/tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py +165 -0
  6. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi +22 -4
  7. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.py +5 -3
  8. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.pyi +8 -1
  9. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/api/__init__.py +1 -1
  10. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/__init__.py +33 -32
  11. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/flow.py +16 -0
  12. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/job.py +4 -0
  13. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/tag_update.py +20 -0
  14. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3/tracdap_runtime.egg-info}/PKG-INFO +1 -1
  15. tracdap_runtime-0.11.1.dev0/src/tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py +0 -157
  16. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/LICENSE +0 -0
  17. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/README.md +0 -0
  18. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/pyproject.toml +0 -0
  19. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/__init__.py +0 -0
  20. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/__init__.py +0 -0
  21. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/capture.py +0 -0
  22. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/config_parser.py +0 -0
  23. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/data.py +0 -0
  24. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/file_formats.py +0 -0
  25. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/guard_rails.py +0 -0
  26. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/logging.py +0 -0
  27. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/models.py +0 -0
  28. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/network.py +0 -0
  29. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/placement.py +0 -0
  30. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/plugins.py +0 -0
  31. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/repos.py +0 -0
  32. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/resources.py +0 -0
  33. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/schemas.py +0 -0
  34. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/shim.py +0 -0
  35. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/storage.py +0 -0
  36. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/struct.py +0 -0
  37. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/type_system.py +0 -0
  38. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/util.py +0 -0
  39. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/core/validation.py +0 -0
  40. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/exec/__init__.py +0 -0
  41. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/exec/actors.py +0 -0
  42. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/exec/context.py +0 -0
  43. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/exec/engine.py +0 -0
  44. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/exec/functions.py +0 -0
  45. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/exec/graph.py +0 -0
  46. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/exec/graph_builder.py +0 -0
  47. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/ext/__init__.py +0 -0
  48. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/ext/sql.py +0 -0
  49. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/ext/storage.py +0 -0
  50. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/__init__.py +0 -0
  51. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/codec.py +0 -0
  52. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/server.py +0 -0
  53. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2.py +0 -0
  54. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2.pyi +0 -0
  55. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2_grpc.py +0 -0
  56. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/common_pb2.py +0 -0
  57. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/common_pb2.pyi +0 -0
  58. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/config_pb2.py +0 -0
  59. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/config_pb2.pyi +0 -0
  60. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/custom_pb2.py +0 -0
  61. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/custom_pb2.pyi +0 -0
  62. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/data_pb2.py +0 -0
  63. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/data_pb2.pyi +0 -0
  64. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.py +0 -0
  65. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.pyi +0 -0
  66. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.py +0 -0
  67. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.pyi +0 -0
  68. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.py +0 -0
  69. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.pyi +0 -0
  70. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.py +0 -0
  71. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.pyi +0 -0
  72. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.py +0 -0
  73. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.pyi +0 -0
  74. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/resource_pb2.py +0 -0
  75. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/resource_pb2.pyi +0 -0
  76. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/search_pb2.py +0 -0
  77. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/search_pb2.pyi +0 -0
  78. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/storage_pb2.py +0 -0
  79. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/storage_pb2.pyi +0 -0
  80. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/tag_pb2.py +0 -0
  81. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/tag_pb2.pyi +0 -0
  82. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/type_pb2.py +0 -0
  83. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/grpc/tracdap/metadata/type_pb2.pyi +0 -0
  84. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/runtime.py +0 -0
  85. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_impl/static_api.py +0 -0
  86. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/__init__.py +0 -0
  87. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/_helpers.py +0 -0
  88. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/config_local.py +0 -0
  89. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/format_arrow.py +0 -0
  90. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/format_csv.py +0 -0
  91. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/format_parquet.py +0 -0
  92. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/repo_local.py +0 -0
  93. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/storage_aws.py +0 -0
  94. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/storage_azure.py +0 -0
  95. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/storage_gcp.py +0 -0
  96. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/storage_local.py +0 -0
  97. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/storage_sql.py +0 -0
  98. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/_plugins/storage_sql_dialects.py +0 -0
  99. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/api/constants.py +0 -0
  100. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/api/experimental.py +0 -0
  101. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/api/hook.py +0 -0
  102. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/api/model_api.py +0 -0
  103. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/api/static_api.py +0 -0
  104. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/config/__init__.py +7 -7
  105. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/config/common.py +0 -0
  106. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/config/dynamic.py +0 -0
  107. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/config/job.py +0 -0
  108. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/config/platform.py +0 -0
  109. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/config/result.py +0 -0
  110. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/config/runtime.py +0 -0
  111. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/config/tenant.py +0 -0
  112. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/exceptions.py +0 -0
  113. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/ext/__init__.py +0 -0
  114. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/ext/config.py +0 -0
  115. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/ext/embed.py +0 -0
  116. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/ext/external.py +0 -0
  117. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/ext/plugins.py +0 -0
  118. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/ext/repos.py +0 -0
  119. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/ext/storage.py +0 -0
  120. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/ext/util.py +0 -0
  121. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/launch/__init__.py +0 -0
  122. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/launch/__main__.py +0 -0
  123. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/launch/cli.py +0 -0
  124. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/launch/launch.py +0 -0
  125. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/common.py +0 -0
  126. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/config.py +0 -0
  127. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/custom.py +0 -0
  128. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/data.py +0 -0
  129. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/file.py +0 -0
  130. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/model.py +0 -0
  131. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/object.py +0 -0
  132. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/object_id.py +0 -0
  133. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/resource.py +0 -0
  134. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/search.py +0 -0
  135. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/storage.py +0 -0
  136. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/tag.py +0 -0
  137. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/src/tracdap/rt/metadata/type.py +0 -0
  138. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/tracdap_runtime.egg-info/SOURCES.txt +0 -0
  139. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/tracdap_runtime.egg-info/dependency_links.txt +0 -0
  140. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/tracdap_runtime.egg-info/requires.txt +0 -0
  141. {tracdap_runtime-0.11.1.dev0 → tracdap_runtime-0.12.0.dev3}/tracdap_runtime.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tracdap-runtime
3
- Version: 0.11.1.dev0
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,6 +1,6 @@
1
1
  [metadata]
2
2
  name = tracdap-runtime
3
- version = 0.11.1.dev0
3
+ version = 0.12.0.dev3
4
4
  license = Apache-2.0
5
5
  platform = any
6
6
  description = Portable, production-grade models in Python
@@ -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.11.1.dev0"
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],
@@ -0,0 +1,165 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
4
+ # source: tracdap/rt/_impl/grpc/tracdap/metadata/job.proto
5
+ # Protobuf Python Version: 6.30.2
6
+ """Generated protocol buffer code."""
7
+ from google.protobuf import descriptor as _descriptor
8
+ from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
10
+ from google.protobuf import symbol_database as _symbol_database
11
+ from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 6,
15
+ 30,
16
+ 2,
17
+ '',
18
+ 'tracdap/rt/_impl/grpc/tracdap/metadata/job.proto'
19
+ )
20
+ # @@protoc_insertion_point(imports)
21
+
22
+ _sym_db = _symbol_database.Default()
23
+
24
+
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
+ 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
27
+ 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
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
+
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\"\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
+
33
+ _globals = globals()
34
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
35
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tracdap.rt._impl.grpc.tracdap.metadata.job_pb2', _globals)
36
+ if not _descriptor._USE_C_DESCRIPTORS:
37
+ _globals['DESCRIPTOR']._loaded_options = None
38
+ _globals['DESCRIPTOR']._serialized_options = b'\n\032org.finos.tracdap.metadataP\001'
39
+ _globals['_RESULTDEFINITION_OUTPUTSENTRY']._loaded_options = None
40
+ _globals['_RESULTDEFINITION_OUTPUTSENTRY']._serialized_options = b'8\001'
41
+ _globals['_RESULTDEFINITION_PLACEMENTSENTRY']._loaded_options = None
42
+ _globals['_RESULTDEFINITION_PLACEMENTSENTRY']._serialized_options = b'8\001'
43
+ _globals['_RUNMODELJOB_PARAMETERSENTRY']._loaded_options = None
44
+ _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_options = b'8\001'
45
+ _globals['_RUNMODELJOB_INPUTSENTRY']._loaded_options = None
46
+ _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_options = b'8\001'
47
+ _globals['_RUNMODELJOB_OUTPUTSENTRY']._loaded_options = None
48
+ _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_options = b'8\001'
49
+ _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._loaded_options = None
50
+ _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_options = b'8\001'
51
+ _globals['_RUNMODELJOB_RESOURCESENTRY']._loaded_options = None
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'
55
+ _globals['_RUNFLOWJOB_PARAMETERSENTRY']._loaded_options = None
56
+ _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_options = b'8\001'
57
+ _globals['_RUNFLOWJOB_INPUTSENTRY']._loaded_options = None
58
+ _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_options = b'8\001'
59
+ _globals['_RUNFLOWJOB_OUTPUTSENTRY']._loaded_options = None
60
+ _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_options = b'8\001'
61
+ _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._loaded_options = None
62
+ _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_options = b'8\001'
63
+ _globals['_RUNFLOWJOB_MODELSENTRY']._loaded_options = None
64
+ _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_options = b'8\001'
65
+ _globals['_RUNFLOWJOB_RESOURCESENTRY']._loaded_options = None
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'
69
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._loaded_options = None
70
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_options = b'8\001'
71
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._loaded_options = None
72
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_options = b'8\001'
73
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._loaded_options = None
74
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_options = b'8\001'
75
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._loaded_options = None
76
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_options = b'8\001'
77
+ _globals['_IMPORTDATAJOB_CAPTURESENTRY']._loaded_options = None
78
+ _globals['_IMPORTDATAJOB_CAPTURESENTRY']._serialized_options = b'8\001'
79
+ _globals['_EXTERNALLOCATION_LOCATIONDETAILSENTRY']._loaded_options = None
80
+ _globals['_EXTERNALLOCATION_LOCATIONDETAILSENTRY']._serialized_options = b'8\001'
81
+ _globals['_EXPORTDATAJOB_PLACEMENTSENTRY']._loaded_options = None
82
+ _globals['_EXPORTDATAJOB_PLACEMENTSENTRY']._serialized_options = b'8\001'
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
93
+ _globals['_JOBDEFINITION']._serialized_start=286
94
+ _globals['_JOBDEFINITION']._serialized_end=723
95
+ _globals['_RESULTDEFINITION']._serialized_start=726
96
+ _globals['_RESULTDEFINITION']._serialized_end=1238
97
+ _globals['_RESULTDEFINITION_OUTPUTSENTRY']._serialized_start=1061
98
+ _globals['_RESULTDEFINITION_OUTPUTSENTRY']._serialized_end=1138
99
+ _globals['_RESULTDEFINITION_PLACEMENTSENTRY']._serialized_start=1140
100
+ _globals['_RESULTDEFINITION_PLACEMENTSENTRY']._serialized_end=1224
101
+ _globals['_PLACEMENTRECORD']._serialized_start=1241
102
+ _globals['_PLACEMENTRECORD']._serialized_end=1428
103
+ _globals['_RUNMODELJOB']._serialized_start=1431
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
109
+ _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_start=1061
110
+ _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_end=1138
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
123
+ _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_start=1061
124
+ _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_end=1138
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
141
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_start=1061
142
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_end=1138
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
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.11.1.dev0"
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
@@ -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.11.1.dev0
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