tracdap-runtime 0.7.1__py3-none-any.whl → 0.8.0__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 (88) hide show
  1. tracdap/rt/_impl/core/__init__.py +14 -0
  2. tracdap/rt/_impl/{config_parser.py → core/config_parser.py} +36 -19
  3. tracdap/rt/_impl/{data.py → core/data.py} +136 -32
  4. tracdap/rt/_impl/core/logging.py +195 -0
  5. tracdap/rt/_impl/{models.py → core/models.py} +15 -12
  6. tracdap/rt/_impl/{repos.py → core/repos.py} +12 -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} +21 -10
  10. tracdap/rt/_impl/core/struct.py +547 -0
  11. tracdap/rt/_impl/{util.py → core/util.py} +1 -111
  12. tracdap/rt/_impl/{validation.py → core/validation.py} +99 -31
  13. tracdap/rt/_impl/exec/__init__.py +14 -0
  14. tracdap/rt/{_exec → _impl/exec}/actors.py +12 -14
  15. tracdap/rt/{_exec → _impl/exec}/context.py +228 -82
  16. tracdap/rt/{_exec → _impl/exec}/dev_mode.py +163 -81
  17. tracdap/rt/{_exec → _impl/exec}/engine.py +230 -105
  18. tracdap/rt/{_exec → _impl/exec}/functions.py +191 -100
  19. tracdap/rt/{_exec → _impl/exec}/graph.py +24 -36
  20. tracdap/rt/{_exec → _impl/exec}/graph_builder.py +252 -115
  21. tracdap/rt/_impl/grpc/codec.py +1 -1
  22. tracdap/rt/{_exec → _impl/grpc}/server.py +7 -6
  23. tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2.py +3 -3
  24. tracdap/rt/_impl/grpc/tracdap/api/internal/runtime_pb2_grpc.py +1 -1
  25. tracdap/rt/_impl/grpc/tracdap/metadata/common_pb2.py +1 -1
  26. tracdap/rt/_impl/grpc/tracdap/metadata/config_pb2.py +40 -0
  27. tracdap/rt/_impl/grpc/tracdap/metadata/config_pb2.pyi +62 -0
  28. tracdap/rt/_impl/grpc/tracdap/metadata/custom_pb2.py +1 -1
  29. tracdap/rt/_impl/grpc/tracdap/metadata/data_pb2.py +32 -20
  30. tracdap/rt/_impl/grpc/tracdap/metadata/data_pb2.pyi +48 -2
  31. tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.py +4 -2
  32. tracdap/rt/_impl/grpc/tracdap/metadata/file_pb2.pyi +8 -0
  33. tracdap/rt/_impl/grpc/tracdap/metadata/flow_pb2.py +1 -1
  34. tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.py +65 -63
  35. tracdap/rt/_impl/grpc/tracdap/metadata/job_pb2.pyi +16 -2
  36. tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.py +28 -26
  37. tracdap/rt/_impl/grpc/tracdap/metadata/model_pb2.pyi +14 -4
  38. tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.py +4 -4
  39. tracdap/rt/_impl/grpc/tracdap/metadata/object_id_pb2.pyi +6 -0
  40. tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.py +9 -7
  41. tracdap/rt/_impl/grpc/tracdap/metadata/object_pb2.pyi +12 -4
  42. tracdap/rt/_impl/grpc/tracdap/metadata/resource_pb2.py +18 -5
  43. tracdap/rt/_impl/grpc/tracdap/metadata/resource_pb2.pyi +42 -2
  44. tracdap/rt/_impl/grpc/tracdap/metadata/search_pb2.py +1 -1
  45. tracdap/rt/_impl/grpc/tracdap/metadata/{stoarge_pb2.py → storage_pb2.py} +4 -4
  46. tracdap/rt/_impl/grpc/tracdap/metadata/tag_pb2.py +1 -1
  47. tracdap/rt/_impl/grpc/tracdap/metadata/tag_update_pb2.py +1 -1
  48. tracdap/rt/_impl/grpc/tracdap/metadata/type_pb2.py +1 -1
  49. tracdap/rt/{_exec → _impl}/runtime.py +32 -18
  50. tracdap/rt/_impl/static_api.py +65 -37
  51. tracdap/rt/_plugins/format_csv.py +1 -1
  52. tracdap/rt/_plugins/repo_git.py +56 -11
  53. tracdap/rt/_plugins/storage_sql.py +1 -1
  54. tracdap/rt/_version.py +1 -1
  55. tracdap/rt/api/__init__.py +5 -24
  56. tracdap/rt/api/constants.py +57 -0
  57. tracdap/rt/api/experimental.py +32 -0
  58. tracdap/rt/api/hook.py +26 -7
  59. tracdap/rt/api/model_api.py +16 -0
  60. tracdap/rt/api/static_api.py +265 -127
  61. tracdap/rt/config/__init__.py +11 -11
  62. tracdap/rt/config/common.py +2 -26
  63. tracdap/rt/config/dynamic.py +28 -0
  64. tracdap/rt/config/platform.py +17 -31
  65. tracdap/rt/config/runtime.py +2 -0
  66. tracdap/rt/ext/embed.py +2 -2
  67. tracdap/rt/ext/plugins.py +3 -3
  68. tracdap/rt/launch/launch.py +12 -14
  69. tracdap/rt/metadata/__init__.py +28 -18
  70. tracdap/rt/metadata/config.py +95 -0
  71. tracdap/rt/metadata/data.py +40 -0
  72. tracdap/rt/metadata/file.py +10 -0
  73. tracdap/rt/metadata/job.py +16 -0
  74. tracdap/rt/metadata/model.py +12 -2
  75. tracdap/rt/metadata/object.py +9 -1
  76. tracdap/rt/metadata/object_id.py +6 -0
  77. tracdap/rt/metadata/resource.py +41 -1
  78. {tracdap_runtime-0.7.1.dist-info → tracdap_runtime-0.8.0.dist-info}/METADATA +23 -17
  79. tracdap_runtime-0.8.0.dist-info/RECORD +129 -0
  80. {tracdap_runtime-0.7.1.dist-info → tracdap_runtime-0.8.0.dist-info}/WHEEL +1 -1
  81. tracdap/rt/_exec/__init__.py +0 -0
  82. tracdap_runtime-0.7.1.dist-info/RECORD +0 -121
  83. /tracdap/rt/_impl/{guard_rails.py → core/guard_rails.py} +0 -0
  84. /tracdap/rt/_impl/{type_system.py → core/type_system.py} +0 -0
  85. /tracdap/rt/_impl/grpc/tracdap/metadata/{stoarge_pb2.pyi → storage_pb2.pyi} +0 -0
  86. /tracdap/rt/metadata/{stoarge.py → storage.py} +0 -0
  87. {tracdap_runtime-0.7.1.dist-info → tracdap_runtime-0.8.0.dist-info/licenses}/LICENSE +0 -0
  88. {tracdap_runtime-0.7.1.dist-info → tracdap_runtime-0.8.0.dist-info}/top_level.txt +0 -0
@@ -13,10 +13,12 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
+ import typing as _tp
17
+
16
18
  import tracdap.rt.ext.plugins as plugins
17
19
  import tracdap.rt.config as cfg
18
20
  import tracdap.rt.exceptions as ex
19
- import tracdap.rt._impl.util as util
21
+ import tracdap.rt._impl.core.logging as _logging
20
22
 
21
23
  # Import repo interfaces
22
24
  from tracdap.rt.ext.repos import *
@@ -26,8 +28,8 @@ class RepositoryManager:
26
28
 
27
29
  def __init__(self, sys_config: cfg.RuntimeConfig):
28
30
 
29
- self._log = util.logger_for_object(self)
30
- self._repos: tp.Dict[str, IModelRepository] = dict()
31
+ self._log = _logging.logger_for_object(self)
32
+ self._repos: _tp.Dict[str, IModelRepository] = dict()
31
33
 
32
34
  # Initialize all repos in the system config
33
35
  # Any errors for missing repo types (plugins) will be raised during startup
@@ -36,6 +38,13 @@ class RepositoryManager:
36
38
 
37
39
  try:
38
40
 
41
+ # Add global properties related to the repo protocol
42
+ related_props = {
43
+ k: v for (k, v) in sys_config.properties.items()
44
+ if k.startswith(f"{repo_config.protocol}.")}
45
+
46
+ repo_config.properties.update(related_props)
47
+
39
48
  self._repos[repo_name] = plugins.PluginManager.load_plugin(IModelRepository, repo_config)
40
49
 
41
50
  except ex.EPluginNotAvailable as e:
@@ -21,10 +21,10 @@ import pyarrow as pa
21
21
 
22
22
  import tracdap.rt.metadata as _meta
23
23
  import tracdap.rt.exceptions as _ex
24
- import tracdap.rt._impl.data as _data
25
- import tracdap.rt._impl.storage as _storage
26
- import tracdap.rt._impl.shim as _shim
27
- import tracdap.rt._impl.util as _util
24
+ import tracdap.rt._impl.core.data as _data
25
+ import tracdap.rt._impl.core.logging as _log
26
+ import tracdap.rt._impl.core.storage as _storage
27
+ import tracdap.rt._impl.core.shim as _shim
28
28
 
29
29
 
30
30
  class SchemaLoader:
@@ -169,4 +169,4 @@ class SchemaLoader:
169
169
  raise _ex.EDataConformance(err)
170
170
 
171
171
 
172
- SchemaLoader._log = _util.logger_for_class(SchemaLoader)
172
+ SchemaLoader._log = _log.logger_for_class(SchemaLoader)
@@ -30,8 +30,9 @@ import importlib.machinery as _ilm
30
30
  import importlib.resources as _ilr
31
31
 
32
32
  import tracdap.rt.exceptions as _ex
33
- import tracdap.rt._impl.guard_rails as _guard
34
- import tracdap.rt._impl.util as _util
33
+ import tracdap.rt._impl.core.guard_rails as _guard
34
+ import tracdap.rt._impl.core.logging as _log
35
+ import tracdap.rt._impl.core.util as _util
35
36
 
36
37
 
37
38
  class _Shim:
@@ -138,7 +139,7 @@ class _NamespaceShimFinder(_ila.MetaPathFinder):
138
139
  def __init__(self, shim_map: tp.Dict[str, _Shim], active_shim: _ActiveShim):
139
140
  self.__shim_map = shim_map
140
141
  self.__active_shim = active_shim
141
- self._log = _util.logger_for_class(ShimLoader)
142
+ self._log = _log.logger_for_class(ShimLoader)
142
143
 
143
144
  def find_spec(
144
145
  self, fullname: str,
@@ -561,5 +562,5 @@ class ShimLoader:
561
562
  raise _ex.ERuntimeValidation(err)
562
563
 
563
564
 
564
- ShimLoader._log = _util.logger_for_class(ShimLoader)
565
+ ShimLoader._log = _log.logger_for_class(ShimLoader)
565
566
  ShimLoader._init() # noqa
@@ -29,9 +29,10 @@ import tracdap.rt.metadata as _meta
29
29
  import tracdap.rt.config as _cfg
30
30
  import tracdap.rt.exceptions as _ex
31
31
  import tracdap.rt.ext.plugins as plugins
32
- import tracdap.rt._impl.data as _data
33
- import tracdap.rt._impl.util as _util
34
- import tracdap.rt._impl.validation as _val
32
+ import tracdap.rt._impl.core.data as _data
33
+ import tracdap.rt._impl.core.logging as _logging
34
+ import tracdap.rt._impl.core.util as _util
35
+ import tracdap.rt._impl.core.validation as _val
35
36
 
36
37
  # Import storage interfaces (using the internal version, it has extra bits that are not public)
37
38
  from tracdap.rt._impl.ext.storage import *
@@ -76,11 +77,11 @@ class StorageManager:
76
77
 
77
78
  def __init__(self, sys_config: _cfg.RuntimeConfig):
78
79
 
79
- self.__log = _util.logger_for_object(self)
80
+ self.__log = _logging.logger_for_object(self)
80
81
  self.__file_storage: tp.Dict[str, IFileStorage] = dict()
81
82
  self.__data_storage: tp.Dict[str, IDataStorage] = dict()
82
83
  self.__external: tp.List[str] = list()
83
- self.__settings = sys_config.storage
84
+ self.__sys_config = sys_config
84
85
 
85
86
  for storage_key, storage_config in sys_config.storage.buckets.items():
86
87
  self.create_storage(storage_key, storage_config)
@@ -92,13 +93,20 @@ class StorageManager:
92
93
  self.create_storage(storage_key, storage_config)
93
94
 
94
95
  def default_storage_key(self):
95
- return self.__settings.defaultBucket
96
+ return self.__sys_config.storage.defaultBucket
96
97
 
97
98
  def default_storage_format(self):
98
- return self.__settings.defaultFormat
99
+ return self.__sys_config.storage.defaultFormat
99
100
 
100
101
  def create_storage(self, storage_key: str, storage_config: _cfg.PluginConfig):
101
102
 
103
+ # Add global properties related to the storage protocol
104
+ related_props = {
105
+ k: v for (k, v) in self.__sys_config.properties.items()
106
+ if k.startswith(f"{storage_config.protocol}.")}
107
+
108
+ storage_config.properties.update(related_props)
109
+
102
110
  if plugins.PluginManager.is_plugin_available(IStorageProvider, storage_config.protocol):
103
111
  self._create_storage_from_provider(storage_key, storage_config)
104
112
  else:
@@ -224,7 +232,7 @@ class CommonFileStorage(IFileStorage):
224
232
 
225
233
  def __init__(self, storage_key: str, storage_config: _cfg.PluginConfig, fs: pa_fs.SubTreeFileSystem):
226
234
 
227
- self._log = _util.logger_for_object(self)
235
+ self._log = _logging.logger_for_object(self)
228
236
  self._key = storage_key
229
237
  self._config = storage_config
230
238
  self._fs = fs
@@ -495,7 +503,10 @@ class CommonFileStorage(IFileStorage):
495
503
 
496
504
  # For successful write streams, log the total size written
497
505
  if is_write and not error:
498
- file_size = _util.format_file_size(stream.tell())
506
+ if not stream.closed:
507
+ file_size = _util.format_file_size(stream.tell())
508
+ else:
509
+ file_size = self._fs.get_file_info(storage_path).size
499
510
  self._log.info(f"File size [{self._key}]: {file_size} [{storage_path}]")
500
511
 
501
512
  # Close the stream - this may take time for write streams that are not flushed
@@ -731,7 +742,7 @@ class CommonDataStorage(IDataStorage):
731
742
  self, config: _cfg.PluginConfig, file_storage: IFileStorage,
732
743
  pushdown_pandas: bool = False, pushdown_spark: bool = False):
733
744
 
734
- self.__log = _util.logger_for_object(self)
745
+ self.__log = _logging.logger_for_object(self)
735
746
 
736
747
  self.__config = config
737
748
  self.__file_storage = file_storage