dotflow 0.16.0.dev2__tar.gz → 0.16.0.dev3__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.
Files changed (117) hide show
  1. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/PKG-INFO +1 -1
  2. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/__init__.py +1 -1
  3. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/commands/start.py +32 -2
  4. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/setup.py +17 -5
  5. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/engine.py +3 -2
  6. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/exception.py +18 -0
  7. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/server_api.py +1 -0
  8. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/pyproject.toml +2 -2
  9. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/LICENSE +0 -0
  10. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/README.md +0 -0
  11. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/__init__.py +0 -0
  12. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/file.py +0 -0
  13. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/flow.py +0 -0
  14. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/http.py +0 -0
  15. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/log.py +0 -0
  16. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/metrics.py +0 -0
  17. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/notify.py +0 -0
  18. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/scheduler.py +0 -0
  19. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/server.py +0 -0
  20. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/storage.py +0 -0
  21. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/tcp.py +0 -0
  22. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/abc/tracer.py +0 -0
  23. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/__init__.py +0 -0
  24. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/command.py +0 -0
  25. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/commands/__init__.py +0 -0
  26. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/commands/cloud.py +0 -0
  27. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/commands/deploy.py +0 -0
  28. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/commands/init.py +0 -0
  29. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/commands/log.py +0 -0
  30. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/commands/schedule.py +0 -0
  31. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/commands/storage.py +0 -0
  32. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/validators/__init__.py +0 -0
  33. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cli/validators/start.py +0 -0
  34. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/__init__.py +0 -0
  35. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/alibaba/__init__.py +0 -0
  36. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/alibaba/constants.py +0 -0
  37. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/alibaba/deployers/__init__.py +0 -0
  38. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/alibaba/deployers/fc.py +0 -0
  39. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/alibaba/deployers/fc_scheduled.py +0 -0
  40. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/alibaba/services/__init__.py +0 -0
  41. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/alibaba/services/cr.py +0 -0
  42. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/__init__.py +0 -0
  43. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/constants.py +0 -0
  44. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/deployers/__init__.py +0 -0
  45. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/deployers/base_lambda.py +0 -0
  46. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/deployers/ecs.py +0 -0
  47. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/deployers/ecs_scheduled.py +0 -0
  48. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/deployers/lambda_.py +0 -0
  49. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/deployers/lambda_api.py +0 -0
  50. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/deployers/lambda_s3.py +0 -0
  51. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/deployers/lambda_sqs.py +0 -0
  52. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/schedule.py +0 -0
  53. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/services/__init__.py +0 -0
  54. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/services/cloudwatch.py +0 -0
  55. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/services/ecr.py +0 -0
  56. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/services/iam.py +0 -0
  57. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/aws/services/s3.py +0 -0
  58. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/core.py +0 -0
  59. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/gcp/__init__.py +0 -0
  60. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/gcp/constants.py +0 -0
  61. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/gcp/deployers/__init__.py +0 -0
  62. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/gcp/deployers/cloudrun.py +0 -0
  63. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/gcp/services/__init__.py +0 -0
  64. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/gcp/services/apis.py +0 -0
  65. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/gcp/services/artifact_registry.py +0 -0
  66. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/gcp/services/gcs.py +0 -0
  67. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/github/__init__.py +0 -0
  68. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/github/constants.py +0 -0
  69. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/github/deployers/__init__.py +0 -0
  70. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/cloud/github/deployers/actions.py +0 -0
  71. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/__init__.py +0 -0
  72. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/action.py +0 -0
  73. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/config.py +0 -0
  74. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/context.py +0 -0
  75. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/decorators/__init__.py +0 -0
  76. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/decorators/time.py +0 -0
  77. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/dotflow.py +0 -0
  78. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/module.py +0 -0
  79. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/serializers/__init__.py +0 -0
  80. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/serializers/task.py +0 -0
  81. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/serializers/transport.py +0 -0
  82. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/serializers/workflow.py +0 -0
  83. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/task.py +0 -0
  84. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/types/__init__.py +0 -0
  85. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/types/execution.py +0 -0
  86. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/types/overlap.py +0 -0
  87. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/types/status.py +0 -0
  88. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/types/storage.py +0 -0
  89. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/types/workflow.py +0 -0
  90. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/core/workflow.py +0 -0
  91. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/logging.py +0 -0
  92. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/main.py +0 -0
  93. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/__init__.py +0 -0
  94. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/log_default.py +0 -0
  95. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/log_opentelemetry.py +0 -0
  96. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/log_sentry.py +0 -0
  97. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/metrics_default.py +0 -0
  98. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/metrics_opentelemetry.py +0 -0
  99. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/notify_default.py +0 -0
  100. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/notify_discord.py +0 -0
  101. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/notify_telegram.py +0 -0
  102. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/scheduler_cron.py +0 -0
  103. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/scheduler_default.py +0 -0
  104. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/server_default.py +0 -0
  105. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/storage_default.py +0 -0
  106. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/storage_file.py +0 -0
  107. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/storage_gcs.py +0 -0
  108. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/storage_s3.py +0 -0
  109. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/tracer_default.py +0 -0
  110. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/tracer_opentelemetry.py +0 -0
  111. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/providers/tracer_sentry.py +0 -0
  112. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/settings.py +0 -0
  113. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/types.py +0 -0
  114. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/utils/__init__.py +0 -0
  115. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/utils/basic_functions.py +0 -0
  116. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/utils/error_handler.py +0 -0
  117. {dotflow-0.16.0.dev2 → dotflow-0.16.0.dev3}/dotflow/utils/tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dotflow
3
- Version: 0.16.0.dev2
3
+ Version: 0.16.0.dev3
4
4
  Summary: 🎲 Dotflow turns an idea into flow! Lightweight Python library for execution pipelines with retry, parallel, cron and async support.
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -1,6 +1,6 @@
1
1
  """Dotflow __init__ module."""
2
2
 
3
- __version__ = "0.16.0.dev2"
3
+ __version__ = "0.16.0.dev3"
4
4
  __description__ = "🎲 Dotflow turns an idea into flow!"
5
5
 
6
6
  from .core.action import Action as action
@@ -5,6 +5,8 @@ from os import system
5
5
 
6
6
  from dotflow import Config, DotFlow
7
7
  from dotflow.cli.command import Command
8
+ from dotflow.core.exception import InvalidWorkflowFactory, WorkflowFlagConflict
9
+ from dotflow.core.module import Module
8
10
  from dotflow.core.types.execution import TypeExecution
9
11
  from dotflow.providers import (
10
12
  ServerAPI,
@@ -14,10 +16,20 @@ from dotflow.providers import (
14
16
  StorageGCS,
15
17
  StorageS3,
16
18
  )
19
+ from dotflow.utils.basic_functions import basic_callback
17
20
 
18
21
 
19
22
  class StartCommand(Command):
20
23
  def setup(self):
24
+ if getattr(self.params, "workflow", None):
25
+ self._start_from_factory()
26
+ else:
27
+ self._start_from_step()
28
+
29
+ if self.params.mode == TypeExecution.BACKGROUND:
30
+ system("/bin/bash")
31
+
32
+ def _start_from_step(self):
21
33
  workflow = self._new_workflow()
22
34
 
23
35
  workflow.task.add(
@@ -28,8 +40,26 @@ class StartCommand(Command):
28
40
 
29
41
  workflow.start(mode=self.params.mode)
30
42
 
31
- if self.params.mode == TypeExecution.BACKGROUND:
32
- system("/bin/bash")
43
+ def _start_from_factory(self):
44
+ step_only_flags = {
45
+ "--callback": self.params.callback is not basic_callback,
46
+ "--initial-context": self.params.initial_context is not None,
47
+ }
48
+ for flag, provided in step_only_flags.items():
49
+ if provided:
50
+ raise WorkflowFlagConflict(flag=flag)
51
+
52
+ factory = Module(self.params.workflow)
53
+
54
+ if not callable(factory):
55
+ raise InvalidWorkflowFactory(factory=self.params.workflow)
56
+
57
+ result = factory()
58
+
59
+ if not isinstance(result, DotFlow):
60
+ raise InvalidWorkflowFactory(factory=self.params.workflow)
61
+
62
+ result.start(mode=self.params.mode)
33
63
 
34
64
  def _new_workflow(self):
35
65
  config = self._build_config()
@@ -16,7 +16,9 @@ from dotflow.core.exception import (
16
16
  MESSAGE_UNKNOWN_ERROR,
17
17
  ExecutionModeNotExist,
18
18
  ImportModuleError,
19
+ InvalidWorkflowFactory,
19
20
  MissingActionDecorator,
21
+ WorkflowFlagConflict,
20
22
  )
21
23
  from dotflow.core.types import TypeExecution, TypeOverlap, TypeStorage
22
24
  from dotflow.logging import logger
@@ -56,12 +58,16 @@ class Command:
56
58
  self.cmd_init.set_defaults(exec=InitCommand)
57
59
 
58
60
  def setup_start(self):
59
- self.cmd_start = self.subparsers.add_parser("start", help="Start")
60
- self.cmd_start = self.cmd_start.add_argument_group(
61
- "Usage: dotflow start [OPTIONS]"
61
+ cmd_start_parser = self.subparsers.add_parser("start", help="Start")
62
+ entry_group = cmd_start_parser.add_mutually_exclusive_group(
63
+ required=True
62
64
  )
65
+ entry_group.add_argument("-s", "--step")
66
+ entry_group.add_argument("-w", "--workflow")
63
67
 
64
- self.cmd_start.add_argument("-s", "--step", required=True)
68
+ self.cmd_start = cmd_start_parser.add_argument_group(
69
+ "Usage: dotflow start [OPTIONS]"
70
+ )
65
71
  self.cmd_start.add_argument("-c", "--callback", default=basic_callback)
66
72
  self.cmd_start.add_argument("-i", "--initial-context")
67
73
  self.cmd_start.add_argument(
@@ -88,7 +94,7 @@ class Command:
88
94
  ],
89
95
  )
90
96
 
91
- self.cmd_start.set_defaults(exec=StartCommand)
97
+ cmd_start_parser.set_defaults(exec=StartCommand)
92
98
 
93
99
  def setup_schedule(self):
94
100
  self.cmd_schedule = self.subparsers.add_parser(
@@ -233,6 +239,12 @@ class Command:
233
239
  except ImportModuleError as err:
234
240
  print(settings.WARNING_ALERT, err)
235
241
 
242
+ except InvalidWorkflowFactory as err:
243
+ print(settings.WARNING_ALERT, err)
244
+
245
+ except WorkflowFlagConflict as err:
246
+ print(settings.WARNING_ALERT, err)
247
+
236
248
  except KeyboardInterrupt:
237
249
  print("\n", settings.INFO_ALERT, "Aborted.")
238
250
 
@@ -257,13 +257,14 @@ class TaskEngine:
257
257
 
258
258
  for new in ordered_list:
259
259
  new_object = getattr(class_instance, new[1])
260
+ task_ulid = str(ULID())
260
261
  try:
261
262
  subcontext = new_object(
262
263
  initial_context=self.task.initial_context,
263
264
  previous_context=previous_context,
264
265
  task=self.task,
265
266
  )
266
- subcontext.task_id = str(ULID())
267
+ subcontext.task_id = task_ulid
267
268
  new_context.storage.append(subcontext)
268
269
  previous_context = subcontext
269
270
 
@@ -277,7 +278,7 @@ class TaskEngine:
277
278
  previous_context=previous_context,
278
279
  task=self.task,
279
280
  )
280
- subcontext.task_id = str(ULID())
281
+ subcontext.task_id = task_ulid
281
282
  new_context.storage.append(subcontext)
282
283
  previous_context = subcontext
283
284
 
@@ -15,6 +15,12 @@ MESSAGE_PROBLEM_ORDERING = (
15
15
  MESSAGE_MODULE_NOT_FOUND = (
16
16
  "Module '{module}' not found. Please install with 'pip install {library}'"
17
17
  )
18
+ MESSAGE_INVALID_WORKFLOW_FACTORY = (
19
+ "'{factory}' must be a callable that returns a DotFlow instance."
20
+ )
21
+ MESSAGE_WORKFLOW_FLAG_CONFLICT = (
22
+ "{flag} is only valid with --step and cannot be used with --workflow."
23
+ )
18
24
 
19
25
 
20
26
  class MissingActionDecorator(Exception):
@@ -49,6 +55,18 @@ class ModuleNotFound(Exception):
49
55
  )
50
56
 
51
57
 
58
+ class InvalidWorkflowFactory(Exception):
59
+ def __init__(self, factory: str):
60
+ super().__init__(
61
+ MESSAGE_INVALID_WORKFLOW_FACTORY.format(factory=factory)
62
+ )
63
+
64
+
65
+ class WorkflowFlagConflict(Exception):
66
+ def __init__(self, flag: str):
67
+ super().__init__(MESSAGE_WORKFLOW_FLAG_CONFLICT.format(flag=flag))
68
+
69
+
52
70
  class ExecutionWithClassError(Exception):
53
71
  def __init__(self):
54
72
  super().__init__("Unknown")
@@ -79,6 +79,7 @@ class ServerAPI(Server):
79
79
 
80
80
  def update_task(self, task: Any) -> None:
81
81
  data = task.result(max=5_000_000)
82
+ data["id"] = data.pop("task_id", task.task_id)
82
83
  self._patch(
83
84
  (
84
85
  f"{self._base_url}/workflows/{task.workflow_id}"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dotflow"
3
- version = "0.16.0.dev2"
3
+ version = "0.16.0.dev3"
4
4
  authors = [
5
5
  { name="Fernando Celmer", email="email@fernandocelmer.com" },
6
6
  ]
@@ -67,7 +67,7 @@ sentry = ["sentry-sdk"]
67
67
 
68
68
  [tool.poetry]
69
69
  name = "dotflow"
70
- version = "0.16.0.dev2"
70
+ version = "0.16.0.dev3"
71
71
  description = "🎲 Dotflow turns an idea into flow! Lightweight Python library for execution pipelines with retry, parallel, cron and async support."
72
72
  authors = ["Fernando Celmer <email@fernandocelmer.com>"]
73
73
  readme = "README.md"
File without changes
File without changes