runnable 0.13.0__py3-none-any.whl → 0.16.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.
- runnable/__init__.py +1 -12
- runnable/catalog.py +29 -5
- runnable/cli.py +268 -215
- runnable/context.py +10 -3
- runnable/datastore.py +212 -53
- runnable/defaults.py +13 -55
- runnable/entrypoints.py +270 -183
- runnable/exceptions.py +28 -2
- runnable/executor.py +133 -86
- runnable/graph.py +37 -13
- runnable/nodes.py +50 -22
- runnable/parameters.py +27 -8
- runnable/pickler.py +1 -1
- runnable/sdk.py +230 -66
- runnable/secrets.py +3 -1
- runnable/tasks.py +99 -41
- runnable/utils.py +59 -39
- {runnable-0.13.0.dist-info → runnable-0.16.0.dist-info}/METADATA +28 -31
- runnable-0.16.0.dist-info/RECORD +23 -0
- {runnable-0.13.0.dist-info → runnable-0.16.0.dist-info}/WHEEL +1 -1
- runnable-0.16.0.dist-info/entry_points.txt +45 -0
- runnable/extensions/__init__.py +0 -0
- runnable/extensions/catalog/__init__.py +0 -21
- runnable/extensions/catalog/file_system/__init__.py +0 -0
- runnable/extensions/catalog/file_system/implementation.py +0 -234
- runnable/extensions/catalog/k8s_pvc/__init__.py +0 -0
- runnable/extensions/catalog/k8s_pvc/implementation.py +0 -16
- runnable/extensions/catalog/k8s_pvc/integration.py +0 -59
- runnable/extensions/executor/__init__.py +0 -649
- runnable/extensions/executor/argo/__init__.py +0 -0
- runnable/extensions/executor/argo/implementation.py +0 -1194
- runnable/extensions/executor/argo/specification.yaml +0 -51
- runnable/extensions/executor/k8s_job/__init__.py +0 -0
- runnable/extensions/executor/k8s_job/implementation_FF.py +0 -259
- runnable/extensions/executor/k8s_job/integration_FF.py +0 -69
- runnable/extensions/executor/local.py +0 -69
- runnable/extensions/executor/local_container/__init__.py +0 -0
- runnable/extensions/executor/local_container/implementation.py +0 -446
- runnable/extensions/executor/mocked/__init__.py +0 -0
- runnable/extensions/executor/mocked/implementation.py +0 -154
- runnable/extensions/executor/retry/__init__.py +0 -0
- runnable/extensions/executor/retry/implementation.py +0 -168
- runnable/extensions/nodes.py +0 -870
- runnable/extensions/run_log_store/__init__.py +0 -0
- runnable/extensions/run_log_store/chunked_file_system/__init__.py +0 -0
- runnable/extensions/run_log_store/chunked_file_system/implementation.py +0 -111
- runnable/extensions/run_log_store/chunked_k8s_pvc/__init__.py +0 -0
- runnable/extensions/run_log_store/chunked_k8s_pvc/implementation.py +0 -21
- runnable/extensions/run_log_store/chunked_k8s_pvc/integration.py +0 -61
- runnable/extensions/run_log_store/db/implementation_FF.py +0 -157
- runnable/extensions/run_log_store/db/integration_FF.py +0 -0
- runnable/extensions/run_log_store/file_system/__init__.py +0 -0
- runnable/extensions/run_log_store/file_system/implementation.py +0 -140
- runnable/extensions/run_log_store/generic_chunked.py +0 -557
- runnable/extensions/run_log_store/k8s_pvc/__init__.py +0 -0
- runnable/extensions/run_log_store/k8s_pvc/implementation.py +0 -21
- runnable/extensions/run_log_store/k8s_pvc/integration.py +0 -56
- runnable/extensions/secrets/__init__.py +0 -0
- runnable/extensions/secrets/dotenv/__init__.py +0 -0
- runnable/extensions/secrets/dotenv/implementation.py +0 -100
- runnable/integration.py +0 -192
- runnable-0.13.0.dist-info/RECORD +0 -63
- runnable-0.13.0.dist-info/entry_points.txt +0 -41
- {runnable-0.13.0.dist-info → runnable-0.16.0.dist-info/licenses}/LICENSE +0 -0
@@ -1,100 +0,0 @@
|
|
1
|
-
import logging
|
2
|
-
import os
|
3
|
-
|
4
|
-
from runnable import defaults, exceptions, utils
|
5
|
-
from runnable.secrets import BaseSecrets
|
6
|
-
|
7
|
-
logger = logging.getLogger(defaults.LOGGER_NAME)
|
8
|
-
|
9
|
-
|
10
|
-
class DotEnvSecrets(BaseSecrets):
|
11
|
-
"""
|
12
|
-
A secret manager which uses .env files for secrets.
|
13
|
-
|
14
|
-
We recommend this secrets manager only for local development and should not be used for anything close to
|
15
|
-
production.
|
16
|
-
"""
|
17
|
-
|
18
|
-
service_name: str = "dotenv"
|
19
|
-
location: str = defaults.DOTENV_FILE_LOCATION
|
20
|
-
secrets: dict = {}
|
21
|
-
|
22
|
-
@property
|
23
|
-
def secrets_location(self):
|
24
|
-
"""
|
25
|
-
Return the location of the .env file.
|
26
|
-
If the user has not over-ridden it, it defaults to .env file in the project root.
|
27
|
-
|
28
|
-
Returns:
|
29
|
-
str: The location of the secrets file
|
30
|
-
"""
|
31
|
-
return self.location
|
32
|
-
|
33
|
-
def _load_secrets(self):
|
34
|
-
"""
|
35
|
-
We assume that a dotenv file is of format,
|
36
|
-
key=value -> secrets[key]='value'
|
37
|
-
key=value# comment -> secrets[key1]='value1'
|
38
|
-
key=value2 # comment. -> secrets[key2]='value2'
|
39
|
-
|
40
|
-
Any of the above formats with export or set in front of them.
|
41
|
-
|
42
|
-
We strip the secret value of any empty spaces at the start and end.
|
43
|
-
|
44
|
-
Raises:
|
45
|
-
Exception: If the file at secrets_location is not found.
|
46
|
-
Exception: If the secrets are not formatted correctly.
|
47
|
-
"""
|
48
|
-
# It was loaded in the previous call and need not to be reloaded
|
49
|
-
if self.secrets:
|
50
|
-
return
|
51
|
-
|
52
|
-
secrets_location = self.secrets_location
|
53
|
-
if not utils.does_file_exist(secrets_location):
|
54
|
-
raise Exception(f"Did not find the secrets file in {secrets_location}")
|
55
|
-
|
56
|
-
with open(secrets_location, "r") as fr:
|
57
|
-
for secret_line in fr:
|
58
|
-
# The order of removing fluff around the expression
|
59
|
-
# the new line
|
60
|
-
# the comment
|
61
|
-
# the white space
|
62
|
-
# Any export or set in front of the key any spaces after that.
|
63
|
-
|
64
|
-
secret_line = secret_line.strip(os.linesep).split("#")[0].strip()
|
65
|
-
|
66
|
-
if secret_line == "":
|
67
|
-
continue
|
68
|
-
|
69
|
-
secret_line = utils.remove_prefix(secret_line, prefix="export").strip()
|
70
|
-
secret_line = utils.remove_prefix(secret_line, prefix="EXPORT").strip()
|
71
|
-
secret_line = utils.remove_prefix(secret_line, prefix="set").strip()
|
72
|
-
secret_line = utils.remove_prefix(secret_line, prefix="SET").strip()
|
73
|
-
|
74
|
-
data = secret_line.split("=")
|
75
|
-
if len(data) != 2:
|
76
|
-
raise Exception("A secret should be of format, secret_name=secret_value[# any comment]")
|
77
|
-
|
78
|
-
key, value = data
|
79
|
-
self.secrets[key] = value.strip().strip('"').strip(os.linesep)
|
80
|
-
|
81
|
-
def get(self, name: str = "", **kwargs) -> str:
|
82
|
-
"""
|
83
|
-
Get a secret of name from the secrets file.
|
84
|
-
|
85
|
-
|
86
|
-
Args:
|
87
|
-
name (str): The name of the secret to retrieve
|
88
|
-
|
89
|
-
Raises:
|
90
|
-
Exception: If the secret by the name is not found.
|
91
|
-
|
92
|
-
Returns:
|
93
|
-
str: The value of the secret
|
94
|
-
"""
|
95
|
-
self._load_secrets()
|
96
|
-
|
97
|
-
if name in self.secrets:
|
98
|
-
return self.secrets[name]
|
99
|
-
|
100
|
-
raise exceptions.SecretNotFoundError(secret_name=name, secret_setting=self.secrets_location)
|
runnable/integration.py
DELETED
@@ -1,192 +0,0 @@
|
|
1
|
-
import logging
|
2
|
-
|
3
|
-
from stevedore import extension
|
4
|
-
|
5
|
-
from runnable import defaults
|
6
|
-
from runnable.executor import BaseExecutor
|
7
|
-
|
8
|
-
logger = logging.getLogger(defaults.LOGGER_NAME)
|
9
|
-
logging.getLogger("stevedore").setLevel(logging.CRITICAL)
|
10
|
-
|
11
|
-
# --8<-- [start:docs]
|
12
|
-
|
13
|
-
|
14
|
-
class BaseIntegration:
|
15
|
-
"""
|
16
|
-
Base class for handling integration between Executor and one of Catalog, Secrets, RunLogStore.
|
17
|
-
"""
|
18
|
-
|
19
|
-
executor_type = ""
|
20
|
-
service_type = "" # One of secret, catalog, datastore, experiment tracker
|
21
|
-
service_provider = "" # The actual implementation of the service
|
22
|
-
|
23
|
-
def __init__(self, executor: "BaseExecutor", integration_service: object):
|
24
|
-
self.executor = executor
|
25
|
-
self.service = integration_service
|
26
|
-
|
27
|
-
def validate(self, **kwargs):
|
28
|
-
"""
|
29
|
-
Raise an exception if the executor_type is not compatible with service provider.
|
30
|
-
|
31
|
-
By default, it is considered as compatible.
|
32
|
-
"""
|
33
|
-
|
34
|
-
def configure_for_traversal(self, **kwargs):
|
35
|
-
"""
|
36
|
-
Do any changes needed to both executor and service provider during traversal of the graph.
|
37
|
-
|
38
|
-
By default, no change is required.
|
39
|
-
"""
|
40
|
-
|
41
|
-
def configure_for_execution(self, **kwargs):
|
42
|
-
"""
|
43
|
-
Do any changes needed to both executor and service provider during execution of a node.
|
44
|
-
|
45
|
-
By default, no change is required.
|
46
|
-
"""
|
47
|
-
|
48
|
-
|
49
|
-
# --8<-- [end:docs]
|
50
|
-
|
51
|
-
|
52
|
-
def get_integration_handler(executor: "BaseExecutor", service: object) -> BaseIntegration:
|
53
|
-
"""
|
54
|
-
Return the integration handler between executor and the service.
|
55
|
-
|
56
|
-
If none found to be implemented, return the BaseIntegration which does nothing.
|
57
|
-
|
58
|
-
Args:
|
59
|
-
executor (BaseExecutor): The executor
|
60
|
-
service (object): The service provider
|
61
|
-
|
62
|
-
Returns:
|
63
|
-
[BaseIntegration]: The implemented integration handler or BaseIntegration if none found
|
64
|
-
|
65
|
-
Raises:
|
66
|
-
Exception: If multiple integrations are found for the executor and service
|
67
|
-
"""
|
68
|
-
service_type = service.service_type # type: ignore
|
69
|
-
service_name = getattr(service, "service_name")
|
70
|
-
integrations = []
|
71
|
-
|
72
|
-
# Get all the integrations defined by the 3rd party in their pyproject.toml
|
73
|
-
mgr = extension.ExtensionManager(
|
74
|
-
namespace="integration",
|
75
|
-
invoke_on_load=True,
|
76
|
-
invoke_kwds={"executor": executor, "integration_service": service},
|
77
|
-
)
|
78
|
-
for _, kls in mgr.items():
|
79
|
-
if (
|
80
|
-
kls.obj.executor_type == executor.service_name
|
81
|
-
and kls.obj.service_type == service_type
|
82
|
-
and kls.obj.service_provider == service_name
|
83
|
-
):
|
84
|
-
logger.info(f"Identified an integration pattern {kls.obj}")
|
85
|
-
integrations.append(kls.obj)
|
86
|
-
|
87
|
-
# Get all the implementations defined by the runnable package
|
88
|
-
for kls in BaseIntegration.__subclasses__():
|
89
|
-
# Match the exact service type
|
90
|
-
if kls.service_type == service_type and kls.service_provider == service_name:
|
91
|
-
# Match either all executor or specific ones provided
|
92
|
-
if kls.executor_type == "" or kls.executor_type == executor.service_name:
|
93
|
-
integrations.append(kls(executor=executor, integration_service=service))
|
94
|
-
|
95
|
-
if len(integrations) > 1:
|
96
|
-
msg = (
|
97
|
-
f"Multiple integrations between {executor.service_name} and {service_name} of type {service_type} found. "
|
98
|
-
"If you defined an integration pattern, please ensure it is specific and does not conflict with runnable "
|
99
|
-
" implementations."
|
100
|
-
)
|
101
|
-
logger.exception(msg)
|
102
|
-
raise Exception(msg)
|
103
|
-
|
104
|
-
if not integrations:
|
105
|
-
logger.info(
|
106
|
-
f"Could not find an integration pattern for {executor.service_name} and {service_name} for {service_type}."
|
107
|
-
" This implies that there is no need to change the configurations."
|
108
|
-
)
|
109
|
-
return BaseIntegration(executor, service)
|
110
|
-
|
111
|
-
return integrations[0]
|
112
|
-
|
113
|
-
|
114
|
-
def validate(executor: "BaseExecutor", service: object, **kwargs):
|
115
|
-
"""
|
116
|
-
Helper function to resolve the Integration class and validate the compatibility between executor and service
|
117
|
-
|
118
|
-
Args:
|
119
|
-
executor (BaseExecutor) : The executor
|
120
|
-
service (object): The service provider
|
121
|
-
"""
|
122
|
-
integration_handler = get_integration_handler(executor, service)
|
123
|
-
integration_handler.validate(**kwargs)
|
124
|
-
|
125
|
-
|
126
|
-
def configure_for_traversal(executor: "BaseExecutor", service: object, **kwargs):
|
127
|
-
"""
|
128
|
-
Helper function to resolve the Integration class and configure the executor and service for graph traversal
|
129
|
-
|
130
|
-
Args:
|
131
|
-
executor (BaseExecutor) : The executor
|
132
|
-
service (object): The service provider
|
133
|
-
"""
|
134
|
-
integration_handler = get_integration_handler(executor, service)
|
135
|
-
integration_handler.configure_for_traversal(**kwargs)
|
136
|
-
|
137
|
-
|
138
|
-
def configure_for_execution(executor: "BaseExecutor", service: object, **kwargs):
|
139
|
-
"""
|
140
|
-
Helper function to resolve the Integration class and configure the executor and service for execution
|
141
|
-
|
142
|
-
Args:
|
143
|
-
executor (BaseExecutor) : The executor
|
144
|
-
service (object): The service provider
|
145
|
-
"""
|
146
|
-
integration_handler = get_integration_handler(executor, service)
|
147
|
-
integration_handler.configure_for_execution(**kwargs)
|
148
|
-
|
149
|
-
|
150
|
-
class BufferedRunLogStore(BaseIntegration):
|
151
|
-
"""
|
152
|
-
Integration between any executor and buffered run log store
|
153
|
-
"""
|
154
|
-
|
155
|
-
service_type = "run_log_store" # One of secret, catalog, datastore
|
156
|
-
service_provider = "buffered" # The actual implementation of the service
|
157
|
-
|
158
|
-
def validate(self, **kwargs):
|
159
|
-
if not self.executor.service_name == "local":
|
160
|
-
raise Exception("Buffered run log store is only supported for local executor")
|
161
|
-
|
162
|
-
msg = (
|
163
|
-
"Run log generated by buffered run log store are not persisted. "
|
164
|
-
"Re-running this run, in case of a failure, is not possible"
|
165
|
-
)
|
166
|
-
logger.info(msg)
|
167
|
-
|
168
|
-
|
169
|
-
class DoNothingCatalog(BaseIntegration):
|
170
|
-
"""
|
171
|
-
Integration between any executor and do nothing catalog
|
172
|
-
"""
|
173
|
-
|
174
|
-
service_type = "catalog" # One of secret, catalog, datastore
|
175
|
-
service_provider = "do-nothing" # The actual implementation of the service
|
176
|
-
|
177
|
-
def validate(self, **kwargs):
|
178
|
-
msg = "A do-nothing catalog does not hold any data and therefore cannot pass data between nodes."
|
179
|
-
logger.info(msg)
|
180
|
-
|
181
|
-
|
182
|
-
class DoNothingSecrets(BaseIntegration):
|
183
|
-
"""
|
184
|
-
Integration between any executor and do nothing secrets
|
185
|
-
"""
|
186
|
-
|
187
|
-
service_type = "secrets" # One of secret, catalog, datastore
|
188
|
-
service_provider = "do-nothing" # The actual implementation of the service
|
189
|
-
|
190
|
-
def validate(self, **kwargs):
|
191
|
-
msg = "A do-nothing secrets does not hold any secrets and therefore cannot return you any secrets."
|
192
|
-
logger.info(msg)
|
runnable-0.13.0.dist-info/RECORD
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
runnable/__init__.py,sha256=G5EUe1eaTOEu1UihDBP9F43PKs3yxCYFfp8DOOpPvms,1038
|
2
|
-
runnable/catalog.py,sha256=22OECi5TrpHErxYIhfx-lJ2vgBUi4-5V9CaYEVm98hE,4138
|
3
|
-
runnable/cli.py,sha256=RILUrEfzernuKD3dNdXPBkqN_1OgE5GosYRuInj0FVs,9618
|
4
|
-
runnable/context.py,sha256=QhiXJHRcEBfSKB1ijvL5yB9w44x0HCe7VEiwK1cUJ9U,1124
|
5
|
-
runnable/datastore.py,sha256=8aQZ15KAMdre7a7G61bNRmcTeJFzOdnx_9O9UP4JQc8,27910
|
6
|
-
runnable/defaults.py,sha256=r9l3jCPlmMFNdYXOj6X1uIhruO2FyLZ8kuzus9Fd6OQ,4704
|
7
|
-
runnable/entrypoints.py,sha256=ZdXnjEjtkOqKYyjc0AwqIdfWgxJsKFB8ilHYcUj7oZo,17630
|
8
|
-
runnable/exceptions.py,sha256=6NIYoTAzdKyGQ9PvW1Hu7b80OS746395KiGDhM7ThH8,2526
|
9
|
-
runnable/executor.py,sha256=xfBighQ5t_vejohip000XfxLwsgechUE1ZMIJWrZbUA,14484
|
10
|
-
runnable/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
|
-
runnable/extensions/catalog/__init__.py,sha256=uXZ6D-Myr_J4HnBA4F5Hd7LZ0IAjQiFQYxRhMzejhQc,761
|
12
|
-
runnable/extensions/catalog/file_system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
|
-
runnable/extensions/catalog/file_system/implementation.py,sha256=mFPsAwPMNGWbHczpQ84o3mfkPkOEz5zjsT7a3rqNzoE,9092
|
14
|
-
runnable/extensions/catalog/k8s_pvc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
15
|
-
runnable/extensions/catalog/k8s_pvc/implementation.py,sha256=oJDDI0APT7lrtjWmzYJRDHLGn3Vhbn2MdFSRYvFBUpY,436
|
16
|
-
runnable/extensions/catalog/k8s_pvc/integration.py,sha256=OfrHbNFN8sR-wsVa4os3ajmWJFSd5H4KOHGVAmjRZTQ,1850
|
17
|
-
runnable/extensions/executor/__init__.py,sha256=-Xw8ZYVOfM-bYAieluEOhd98ncyrAyde8WSPRg1yFN0,26615
|
18
|
-
runnable/extensions/executor/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
|
-
runnable/extensions/executor/argo/implementation.py,sha256=FE5jDtzv5nlsnOjN9k0VjtEFQQWAAFaSXVJlroi7q6I,43911
|
20
|
-
runnable/extensions/executor/argo/specification.yaml,sha256=wXQcm2gOQYqy-IOQIhucohS32ZrHKCfGA5zZ0RraPYc,1276
|
21
|
-
runnable/extensions/executor/k8s_job/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
|
-
runnable/extensions/executor/k8s_job/implementation_FF.py,sha256=1IfVG1GRcJcVFzQ-WhkJsmzdJuj51QMxXylY9UrWM0U,10259
|
23
|
-
runnable/extensions/executor/k8s_job/integration_FF.py,sha256=pG6HKhPMgCRIgu1PAnBvsfJQE1FxcjuSiC2I-Hn5sWo,2165
|
24
|
-
runnable/extensions/executor/local.py,sha256=pV1tP9lRn6hwZtt-moKM1SXG_QmohbEF2QGdBbzCpkU,2396
|
25
|
-
runnable/extensions/executor/local_container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
26
|
-
runnable/extensions/executor/local_container/implementation.py,sha256=6iwt9tNCQawVEfIErzoqys2hrErWK0DHcAOkO49Ov9w,17322
|
27
|
-
runnable/extensions/executor/mocked/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
28
|
-
runnable/extensions/executor/mocked/implementation.py,sha256=ChvlcLGpBxO6QwJcoqhBgKBR6NfWVnMdOWKQhMgcEjY,5762
|
29
|
-
runnable/extensions/executor/retry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
|
-
runnable/extensions/executor/retry/implementation.py,sha256=-g6PBOhSG7IL4D_IlQOcf9H_En9IXiUzCt-6vKeCB6Q,6892
|
31
|
-
runnable/extensions/nodes.py,sha256=Jz8uJBgvcpdZ8R63EWtzULFE_DjSwsrWgY0P1Z1PYTs,33506
|
32
|
-
runnable/extensions/run_log_store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
|
-
runnable/extensions/run_log_store/chunked_file_system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
|
-
runnable/extensions/run_log_store/chunked_file_system/implementation.py,sha256=EW2P8lr3eH-pIOsMTJPr5eb-iWc48GQ97W15JzkpC_4,3326
|
35
|
-
runnable/extensions/run_log_store/chunked_k8s_pvc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
|
-
runnable/extensions/run_log_store/chunked_k8s_pvc/implementation.py,sha256=iGzy-s1eT_kAJP7XgzDLmEMOGrBLvACIiGE_wM62jGE,579
|
37
|
-
runnable/extensions/run_log_store/chunked_k8s_pvc/integration.py,sha256=atzdTy5HJ-bZsd6AzDP8kYRI1TshKxviBKeqY359TUs,1979
|
38
|
-
runnable/extensions/run_log_store/db/implementation_FF.py,sha256=oEiG5ASWYYbwlBbnryKarQENB-L_yOsnZahbj2U0GdQ,5155
|
39
|
-
runnable/extensions/run_log_store/db/integration_FF.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
40
|
-
runnable/extensions/run_log_store/file_system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
41
|
-
runnable/extensions/run_log_store/file_system/implementation.py,sha256=WxxfGCaDAB5zHMM3zv9aeDwXZ4DhtyzjXOjfjvyDoZ4,4288
|
42
|
-
runnable/extensions/run_log_store/generic_chunked.py,sha256=PtYK1dheKYdxODwu_ygpGRIHIepgLVaIORSqvsrg0No,19876
|
43
|
-
runnable/extensions/run_log_store/k8s_pvc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
44
|
-
runnable/extensions/run_log_store/k8s_pvc/implementation.py,sha256=tLgXy9HUB_vlFVQ0Itk6PpNU3GlCOILN4vA3fm80jXI,542
|
45
|
-
runnable/extensions/run_log_store/k8s_pvc/integration.py,sha256=lxQg327mwC0ykhNp5Kg34a9g8o1DzJAhfkiqMGmsABs,1873
|
46
|
-
runnable/extensions/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
47
|
-
runnable/extensions/secrets/dotenv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
48
|
-
runnable/extensions/secrets/dotenv/implementation.py,sha256=3J5pofWahdZbnwnETwpspE5-PKyvmZF_vkfwA1X_bkA,3365
|
49
|
-
runnable/graph.py,sha256=xJ5Q6Rv5T87wOBzQ1eIUvV0Iynnp7sRrZaIeytcDRlA,16313
|
50
|
-
runnable/integration.py,sha256=eb9qJVZR7Ehg0N1UnGPuyjJvoA-xQ1-xP7AlZHUXHqM,6705
|
51
|
-
runnable/names.py,sha256=vn92Kv9ANROYSZX6Z4z1v_WA3WiEdIYmG6KEStBFZug,8134
|
52
|
-
runnable/nodes.py,sha256=UqR-bJx0Hi7uLSUw_saB7VsNdFh3POKtdgsEPsasHfE,16576
|
53
|
-
runnable/parameters.py,sha256=yZkMDnwnkdYXIwQ8LflBzn50Y0xRGxEvLlxwno6ovvs,5163
|
54
|
-
runnable/pickler.py,sha256=5SDNf0miMUJ3ZauhQdzwk8_t-9jeOqaTjP5bvRnu9sU,2685
|
55
|
-
runnable/sdk.py,sha256=sZWiyGVIqaAmmJuc4p1OhuqLBSqS7svN1VuSOqeZ_xA,29254
|
56
|
-
runnable/secrets.py,sha256=dakb7WRloWVo-KpQp6Vy4rwFdGi58BTlT4OifQY106I,2324
|
57
|
-
runnable/tasks.py,sha256=61BYi5DNyTPi8GRlIy8vh2T0DZ1jkTj7gxBx88sK_XY,28058
|
58
|
-
runnable/utils.py,sha256=fXOLoFZKYqh3wQgzA2V-VZOu-dSgLPGqCZIbMmsNzOw,20016
|
59
|
-
runnable-0.13.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
60
|
-
runnable-0.13.0.dist-info/METADATA,sha256=p4fwokQJKU8EJfniOP_DW22yDgSSZmltZDP2reYlBck,10436
|
61
|
-
runnable-0.13.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
62
|
-
runnable-0.13.0.dist-info/entry_points.txt,sha256=cl_K9XPV-qnAVaXfmNuGpZZKaoUu8YwjPsqZW1iSKlo,1479
|
63
|
-
runnable-0.13.0.dist-info/RECORD,,
|
@@ -1,41 +0,0 @@
|
|
1
|
-
[catalog]
|
2
|
-
do-nothing=runnable.catalog:DoNothingCatalog
|
3
|
-
file-system=runnable.extensions.catalog.file_system.implementation:FileSystemCatalog
|
4
|
-
|
5
|
-
[console_scripts]
|
6
|
-
runnable=runnable.cli:cli
|
7
|
-
|
8
|
-
[executor]
|
9
|
-
argo=runnable.extensions.executor.argo.implementation:ArgoExecutor
|
10
|
-
local=runnable.extensions.executor.local:LocalExecutor
|
11
|
-
local-container=runnable.extensions.executor.local_container.implementation:LocalContainerExecutor
|
12
|
-
mocked=runnable.extensions.executor.mocked.implementation:MockedExecutor
|
13
|
-
retry=runnable.extensions.executor.retry.implementation:RetryExecutor
|
14
|
-
|
15
|
-
[nodes]
|
16
|
-
dag=runnable.extensions.nodes:DagNode
|
17
|
-
fail=runnable.extensions.nodes:FailNode
|
18
|
-
map=runnable.extensions.nodes:MapNode
|
19
|
-
parallel=runnable.extensions.nodes:ParallelNode
|
20
|
-
stub=runnable.extensions.nodes:StubNode
|
21
|
-
success=runnable.extensions.nodes:SuccessNode
|
22
|
-
task=runnable.extensions.nodes:TaskNode
|
23
|
-
|
24
|
-
[pickler]
|
25
|
-
pickle=runnable.pickler:NativePickler
|
26
|
-
|
27
|
-
[run_log_store]
|
28
|
-
buffered=runnable.datastore:BufferRunLogstore
|
29
|
-
chunked-fs=runnable.extensions.run_log_store.chunked_file_system.implementation:ChunkedFileSystemRunLogStore
|
30
|
-
file-system=runnable.extensions.run_log_store.file_system.implementation:FileSystemRunLogstore
|
31
|
-
|
32
|
-
[secrets]
|
33
|
-
do-nothing=runnable.secrets:DoNothingSecretManager
|
34
|
-
dotenv=runnable.extensions.secrets.dotenv.implementation:DotEnvSecrets
|
35
|
-
env-secrets=runnable.secrets:EnvSecretsManager
|
36
|
-
|
37
|
-
[tasks]
|
38
|
-
notebook=runnable.tasks:NotebookTaskType
|
39
|
-
python=runnable.tasks:PythonTaskType
|
40
|
-
shell=runnable.tasks:ShellTaskType
|
41
|
-
|
File without changes
|