tracdap-runtime 0.6.0rc2__tar.gz → 0.6.1__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.
- {tracdap-runtime-0.6.0rc2/tracdap_runtime.egg-info → tracdap_runtime-0.6.1}/PKG-INFO +24 -23
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/README.md +4 -4
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/setup.cfg +20 -19
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/data.py +53 -16
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/models.py +12 -7
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/storage.py +4 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/util.py +20 -12
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/_helpers.py +11 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/repo_git.py +7 -1
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/repo_pypi.py +2 -1
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/storage_local.py +13 -8
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_version.py +1 -1
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/config/__init__.py +11 -16
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/config/common.py +10 -0
- tracdap_runtime-0.6.1/src/tracdap/rt/config/common_pb2.py +55 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/config/job_pb2.py +21 -20
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/config/platform.py +62 -25
- tracdap_runtime-0.6.1/src/tracdap/rt/config/platform_pb2.py +71 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/config/result_pb2.py +15 -14
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/config/runtime.py +0 -1
- tracdap_runtime-0.6.1/src/tracdap/rt/config/runtime_pb2.py +42 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/common_pb2.py +15 -14
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/custom_pb2.py +9 -8
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/data_pb2.py +31 -30
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/file_pb2.py +9 -8
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/flow_pb2.py +33 -32
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/job_pb2.py +55 -54
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/model_pb2.py +31 -30
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/object_id_pb2.py +13 -12
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/object_pb2.py +9 -8
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/search_pb2.py +19 -18
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/stoarge_pb2.py +31 -30
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/tag_pb2.py +13 -12
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/tag_update_pb2.py +11 -10
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/type_pb2.py +29 -28
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1/tracdap_runtime.egg-info}/PKG-INFO +24 -23
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/tracdap_runtime.egg-info/SOURCES.txt +0 -2
- tracdap_runtime-0.6.1/tracdap_runtime.egg-info/requires.txt +26 -0
- tracdap-runtime-0.6.0rc2/src/tracdap/rt/config/common_pb2.py +0 -48
- tracdap-runtime-0.6.0rc2/src/tracdap/rt/config/gateway.py +0 -104
- tracdap-runtime-0.6.0rc2/src/tracdap/rt/config/gateway_pb2.py +0 -45
- tracdap-runtime-0.6.0rc2/src/tracdap/rt/config/platform_pb2.py +0 -64
- tracdap-runtime-0.6.0rc2/src/tracdap/rt/config/runtime_pb2.py +0 -42
- tracdap-runtime-0.6.0rc2/tracdap_runtime.egg-info/requires.txt +0 -25
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/LICENSE +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/pyproject.toml +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/__init__.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_exec/__init__.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_exec/actors.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_exec/context.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_exec/dev_mode.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_exec/engine.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_exec/functions.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_exec/graph.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_exec/graph_builder.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_exec/runtime.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/__init__.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/config_parser.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/guard_rails.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/repos.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/schemas.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/shim.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/static_api.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/type_system.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_impl/validation.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/__init__.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/format_arrow.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/format_csv.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/format_parquet.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/repo_local.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/storage_aws.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/storage_azure.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/_plugins/storage_gcp.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/api/__init__.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/api/hook.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/api/model_api.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/api/static_api.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/config/job.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/config/result.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/exceptions.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/ext/__init__.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/ext/_guard.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/ext/embed.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/ext/plugins.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/ext/repos.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/ext/storage.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/launch/__init__.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/launch/__main__.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/launch/cli.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/launch/launch.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/__init__.py +18 -18
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/common.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/custom.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/data.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/file.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/flow.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/job.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/model.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/object.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/object_id.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/search.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/stoarge.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/tag.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/tag_update.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/src/tracdap/rt/metadata/type.py +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/tracdap_runtime.egg-info/dependency_links.txt +0 -0
- {tracdap-runtime-0.6.0rc2 → tracdap_runtime-0.6.1}/tracdap_runtime.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: tracdap-runtime
|
3
|
-
Version: 0.6.
|
3
|
+
Version: 0.6.1
|
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
|
@@ -13,30 +13,31 @@ Platform: any
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
14
14
|
Classifier: License :: OSI Approved :: Apache Software License
|
15
15
|
Classifier: Operating System :: OS Independent
|
16
|
-
Requires-Python: <3.
|
16
|
+
Requires-Python: <3.13,>=3.8
|
17
17
|
Description-Content-Type: text/markdown
|
18
18
|
License-File: LICENSE
|
19
|
-
Requires-Dist: protobuf==4.
|
20
|
-
Requires-Dist: pyarrow==
|
21
|
-
Requires-Dist: pyyaml==6.0.
|
22
|
-
Requires-Dist: dulwich==0.
|
23
|
-
Requires-Dist: requests==2.
|
24
|
-
Requires-Dist: pandas<
|
19
|
+
Requires-Dist: protobuf==4.25.3
|
20
|
+
Requires-Dist: pyarrow==16.0.0
|
21
|
+
Requires-Dist: pyyaml==6.0.1
|
22
|
+
Requires-Dist: dulwich==0.22.1
|
23
|
+
Requires-Dist: requests==2.32.3
|
24
|
+
Requires-Dist: pandas<2.3.0,>=1.2.0
|
25
|
+
Requires-Dist: numpy<2.0.0
|
25
26
|
Provides-Extra: spark
|
26
|
-
Requires-Dist: pyspark<3.
|
27
|
+
Requires-Dist: pyspark<3.6.0,>=3.0.0; extra == "spark"
|
27
28
|
Provides-Extra: aws
|
28
|
-
Requires-Dist: botocore==1.
|
29
|
-
Requires-Dist: boto3==1.
|
29
|
+
Requires-Dist: botocore==1.34.93; extra == "aws"
|
30
|
+
Requires-Dist: boto3==1.34.93; extra == "aws"
|
30
31
|
Provides-Extra: gcp
|
31
|
-
Requires-Dist: google-auth==2.
|
32
|
-
Requires-Dist: google-cloud-core==2.
|
33
|
-
Requires-Dist: google-cloud-storage==2.
|
34
|
-
Requires-Dist: gcsfs==
|
32
|
+
Requires-Dist: google-auth==2.29.0; extra == "gcp"
|
33
|
+
Requires-Dist: google-cloud-core==2.4.1; extra == "gcp"
|
34
|
+
Requires-Dist: google-cloud-storage==2.16.0; extra == "gcp"
|
35
|
+
Requires-Dist: gcsfs==2024.3.1; extra == "gcp"
|
35
36
|
Provides-Extra: azure
|
36
|
-
Requires-Dist: azure-core==1.
|
37
|
-
Requires-Dist: azure-identity==1.
|
38
|
-
Requires-Dist: azure-storage-blob==12.
|
39
|
-
Requires-Dist: adlfs==
|
37
|
+
Requires-Dist: azure-core==1.30.1; extra == "azure"
|
38
|
+
Requires-Dist: azure-identity==1.16.1; extra == "azure"
|
39
|
+
Requires-Dist: azure-storage-blob==12.19.1; extra == "azure"
|
40
|
+
Requires-Dist: adlfs==2024.4.1; extra == "azure"
|
40
41
|
|
41
42
|
# TRAC Model Runtime for Python
|
42
43
|
|
@@ -56,12 +57,12 @@ Documentation for the TRAC platform is available on our website at
|
|
56
57
|
|
57
58
|
The TRAC runtime for Python has these requirements:
|
58
59
|
|
59
|
-
* Python: 3.8 up to 3.
|
60
|
-
* Pandas: 1.2 up to
|
61
|
-
* PySpark 3.0 up to 3.
|
60
|
+
* Python: 3.8 up to 3.12
|
61
|
+
* Pandas: 1.2 up to 2.2
|
62
|
+
* PySpark 3.0 up to 3.5 (optional)
|
62
63
|
|
63
64
|
3rd party libraries may impose additional constraints on supported versions of Python, Pandas or PySpark.
|
64
|
-
|
65
|
+
As of February 2024, the Python libraries for GCP do not yet support Python 3.12.
|
65
66
|
|
66
67
|
## Installing the runtime
|
67
68
|
|
@@ -16,12 +16,12 @@ Documentation for the TRAC platform is available on our website at
|
|
16
16
|
|
17
17
|
The TRAC runtime for Python has these requirements:
|
18
18
|
|
19
|
-
* Python: 3.8 up to 3.
|
20
|
-
* Pandas: 1.2 up to
|
21
|
-
* PySpark 3.0 up to 3.
|
19
|
+
* Python: 3.8 up to 3.12
|
20
|
+
* Pandas: 1.2 up to 2.2
|
21
|
+
* PySpark 3.0 up to 3.5 (optional)
|
22
22
|
|
23
23
|
3rd party libraries may impose additional constraints on supported versions of Python, Pandas or PySpark.
|
24
|
-
|
24
|
+
As of February 2024, the Python libraries for GCP do not yet support Python 3.12.
|
25
25
|
|
26
26
|
## Installing the runtime
|
27
27
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[metadata]
|
2
2
|
name = tracdap-runtime
|
3
|
-
version = 0.6.
|
3
|
+
version = 0.6.1
|
4
4
|
description = Runtime package for building models on the TRAC Data & Analytics Platform
|
5
5
|
long_description = file: README.md
|
6
6
|
long_description_content_type = text/markdown
|
@@ -32,32 +32,33 @@ packages =
|
|
32
32
|
package_dir =
|
33
33
|
tracdap = src/tracdap
|
34
34
|
tracdap.rt = src/tracdap/rt
|
35
|
-
python_requires = >= 3.8, < 3.
|
35
|
+
python_requires = >= 3.8, < 3.13
|
36
36
|
install_requires =
|
37
|
-
protobuf == 4.
|
38
|
-
pyarrow ==
|
39
|
-
pyyaml == 6.0.
|
40
|
-
dulwich == 0.
|
41
|
-
requests == 2.
|
37
|
+
protobuf == 4.25.3
|
38
|
+
pyarrow == 16.0.0
|
39
|
+
pyyaml == 6.0.1
|
40
|
+
dulwich == 0.22.1
|
41
|
+
requests == 2.32.3
|
42
42
|
|
43
|
-
pandas >= 1.2.0, <
|
43
|
+
pandas >= 1.2.0, < 2.3.0
|
44
|
+
numpy < 2.0.0
|
44
45
|
|
45
46
|
[options.extras_require]
|
46
47
|
spark =
|
47
|
-
pyspark >= 3.0.0, < 3.
|
48
|
+
pyspark >= 3.0.0, < 3.6.0
|
48
49
|
aws =
|
49
|
-
botocore == 1.
|
50
|
-
boto3 == 1.
|
50
|
+
botocore == 1.34.93
|
51
|
+
boto3 == 1.34.93
|
51
52
|
gcp =
|
52
|
-
google-auth == 2.
|
53
|
-
google-cloud-core == 2.
|
54
|
-
google-cloud-storage == 2.
|
55
|
-
gcsfs ==
|
53
|
+
google-auth == 2.29.0
|
54
|
+
google-cloud-core == 2.4.1
|
55
|
+
google-cloud-storage == 2.16.0
|
56
|
+
gcsfs == 2024.3.1
|
56
57
|
azure =
|
57
|
-
azure-core == 1.
|
58
|
-
azure-identity == 1.
|
59
|
-
azure-storage-blob == 12.
|
60
|
-
adlfs ==
|
58
|
+
azure-core == 1.30.1
|
59
|
+
azure-identity == 1.16.1
|
60
|
+
azure-storage-blob == 12.19.1
|
61
|
+
adlfs == 2024.4.1
|
61
62
|
|
62
63
|
[egg_info]
|
63
64
|
tag_build =
|
@@ -74,11 +74,7 @@ class DataView:
|
|
74
74
|
|
75
75
|
|
76
76
|
class _DataInternal:
|
77
|
-
|
78
|
-
@staticmethod
|
79
|
-
def float_dtype_check():
|
80
|
-
if "Float64Dtype" not in pd.__dict__:
|
81
|
-
raise _ex.EStartup("TRAC D.A.P. requires Pandas >= 1.2")
|
77
|
+
pass
|
82
78
|
|
83
79
|
|
84
80
|
class DataMapping:
|
@@ -111,8 +107,40 @@ class DataMapping:
|
|
111
107
|
}
|
112
108
|
|
113
109
|
# Check the Pandas dtypes for handling floats are available before setting up the type mapping
|
114
|
-
|
115
|
-
|
110
|
+
__PANDAS_VERSION_ELEMENTS = pd.__version__.split(".")
|
111
|
+
__PANDAS_MAJOR_VERSION = int(__PANDAS_VERSION_ELEMENTS[0])
|
112
|
+
__PANDAS_MINOR_VERSION = int(__PANDAS_VERSION_ELEMENTS[1])
|
113
|
+
|
114
|
+
if __PANDAS_MAJOR_VERSION == 2:
|
115
|
+
|
116
|
+
__PANDAS_DATE_TYPE = pd.to_datetime([dt.date(2000, 1, 1)]).as_unit(__TRAC_TIMESTAMP_UNIT).dtype
|
117
|
+
__PANDAS_DATETIME_TYPE = pd.to_datetime([dt.datetime(2000, 1, 1, 0, 0, 0)]).as_unit(__TRAC_TIMESTAMP_UNIT).dtype
|
118
|
+
|
119
|
+
@classmethod
|
120
|
+
def __pandas_datetime_type(cls, tz, unit):
|
121
|
+
if tz is None and unit is None:
|
122
|
+
return cls.__PANDAS_DATETIME_TYPE
|
123
|
+
_unit = unit if unit is not None else cls.__TRAC_TIMESTAMP_UNIT
|
124
|
+
if tz is None:
|
125
|
+
return pd.to_datetime([dt.datetime(2000, 1, 1, 0, 0, 0)]).as_unit(_unit).dtype
|
126
|
+
else:
|
127
|
+
return pd.DatetimeTZDtype(tz=tz, unit=_unit)
|
128
|
+
|
129
|
+
# Minimum supported version for Pandas is 1.2, when pd.Float64Dtype was introduced
|
130
|
+
elif __PANDAS_MAJOR_VERSION == 1 and __PANDAS_MINOR_VERSION >= 2:
|
131
|
+
|
132
|
+
__PANDAS_DATE_TYPE = pd.to_datetime([dt.date(2000, 1, 1)]).dtype
|
133
|
+
__PANDAS_DATETIME_TYPE = pd.to_datetime([dt.datetime(2000, 1, 1, 0, 0, 0)]).dtype
|
134
|
+
|
135
|
+
@classmethod
|
136
|
+
def __pandas_datetime_type(cls, tz, unit): # noqa
|
137
|
+
if tz is None:
|
138
|
+
return cls.__PANDAS_DATETIME_TYPE
|
139
|
+
else:
|
140
|
+
return pd.DatetimeTZDtype(tz=tz)
|
141
|
+
|
142
|
+
else:
|
143
|
+
raise _ex.EStartup(f"Pandas version not supported: [{pd.__version__}]")
|
116
144
|
|
117
145
|
# Only partial mapping is possible, decimal and temporal dtypes cannot be mapped this way
|
118
146
|
__ARROW_TO_PANDAS_TYPE_MAPPING = {
|
@@ -224,8 +252,12 @@ class DataMapping:
|
|
224
252
|
cls.__TRAC_DECIMAL_SCALE)
|
225
253
|
|
226
254
|
@classmethod
|
227
|
-
def
|
228
|
-
return cls.
|
255
|
+
def pandas_date_type(cls):
|
256
|
+
return cls.__PANDAS_DATE_TYPE
|
257
|
+
|
258
|
+
@classmethod
|
259
|
+
def pandas_datetime_type(cls, tz=None, unit=None):
|
260
|
+
return cls.__pandas_datetime_type(tz, unit)
|
229
261
|
|
230
262
|
@classmethod
|
231
263
|
def view_to_pandas(
|
@@ -297,6 +329,7 @@ class DataMapping:
|
|
297
329
|
else:
|
298
330
|
DataConformance.check_duplicate_fields(table.schema.names, False)
|
299
331
|
|
332
|
+
# Use Arrow's built-in function to convert to Pandas
|
300
333
|
return table.to_pandas(
|
301
334
|
|
302
335
|
# Mapping for arrow -> pandas types for core types
|
@@ -463,7 +496,7 @@ class DataConformance:
|
|
463
496
|
|
464
497
|
table_column: pa.Array = table.column(table_index)
|
465
498
|
|
466
|
-
pandas_type = pandas_types[table_index] \
|
499
|
+
pandas_type = pandas_types.iloc[table_index] \
|
467
500
|
if pandas_types is not None \
|
468
501
|
else None
|
469
502
|
|
@@ -691,16 +724,20 @@ class DataConformance:
|
|
691
724
|
@classmethod
|
692
725
|
def _coerce_date(cls, vector: pa.Array, field: pa.Field, pandas_type=None) -> pa.Array:
|
693
726
|
|
694
|
-
#
|
727
|
+
# The bit-width restriction could be removed here
|
728
|
+
# For date types there is never loss of precision and pa.cast will raise an error on overflow
|
729
|
+
# Impact to client code is unlikely, still this change should happen with a TRAC minor version update
|
695
730
|
if pa.types.is_date(vector.type):
|
696
731
|
if field.type.bit_width >= vector.type.bit_width:
|
697
732
|
return pc.cast(vector, field.type)
|
698
733
|
|
699
|
-
# Special handling for Pandas/NumPy
|
700
|
-
#
|
701
|
-
#
|
702
|
-
|
703
|
-
|
734
|
+
# Special handling for date values coming from Pandas/NumPy
|
735
|
+
# Only allow these conversions if the vector is supplied with Pandas type info
|
736
|
+
# For Pandas 1.x, dates are always encoded as np.datetime64[ns]
|
737
|
+
# For Pandas 2.x dates are still np.datetime64 but can be in s, ms, us or ns
|
738
|
+
# This conversion will not apply to dates held in Pandas using the Python date object types
|
739
|
+
if pandas_type is not None:
|
740
|
+
if pa.types.is_timestamp(vector.type) and pd.api.types.is_datetime64_any_dtype(pandas_type):
|
704
741
|
return pc.cast(vector, field.type)
|
705
742
|
|
706
743
|
error_message = cls._format_error(cls.__E_WRONG_DATA_TYPE, vector, field)
|
@@ -44,21 +44,24 @@ class ModelLoader:
|
|
44
44
|
self.__log = _util.logger_for_object(self)
|
45
45
|
|
46
46
|
self.__scratch_dir = scratch_dir.joinpath("models")
|
47
|
-
self.__scratch_dir.mkdir(exist_ok=True, parents=False, mode=0o750)
|
48
|
-
|
49
47
|
self.__repos = _repos.RepositoryManager(sys_config)
|
50
48
|
self.__scopes: tp.Dict[str, ModelLoader._ScopeState] = dict()
|
51
49
|
|
50
|
+
safe_scratch_dir = _util.windows_unc_path(self.__scratch_dir)
|
51
|
+
safe_scratch_dir.mkdir(exist_ok=True, parents=False, mode=0o750)
|
52
|
+
|
52
53
|
def create_scope(self, scope: str):
|
53
54
|
|
54
55
|
try:
|
55
56
|
|
56
57
|
self.__log.info(f"Creating model scope [{scope}]")
|
57
58
|
|
58
|
-
|
59
|
-
scope_scratch_dir.mkdir(exist_ok=False, parents=False, mode=0o750)
|
59
|
+
scope_dir = self.__scratch_dir.joinpath(scope)
|
60
60
|
|
61
|
-
|
61
|
+
safe_scope_dir = _util.windows_unc_path(scope_dir)
|
62
|
+
safe_scope_dir.mkdir(exist_ok=False, parents=False, mode=0o750)
|
63
|
+
|
64
|
+
scope_state = ModelLoader._ScopeState(scope_dir)
|
62
65
|
self.__scopes[scope] = scope_state
|
63
66
|
|
64
67
|
except FileExistsError as e:
|
@@ -152,7 +155,9 @@ class ModelLoader:
|
|
152
155
|
# What gets cached is the checkout, which may contain multiple packages depending on the repo type
|
153
156
|
|
154
157
|
else:
|
155
|
-
|
158
|
+
safe_checkout_dir = _util.windows_unc_path(checkout_dir)
|
159
|
+
safe_checkout_dir.mkdir(mode=0o750, parents=True, exist_ok=False)
|
160
|
+
|
156
161
|
package_dir = repo.do_checkout(model_def, checkout_dir)
|
157
162
|
|
158
163
|
scope_state.code_cache[code_cache_key] = checkout_dir
|
@@ -189,7 +194,7 @@ class ModelLoader:
|
|
189
194
|
|
190
195
|
try:
|
191
196
|
|
192
|
-
model: _api.TracModel =
|
197
|
+
model: _api.TracModel = _api.TracModel.__new__(model_class)
|
193
198
|
model_class.__init__(model)
|
194
199
|
|
195
200
|
attributes = model.define_attributes()
|
@@ -214,6 +214,10 @@ class CommonFileStorage(IFileStorage):
|
|
214
214
|
fs_impl = "arrow"
|
215
215
|
fs_root = fs.base_path
|
216
216
|
|
217
|
+
# On Windows, sanitise UNC root paths for logging
|
218
|
+
if _util.is_windows() and fs_root.startswith("//?/"):
|
219
|
+
fs_root = fs_root[4:]
|
220
|
+
|
217
221
|
# If this is an FSSpec implementation, take the protocol from FSSpec as the FS type
|
218
222
|
base_fs = fs.base_fs
|
219
223
|
if isinstance(base_fs, pa_fs.PyFileSystem):
|
@@ -264,27 +264,25 @@ def get_args(metaclass: type):
|
|
264
264
|
|
265
265
|
def try_clean_dir(dir_path: pathlib.Path, remove: bool = False) -> bool:
|
266
266
|
|
267
|
+
normalized_path = windows_unc_path(dir_path)
|
268
|
+
|
269
|
+
return __try_clean_dir(normalized_path, remove)
|
270
|
+
|
271
|
+
|
272
|
+
def __try_clean_dir(normalized_path, remove):
|
273
|
+
|
267
274
|
clean_ok = True
|
268
|
-
normalized_path = dir_path.resolve()
|
269
275
|
|
270
276
|
for item in normalized_path.iterdir():
|
271
277
|
|
272
278
|
if item.is_dir():
|
273
|
-
clean_ok &=
|
279
|
+
clean_ok &= __try_clean_dir(item, remove=True)
|
274
280
|
|
275
281
|
else:
|
276
282
|
try:
|
277
|
-
|
278
|
-
# In Python the path string does not include a nul, so we need to limit to 259 characters
|
279
|
-
if is_windows() and len(str(item)) >= 259 and not str(item).startswith("\\\\?\\"):
|
280
|
-
unc_item = pathlib.Path("\\\\?\\" + str(item))
|
281
|
-
unc_item.unlink()
|
282
|
-
return True
|
283
|
-
else:
|
284
|
-
item.unlink()
|
285
|
-
return True
|
283
|
+
item.unlink()
|
286
284
|
except Exception as e: # noqa
|
287
|
-
|
285
|
+
clean_ok = False
|
288
286
|
|
289
287
|
if remove:
|
290
288
|
try:
|
@@ -294,6 +292,16 @@ def try_clean_dir(dir_path: pathlib.Path, remove: bool = False) -> bool:
|
|
294
292
|
return False
|
295
293
|
|
296
294
|
|
295
|
+
def windows_unc_path(path: pathlib.Path) -> pathlib.Path:
|
296
|
+
|
297
|
+
# Convert a path to its UNC form on Windows
|
298
|
+
|
299
|
+
if is_windows() and not str(path).startswith("\\\\?\\"):
|
300
|
+
return pathlib.Path("\\\\?\\" + str(path.resolve()))
|
301
|
+
else:
|
302
|
+
return path
|
303
|
+
|
304
|
+
|
297
305
|
def error_details_from_trace(trace: tb.StackSummary):
|
298
306
|
last_frame = trace[len(trace) - 1]
|
299
307
|
filename = pathlib.PurePath(last_frame.filename).name
|
@@ -18,6 +18,7 @@
|
|
18
18
|
# And we don't want to put them .ext, those are public APIs that need to be maintained
|
19
19
|
|
20
20
|
import logging
|
21
|
+
import pathlib
|
21
22
|
import platform
|
22
23
|
import urllib.parse
|
23
24
|
import typing as tp
|
@@ -180,6 +181,16 @@ def is_windows():
|
|
180
181
|
return __IS_WINDOWS
|
181
182
|
|
182
183
|
|
184
|
+
def windows_unc_path(path: pathlib.Path) -> pathlib.Path:
|
185
|
+
|
186
|
+
# Convert a path to its UNC form on Windows
|
187
|
+
|
188
|
+
if is_windows() and not str(path).startswith("\\\\?\\"):
|
189
|
+
return pathlib.Path("\\\\?\\" + str(path.resolve()))
|
190
|
+
else:
|
191
|
+
return path
|
192
|
+
|
193
|
+
|
183
194
|
def logger_for_object(obj: object) -> logging.Logger:
|
184
195
|
return logger_for_class(obj.__class__)
|
185
196
|
|
@@ -93,6 +93,11 @@ class GitRepository(IModelRepository):
|
|
93
93
|
|
94
94
|
self._log.info(f"Checkout mechanism: [native]")
|
95
95
|
|
96
|
+
# Using windows_safe_path() to create UNC paths does not always work with Windows native Git
|
97
|
+
# So, use the regular checkout_dir, and set core.longpaths = true once the repo is created
|
98
|
+
# This will fail if the path for the repo config file exceeds the Windows MAX_PATH length
|
99
|
+
# I.e. checkout_dir/.git/config
|
100
|
+
|
96
101
|
git_cli = ["git", "-C", str(checkout_dir)]
|
97
102
|
|
98
103
|
git_cmds = [
|
@@ -169,7 +174,8 @@ class GitRepository(IModelRepository):
|
|
169
174
|
|
170
175
|
self._log.info("=> git init")
|
171
176
|
|
172
|
-
|
177
|
+
safe_checkout_dir = _helpers.windows_unc_path(checkout_dir)
|
178
|
+
repo = git_repo.Repo.init(str(safe_checkout_dir))
|
173
179
|
self._apply_config_from_properties(repo)
|
174
180
|
|
175
181
|
# Set up origin
|
@@ -98,8 +98,9 @@ class PyPiRepository(IModelRepository):
|
|
98
98
|
|
99
99
|
self._log.info(f"Downloaded [{len(content) / 1024:.1f}] KB in [{elapsed.total_seconds():.1f}] seconds")
|
100
100
|
|
101
|
+
safe_checkout_dir = _helpers.windows_unc_path(checkout_dir)
|
101
102
|
download_whl = zipfile.ZipFile(io.BytesIO(download_req.content))
|
102
|
-
download_whl.extractall(
|
103
|
+
download_whl.extractall(safe_checkout_dir)
|
103
104
|
|
104
105
|
self._log.info(f"Unpacked [{len(download_whl.filelist)}] files")
|
105
106
|
self._log.info(f"PyPI checkout succeeded for {model_def.package} {model_def.version}")
|
@@ -61,7 +61,9 @@ class LocalStorageProvider(IStorageProvider):
|
|
61
61
|
|
62
62
|
def get_arrow_native(self) -> afs.SubTreeFileSystem:
|
63
63
|
root_fs = afs.LocalFileSystem()
|
64
|
-
|
64
|
+
# Use a UNC root path on Windows to avoid max path length issues
|
65
|
+
sub_tree_path = _helpers.windows_unc_path(self._root_path)
|
66
|
+
return afs.SubTreeFileSystem(str(sub_tree_path), root_fs)
|
65
67
|
|
66
68
|
def get_file_storage(self) -> IFileStorage:
|
67
69
|
|
@@ -140,10 +142,9 @@ class LocalFileStorage(IFileStorage):
|
|
140
142
|
self._properties = config.properties
|
141
143
|
self._options = options # Not used
|
142
144
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
return self._root_path
|
145
|
+
# Use a UNC root path on Windows to avoid max path length issues
|
146
|
+
self._raw_root_path = LocalStorageProvider.check_root_path(self._properties, self._log)
|
147
|
+
self._root_path = _helpers.windows_unc_path(self._raw_root_path)
|
147
148
|
|
148
149
|
def exists(self, storage_path: str) -> bool:
|
149
150
|
|
@@ -358,8 +359,12 @@ class LocalFileStorage(IFileStorage):
|
|
358
359
|
if relative_path.is_absolute():
|
359
360
|
raise ex.EStorageValidation(f"Storage path is not relative: {operation_name} [{storage_path}]")
|
360
361
|
|
361
|
-
|
362
|
-
|
362
|
+
# UNC paths on Windows have different behaviour for join / resolve
|
363
|
+
# Work on the raw path, then convert back to UNC afterward
|
364
|
+
# For other OSes, this is a no-op
|
365
|
+
|
366
|
+
root_path = self._raw_root_path
|
367
|
+
absolute_path = self._raw_root_path.joinpath(relative_path).resolve(False)
|
363
368
|
|
364
369
|
# is_relative_to only supported in Python 3.9+, we need to support 3.7
|
365
370
|
if absolute_path != root_path and root_path not in absolute_path.parents:
|
@@ -368,7 +373,7 @@ class LocalFileStorage(IFileStorage):
|
|
368
373
|
if absolute_path == root_path and not allow_root_dir:
|
369
374
|
raise ex.EStorageValidation(f"Illegal operation for storage root: {operation_name} [{storage_path}]")
|
370
375
|
|
371
|
-
return absolute_path
|
376
|
+
return _helpers.windows_unc_path(absolute_path)
|
372
377
|
|
373
378
|
except ValueError as e:
|
374
379
|
|
@@ -4,32 +4,27 @@ from .common import _ConfigFile
|
|
4
4
|
from .common import PluginConfig
|
5
5
|
from .common import PlatformInfo
|
6
6
|
from .common import AuthenticationConfig
|
7
|
+
from .common import StorageConfig
|
7
8
|
|
9
|
+
from .runtime import RuntimeConfig
|
10
|
+
from .runtime import SparkSettings
|
11
|
+
|
12
|
+
from .platform import RoutingProtocol
|
13
|
+
from .platform import DeploymentLayout
|
8
14
|
from .platform import PlatformConfig
|
9
15
|
from .platform import MetadataConfig
|
10
|
-
from .platform import StorageConfig
|
11
16
|
from .platform import TenantConfig
|
12
17
|
from .platform import WebServerConfig
|
13
18
|
from .platform import WebServerRewriteRule
|
14
19
|
from .platform import WebServerRedirect
|
15
|
-
from .platform import
|
16
|
-
from .platform import
|
17
|
-
from .platform import
|
20
|
+
from .platform import GatewayConfig
|
21
|
+
from .platform import RouteConfig
|
22
|
+
from .platform import RoutingMatch
|
23
|
+
from .platform import RoutingTarget
|
18
24
|
from .platform import ServiceConfig
|
19
|
-
|
20
|
-
from .runtime import RuntimeConfig
|
21
|
-
from .runtime import SparkSettings
|
25
|
+
from .platform import DeploymentConfig
|
22
26
|
|
23
27
|
from .result import TagUpdateList
|
24
28
|
from .result import JobResult
|
25
29
|
|
26
30
|
from .job import JobConfig
|
27
|
-
|
28
|
-
from .gateway import GwProtocol
|
29
|
-
from .gateway import GwRestMapping
|
30
|
-
from .gateway import GatewayConfig
|
31
|
-
from .gateway import GwRoute
|
32
|
-
from .gateway import GwMatch
|
33
|
-
from .gateway import GwTarget
|
34
|
-
from .gateway import GwServiceMap
|
35
|
-
from .gateway import GwService
|
@@ -56,3 +56,13 @@ class AuthenticationConfig:
|
|
56
56
|
systemTicketDuration: int = None
|
57
57
|
|
58
58
|
systemTicketRefresh: int = None
|
59
|
+
|
60
|
+
|
61
|
+
@_dc.dataclass
|
62
|
+
class StorageConfig:
|
63
|
+
|
64
|
+
buckets: _tp.Dict[str, PluginConfig] = _dc.field(default_factory=dict)
|
65
|
+
|
66
|
+
defaultBucket: str = None
|
67
|
+
|
68
|
+
defaultFormat: str = None
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
# source: tracdap/config/common.proto
|
4
|
+
# Protobuf Python Version: 4.25.3
|
5
|
+
"""Generated protocol buffer code."""
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
9
|
+
from google.protobuf.internal import builder as _builder
|
10
|
+
# @@protoc_insertion_point(imports)
|
11
|
+
|
12
|
+
_sym_db = _symbol_database.Default()
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1btracdap/config/common.proto\x12\x0etracdap.config\"u\n\x0b_ConfigFile\x12\x37\n\x06\x63onfig\x18\x01 \x03(\x0b\x32\'.tracdap.config._ConfigFile.ConfigEntry\x1a-\n\x0b\x43onfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x81\x02\n\x0cPluginConfig\x12\x10\n\x08protocol\x18\x01 \x01(\t\x12@\n\nproperties\x18\x02 \x03(\x0b\x32,.tracdap.config.PluginConfig.PropertiesEntry\x12:\n\x07secrets\x18\x03 \x03(\x0b\x32).tracdap.config.PluginConfig.SecretsEntry\x1a\x31\n\x0fPropertiesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a.\n\x0cSecretsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb8\x01\n\x0cPlatformInfo\x12\x13\n\x0b\x65nvironment\x18\x01 \x01(\t\x12\x12\n\nproduction\x18\x02 \x01(\x08\x12H\n\x0e\x64\x65ploymentInfo\x18\x03 \x03(\x0b\x32\x30.tracdap.config.PlatformInfo.DeploymentInfoEntry\x1a\x35\n\x13\x44\x65ploymentInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xba\x02\n\x14\x41uthenticationConfig\x12\x11\n\tjwtIssuer\x18\x01 \x01(\t\x12\x11\n\tjwtExpiry\x18\x02 \x01(\x11\x12\x10\n\x08jwtLimit\x18\x06 \x01(\x11\x12\x12\n\njwtRefresh\x18\x07 \x01(\x11\x12\x33\n\x08provider\x18\x03 \x01(\x0b\x32\x1c.tracdap.config.PluginConfigH\x00\x88\x01\x01\x12\x13\n\x0b\x64isableAuth\x18\x04 \x01(\x08\x12\x16\n\x0e\x64isableSigning\x18\x05 \x01(\x08\x12\x14\n\x0csystemUserId\x18\x08 \x01(\t\x12\x16\n\x0esystemUserName\x18\t \x01(\t\x12\x1c\n\x14systemTicketDuration\x18\n \x01(\x11\x12\x1b\n\x13systemTicketRefresh\x18\x0b \x01(\x11\x42\x0b\n\t_provider\"\xc8\x01\n\rStorageConfig\x12;\n\x07\x62uckets\x18\x01 \x03(\x0b\x32*.tracdap.config.StorageConfig.BucketsEntry\x12\x15\n\rdefaultBucket\x18\x02 \x01(\t\x12\x15\n\rdefaultFormat\x18\x03 \x01(\t\x1aL\n\x0c\x42ucketsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.tracdap.config.PluginConfig:\x02\x38\x01\x42\x1c\n\x18org.finos.tracdap.configP\x01\x62\x06proto3')
|
18
|
+
|
19
|
+
_globals = globals()
|
20
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
21
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'tracdap.config.common_pb2', _globals)
|
22
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
23
|
+
_globals['DESCRIPTOR']._options = None
|
24
|
+
_globals['DESCRIPTOR']._serialized_options = b'\n\030org.finos.tracdap.configP\001'
|
25
|
+
_globals['__CONFIGFILE_CONFIGENTRY']._options = None
|
26
|
+
_globals['__CONFIGFILE_CONFIGENTRY']._serialized_options = b'8\001'
|
27
|
+
_globals['_PLUGINCONFIG_PROPERTIESENTRY']._options = None
|
28
|
+
_globals['_PLUGINCONFIG_PROPERTIESENTRY']._serialized_options = b'8\001'
|
29
|
+
_globals['_PLUGINCONFIG_SECRETSENTRY']._options = None
|
30
|
+
_globals['_PLUGINCONFIG_SECRETSENTRY']._serialized_options = b'8\001'
|
31
|
+
_globals['_PLATFORMINFO_DEPLOYMENTINFOENTRY']._options = None
|
32
|
+
_globals['_PLATFORMINFO_DEPLOYMENTINFOENTRY']._serialized_options = b'8\001'
|
33
|
+
_globals['_STORAGECONFIG_BUCKETSENTRY']._options = None
|
34
|
+
_globals['_STORAGECONFIG_BUCKETSENTRY']._serialized_options = b'8\001'
|
35
|
+
_globals['__CONFIGFILE']._serialized_start=47
|
36
|
+
_globals['__CONFIGFILE']._serialized_end=164
|
37
|
+
_globals['__CONFIGFILE_CONFIGENTRY']._serialized_start=119
|
38
|
+
_globals['__CONFIGFILE_CONFIGENTRY']._serialized_end=164
|
39
|
+
_globals['_PLUGINCONFIG']._serialized_start=167
|
40
|
+
_globals['_PLUGINCONFIG']._serialized_end=424
|
41
|
+
_globals['_PLUGINCONFIG_PROPERTIESENTRY']._serialized_start=327
|
42
|
+
_globals['_PLUGINCONFIG_PROPERTIESENTRY']._serialized_end=376
|
43
|
+
_globals['_PLUGINCONFIG_SECRETSENTRY']._serialized_start=378
|
44
|
+
_globals['_PLUGINCONFIG_SECRETSENTRY']._serialized_end=424
|
45
|
+
_globals['_PLATFORMINFO']._serialized_start=427
|
46
|
+
_globals['_PLATFORMINFO']._serialized_end=611
|
47
|
+
_globals['_PLATFORMINFO_DEPLOYMENTINFOENTRY']._serialized_start=558
|
48
|
+
_globals['_PLATFORMINFO_DEPLOYMENTINFOENTRY']._serialized_end=611
|
49
|
+
_globals['_AUTHENTICATIONCONFIG']._serialized_start=614
|
50
|
+
_globals['_AUTHENTICATIONCONFIG']._serialized_end=928
|
51
|
+
_globals['_STORAGECONFIG']._serialized_start=931
|
52
|
+
_globals['_STORAGECONFIG']._serialized_end=1131
|
53
|
+
_globals['_STORAGECONFIG_BUCKETSENTRY']._serialized_start=1055
|
54
|
+
_globals['_STORAGECONFIG_BUCKETSENTRY']._serialized_end=1131
|
55
|
+
# @@protoc_insertion_point(module_scope)
|