tracdap-runtime 0.6.5__py3-none-any.whl → 0.6.6__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.
@@ -22,70 +22,91 @@ from tracdap.rt.api import *
22
22
  from .hook import _StaticApiHook
23
23
 
24
24
 
25
- _DATA_FRAMEWORK = _tp.TypeVar('_DATA_FRAMEWORK')
25
+ _PROTOCOL = _tp.TypeVar('_PROTOCOL')
26
26
 
27
+ @_dc.dataclass(frozen=True)
28
+ class _Protocol(_tp.Generic[_PROTOCOL]):
27
29
 
28
- class _DataFramework(_tp.Generic[_DATA_FRAMEWORK]):
30
+ protocol_name: str
31
+ api_type: _tp.Type[_PROTOCOL]
29
32
 
30
- PANDAS: "_DataFramework"
31
- POLARS: "_DataFramework"
33
+ def __str__(self):
34
+ return self.protocol_name
32
35
 
33
- def __init__(self, framework_name, framework_type: _DATA_FRAMEWORK):
34
- self.__framework_name = framework_name
35
- self.__framework_type = framework_type
36
36
 
37
- def __str__(self):
38
- return self.__framework_name
37
+ def __pandas_api_type() -> "_tp.Type[pandas.DataFrame]":
38
+ try:
39
+ import pandas
40
+ return pandas.DataFrame
41
+ except ModuleNotFoundError:
42
+ return None # noqa
39
43
 
44
+ def __polars_api_type() -> "_tp.Type[polars.DataFrame]":
45
+ try:
46
+ import polars
47
+ return polars.DataFrame
48
+ except ModuleNotFoundError:
49
+ return None # noqa
40
50
 
41
- if _tp.TYPE_CHECKING:
51
+ DATA_API = _tp.TypeVar('DATA_API', __pandas_api_type(), __polars_api_type())
42
52
 
43
- if pandas:
44
- _DataFramework.PANDAS = _DataFramework('pandas', pandas.DataFrame)
45
- """The original Python dataframe library, most widely used"""
46
- else:
47
- _DataFramework.PANDAS = _DataFramework('pandas', None)
48
- """Pandas data framework is not installed"""
53
+ class DataFramework(_Protocol[DATA_API]):
49
54
 
50
- if polars:
51
- _DataFramework.POLARS = _DataFramework('polars', polars.DataFrame)
52
- """A modern, fast and simple alternative to Pandas"""
53
- else:
54
- _DataFramework.POLARS = _DataFramework('polars', None)
55
- """Polars data framework is not installed"""
55
+ def __init__(self, protocol_name: str, api_type: _tp.Type[DATA_API]):
56
+ super().__init__(protocol_name, api_type)
56
57
 
57
- else:
58
+ @classmethod
59
+ def pandas(cls) -> "DataFramework[pandas.DataFrame]":
60
+ return DataFramework("pandas", DATA_API.__constraints__[0])
58
61
 
59
- _DataFramework.PANDAS = _DataFramework('pandas', None)
60
- _DataFramework.POLARS = _DataFramework('polars', None)
62
+ @classmethod
63
+ def polars(cls) -> "DataFramework[polars.DataFrame]":
64
+ return DataFramework("polars", DATA_API.__constraints__[1])
61
65
 
62
- PANDAS = _DataFramework.PANDAS
63
- POLARS = _DataFramework.POLARS
66
+ PANDAS = DataFramework.pandas()
67
+ """Data framework constant for the Pandas data library"""
68
+
69
+ POLARS = DataFramework.polars()
70
+ """Data framework constant for the Polars data library"""
64
71
 
65
72
 
66
73
  class TracContext(TracContext):
67
74
 
68
75
  @_abc.abstractmethod
69
- def get_table(self, dataset_name: str, framework: _DataFramework[_DATA_FRAMEWORK]) -> _DATA_FRAMEWORK:
76
+ def get_table(self, dataset_name: str, framework: DataFramework[DATA_API]) -> DATA_API:
70
77
 
71
78
  pass
72
79
 
73
80
  @_abc.abstractmethod
74
- def put_table(self, dataset_name: str, dataset: _DATA_FRAMEWORK):
81
+ def put_table(self, dataset_name: str, dataset: DATA_API):
75
82
 
76
83
  pass
77
84
 
78
85
 
79
86
  def init_static():
87
+ """Ensure TRAC's static model API is available to use (for static definitions at module or class scope)"""
80
88
  import tracdap.rt._impl.static_api as _static_impl # noqa
81
89
  _static_impl.StaticApiImpl.register_impl()
82
90
 
83
91
 
84
- def infer_schema(dataset: _tp.Any) -> SchemaDefinition:
92
+ def infer_schema(dataset: DATA_API) -> SchemaDefinition:
93
+ """Infer the full TRAC schema of an existing dataset"""
85
94
  sa = _StaticApiHook.get_instance()
86
95
  return sa.infer_schema(dataset)
87
96
 
88
97
 
98
+ def array_type(item_type: BasicType) -> TypeDescriptor:
99
+ """Build a type descriptor for an ARRAY type"""
100
+ sa = _StaticApiHook.get_instance()
101
+ return sa.array_type(item_type)
102
+
103
+
104
+ def map_type(entry_type: BasicType) -> TypeDescriptor:
105
+ """Build a type descriptor for a MAP type"""
106
+ sa = _StaticApiHook.get_instance()
107
+ return sa.map_type(entry_type)
108
+
109
+
89
110
  class FileType(_enum.Enum):
90
111
 
91
112
  FILE = 1
@@ -172,6 +193,32 @@ class TracFileStorage:
172
193
  stream.write(data)
173
194
 
174
195
 
196
+ class TracDataStorage(_tp.Generic[DATA_API]):
197
+
198
+ @_abc.abstractmethod
199
+ def has_table(self, table_name: str) -> bool:
200
+ pass
201
+
202
+ @_abc.abstractmethod
203
+ def list_tables(self) -> _tp.List[str]:
204
+ pass
205
+
206
+ @_abc.abstractmethod
207
+ def create_table(self, table_name: str, schema: SchemaDefinition):
208
+ pass
209
+
210
+ @_abc.abstractmethod
211
+ def read_table(self, table_name: str) -> DATA_API:
212
+ pass
213
+
214
+ @_abc.abstractmethod
215
+ def write_table(self, table_name: str, dataset: DATA_API):
216
+ pass
217
+
218
+ @_abc.abstractmethod
219
+ def native_read_query(self, query: str, **parameters) -> DATA_API:
220
+ pass
221
+
175
222
 
176
223
  class TracDataContext(TracContext):
177
224
 
@@ -180,7 +227,7 @@ class TracDataContext(TracContext):
180
227
  pass
181
228
 
182
229
  @_abc.abstractmethod
183
- def get_data_storage(self, storage_key: str) -> None:
230
+ def get_data_storage(self, storage_key: str, framework: DataFramework[DATA_API], **framework_args) -> TracDataStorage[DATA_API]:
184
231
  pass
185
232
 
186
233
  @_abc.abstractmethod
@@ -188,7 +235,7 @@ class TracDataContext(TracContext):
188
235
  pass
189
236
 
190
237
  @_abc.abstractmethod
191
- def set_source_metadata(self, dataset_key: str, storage_key: str, source_info: FileStat):
238
+ def set_source_metadata(self, dataset_key: str, storage_key: str, source_info: _tp.Union[FileStat, str]):
192
239
  pass
193
240
 
194
241
  @_abc.abstractmethod
tracdap/rt/api/hook.py CHANGED
@@ -61,6 +61,16 @@ class _StaticApiHook:
61
61
 
62
62
  return cls.__static_api_hook
63
63
 
64
+ @_abc.abstractmethod
65
+ def array_type(self, item_type: _meta.BasicType) -> _meta.TypeDescriptor:
66
+
67
+ pass
68
+
69
+ @_abc.abstractmethod
70
+ def map_type(self, entry_type: _meta.BasicType) -> _meta.TypeDescriptor:
71
+
72
+ pass
73
+
64
74
  @_abc.abstractmethod
65
75
  def define_attributes(
66
76
  self, *attrs: _tp.Union[_meta.TagUpdate, _tp.List[_meta.TagUpdate]]) \
@@ -45,12 +45,16 @@ from .flow import FlowDefinition
45
45
 
46
46
  from .job import JobType
47
47
  from .job import JobStatusCode
48
+ from .job import JobGroupType
48
49
  from .job import JobDefinition
49
50
  from .job import RunModelJob
50
51
  from .job import RunFlowJob
51
52
  from .job import ImportModelJob
52
53
  from .job import ImportDataJob
53
54
  from .job import ExportDataJob
55
+ from .job import JobGroup
56
+ from .job import SequentialJobGroup
57
+ from .job import ParallelJobGroup
54
58
 
55
59
  from .file import FileDefinition
56
60
 
@@ -36,6 +36,10 @@ class JobType(_enum.Enum):
36
36
 
37
37
  """Export data to external locations"""
38
38
 
39
+ JOB_GROUP = 6
40
+
41
+ """A job built from a collection of other jobs"""
42
+
39
43
 
40
44
  class JobStatusCode(_enum.Enum):
41
45
 
@@ -84,6 +88,17 @@ class JobStatusCode(_enum.Enum):
84
88
  """The job was cancelled by a user of the platform"""
85
89
 
86
90
 
91
+ class JobGroupType(_enum.Enum):
92
+
93
+ """Specify the group type for a JOB_GROUP job"""
94
+
95
+ JOB_GROUP_TYPE_NOT_SET = 0
96
+
97
+ SEQUENTIAL_JOB_GROUP = 1
98
+
99
+ PARALLEL_JOB_GROUP = 2
100
+
101
+
87
102
  @_dc.dataclass
88
103
  class JobDefinition:
89
104
 
@@ -101,6 +116,8 @@ class JobDefinition:
101
116
 
102
117
  exportData: _tp.Optional[ExportDataJob] = None
103
118
 
119
+ jobGroup: _tp.Optional[JobGroup] = None
120
+
104
121
 
105
122
  @_dc.dataclass
106
123
  class RunModelJob:
@@ -206,3 +223,31 @@ class ExportDataJob:
206
223
  exports: _tp.Dict[str, TagSelector] = _dc.field(default_factory=dict)
207
224
 
208
225
  outputAttrs: _tp.List[TagUpdate] = _dc.field(default_factory=list)
226
+
227
+
228
+ @_dc.dataclass
229
+ class JobGroup:
230
+
231
+ """Specification for a JOB_GROUP job, which runs a collection of other jobs"""
232
+
233
+ jobGroupType: JobGroupType = JobGroupType.JOB_GROUP_TYPE_NOT_SET
234
+
235
+ sequential: _tp.Optional[SequentialJobGroup] = None
236
+
237
+ parallel: _tp.Optional[ParallelJobGroup] = None
238
+
239
+
240
+ @_dc.dataclass
241
+ class SequentialJobGroup:
242
+
243
+ """A job group where each job runs in sequence"""
244
+
245
+ jobs: _tp.List[JobDefinition] = _dc.field(default_factory=list)
246
+
247
+
248
+ @_dc.dataclass
249
+ class ParallelJobGroup:
250
+
251
+ """A job group where all jobs runs in parallel"""
252
+
253
+ jobs: _tp.List[JobDefinition] = _dc.field(default_factory=list)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tracdap-runtime
3
- Version: 0.6.5
3
+ Version: 0.6.6
4
4
  Summary: Runtime package for building models on the TRAC Data & Analytics Platform
5
5
  Home-page: https://tracdap.finos.org/
6
6
  Author: Martin Traverse
@@ -43,6 +43,8 @@ Provides-Extra: polars
43
43
  Requires-Dist: polars<2.0.0,>=1.0.0; extra == "polars"
44
44
  Provides-Extra: spark
45
45
  Requires-Dist: pyspark<3.6.0,>=3.0.0; extra == "spark"
46
+ Provides-Extra: sql
47
+ Requires-Dist: sqlalchemy<2.1.0,>=2.0.0; extra == "sql"
46
48
 
47
49
  # TRAC Model Runtime for Python
48
50
 
@@ -1,29 +1,32 @@
1
1
  tracdap/rt/__init__.py,sha256=rz9ERpKMlnR4LFZNGLtdNE26B_Y2V168bdd8hRmasKk,643
2
- tracdap/rt/_version.py,sha256=slLtvilKX39o7MaJ1VJkWZHchjupj3h_nmRy9svBXiY,631
2
+ tracdap/rt/_version.py,sha256=TRyja83KlYTYBgK-yWywouza7UaoVKvjZCv3SFgEU2I,631
3
3
  tracdap/rt/exceptions.py,sha256=AV2o9g5d5miMoRfsYW3DZ6or4SLVGwcZjfw4UsQ-HTY,7907
4
4
  tracdap/rt/_exec/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  tracdap/rt/_exec/actors.py,sha256=CPSiLsEIPRbYfjeFjPcDqyPv3GKv-2nOFbUGqPOwnSA,34957
6
- tracdap/rt/_exec/context.py,sha256=Hf3sjAJUKa6C5IerGZCGXKqCXq6waBGy657llKaZDo0,32130
7
- tracdap/rt/_exec/dev_mode.py,sha256=WCiQHxJ3OlRu85l-0naF5qIxqpU0b-3gK6SDWDEK7nk,35276
8
- tracdap/rt/_exec/engine.py,sha256=wNlKkPH7vlRVpCbxEkV2d0TX6ZRiKaf2DJH2Xkds4_8,36548
9
- tracdap/rt/_exec/functions.py,sha256=jI04xWKgJf_ki0qJXYsNxwY2u9vY0m09U1vJYhxL29c,28307
10
- tracdap/rt/_exec/graph.py,sha256=RTngWMQEfp0uNXQKJs-vEiVMYrHpRU69dqYqNV41jfk,11751
11
- tracdap/rt/_exec/graph_builder.py,sha256=OTma9KYtN5KnmKVoKLwtBBS-9MnTLdmATOI_ynzYmUo,37777
12
- tracdap/rt/_exec/runtime.py,sha256=P9G0dqzl-9Rn-IZJppk1u9nib7OVG7UPEJaBxBQQl1Q,15942
6
+ tracdap/rt/_exec/context.py,sha256=aGq-aemxhYr5X1wmzNPoMIaYYaxoX7z3f8kCIkQ9nq0,39046
7
+ tracdap/rt/_exec/dev_mode.py,sha256=ghUzwm5rONGDMJBK-tUPc99u_3kCV85q2fCm1z6L9tU,39019
8
+ tracdap/rt/_exec/engine.py,sha256=sGG2lKj50_MOqxi1LmpaT-aIqUangXwwj7440VLIVMA,42018
9
+ tracdap/rt/_exec/functions.py,sha256=F7zpkNCWbRY2pxz0ECha1BH-3rguxMxxO3B5MDmFk6s,29599
10
+ tracdap/rt/_exec/graph.py,sha256=iPXvaIpQeDHSXvie6lDbb_iKUUmb-abiq8--yQo1rOY,11884
11
+ tracdap/rt/_exec/graph_builder.py,sha256=L_xxFAzzPJpLxFajOs9MeQXL7s4mbSsvSdkatA83g5E,41309
12
+ tracdap/rt/_exec/runtime.py,sha256=X3KIGTiVUlWcAaNKojwPb2h7nm4uriJawPCM15IJFws,16167
13
13
  tracdap/rt/_exec/server.py,sha256=Nq3r0Fvt5GjvdMUQs74vv8JelLR6F3F1xRQh5PCo1EY,12397
14
14
  tracdap/rt/_impl/__init__.py,sha256=eBZMpgFx9uHJxMA-yMWHCQMvShTKxJRAizdz4vy5eWg,609
15
- tracdap/rt/_impl/config_parser.py,sha256=ZIQpTGwx41nMh4RWt9KW1iheZ2zwjBeTrowysF2u3mM,22586
16
- tracdap/rt/_impl/data.py,sha256=cy3BG9wK5W_vj85-1sCZjl4EKaXaYLLgXmnP9r0y6JI,37621
15
+ tracdap/rt/_impl/config_parser.py,sha256=eBIQjD46IGWt_YEbVLgzdxPOcdL_J2R6E-mcrxttUp8,22866
16
+ tracdap/rt/_impl/data.py,sha256=6ixeRbJ6JJ65lXQBLKiXKOG5rYRavCMJtUGKzDKvduA,42820
17
17
  tracdap/rt/_impl/guard_rails.py,sha256=Pj_LafXK0uw6cwFUS5bL2hZfi4AzWTd6agQlaH0MHNY,11424
18
18
  tracdap/rt/_impl/models.py,sha256=cSL6UD0YpvkEdvKMy5zhlKQ7oofFgdfLpgukQiUYAXc,10567
19
19
  tracdap/rt/_impl/repos.py,sha256=bdpUkBbNOIQOKJQGOhCDdXUMz2bY91YNIYlKRKTtM4Y,2063
20
20
  tracdap/rt/_impl/schemas.py,sha256=KhMvh_i2ZLx0-P6vzx8ro2-KbnB3upfJgryTHbXMJrs,7417
21
21
  tracdap/rt/_impl/shim.py,sha256=WV9AldhKdt-oLuQ5x89Dkocdn_gJoYZEo9buHHFIYd8,23148
22
- tracdap/rt/_impl/static_api.py,sha256=_wgmOAVaqjIyCGKwpf-10K12v9bs-Wyle9vDv3jMmag,9573
23
- tracdap/rt/_impl/storage.py,sha256=-_77JlK10RlWuAg85EhTDT0Lw1E9OxjKDFIw09TNl6Y,35654
22
+ tracdap/rt/_impl/static_api.py,sha256=ohKY9CVPPE5JOnJ7DlkRCyGuNMkm1WvUJ48z0-HKkn0,10062
23
+ tracdap/rt/_impl/storage.py,sha256=bwx_Wf-bW8C52s0wTp08fbEeH2wAq8vpHByK3THcIR0,35728
24
24
  tracdap/rt/_impl/type_system.py,sha256=SBircgzdEIG324le7THmUuAxrJlqDVDyqcQOQVeCUjQ,12710
25
- tracdap/rt/_impl/util.py,sha256=HeswbIL4dQHjWnCJL3-WEqwsQaYo-xnEuGRoaRJ7kyU,11075
26
- tracdap/rt/_impl/validation.py,sha256=pS2W5u7OJqsqNJnYrY3aqSN7xLuQyeM8ld_sV44WzFA,20502
25
+ tracdap/rt/_impl/util.py,sha256=DIS61cH_BenEoFVdR4RfJp5MruDRUtTKloLCm9lAGpw,11247
26
+ tracdap/rt/_impl/validation.py,sha256=VxEVFVu5UPVOVmKLN1-TSXwvCv2aI0MTdoOXfCA2AYM,22420
27
+ tracdap/rt/_impl/ext/__init__.py,sha256=VFwsBdvvDZhB9OmzGnVPNkApXql5KjYoVSnIteKWTRI,608
28
+ tracdap/rt/_impl/ext/sql.py,sha256=sdKla2UHDt-OrIWQ76v2_J9C6yI4ScIoCslnYiYrfeA,2752
29
+ tracdap/rt/_impl/ext/storage.py,sha256=IieZpTOye-GRAZ-h4ndm9ck8dvmdgSy6A31h5zl1HvI,1576
27
30
  tracdap/rt/_impl/grpc/__init__.py,sha256=VFwsBdvvDZhB9OmzGnVPNkApXql5KjYoVSnIteKWTRI,608
28
31
  tracdap/rt/_impl/grpc/codec.py,sha256=OTDOET1F0mCvj9-mXRTgxZ2S7RQ9yjGrSWC4tKCQFVg,3783
29
32
  tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2.py,sha256=eH1JFEG4KwIhFAxMJfzw8JmpnTSNiY4seT_Mls2J2sM,5127
@@ -39,8 +42,8 @@ tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.py,sha256=FwZ9CZrS6-n96sYjV_EQXz
39
42
  tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.pyi,sha256=nRBVl47NUBTOLUJ7HOeztUMJoh9sVbPtqpxKLcCMEEw,1085
40
43
  tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.py,sha256=GyY4iaqp9wtZ29byMllPmk4o2nosUgdazdqf9KKUg-g,5799
41
44
  tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.pyi,sha256=yCP4usBn7VWxFWdlB6NERiCd0R7BqqmH5k29WdKNk04,5880
42
- tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py,sha256=UslaU_pEJG64g_4Nsb0P13kd3JCKPvGtUtLRHJkXCOE,14169
43
- tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi,sha256=mcrgMkNwb4UteNGwpKwL85BQolFZS-jaJi7t-EGb7rg,16794
45
+ tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py,sha256=QgvJRIEHChOKEVi1xKnCKi1TBrL6KIXoJ0c8whMYaE4,15336
46
+ tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi,sha256=G3wuO76UoPCefzwP-Wmst7Yze6oycs-fPlrO0F7KbF8,18432
44
47
  tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.py,sha256=Z0K9bhYrBstGebIfkC-Ubj8EChqokavl0LOvqWR3N0g,7038
45
48
  tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.pyi,sha256=4Ci14H5RpaUxsPKkjMnFavm9fdKyddPREnfE5yj5y9E,7028
46
49
  tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.py,sha256=cdNa1Byx6jvZPeakr28VrsEkGIj6av1xvdOM1N8NtuE,2933
@@ -72,9 +75,11 @@ tracdap/rt/_plugins/storage_aws.py,sha256=1XyWJcHmRQqr3LpS6yGvR6-yaz4g7_3zFc_KUJ
72
75
  tracdap/rt/_plugins/storage_azure.py,sha256=Q7c063SXlbbsyZHWPu4ma8BDwV-sE0ipOyb0Roi9ad0,5813
73
76
  tracdap/rt/_plugins/storage_gcp.py,sha256=ENMrgTzqX0QjSDnMfeGyFK6YUwaFaJgqF7PQzEqviKk,6464
74
77
  tracdap/rt/_plugins/storage_local.py,sha256=ep0EvFzhA8ZKStxwSvtbOPIJBt3HjtYKkmFlnUU_AqU,15555
78
+ tracdap/rt/_plugins/storage_sql.py,sha256=zgj_zpd-0KE92eAMyYNdD1wEX-t4JkQX3knt0fPsUtM,15710
79
+ tracdap/rt/_plugins/storage_sql_dialects.py,sha256=4sL3Yxbh8hvpoO6_FB9_bWMfm8KMmJYLKwVtQzld-JY,3363
75
80
  tracdap/rt/api/__init__.py,sha256=rOiUwK6sav9QTXohpZAFXJ9MgsL0KBfUyKA7dYspfGQ,1124
76
- tracdap/rt/api/experimental.py,sha256=bsZ7FWew4_-MjGSr7MtG74bGmXcXhAwAsNrR88r1Vdc,6382
77
- tracdap/rt/api/hook.py,sha256=RQLuNRKBBx_yL_TG0coTIvtM5jIWwU9GfPLyc378y9g,4476
81
+ tracdap/rt/api/experimental.py,sha256=B37PwK0QiazwRbPVOwhD_zmiByvqZvPVaxmZNYWXr-A,7755
82
+ tracdap/rt/api/hook.py,sha256=HzBT7vIaGjvOHPZG1tIVzIZ6EJNJFbdJXg5MqQnb3TQ,4711
78
83
  tracdap/rt/api/model_api.py,sha256=bLJMKv60N4x-YYqz3q89JL3vD4AdJGcdXzEJvU8mADA,20588
79
84
  tracdap/rt/api/static_api.py,sha256=dGvw9HCXmw568hW-WOylzFFkMBZ0Jg_H7HF_ar-e2sg,24738
80
85
  tracdap/rt/config/__init__.py,sha256=eEojCBQrEhev7tCs3BEicprdalU2_i-tAbSTvf2JEsE,885
@@ -93,13 +98,13 @@ tracdap/rt/launch/__init__.py,sha256=Zz_4f_ODsmweCxRmG2Dq1Slpb927jSugYclfF_Wgfws
93
98
  tracdap/rt/launch/__main__.py,sha256=9UVYYSsqvvMVOqjjBBeLNdzV_6IeIa_97KWOMXIpXY4,654
94
99
  tracdap/rt/launch/cli.py,sha256=pQCmFQj9h6YKn3R7DKxh5nvIRi7pfiUfPgVB49F8ulY,2451
95
100
  tracdap/rt/launch/launch.py,sha256=nMOjLRnY8m9BMLi_YegIr6T2jKcQcRXeyPdxvDPg4ds,6602
96
- tracdap/rt/metadata/__init__.py,sha256=kvAovsLFRKnjZRm_uNg32jiABcLRSJXszpIQB_T2Qsg,1906
101
+ tracdap/rt/metadata/__init__.py,sha256=HHia6PS4QWmg3chctf6ksukV9G5JLdYqf4qAFnHeo-U,2032
97
102
  tracdap/rt/metadata/common.py,sha256=1rA7z2jaVxvmDKxLC5ZZv5CjpVA1iDo84KhVnyntCV8,1435
98
103
  tracdap/rt/metadata/custom.py,sha256=AJmTWg4-Q5969l1UxsMrKf75SUqY2MvJkBijmMIkjcc,381
99
104
  tracdap/rt/metadata/data.py,sha256=hD6qO1oOG3ubtdEqqzo86hfnKEi59FPe90mBxAYztjQ,3507
100
105
  tracdap/rt/metadata/file.py,sha256=cupU2fY9P81JxE8t-uuxBFlidKEAQtwAS96WUEGLahM,481
101
106
  tracdap/rt/metadata/flow.py,sha256=jnT08Nj3_-Qc5b9BQlcY9nNu82_X6JTpkDPm73qlsl0,3487
102
- tracdap/rt/metadata/job.py,sha256=Tu6V8h4VfAnOcn1uZiv5Z3UZjq6ZyecnwG82cN12CwQ,4955
107
+ tracdap/rt/metadata/job.py,sha256=GieAy1XUlEZHm6Y2t-sZKzxyl-AmhoGGOAuvRmCeSrY,5881
103
108
  tracdap/rt/metadata/model.py,sha256=bs0ZHTkUrbifFFWN816nQyJDzAcqIsgcTWmtVqGCoNs,3533
104
109
  tracdap/rt/metadata/object.py,sha256=DgRX5AoEu-Ig7BD-Yxzqyx4DTRBgY6z9kdHpI0NWDNc,2810
105
110
  tracdap/rt/metadata/object_id.py,sha256=-3L22nfq243EJ9wuDR3t1zF1A-mjgdoz0-9rh189NdU,4379
@@ -109,8 +114,8 @@ tracdap/rt/metadata/stoarge.py,sha256=Z7AF0M8F4MxyG6EP9rIgGBEPsV9R3f9oBvY506BJbf
109
114
  tracdap/rt/metadata/tag.py,sha256=wvfEBWbjpInZt0STuxDkpd_SLUyxQDDLHfPCz9aeAOE,5121
110
115
  tracdap/rt/metadata/tag_update.py,sha256=jXVJ0zmQT7JyrLtkvrhlId1ayHtpTN48xfM_AK0HdXk,3744
111
116
  tracdap/rt/metadata/type.py,sha256=_0BwsZSbis-mIq3uZE1RXtjvoV0uEm68jj1FGy3qZKs,9445
112
- tracdap_runtime-0.6.5.dist-info/LICENSE,sha256=Q5Gh9SdMNa_F2ehQRShh7dJBz6qW_EQFtWzLukOWFWY,11365
113
- tracdap_runtime-0.6.5.dist-info/METADATA,sha256=BYYL7v4Ut1an9VuHgPJpZ_ol5ThqivNM2W_0YSVP50g,4951
114
- tracdap_runtime-0.6.5.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
115
- tracdap_runtime-0.6.5.dist-info/top_level.txt,sha256=Uv0JfaE1Lp4JnCzqW8lqXNJAEcsAFpAUGOghJolVNdM,8
116
- tracdap_runtime-0.6.5.dist-info/RECORD,,
117
+ tracdap_runtime-0.6.6.dist-info/LICENSE,sha256=Q5Gh9SdMNa_F2ehQRShh7dJBz6qW_EQFtWzLukOWFWY,11365
118
+ tracdap_runtime-0.6.6.dist-info/METADATA,sha256=1FmTL6_B1D-civh-3LdbLoaWJsY4N5DrAZun0f0FHS0,5027
119
+ tracdap_runtime-0.6.6.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
120
+ tracdap_runtime-0.6.6.dist-info/top_level.txt,sha256=Uv0JfaE1Lp4JnCzqW8lqXNJAEcsAFpAUGOghJolVNdM,8
121
+ tracdap_runtime-0.6.6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.3.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5