tracdap-runtime 0.8.0b1__py3-none-any.whl → 0.8.0b3__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 (48) hide show
  1. tracdap/rt/_impl/core/__init__.py +14 -0
  2. tracdap/rt/_impl/{config_parser.py → core/config_parser.py} +14 -7
  3. tracdap/rt/_impl/{data.py → core/data.py} +3 -3
  4. tracdap/rt/_impl/core/logging.py +195 -0
  5. tracdap/rt/_impl/{models.py → core/models.py} +7 -6
  6. tracdap/rt/_impl/{repos.py → core/repos.py} +5 -3
  7. tracdap/rt/_impl/{schemas.py → core/schemas.py} +5 -5
  8. tracdap/rt/_impl/{shim.py → core/shim.py} +5 -4
  9. tracdap/rt/_impl/{storage.py → core/storage.py} +7 -6
  10. tracdap/rt/_impl/{util.py → core/util.py} +0 -110
  11. tracdap/rt/_impl/{validation.py → core/validation.py} +4 -3
  12. tracdap/rt/_impl/exec/__init__.py +14 -0
  13. tracdap/rt/{_exec → _impl/exec}/actors.py +12 -14
  14. tracdap/rt/{_exec → _impl/exec}/context.py +30 -14
  15. tracdap/rt/{_exec → _impl/exec}/dev_mode.py +8 -7
  16. tracdap/rt/{_exec → _impl/exec}/engine.py +227 -104
  17. tracdap/rt/{_exec → _impl/exec}/functions.py +36 -57
  18. tracdap/rt/{_exec → _impl/exec}/graph.py +2 -21
  19. tracdap/rt/{_exec → _impl/exec}/graph_builder.py +33 -19
  20. tracdap/rt/{_exec → _impl/grpc}/server.py +7 -6
  21. tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py +64 -62
  22. tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi +16 -2
  23. tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.py +3 -3
  24. tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.pyi +2 -0
  25. tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.py +4 -4
  26. tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.pyi +4 -2
  27. tracdap/rt/{_exec → _impl}/runtime.py +13 -12
  28. tracdap/rt/_impl/static_api.py +4 -4
  29. tracdap/rt/_plugins/format_csv.py +1 -1
  30. tracdap/rt/_plugins/storage_sql.py +1 -1
  31. tracdap/rt/_version.py +1 -1
  32. tracdap/rt/config/__init__.py +1 -0
  33. tracdap/rt/config/platform.py +8 -0
  34. tracdap/rt/ext/embed.py +2 -2
  35. tracdap/rt/ext/plugins.py +3 -3
  36. tracdap/rt/launch/launch.py +3 -3
  37. tracdap/rt/metadata/__init__.py +1 -0
  38. tracdap/rt/metadata/job.py +16 -0
  39. tracdap/rt/metadata/object.py +2 -0
  40. tracdap/rt/metadata/object_id.py +2 -0
  41. {tracdap_runtime-0.8.0b1.dist-info → tracdap_runtime-0.8.0b3.dist-info}/METADATA +2 -2
  42. {tracdap_runtime-0.8.0b1.dist-info → tracdap_runtime-0.8.0b3.dist-info}/RECORD +47 -45
  43. {tracdap_runtime-0.8.0b1.dist-info → tracdap_runtime-0.8.0b3.dist-info}/WHEEL +1 -1
  44. tracdap/rt/_exec/__init__.py +0 -0
  45. /tracdap/rt/_impl/{guard_rails.py → core/guard_rails.py} +0 -0
  46. /tracdap/rt/_impl/{type_system.py → core/type_system.py} +0 -0
  47. {tracdap_runtime-0.8.0b1.dist-info → tracdap_runtime-0.8.0b3.dist-info}/LICENSE +0 -0
  48. {tracdap_runtime-0.8.0b1.dist-info → tracdap_runtime-0.8.0b3.dist-info}/top_level.txt +0 -0
@@ -13,28 +13,27 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
- from __future__ import annotations
17
-
18
16
  import copy
19
17
  import datetime
20
18
  import abc
19
+ import pathlib
21
20
  import random
22
21
  import dataclasses as dc # noqa
23
22
 
24
23
  import tracdap.rt.api as _api
25
24
  import tracdap.rt.config as _config
26
25
  import tracdap.rt.exceptions as _ex
27
- import tracdap.rt._exec.context as _ctx
28
- import tracdap.rt._exec.graph_builder as _graph
29
- import tracdap.rt._impl.config_parser as _cfg_p # noqa
30
- import tracdap.rt._impl.type_system as _types # noqa
31
- import tracdap.rt._impl.data as _data # noqa
32
- import tracdap.rt._impl.storage as _storage # noqa
33
- import tracdap.rt._impl.models as _models # noqa
34
- import tracdap.rt._impl.util as _util # noqa
26
+ import tracdap.rt._impl.exec.context as _ctx
27
+ import tracdap.rt._impl.exec.graph_builder as _graph
28
+ import tracdap.rt._impl.core.type_system as _types
29
+ import tracdap.rt._impl.core.data as _data
30
+ import tracdap.rt._impl.core.logging as _logging
31
+ import tracdap.rt._impl.core.storage as _storage
32
+ import tracdap.rt._impl.core.models as _models
33
+ import tracdap.rt._impl.core.util as _util
35
34
 
36
- from tracdap.rt._exec.graph import *
37
- from tracdap.rt._exec.graph import _T
35
+ from tracdap.rt._impl.exec.graph import *
36
+ from tracdap.rt._impl.exec.graph import _T
38
37
 
39
38
 
40
39
  class NodeContext:
@@ -228,11 +227,22 @@ class BuildJobResultFunc(NodeFunction[_config.JobResult]):
228
227
  job_result.jobId = self.node.job_id
229
228
  job_result.statusCode = meta.JobStatusCode.SUCCEEDED
230
229
 
230
+ if self.node.result_id is not None:
231
+
232
+ result_def = meta.ResultDefinition()
233
+ result_def.jobId = _util.selector_for(self.node.job_id)
234
+ result_def.statusCode = meta.JobStatusCode.SUCCEEDED
235
+
236
+ result_key = _util.object_key(self.node.result_id)
237
+ result_obj = meta.ObjectDefinition(objectType=meta.ObjectType.RESULT, result=result_def)
238
+
239
+ job_result.results[result_key] = result_obj
240
+
231
241
  # TODO: Handle individual failed results
232
242
 
233
- for obj_id, node_id in self.node.outputs.objects.items():
243
+ for obj_key, node_id in self.node.outputs.objects.items():
234
244
  obj_def = _ctx_lookup(node_id, ctx)
235
- job_result.results[obj_id] = obj_def
245
+ job_result.results[obj_key] = obj_def
236
246
 
237
247
  for bundle_id in self.node.outputs.bundles:
238
248
  bundle = _ctx_lookup(bundle_id, ctx)
@@ -242,9 +252,9 @@ class BuildJobResultFunc(NodeFunction[_config.JobResult]):
242
252
 
243
253
  runtime_outputs = _ctx_lookup(self.node.runtime_outputs, ctx)
244
254
 
245
- for obj_id, node_id in runtime_outputs.objects.items():
255
+ for obj_key, node_id in runtime_outputs.objects.items():
246
256
  obj_def = _ctx_lookup(node_id, ctx)
247
- job_result.results[obj_id] = obj_def
257
+ job_result.results[obj_key] = obj_def
248
258
 
249
259
  for bundle_id in runtime_outputs.bundles:
250
260
  bundle = _ctx_lookup(bundle_id, ctx)
@@ -253,37 +263,6 @@ class BuildJobResultFunc(NodeFunction[_config.JobResult]):
253
263
  return job_result
254
264
 
255
265
 
256
- class SaveJobResultFunc(NodeFunction[None]):
257
-
258
- def __init__(self, node: SaveJobResultNode):
259
- super().__init__()
260
- self.node = node
261
-
262
- def _execute(self, ctx: NodeContext) -> None:
263
-
264
- job_result = _ctx_lookup(self.node.job_result_id, ctx)
265
-
266
- if not self.node.result_spec.save_result:
267
- return None
268
-
269
- job_result_format = self.node.result_spec.result_format
270
- job_result_str = _cfg_p.ConfigQuoter.quote(job_result, job_result_format)
271
- job_result_bytes = bytes(job_result_str, "utf-8")
272
-
273
- job_key = _util.object_key(job_result.jobId)
274
- job_result_file = f"job_result_{job_key}.{self.node.result_spec.result_format}"
275
- job_result_path = pathlib \
276
- .Path(self.node.result_spec.result_dir) \
277
- .joinpath(job_result_file)
278
-
279
- _util.logger_for_object(self).info(f"Saving job result to [{job_result_path}]")
280
-
281
- with open(job_result_path, "xb") as result_stream:
282
- result_stream.write(job_result_bytes)
283
-
284
- return None
285
-
286
-
287
266
  class DataViewFunc(NodeFunction[_data.DataView]):
288
267
 
289
268
  def __init__(self, node: DataViewNode):
@@ -633,8 +612,6 @@ class ImportModelFunc(NodeFunction[meta.ObjectDefinition]):
633
612
  self.node = node
634
613
  self._models = models
635
614
 
636
- self._log = _util.logger_for_object(self)
637
-
638
615
  def _execute(self, ctx: NodeContext) -> meta.ObjectDefinition:
639
616
 
640
617
  model_stub = _model_def_for_import(self.node.import_details)
@@ -651,13 +628,15 @@ class RunModelFunc(NodeFunction[Bundle[_data.DataView]]):
651
628
  self, node: RunModelNode,
652
629
  model_class: _api.TracModel.__class__,
653
630
  checkout_directory: pathlib.Path,
654
- storage_manager: _storage.StorageManager):
631
+ storage_manager: _storage.StorageManager,
632
+ log_provider: _logging.LogProvider):
655
633
 
656
634
  super().__init__()
657
635
  self.node = node
658
636
  self.model_class = model_class
659
637
  self.checkout_directory = checkout_directory
660
638
  self.storage_manager = storage_manager
639
+ self.log_provider = log_provider
661
640
 
662
641
  def _execute(self, ctx: NodeContext) -> Bundle[_data.DataView]:
663
642
 
@@ -684,7 +663,7 @@ class RunModelFunc(NodeFunction[Bundle[_data.DataView]]):
684
663
  for storage_key in self.node.storage_access:
685
664
  if self.storage_manager.has_file_storage(storage_key, external=True):
686
665
  storage_impl = self.storage_manager.get_file_storage(storage_key, external=True)
687
- storage = _ctx.TracFileStorageImpl(storage_key, storage_impl, write_access, self.checkout_directory)
666
+ storage = _ctx.TracFileStorageImpl(storage_key, storage_impl, write_access, self.checkout_directory, self.log_provider)
688
667
  storage_map[storage_key] = storage
689
668
  elif self.storage_manager.has_data_storage(storage_key, external=True):
690
669
  storage_impl = self.storage_manager.get_data_storage(storage_key, external=True)
@@ -692,7 +671,7 @@ class RunModelFunc(NodeFunction[Bundle[_data.DataView]]):
692
671
  if not isinstance(storage_impl, _storage.IDataStorageBase):
693
672
  raise _ex.EStorageConfig(f"External storage for [{storage_key}] is using the legacy storage framework]")
694
673
  converter = _data.DataConverter.noop()
695
- storage = _ctx.TracDataStorageImpl(storage_key, storage_impl, converter, write_access, self.checkout_directory)
674
+ storage = _ctx.TracDataStorageImpl(storage_key, storage_impl, converter, write_access, self.checkout_directory, self.log_provider)
696
675
  storage_map[storage_key] = storage
697
676
  else:
698
677
  raise _ex.EStorageConfig(f"External storage is not available: [{storage_key}]")
@@ -704,12 +683,12 @@ class RunModelFunc(NodeFunction[Bundle[_data.DataView]]):
704
683
  trac_ctx = _ctx.TracDataContextImpl(
705
684
  self.node.model_def, self.model_class,
706
685
  local_ctx, dynamic_outputs, storage_map,
707
- self.checkout_directory)
686
+ self.checkout_directory, self.log_provider)
708
687
  else:
709
688
  trac_ctx = _ctx.TracContextImpl(
710
689
  self.node.model_def, self.model_class,
711
690
  local_ctx, dynamic_outputs,
712
- self.checkout_directory)
691
+ self.checkout_directory, self.log_provider)
713
692
 
714
693
  try:
715
694
  model = self.model_class()
@@ -812,9 +791,10 @@ class FunctionResolver:
812
791
 
813
792
  __ResolveFunc = tp.Callable[['FunctionResolver', Node[_T]], NodeFunction[_T]]
814
793
 
815
- def __init__(self, models: _models.ModelLoader, storage: _storage.StorageManager):
794
+ def __init__(self, models: _models.ModelLoader, storage: _storage.StorageManager, log_provider: _logging.LogProvider):
816
795
  self._models = models
817
796
  self._storage = storage
797
+ self._log_provider = log_provider
818
798
 
819
799
  def resolve_node(self, node: Node[_T]) -> NodeFunction[_T]:
820
800
 
@@ -850,7 +830,7 @@ class FunctionResolver:
850
830
  checkout_directory = self._models.model_load_checkout_directory(node.model_scope, node.model_def)
851
831
  storage_manager = self._storage if node.storage_access else None
852
832
 
853
- return RunModelFunc(node, model_class, checkout_directory, storage_manager)
833
+ return RunModelFunc(node, model_class, checkout_directory, storage_manager, self._log_provider)
854
834
 
855
835
  __basic_node_mapping: tp.Dict[Node.__class__, NodeFunction.__class__] = {
856
836
 
@@ -861,7 +841,6 @@ class FunctionResolver:
861
841
  DataViewNode: DataViewFunc,
862
842
  DataItemNode: DataItemFunc,
863
843
  BuildJobResultNode: BuildJobResultFunc,
864
- SaveJobResultNode: SaveJobResultFunc,
865
844
  DataResultNode: DataResultFunc,
866
845
  StaticValueNode: StaticValueFunc,
867
846
  RuntimeOutputsNode: RuntimeOutputsFunc,
@@ -13,11 +13,10 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
- import pathlib
17
16
  import typing as tp
18
17
  import dataclasses as dc
19
18
 
20
- import tracdap.rt._impl.data as _data # noqa
19
+ import tracdap.rt._impl.core.data as _data
21
20
  import tracdap.rt.metadata as meta
22
21
  import tracdap.rt.config as cfg
23
22
 
@@ -182,15 +181,6 @@ class JobOutputs:
182
181
  bundles: tp.List[NodeId[ObjectBundle]] = dc.field(default_factory=list)
183
182
 
184
183
 
185
- # TODO: Where does this go?
186
- @dc.dataclass(frozen=True)
187
- class JobResultSpec:
188
-
189
- save_result: bool = False
190
- result_dir: tp.Union[str, pathlib.Path] = None
191
- result_format: str = None
192
-
193
-
194
184
  # ----------------------------------------------------------------------------------------------------------------------
195
185
  # NODE DEFINITIONS
196
186
  # ----------------------------------------------------------------------------------------------------------------------
@@ -402,6 +392,7 @@ class RuntimeOutputsNode(Node[JobOutputs]):
402
392
  @_node_type
403
393
  class BuildJobResultNode(Node[cfg.JobResult]):
404
394
 
395
+ result_id: meta.TagHeader
405
396
  job_id: meta.TagHeader
406
397
 
407
398
  outputs: JobOutputs
@@ -414,16 +405,6 @@ class BuildJobResultNode(Node[cfg.JobResult]):
414
405
  return {node_id: DependencyType.HARD for node_id in dep_ids}
415
406
 
416
407
 
417
- @_node_type
418
- class SaveJobResultNode(Node[None]):
419
-
420
- job_result_id: NodeId[cfg.JobResult]
421
- result_spec: JobResultSpec
422
-
423
- def _node_dependencies(self) -> tp.Dict[NodeId, DependencyType]:
424
- return {self.job_result_id: DependencyType.HARD}
425
-
426
-
427
408
  @_node_type
428
409
  class ChildJobNode(Node[cfg.JobResult]):
429
410
 
@@ -17,8 +17,8 @@ import datetime as _dt
17
17
 
18
18
  import tracdap.rt.config as config
19
19
  import tracdap.rt.exceptions as _ex
20
- import tracdap.rt._impl.data as _data # noqa
21
- import tracdap.rt._impl.util as _util # noqa
20
+ import tracdap.rt._impl.core.data as _data
21
+ import tracdap.rt._impl.core.util as _util
22
22
 
23
23
  from .graph import *
24
24
 
@@ -35,11 +35,10 @@ class GraphBuilder:
35
35
 
36
36
  __JOB_BUILD_FUNC = tp.Callable[[meta.JobDefinition, NodeId], GraphSection]
37
37
 
38
- def __init__(self, sys_config: config.RuntimeConfig, job_config: config.JobConfig, result_spec: JobResultSpec):
38
+ def __init__(self, sys_config: config.RuntimeConfig, job_config: config.JobConfig):
39
39
 
40
40
  self._sys_config = sys_config
41
41
  self._job_config = job_config
42
- self._result_spec = result_spec
43
42
 
44
43
  self._job_key = _util.object_key(job_config.jobId)
45
44
  self._job_namespace = NodeNamespace(self._job_key)
@@ -48,7 +47,7 @@ class GraphBuilder:
48
47
 
49
48
  def _child_builder(self, job_id: meta.TagHeader) -> "GraphBuilder":
50
49
 
51
- builder = GraphBuilder(self._sys_config, self._job_config, JobResultSpec(save_result=False))
50
+ builder = GraphBuilder(self._sys_config, self._job_config)
52
51
  builder._job_key = _util.object_key(job_id)
53
52
  builder._job_namespace = NodeNamespace(builder._job_key)
54
53
 
@@ -585,6 +584,27 @@ class GraphBuilder:
585
584
  file_key=resolved_output_key,
586
585
  storage_key=resolved_storage_key)
587
586
 
587
+ @classmethod
588
+ def build_output_file_and_storage(cls, output_key, file_type: meta.FileType, sys_config: cfg.RuntimeConfig, job_config: cfg.JobConfig):
589
+
590
+ # TODO: Review and de-dupe building of output metadata
591
+ # Responsibility for assigning outputs could perhaps move from orchestrator to runtime
592
+
593
+ output_storage_key = f"{output_key}:STORAGE"
594
+
595
+ output_id = job_config.resultMapping[output_key]
596
+ output_storage_id = job_config.resultMapping[output_storage_key]
597
+
598
+ timestamp = _dt.datetime.fromisoformat(output_id.objectTimestamp.isoDatetime)
599
+ data_item = f"file/{output_id.objectId}/version-{output_id.objectVersion}"
600
+ storage_key = sys_config.storage.defaultBucket
601
+ storage_path = f"file/FILE-{output_id.objectId}/version-{output_id.objectVersion}/{output_key}.{file_type.extension}"
602
+
603
+ file_def = cls.build_file_def(output_key, file_type, output_storage_id, data_item)
604
+ storage_def = cls.build_storage_def(data_item, storage_key, storage_path, file_type.mimeType, timestamp)
605
+
606
+ return file_def, storage_def
607
+
588
608
  @classmethod
589
609
  def build_runtime_outputs(cls, output_names: tp.List[str], job_namespace: NodeNamespace):
590
610
 
@@ -693,15 +713,16 @@ class GraphBuilder:
693
713
  explicit_deps: tp.Optional[tp.List[NodeId]] = None) \
694
714
  -> GraphSection:
695
715
 
696
- build_result_id = NodeId.of("trac_job_result", self._job_namespace, cfg.JobResult)
716
+ result_id = self._job_config.resultMapping.get("trac_job_result")
717
+ result_node_id = NodeId.of("trac_job_result", self._job_namespace, cfg.JobResult)
697
718
 
698
719
  if objects is not None:
699
720
 
700
721
  results_inputs = set(objects.values())
701
722
 
702
723
  build_result_node = BuildJobResultNode(
703
- build_result_id, self._job_config.jobId,
704
- outputs = JobOutputs(objects=objects),
724
+ result_node_id, result_id, self._job_config.jobId,
725
+ outputs=JobOutputs(objects=objects),
705
726
  explicit_deps=explicit_deps)
706
727
 
707
728
  elif bundles is not None:
@@ -709,23 +730,16 @@ class GraphBuilder:
709
730
  results_inputs = set(bundles)
710
731
 
711
732
  build_result_node = BuildJobResultNode(
712
- build_result_id, self._job_config.jobId,
713
- outputs = JobOutputs(bundles=bundles),
733
+ result_node_id, result_id, self._job_config.jobId,
734
+ outputs=JobOutputs(bundles=bundles),
714
735
  explicit_deps=explicit_deps)
715
736
 
716
737
  else:
717
738
  raise _ex.EUnexpected()
718
739
 
719
- if self._result_spec.save_result:
720
- save_result_id = NodeId("trac_save_result", self._job_namespace)
721
- save_result_node = SaveJobResultNode(save_result_id, build_result_id, self._result_spec)
722
- result_nodes = {build_result_id: build_result_node, save_result_id: save_result_node}
723
- job_result_id = save_result_id
724
- else:
725
- result_nodes = {build_result_id: build_result_node}
726
- job_result_id = build_result_id
740
+ result_nodes = {result_node_id: build_result_node}
727
741
 
728
- return GraphSection(result_nodes, inputs=results_inputs, must_run=[job_result_id])
742
+ return GraphSection(result_nodes, inputs=results_inputs, must_run=[result_node_id])
729
743
 
730
744
  def build_model_or_flow_with_context(
731
745
  self, namespace: NodeNamespace, model_or_flow_name: str,
@@ -19,9 +19,10 @@ import typing as tp
19
19
 
20
20
  import tracdap.rt.config as config
21
21
  import tracdap.rt.exceptions as ex
22
- import tracdap.rt._exec.actors as actors
23
- import tracdap.rt._impl.grpc.codec as codec # noqa
24
- import tracdap.rt._impl.util as util # noqa
22
+ import tracdap.rt._impl.exec.actors as actors
23
+ import tracdap.rt._impl.grpc.codec as codec
24
+ import tracdap.rt._impl.core.logging as logging
25
+ import tracdap.rt._impl.core.util as util
25
26
 
26
27
  # Check whether gRPC is installed before trying to load any of the generated modules
27
28
  try:
@@ -44,7 +45,7 @@ class RuntimeApiServer(runtime_grpc.TracRuntimeApiServicer):
44
45
 
45
46
  def __init__(self, system: actors.ActorSystem, port: int):
46
47
 
47
- self.__log = util.logger_for_object(self)
48
+ self.__log = logging.logger_for_object(self)
48
49
 
49
50
  self.__system = system
50
51
  self.__engine_id = system.main_id()
@@ -158,7 +159,7 @@ class ApiAgent(actors.ThreadsafeActor):
158
159
 
159
160
  def __init__(self):
160
161
  super().__init__()
161
- self._log = util.logger_for_object(self)
162
+ self._log = logging.logger_for_object(self)
162
163
  self._event_loop = asyncio.get_event_loop()
163
164
  self.__start_signal = asyncio.Event()
164
165
 
@@ -258,7 +259,7 @@ class ApiRequest(actors.ThreadsafeActor, tp.Generic[_T_REQUEST, _T_RESPONSE]):
258
259
  self.threadsafe().stop()
259
260
 
260
261
 
261
- ApiRequest._log = util.logger_for_class(ApiRequest)
262
+ ApiRequest._log = logging.logger_for_class(ApiRequest)
262
263
 
263
264
 
264
265
  class ListJobsRequest(ApiRequest[runtime_pb2.RuntimeListJobsRequest, runtime_pb2.RuntimeListJobsResponse]):
@@ -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\"\x84\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\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\"\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\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')
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\"\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\"\xbe\x01\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\x30\n\tlogFileId\x18\x04 \x01(\x0b\x32\x1d.tracdap.metadata.TagSelector\"\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\"\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\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')
21
21
 
22
22
  _globals = globals()
23
23
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -63,66 +63,68 @@ if _descriptor._USE_C_DESCRIPTORS == False:
63
63
  _globals['_EXPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_options = b'8\001'
64
64
  _globals['_EXPORTDATAJOB_EXPORTSENTRY']._options = None
65
65
  _globals['_EXPORTDATAJOB_EXPORTSENTRY']._serialized_options = b'8\001'
66
- _globals['_JOBTYPE']._serialized_start=4459
67
- _globals['_JOBTYPE']._serialized_end=4586
68
- _globals['_JOBSTATUSCODE']._serialized_start=4589
69
- _globals['_JOBSTATUSCODE']._serialized_end=4773
70
- _globals['_JOBGROUPTYPE']._serialized_start=4775
71
- _globals['_JOBGROUPTYPE']._serialized_end=4867
66
+ _globals['_JOBTYPE']._serialized_start=4701
67
+ _globals['_JOBTYPE']._serialized_end=4828
68
+ _globals['_JOBSTATUSCODE']._serialized_start=4831
69
+ _globals['_JOBSTATUSCODE']._serialized_end=5015
70
+ _globals['_JOBGROUPTYPE']._serialized_start=5017
71
+ _globals['_JOBGROUPTYPE']._serialized_end=5109
72
72
  _globals['_JOBDEFINITION']._serialized_start=235
73
- _globals['_JOBDEFINITION']._serialized_end=623
74
- _globals['_RUNMODELJOB']._serialized_start=626
75
- _globals['_RUNMODELJOB']._serialized_end=1310
76
- _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_start=995
77
- _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_end=1069
78
- _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_start=1071
79
- _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_end=1147
80
- _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_start=1149
81
- _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_end=1226
82
- _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_start=1228
83
- _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_end=1310
84
- _globals['_RUNFLOWJOB']._serialized_start=1313
85
- _globals['_RUNFLOWJOB']._serialized_end=2127
86
- _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_start=995
87
- _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_end=1069
88
- _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_start=1071
89
- _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_end=1147
90
- _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_start=1149
91
- _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_end=1226
92
- _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_start=1228
93
- _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_end=1310
94
- _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_start=2051
95
- _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_end=2127
96
- _globals['_IMPORTMODELJOB']._serialized_start=2130
97
- _globals['_IMPORTMODELJOB']._serialized_end=2345
98
- _globals['_IMPORTDATAJOB']._serialized_start=2348
99
- _globals['_IMPORTDATAJOB']._serialized_end=3257
100
- _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_start=995
101
- _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_end=1069
102
- _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_start=1071
103
- _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_end=1147
104
- _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_start=1149
105
- _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_end=1226
106
- _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_start=1228
107
- _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_end=1310
108
- _globals['_IMPORTDATAJOB_IMPORTSENTRY']._serialized_start=3180
109
- _globals['_IMPORTDATAJOB_IMPORTSENTRY']._serialized_end=3257
110
- _globals['_EXPORTDATAJOB']._serialized_start=3260
111
- _globals['_EXPORTDATAJOB']._serialized_end=4119
112
- _globals['_EXPORTDATAJOB_PARAMETERSENTRY']._serialized_start=995
113
- _globals['_EXPORTDATAJOB_PARAMETERSENTRY']._serialized_end=1069
114
- _globals['_EXPORTDATAJOB_INPUTSENTRY']._serialized_start=1071
115
- _globals['_EXPORTDATAJOB_INPUTSENTRY']._serialized_end=1147
116
- _globals['_EXPORTDATAJOB_OUTPUTSENTRY']._serialized_start=1149
117
- _globals['_EXPORTDATAJOB_OUTPUTSENTRY']._serialized_end=1226
118
- _globals['_EXPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_start=1228
119
- _globals['_EXPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_end=1310
120
- _globals['_EXPORTDATAJOB_EXPORTSENTRY']._serialized_start=4042
121
- _globals['_EXPORTDATAJOB_EXPORTSENTRY']._serialized_end=4119
122
- _globals['_JOBGROUP']._serialized_start=4122
123
- _globals['_JOBGROUP']._serialized_end=4321
124
- _globals['_SEQUENTIALJOBGROUP']._serialized_start=4323
125
- _globals['_SEQUENTIALJOBGROUP']._serialized_end=4390
126
- _globals['_PARALLELJOBGROUP']._serialized_start=4392
127
- _globals['_PARALLELJOBGROUP']._serialized_end=4457
73
+ _globals['_JOBDEFINITION']._serialized_end=672
74
+ _globals['_RESULTDEFINITION']._serialized_start=675
75
+ _globals['_RESULTDEFINITION']._serialized_end=865
76
+ _globals['_RUNMODELJOB']._serialized_start=868
77
+ _globals['_RUNMODELJOB']._serialized_end=1552
78
+ _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_start=1237
79
+ _globals['_RUNMODELJOB_PARAMETERSENTRY']._serialized_end=1311
80
+ _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_start=1313
81
+ _globals['_RUNMODELJOB_INPUTSENTRY']._serialized_end=1389
82
+ _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_start=1391
83
+ _globals['_RUNMODELJOB_OUTPUTSENTRY']._serialized_end=1468
84
+ _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_start=1470
85
+ _globals['_RUNMODELJOB_PRIOROUTPUTSENTRY']._serialized_end=1552
86
+ _globals['_RUNFLOWJOB']._serialized_start=1555
87
+ _globals['_RUNFLOWJOB']._serialized_end=2369
88
+ _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_start=1237
89
+ _globals['_RUNFLOWJOB_PARAMETERSENTRY']._serialized_end=1311
90
+ _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_start=1313
91
+ _globals['_RUNFLOWJOB_INPUTSENTRY']._serialized_end=1389
92
+ _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_start=1391
93
+ _globals['_RUNFLOWJOB_OUTPUTSENTRY']._serialized_end=1468
94
+ _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_start=1470
95
+ _globals['_RUNFLOWJOB_PRIOROUTPUTSENTRY']._serialized_end=1552
96
+ _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_start=2293
97
+ _globals['_RUNFLOWJOB_MODELSENTRY']._serialized_end=2369
98
+ _globals['_IMPORTMODELJOB']._serialized_start=2372
99
+ _globals['_IMPORTMODELJOB']._serialized_end=2587
100
+ _globals['_IMPORTDATAJOB']._serialized_start=2590
101
+ _globals['_IMPORTDATAJOB']._serialized_end=3499
102
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_start=1237
103
+ _globals['_IMPORTDATAJOB_PARAMETERSENTRY']._serialized_end=1311
104
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_start=1313
105
+ _globals['_IMPORTDATAJOB_INPUTSENTRY']._serialized_end=1389
106
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_start=1391
107
+ _globals['_IMPORTDATAJOB_OUTPUTSENTRY']._serialized_end=1468
108
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_start=1470
109
+ _globals['_IMPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_end=1552
110
+ _globals['_IMPORTDATAJOB_IMPORTSENTRY']._serialized_start=3422
111
+ _globals['_IMPORTDATAJOB_IMPORTSENTRY']._serialized_end=3499
112
+ _globals['_EXPORTDATAJOB']._serialized_start=3502
113
+ _globals['_EXPORTDATAJOB']._serialized_end=4361
114
+ _globals['_EXPORTDATAJOB_PARAMETERSENTRY']._serialized_start=1237
115
+ _globals['_EXPORTDATAJOB_PARAMETERSENTRY']._serialized_end=1311
116
+ _globals['_EXPORTDATAJOB_INPUTSENTRY']._serialized_start=1313
117
+ _globals['_EXPORTDATAJOB_INPUTSENTRY']._serialized_end=1389
118
+ _globals['_EXPORTDATAJOB_OUTPUTSENTRY']._serialized_start=1391
119
+ _globals['_EXPORTDATAJOB_OUTPUTSENTRY']._serialized_end=1468
120
+ _globals['_EXPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_start=1470
121
+ _globals['_EXPORTDATAJOB_PRIOROUTPUTSENTRY']._serialized_end=1552
122
+ _globals['_EXPORTDATAJOB_EXPORTSENTRY']._serialized_start=4284
123
+ _globals['_EXPORTDATAJOB_EXPORTSENTRY']._serialized_end=4361
124
+ _globals['_JOBGROUP']._serialized_start=4364
125
+ _globals['_JOBGROUP']._serialized_end=4563
126
+ _globals['_SEQUENTIALJOBGROUP']._serialized_start=4565
127
+ _globals['_SEQUENTIALJOBGROUP']._serialized_end=4632
128
+ _globals['_PARALLELJOBGROUP']._serialized_start=4634
129
+ _globals['_PARALLELJOBGROUP']._serialized_end=4699
128
130
  # @@protoc_insertion_point(module_scope)
@@ -61,7 +61,7 @@ SEQUENTIAL_JOB_GROUP: JobGroupType
61
61
  PARALLEL_JOB_GROUP: JobGroupType
62
62
 
63
63
  class JobDefinition(_message.Message):
64
- __slots__ = ("jobType", "runModel", "runFlow", "importModel", "importData", "exportData", "jobGroup")
64
+ __slots__ = ("jobType", "runModel", "runFlow", "importModel", "importData", "exportData", "jobGroup", "resultId")
65
65
  JOBTYPE_FIELD_NUMBER: _ClassVar[int]
66
66
  RUNMODEL_FIELD_NUMBER: _ClassVar[int]
67
67
  RUNFLOW_FIELD_NUMBER: _ClassVar[int]
@@ -69,6 +69,7 @@ class JobDefinition(_message.Message):
69
69
  IMPORTDATA_FIELD_NUMBER: _ClassVar[int]
70
70
  EXPORTDATA_FIELD_NUMBER: _ClassVar[int]
71
71
  JOBGROUP_FIELD_NUMBER: _ClassVar[int]
72
+ RESULTID_FIELD_NUMBER: _ClassVar[int]
72
73
  jobType: JobType
73
74
  runModel: RunModelJob
74
75
  runFlow: RunFlowJob
@@ -76,7 +77,20 @@ class JobDefinition(_message.Message):
76
77
  importData: ImportDataJob
77
78
  exportData: ExportDataJob
78
79
  jobGroup: JobGroup
79
- 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]] = ..., jobGroup: _Optional[_Union[JobGroup, _Mapping]] = ...) -> None: ...
80
+ resultId: _object_id_pb2.TagSelector
81
+ 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]] = ..., jobGroup: _Optional[_Union[JobGroup, _Mapping]] = ..., resultId: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
82
+
83
+ class ResultDefinition(_message.Message):
84
+ __slots__ = ("jobId", "statusCode", "statusMessage", "logFileId")
85
+ JOBID_FIELD_NUMBER: _ClassVar[int]
86
+ STATUSCODE_FIELD_NUMBER: _ClassVar[int]
87
+ STATUSMESSAGE_FIELD_NUMBER: _ClassVar[int]
88
+ LOGFILEID_FIELD_NUMBER: _ClassVar[int]
89
+ jobId: _object_id_pb2.TagSelector
90
+ statusCode: JobStatusCode
91
+ statusMessage: str
92
+ logFileId: _object_id_pb2.TagSelector
93
+ def __init__(self, jobId: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ..., statusCode: _Optional[_Union[JobStatusCode, str]] = ..., statusMessage: _Optional[str] = ..., logFileId: _Optional[_Union[_object_id_pb2.TagSelector, _Mapping]] = ...) -> None: ...
80
94
 
81
95
  class RunModelJob(_message.Message):
82
96
  __slots__ = ("model", "parameters", "inputs", "outputs", "priorOutputs", "outputAttrs")
@@ -15,7 +15,7 @@ _sym_db = _symbol_database.Default()
15
15
  from tracdap.rt._impl.grpc.tracdap.metadata import type_pb2 as tracdap_dot_rt_dot___impl_dot_grpc_dot_tracdap_dot_metadata_dot_type__pb2
16
16
 
17
17
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n6tracdap/rt/_impl/grpc/tracdap/metadata/object_id.proto\x12\x10tracdap.metadata\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/type.proto\"\x98\x02\n\tTagHeader\x12\x30\n\nobjectType\x18\x01 \x01(\x0e\x32\x1c.tracdap.metadata.ObjectType\x12\x10\n\x08objectId\x18\x02 \x01(\t\x12\x15\n\robjectVersion\x18\x03 \x01(\x05\x12\x38\n\x0fobjectTimestamp\x18\x04 \x01(\x0b\x32\x1f.tracdap.metadata.DatetimeValue\x12\x12\n\ntagVersion\x18\x05 \x01(\x05\x12\x35\n\x0ctagTimestamp\x18\x06 \x01(\x0b\x32\x1f.tracdap.metadata.DatetimeValue\x12\x16\n\x0eisLatestObject\x18\x07 \x01(\x08\x12\x13\n\x0bisLatestTag\x18\x08 \x01(\x08\"\xb9\x02\n\x0bTagSelector\x12\x30\n\nobjectType\x18\x01 \x01(\x0e\x32\x1c.tracdap.metadata.ObjectType\x12\x10\n\x08objectId\x18\x02 \x01(\t\x12\x16\n\x0clatestObject\x18\x03 \x01(\x08H\x00\x12\x17\n\robjectVersion\x18\x04 \x01(\x05H\x00\x12\x35\n\nobjectAsOf\x18\x05 \x01(\x0b\x32\x1f.tracdap.metadata.DatetimeValueH\x00\x12\x13\n\tlatestTag\x18\x06 \x01(\x08H\x01\x12\x14\n\ntagVersion\x18\x07 \x01(\x05H\x01\x12\x32\n\x07tagAsOf\x18\x08 \x01(\x0b\x32\x1f.tracdap.metadata.DatetimeValueH\x01\x42\x10\n\x0eobjectCriteriaB\r\n\x0btagCriteria*|\n\nObjectType\x12\x17\n\x13OBJECT_TYPE_NOT_SET\x10\x00\x12\x08\n\x04\x44\x41TA\x10\x01\x12\t\n\x05MODEL\x10\x02\x12\x08\n\x04\x46LOW\x10\x03\x12\x07\n\x03JOB\x10\x04\x12\x08\n\x04\x46ILE\x10\x05\x12\n\n\x06\x43USTOM\x10\x06\x12\x0b\n\x07STORAGE\x10\x07\x12\n\n\x06SCHEMA\x10\x08\x42\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n6tracdap/rt/_impl/grpc/tracdap/metadata/object_id.proto\x12\x10tracdap.metadata\x1a\x31tracdap/rt/_impl/grpc/tracdap/metadata/type.proto\"\x98\x02\n\tTagHeader\x12\x30\n\nobjectType\x18\x01 \x01(\x0e\x32\x1c.tracdap.metadata.ObjectType\x12\x10\n\x08objectId\x18\x02 \x01(\t\x12\x15\n\robjectVersion\x18\x03 \x01(\x05\x12\x38\n\x0fobjectTimestamp\x18\x04 \x01(\x0b\x32\x1f.tracdap.metadata.DatetimeValue\x12\x12\n\ntagVersion\x18\x05 \x01(\x05\x12\x35\n\x0ctagTimestamp\x18\x06 \x01(\x0b\x32\x1f.tracdap.metadata.DatetimeValue\x12\x16\n\x0eisLatestObject\x18\x07 \x01(\x08\x12\x13\n\x0bisLatestTag\x18\x08 \x01(\x08\"\xb9\x02\n\x0bTagSelector\x12\x30\n\nobjectType\x18\x01 \x01(\x0e\x32\x1c.tracdap.metadata.ObjectType\x12\x10\n\x08objectId\x18\x02 \x01(\t\x12\x16\n\x0clatestObject\x18\x03 \x01(\x08H\x00\x12\x17\n\robjectVersion\x18\x04 \x01(\x05H\x00\x12\x35\n\nobjectAsOf\x18\x05 \x01(\x0b\x32\x1f.tracdap.metadata.DatetimeValueH\x00\x12\x13\n\tlatestTag\x18\x06 \x01(\x08H\x01\x12\x14\n\ntagVersion\x18\x07 \x01(\x05H\x01\x12\x32\n\x07tagAsOf\x18\x08 \x01(\x0b\x32\x1f.tracdap.metadata.DatetimeValueH\x01\x42\x10\n\x0eobjectCriteriaB\r\n\x0btagCriteria*\x88\x01\n\nObjectType\x12\x17\n\x13OBJECT_TYPE_NOT_SET\x10\x00\x12\x08\n\x04\x44\x41TA\x10\x01\x12\t\n\x05MODEL\x10\x02\x12\x08\n\x04\x46LOW\x10\x03\x12\x07\n\x03JOB\x10\x04\x12\x08\n\x04\x46ILE\x10\x05\x12\n\n\x06\x43USTOM\x10\x06\x12\x0b\n\x07STORAGE\x10\x07\x12\n\n\x06SCHEMA\x10\x08\x12\n\n\x06RESULT\x10\tB\x1e\n\x1aorg.finos.tracdap.metadataP\x01\x62\x06proto3')
19
19
 
20
20
  _globals = globals()
21
21
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -23,8 +23,8 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tracdap.rt._impl.grpc.tracd
23
23
  if _descriptor._USE_C_DESCRIPTORS == False:
24
24
  _globals['DESCRIPTOR']._options = None
25
25
  _globals['DESCRIPTOR']._serialized_options = b'\n\032org.finos.tracdap.metadataP\001'
26
- _globals['_OBJECTTYPE']._serialized_start=726
27
- _globals['_OBJECTTYPE']._serialized_end=850
26
+ _globals['_OBJECTTYPE']._serialized_start=727
27
+ _globals['_OBJECTTYPE']._serialized_end=863
28
28
  _globals['_TAGHEADER']._serialized_start=128
29
29
  _globals['_TAGHEADER']._serialized_end=408
30
30
  _globals['_TAGSELECTOR']._serialized_start=411