pyworkflow-engine 0.1.9__tar.gz → 0.1.10__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 (182) hide show
  1. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/PKG-INFO +1 -1
  2. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyproject.toml +1 -1
  3. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/__init__.py +1 -1
  4. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/config.py +94 -17
  5. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/CLAUDE.md +0 -0
  6. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/DISTRIBUTED.md +0 -0
  7. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/LICENSE +0 -0
  8. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/MANIFEST.in +0 -0
  9. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/README.md +0 -0
  10. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/RELEASING.md +0 -0
  11. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/cancellation.mdx +0 -0
  12. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/continue-as-new.mdx +0 -0
  13. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/events.mdx +0 -0
  14. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/fault-tolerance.mdx +0 -0
  15. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/hooks.mdx +0 -0
  16. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/limitations.mdx +0 -0
  17. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/schedules.mdx +0 -0
  18. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/sleep.mdx +0 -0
  19. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/step-context.mdx +0 -0
  20. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/steps.mdx +0 -0
  21. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/concepts/workflows.mdx +0 -0
  22. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/guides/cli.mdx +0 -0
  23. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/guides/configuration.mdx +0 -0
  24. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/introduction.mdx +0 -0
  25. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/docs/quickstart.mdx +0 -0
  26. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/__init__.py +0 -0
  27. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/__init__.py +0 -0
  28. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/docker-compose.yml +0 -0
  29. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/pyworkflow.config.yaml +0 -0
  30. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/__init__.py +0 -0
  31. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/basic.py +0 -0
  32. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/batch_processing.py +0 -0
  33. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/cancellation.py +0 -0
  34. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/child_workflow_patterns.py +0 -0
  35. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/child_workflows.py +0 -0
  36. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/continue_as_new.py +0 -0
  37. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/fault_tolerance.py +0 -0
  38. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/hooks.py +0 -0
  39. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/idempotency.py +0 -0
  40. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/long_running.py +0 -0
  41. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/retries.py +0 -0
  42. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/schedules.py +0 -0
  43. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/durable/workflows/step_context.py +0 -0
  44. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/transient/01_basic_workflow.py +0 -0
  45. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/transient/02_fault_tolerance.py +0 -0
  46. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/transient/__init__.py +0 -0
  47. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/celery/transient/pyworkflow.config.yaml +0 -0
  48. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/__init__.py +0 -0
  49. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/01_basic_workflow.py +0 -0
  50. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/02_file_storage.py +0 -0
  51. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/03_retries.py +0 -0
  52. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/04_long_running.py +0 -0
  53. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/05_event_log.py +0 -0
  54. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/06_idempotency.py +0 -0
  55. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/07_hooks.py +0 -0
  56. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/08_cancellation.py +0 -0
  57. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/09_child_workflows.py +0 -0
  58. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/10_child_workflow_patterns.py +0 -0
  59. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/11_continue_as_new.py +0 -0
  60. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/12_schedules.py +0 -0
  61. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/13_step_context.py +0 -0
  62. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/durable/__init__.py +0 -0
  63. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/transient/01_quick_tasks.py +0 -0
  64. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/transient/02_retries.py +0 -0
  65. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/transient/03_sleep.py +0 -0
  66. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/examples/local/transient/__init__.py +0 -0
  67. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/aws/__init__.py +0 -0
  68. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/aws/context.py +0 -0
  69. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/aws/handler.py +0 -0
  70. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/aws/testing.py +0 -0
  71. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/celery/__init__.py +0 -0
  72. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/celery/app.py +0 -0
  73. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/celery/scheduler.py +0 -0
  74. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/celery/tasks.py +0 -0
  75. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/__init__.py +0 -0
  76. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/__main__.py +0 -0
  77. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/commands/__init__.py +0 -0
  78. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/commands/hooks.py +0 -0
  79. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/commands/quickstart.py +0 -0
  80. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/commands/runs.py +0 -0
  81. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/commands/scheduler.py +0 -0
  82. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/commands/schedules.py +0 -0
  83. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/commands/setup.py +0 -0
  84. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/commands/worker.py +0 -0
  85. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/commands/workflows.py +0 -0
  86. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/output/__init__.py +0 -0
  87. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/output/formatters.py +0 -0
  88. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/output/styles.py +0 -0
  89. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/utils/__init__.py +0 -0
  90. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/utils/async_helpers.py +0 -0
  91. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/utils/config.py +0 -0
  92. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/utils/config_generator.py +0 -0
  93. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/utils/discovery.py +0 -0
  94. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/utils/docker_manager.py +0 -0
  95. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/utils/interactive.py +0 -0
  96. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/cli/utils/storage.py +0 -0
  97. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/context/__init__.py +0 -0
  98. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/context/aws.py +0 -0
  99. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/context/base.py +0 -0
  100. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/context/local.py +0 -0
  101. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/context/mock.py +0 -0
  102. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/context/step_context.py +0 -0
  103. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/core/__init__.py +0 -0
  104. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/core/exceptions.py +0 -0
  105. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/core/registry.py +0 -0
  106. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/core/scheduled.py +0 -0
  107. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/core/step.py +0 -0
  108. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/core/workflow.py +0 -0
  109. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/discovery.py +0 -0
  110. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/engine/__init__.py +0 -0
  111. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/engine/events.py +0 -0
  112. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/engine/executor.py +0 -0
  113. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/engine/replay.py +0 -0
  114. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/observability/__init__.py +0 -0
  115. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/observability/logging.py +0 -0
  116. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/__init__.py +0 -0
  117. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/child_handle.py +0 -0
  118. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/child_workflow.py +0 -0
  119. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/continue_as_new.py +0 -0
  120. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/define_hook.py +0 -0
  121. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/hooks.py +0 -0
  122. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/resume_hook.py +0 -0
  123. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/schedule.py +0 -0
  124. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/shield.py +0 -0
  125. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/primitives/sleep.py +0 -0
  126. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/runtime/__init__.py +0 -0
  127. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/runtime/base.py +0 -0
  128. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/runtime/celery.py +0 -0
  129. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/runtime/factory.py +0 -0
  130. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/runtime/local.py +0 -0
  131. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/scheduler/__init__.py +0 -0
  132. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/scheduler/local.py +0 -0
  133. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/serialization/__init__.py +0 -0
  134. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/serialization/decoder.py +0 -0
  135. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/serialization/encoder.py +0 -0
  136. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/__init__.py +0 -0
  137. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/base.py +0 -0
  138. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/cassandra.py +0 -0
  139. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/config.py +0 -0
  140. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/dynamodb.py +0 -0
  141. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/file.py +0 -0
  142. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/memory.py +0 -0
  143. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/mysql.py +0 -0
  144. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/postgres.py +0 -0
  145. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/schemas.py +0 -0
  146. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/storage/sqlite.py +0 -0
  147. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/utils/__init__.py +0 -0
  148. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/utils/duration.py +0 -0
  149. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow/utils/schedule.py +0 -0
  150. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/pyworkflow_engine.egg-info/SOURCES.txt +0 -0
  151. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/setup.cfg +0 -0
  152. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/examples/__init__.py +0 -0
  153. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/integration/__init__.py +0 -0
  154. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/integration/test_cancellation.py +0 -0
  155. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/integration/test_cassandra_storage.py +0 -0
  156. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/integration/test_child_workflows.py +0 -0
  157. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/integration/test_continue_as_new.py +0 -0
  158. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/integration/test_dynamodb_storage.py +0 -0
  159. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/integration/test_fault_tolerance.py +0 -0
  160. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/integration/test_schedule_storage.py +0 -0
  161. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/__init__.py +0 -0
  162. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/backends/__init__.py +0 -0
  163. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/backends/test_cassandra_storage.py +0 -0
  164. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/backends/test_dynamodb_storage.py +0 -0
  165. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/backends/test_postgres_storage.py +0 -0
  166. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/backends/test_sqlite_storage.py +0 -0
  167. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/conftest.py +0 -0
  168. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_cancellation.py +0 -0
  169. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_child_workflows.py +0 -0
  170. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_continue_as_new.py +0 -0
  171. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_event_limits.py +0 -0
  172. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_executor.py +0 -0
  173. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_fault_tolerance.py +0 -0
  174. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_hooks.py +0 -0
  175. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_registry.py +0 -0
  176. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_replay.py +0 -0
  177. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_schedule_schemas.py +0 -0
  178. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_schedule_utils.py +0 -0
  179. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_scheduled_workflow.py +0 -0
  180. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_step.py +0 -0
  181. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_step_context.py +0 -0
  182. {pyworkflow_engine-0.1.9 → pyworkflow_engine-0.1.10}/tests/unit/test_workflow.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyworkflow-engine
3
- Version: 0.1.9
3
+ Version: 0.1.10
4
4
  Summary: A Python implementation of durable, event-sourced workflows inspired by Vercel Workflow
5
5
  Author: PyWorkflow Contributors
6
6
  License: MIT
@@ -7,7 +7,7 @@ packages = [{include = "pyworkflow"}]
7
7
 
8
8
  [project]
9
9
  name = "pyworkflow-engine"
10
- version = "0.1.9"
10
+ version = "0.1.10"
11
11
  description = "A Python implementation of durable, event-sourced workflows inspired by Vercel Workflow"
12
12
  readme = "README.md"
13
13
  requires-python = ">=3.11"
@@ -29,7 +29,7 @@ Quick Start:
29
29
  >>> run_id = await start(my_workflow, "Alice")
30
30
  """
31
31
 
32
- __version__ = "0.1.9"
32
+ __version__ = "0.1.10"
33
33
 
34
34
  # Configuration
35
35
  from pyworkflow.config import (
@@ -5,8 +5,9 @@ Provides global configuration for runtime, storage, and default settings.
5
5
 
6
6
  Configuration is loaded in this priority order:
7
7
  1. Values set via pyworkflow.configure() (highest priority)
8
- 2. Values from pyworkflow.config.yaml in current directory
9
- 3. Default values
8
+ 2. Environment variables (PYWORKFLOW_*)
9
+ 3. Values from pyworkflow.config.yaml in current directory
10
+ 4. Default values
10
11
 
11
12
  Usage:
12
13
  >>> import pyworkflow
@@ -15,8 +16,26 @@ Usage:
15
16
  ... default_durable=False,
16
17
  ... storage=InMemoryStorageBackend(),
17
18
  ... )
19
+
20
+ Environment Variables:
21
+ PYWORKFLOW_STORAGE_TYPE: Storage backend type (file, memory, sqlite, postgres, mysql)
22
+ PYWORKFLOW_STORAGE_PATH: Path for file/sqlite backends
23
+ PYWORKFLOW_POSTGRES_HOST: PostgreSQL host
24
+ PYWORKFLOW_POSTGRES_PORT: PostgreSQL port
25
+ PYWORKFLOW_POSTGRES_USER: PostgreSQL user
26
+ PYWORKFLOW_POSTGRES_PASSWORD: PostgreSQL password
27
+ PYWORKFLOW_POSTGRES_DATABASE: PostgreSQL database
28
+ PYWORKFLOW_MYSQL_HOST: MySQL host
29
+ PYWORKFLOW_MYSQL_PORT: MySQL port
30
+ PYWORKFLOW_MYSQL_USER: MySQL user
31
+ PYWORKFLOW_MYSQL_PASSWORD: MySQL password
32
+ PYWORKFLOW_MYSQL_DATABASE: MySQL database
33
+ PYWORKFLOW_CELERY_BROKER: Celery broker URL
34
+ PYWORKFLOW_CELERY_RESULT_BACKEND: Celery result backend URL
35
+ PYWORKFLOW_RUNTIME: Default runtime (local, celery)
18
36
  """
19
37
 
38
+ import os
20
39
  import warnings
21
40
  from dataclasses import dataclass
22
41
  from pathlib import Path
@@ -26,6 +45,54 @@ if TYPE_CHECKING:
26
45
  from pyworkflow.storage.base import StorageBackend
27
46
 
28
47
 
48
+ def _load_env_storage_config() -> dict[str, Any] | None:
49
+ """
50
+ Load storage configuration from environment variables.
51
+
52
+ Returns:
53
+ Storage configuration dict if PYWORKFLOW_STORAGE_TYPE is set, None otherwise
54
+ """
55
+ storage_type = os.getenv("PYWORKFLOW_STORAGE_TYPE") or os.getenv("PYWORKFLOW_STORAGE_BACKEND")
56
+ if not storage_type:
57
+ return None
58
+
59
+ storage_type = storage_type.lower()
60
+
61
+ if storage_type == "postgres":
62
+ return {
63
+ "type": "postgres",
64
+ "host": os.getenv("PYWORKFLOW_POSTGRES_HOST", "localhost"),
65
+ "port": int(os.getenv("PYWORKFLOW_POSTGRES_PORT", "5432")),
66
+ "user": os.getenv("PYWORKFLOW_POSTGRES_USER", "pyworkflow"),
67
+ "password": os.getenv("PYWORKFLOW_POSTGRES_PASSWORD", ""),
68
+ "database": os.getenv("PYWORKFLOW_POSTGRES_DATABASE", "pyworkflow"),
69
+ }
70
+ elif storage_type == "mysql":
71
+ return {
72
+ "type": "mysql",
73
+ "host": os.getenv("PYWORKFLOW_MYSQL_HOST", "localhost"),
74
+ "port": int(os.getenv("PYWORKFLOW_MYSQL_PORT", "3306")),
75
+ "user": os.getenv("PYWORKFLOW_MYSQL_USER", "pyworkflow"),
76
+ "password": os.getenv("PYWORKFLOW_MYSQL_PASSWORD", ""),
77
+ "database": os.getenv("PYWORKFLOW_MYSQL_DATABASE", "pyworkflow"),
78
+ }
79
+ elif storage_type == "sqlite":
80
+ return {
81
+ "type": "sqlite",
82
+ "base_path": os.getenv("PYWORKFLOW_STORAGE_PATH", "./pyworkflow_data/pyworkflow.db"),
83
+ }
84
+ elif storage_type == "memory":
85
+ return {"type": "memory"}
86
+ elif storage_type == "file":
87
+ return {
88
+ "type": "file",
89
+ "base_path": os.getenv("PYWORKFLOW_STORAGE_PATH", "./pyworkflow_data"),
90
+ }
91
+ else:
92
+ # Unknown type, return as-is and let config_to_storage handle it
93
+ return {"type": storage_type}
94
+
95
+
29
96
  def _load_yaml_config() -> dict[str, Any]:
30
97
  """
31
98
  Load configuration from pyworkflow.config.yaml in current directory.
@@ -101,23 +168,33 @@ class PyWorkflowConfig:
101
168
  event_warning_interval: int = 100 # Log warning every N events after soft limit
102
169
 
103
170
 
104
- def _config_from_yaml() -> PyWorkflowConfig:
105
- """Create a PyWorkflowConfig from YAML file settings."""
106
- yaml_config = _load_yaml_config()
171
+ def _config_from_env_and_yaml() -> PyWorkflowConfig:
172
+ """
173
+ Create a PyWorkflowConfig from environment variables and YAML file.
107
174
 
108
- if not yaml_config:
109
- return PyWorkflowConfig()
175
+ Priority:
176
+ 1. Environment variables (PYWORKFLOW_*)
177
+ 2. YAML config file (pyworkflow.config.yaml)
178
+ 3. Defaults
179
+ """
180
+ yaml_config = _load_yaml_config()
181
+ env_storage_config = _load_env_storage_config()
110
182
 
111
- # Map YAML keys to config attributes
112
- runtime = yaml_config.get("runtime", "local")
183
+ # Runtime: env var > yaml > default
184
+ runtime = os.getenv("PYWORKFLOW_RUNTIME") or yaml_config.get("runtime", "local")
113
185
  durable = runtime == "celery" # Celery runtime defaults to durable
114
186
 
115
- # Create storage from config
116
- storage = _create_storage_from_config(yaml_config.get("storage", {}))
187
+ # Storage: env var > yaml > None
188
+ if env_storage_config:
189
+ storage = _create_storage_from_config(env_storage_config)
190
+ elif yaml_config.get("storage"):
191
+ storage = _create_storage_from_config(yaml_config.get("storage", {}))
192
+ else:
193
+ storage = None
117
194
 
118
- # Get celery broker
195
+ # Celery broker: env var > yaml > None
119
196
  celery_config = yaml_config.get("celery", {})
120
- celery_broker = celery_config.get("broker")
197
+ celery_broker = os.getenv("PYWORKFLOW_CELERY_BROKER") or celery_config.get("broker")
121
198
 
122
199
  return PyWorkflowConfig(
123
200
  default_runtime=runtime,
@@ -288,16 +365,16 @@ def get_config() -> PyWorkflowConfig:
288
365
  """
289
366
  Get the current configuration.
290
367
 
291
- If not yet configured, loads from pyworkflow.config.yaml if present,
292
- otherwise creates default configuration.
368
+ If not yet configured, loads from environment variables and
369
+ pyworkflow.config.yaml (env vars take priority).
293
370
 
294
371
  Returns:
295
372
  Current PyWorkflowConfig instance
296
373
  """
297
374
  global _config, _config_loaded_from_yaml
298
375
  if _config is None:
299
- # Try to load from YAML config file first
300
- _config = _config_from_yaml()
376
+ # Load from env vars and YAML config file
377
+ _config = _config_from_env_and_yaml()
301
378
  _config_loaded_from_yaml = True
302
379
  return _config
303
380