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.
Files changed (64) hide show
  1. runnable/__init__.py +1 -12
  2. runnable/catalog.py +29 -5
  3. runnable/cli.py +268 -215
  4. runnable/context.py +10 -3
  5. runnable/datastore.py +212 -53
  6. runnable/defaults.py +13 -55
  7. runnable/entrypoints.py +270 -183
  8. runnable/exceptions.py +28 -2
  9. runnable/executor.py +133 -86
  10. runnable/graph.py +37 -13
  11. runnable/nodes.py +50 -22
  12. runnable/parameters.py +27 -8
  13. runnable/pickler.py +1 -1
  14. runnable/sdk.py +230 -66
  15. runnable/secrets.py +3 -1
  16. runnable/tasks.py +99 -41
  17. runnable/utils.py +59 -39
  18. {runnable-0.13.0.dist-info → runnable-0.16.0.dist-info}/METADATA +28 -31
  19. runnable-0.16.0.dist-info/RECORD +23 -0
  20. {runnable-0.13.0.dist-info → runnable-0.16.0.dist-info}/WHEEL +1 -1
  21. runnable-0.16.0.dist-info/entry_points.txt +45 -0
  22. runnable/extensions/__init__.py +0 -0
  23. runnable/extensions/catalog/__init__.py +0 -21
  24. runnable/extensions/catalog/file_system/__init__.py +0 -0
  25. runnable/extensions/catalog/file_system/implementation.py +0 -234
  26. runnable/extensions/catalog/k8s_pvc/__init__.py +0 -0
  27. runnable/extensions/catalog/k8s_pvc/implementation.py +0 -16
  28. runnable/extensions/catalog/k8s_pvc/integration.py +0 -59
  29. runnable/extensions/executor/__init__.py +0 -649
  30. runnable/extensions/executor/argo/__init__.py +0 -0
  31. runnable/extensions/executor/argo/implementation.py +0 -1194
  32. runnable/extensions/executor/argo/specification.yaml +0 -51
  33. runnable/extensions/executor/k8s_job/__init__.py +0 -0
  34. runnable/extensions/executor/k8s_job/implementation_FF.py +0 -259
  35. runnable/extensions/executor/k8s_job/integration_FF.py +0 -69
  36. runnable/extensions/executor/local.py +0 -69
  37. runnable/extensions/executor/local_container/__init__.py +0 -0
  38. runnable/extensions/executor/local_container/implementation.py +0 -446
  39. runnable/extensions/executor/mocked/__init__.py +0 -0
  40. runnable/extensions/executor/mocked/implementation.py +0 -154
  41. runnable/extensions/executor/retry/__init__.py +0 -0
  42. runnable/extensions/executor/retry/implementation.py +0 -168
  43. runnable/extensions/nodes.py +0 -870
  44. runnable/extensions/run_log_store/__init__.py +0 -0
  45. runnable/extensions/run_log_store/chunked_file_system/__init__.py +0 -0
  46. runnable/extensions/run_log_store/chunked_file_system/implementation.py +0 -111
  47. runnable/extensions/run_log_store/chunked_k8s_pvc/__init__.py +0 -0
  48. runnable/extensions/run_log_store/chunked_k8s_pvc/implementation.py +0 -21
  49. runnable/extensions/run_log_store/chunked_k8s_pvc/integration.py +0 -61
  50. runnable/extensions/run_log_store/db/implementation_FF.py +0 -157
  51. runnable/extensions/run_log_store/db/integration_FF.py +0 -0
  52. runnable/extensions/run_log_store/file_system/__init__.py +0 -0
  53. runnable/extensions/run_log_store/file_system/implementation.py +0 -140
  54. runnable/extensions/run_log_store/generic_chunked.py +0 -557
  55. runnable/extensions/run_log_store/k8s_pvc/__init__.py +0 -0
  56. runnable/extensions/run_log_store/k8s_pvc/implementation.py +0 -21
  57. runnable/extensions/run_log_store/k8s_pvc/integration.py +0 -56
  58. runnable/extensions/secrets/__init__.py +0 -0
  59. runnable/extensions/secrets/dotenv/__init__.py +0 -0
  60. runnable/extensions/secrets/dotenv/implementation.py +0 -100
  61. runnable/integration.py +0 -192
  62. runnable-0.13.0.dist-info/RECORD +0 -63
  63. runnable-0.13.0.dist-info/entry_points.txt +0 -41
  64. {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)
@@ -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
-