dotflow 0.15.0.dev5__tar.gz → 0.15.0.dev7__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 (116) hide show
  1. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/PKG-INFO +1 -1
  2. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/__init__.py +1 -1
  3. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/schedule.py +14 -1
  4. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/serializers/task.py +23 -7
  5. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/pyproject.toml +5 -2
  6. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/LICENSE +0 -0
  7. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/README.md +0 -0
  8. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/__init__.py +0 -0
  9. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/file.py +0 -0
  10. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/flow.py +0 -0
  11. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/http.py +0 -0
  12. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/log.py +0 -0
  13. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/metrics.py +0 -0
  14. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/notify.py +0 -0
  15. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/scheduler.py +0 -0
  16. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/server.py +0 -0
  17. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/storage.py +0 -0
  18. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/tcp.py +0 -0
  19. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/abc/tracer.py +0 -0
  20. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/__init__.py +0 -0
  21. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/command.py +0 -0
  22. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/commands/__init__.py +0 -0
  23. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/commands/cloud.py +0 -0
  24. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/commands/deploy.py +0 -0
  25. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/commands/init.py +0 -0
  26. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/commands/log.py +0 -0
  27. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/commands/schedule.py +0 -0
  28. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/commands/start.py +0 -0
  29. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/commands/storage.py +0 -0
  30. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/setup.py +0 -0
  31. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/validators/__init__.py +0 -0
  32. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cli/validators/start.py +0 -0
  33. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/__init__.py +0 -0
  34. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/alibaba/__init__.py +0 -0
  35. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/alibaba/constants.py +0 -0
  36. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/alibaba/deployers/__init__.py +0 -0
  37. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/alibaba/deployers/fc.py +0 -0
  38. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/alibaba/deployers/fc_scheduled.py +0 -0
  39. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/alibaba/services/__init__.py +0 -0
  40. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/alibaba/services/cr.py +0 -0
  41. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/__init__.py +0 -0
  42. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/constants.py +0 -0
  43. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/deployers/__init__.py +0 -0
  44. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/deployers/base_lambda.py +0 -0
  45. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/deployers/ecs.py +0 -0
  46. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/deployers/ecs_scheduled.py +0 -0
  47. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/deployers/lambda_.py +0 -0
  48. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/deployers/lambda_api.py +0 -0
  49. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/deployers/lambda_s3.py +0 -0
  50. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/deployers/lambda_sqs.py +0 -0
  51. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/services/__init__.py +0 -0
  52. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/services/cloudwatch.py +0 -0
  53. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/services/ecr.py +0 -0
  54. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/services/iam.py +0 -0
  55. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/aws/services/s3.py +0 -0
  56. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/core.py +0 -0
  57. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/gcp/__init__.py +0 -0
  58. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/gcp/constants.py +0 -0
  59. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/gcp/deployers/__init__.py +0 -0
  60. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/gcp/deployers/cloudrun.py +0 -0
  61. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/gcp/services/__init__.py +0 -0
  62. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/gcp/services/apis.py +0 -0
  63. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/gcp/services/artifact_registry.py +0 -0
  64. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/gcp/services/gcs.py +0 -0
  65. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/github/__init__.py +0 -0
  66. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/github/constants.py +0 -0
  67. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/github/deployers/__init__.py +0 -0
  68. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/cloud/github/deployers/actions.py +0 -0
  69. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/__init__.py +0 -0
  70. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/action.py +0 -0
  71. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/config.py +0 -0
  72. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/context.py +0 -0
  73. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/decorators/__init__.py +0 -0
  74. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/decorators/time.py +0 -0
  75. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/dotflow.py +0 -0
  76. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/engine.py +0 -0
  77. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/exception.py +0 -0
  78. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/module.py +0 -0
  79. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/serializers/__init__.py +0 -0
  80. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/serializers/transport.py +0 -0
  81. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/serializers/workflow.py +0 -0
  82. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/task.py +0 -0
  83. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/types/__init__.py +0 -0
  84. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/types/execution.py +0 -0
  85. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/types/overlap.py +0 -0
  86. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/types/status.py +0 -0
  87. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/types/storage.py +0 -0
  88. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/types/workflow.py +0 -0
  89. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/core/workflow.py +0 -0
  90. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/logging.py +0 -0
  91. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/main.py +0 -0
  92. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/__init__.py +0 -0
  93. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/log_default.py +0 -0
  94. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/log_opentelemetry.py +0 -0
  95. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/log_sentry.py +0 -0
  96. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/metrics_default.py +0 -0
  97. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/metrics_opentelemetry.py +0 -0
  98. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/notify_default.py +0 -0
  99. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/notify_discord.py +0 -0
  100. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/notify_telegram.py +0 -0
  101. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/scheduler_cron.py +0 -0
  102. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/scheduler_default.py +0 -0
  103. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/server_default.py +0 -0
  104. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/storage_default.py +0 -0
  105. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/storage_file.py +0 -0
  106. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/storage_gcs.py +0 -0
  107. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/storage_s3.py +0 -0
  108. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/tracer_default.py +0 -0
  109. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/tracer_opentelemetry.py +0 -0
  110. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/providers/tracer_sentry.py +0 -0
  111. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/settings.py +0 -0
  112. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/types.py +0 -0
  113. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/utils/__init__.py +0 -0
  114. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/utils/basic_functions.py +0 -0
  115. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/utils/error_handler.py +0 -0
  116. {dotflow-0.15.0.dev5 → dotflow-0.15.0.dev7}/dotflow/utils/tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dotflow
3
- Version: 0.15.0.dev5
3
+ Version: 0.15.0.dev7
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: MIT License
6
6
 
@@ -1,6 +1,6 @@
1
1
  """Dotflow __init__ module."""
2
2
 
3
- __version__ = "0.15.0.dev5"
3
+ __version__ = "0.15.0.dev7"
4
4
  __description__ = "🎲 Dotflow turns an idea into flow!"
5
5
 
6
6
  from .core.action import Action as action
@@ -58,9 +58,22 @@ def _crontab_to_aws(expression: str) -> str:
58
58
 
59
59
  minute, hour, dom, month, dow = parts
60
60
 
61
- if dow != "*" and dom == "*":
61
+ minute = _fix_step(minute)
62
+ hour = _fix_step(hour)
63
+ dom = _fix_step(dom)
64
+ month = _fix_step(month)
65
+ dow = _fix_step(dow)
66
+
67
+ if dow != "*" and dow != "?" and dom == "*":
62
68
  dom = "?"
63
69
  else:
64
70
  dow = "?"
65
71
 
66
72
  return f"cron({minute} {hour} {dom} {month} {dow} *)"
73
+
74
+
75
+ def _fix_step(field: str) -> str:
76
+ """Convert */N to 0/N for AWS EventBridge compatibility."""
77
+ if field.startswith("*/"):
78
+ return "0/" + field[2:]
79
+ return field
@@ -93,20 +93,28 @@ class SerializerTask(BaseModel):
93
93
  )
94
94
  @classmethod
95
95
  def context_validator(cls, value: Any) -> Any:
96
- if value and value.storage:
97
- return cls._serialize_context(value)
98
- return None
96
+ if value is None:
97
+ return None
98
+ if not isinstance(value, Context):
99
+ return None
100
+ if value.storage is None:
101
+ return None
102
+ return cls._serialize_context(value)
99
103
 
100
104
  @classmethod
101
105
  def _serialize_context(cls, ctx: Context) -> Any:
102
106
  """Serialize a Context to its storage value."""
103
- if isinstance(ctx.storage, list):
107
+ if isinstance(ctx.storage, (list, tuple)):
104
108
  contexts = {}
105
- for item in ctx.storage:
109
+ for index, item in enumerate(ctx.storage):
106
110
  if isinstance(item, Context):
107
- contexts[item.task_id] = cls._serialize_context(item)
111
+ if item.task_id is not None:
112
+ key = item.task_id
113
+ else:
114
+ key = f"ctx:{index}"
115
+ contexts[key] = cls._serialize_context(item)
108
116
  else:
109
- contexts[item.task_id] = cls._format_storage(item)
117
+ contexts[f"raw:{index}"] = cls._format_raw(item)
110
118
  return contexts
111
119
  return cls._format_storage(ctx)
112
120
 
@@ -117,3 +125,11 @@ class SerializerTask(BaseModel):
117
125
  return json.dumps(ctx.storage)
118
126
  except TypeError:
119
127
  return str(ctx.storage)
128
+
129
+ @staticmethod
130
+ def _format_raw(value: Any) -> Any:
131
+ """Format a raw (non-Context) value as JSON string."""
132
+ try:
133
+ return json.dumps(value)
134
+ except TypeError:
135
+ return str(value)
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dotflow"
3
- version = "0.15.0.dev5"
3
+ version = "0.15.0.dev7"
4
4
  authors = [
5
5
  { name="Fernando Celmer", email="email@fernandocelmer.com" },
6
6
  ]
@@ -66,7 +66,7 @@ sentry = ["sentry-sdk"]
66
66
 
67
67
  [tool.poetry]
68
68
  name = "dotflow"
69
- version = "0.15.0.dev5"
69
+ version = "0.15.0.dev7"
70
70
  description = "🎲 Dotflow turns an idea into flow! Lightweight Python library for execution pipelines with retry, parallel, cron and async support."
71
71
  authors = ["Fernando Celmer <email@fernandocelmer.com>"]
72
72
  readme = "README.md"
@@ -153,6 +153,9 @@ name = "test"
153
153
  url = "https://test.pypi.org/simple/"
154
154
  priority = "supplemental"
155
155
 
156
+ [tool.pytest.ini_options]
157
+ testpaths = ["tests"]
158
+
156
159
  [build-system]
157
160
  requires = ["poetry-core"]
158
161
  build-backend = "poetry.core.masonry.api"
File without changes
File without changes