runnable 0.13.0__py3-none-any.whl → 0.16.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
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
-