pyworkflow-engine 0.1.7__py3-none-any.whl → 0.1.9__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 (145) hide show
  1. pyworkflow/__init__.py +10 -1
  2. pyworkflow/celery/tasks.py +272 -24
  3. pyworkflow/cli/__init__.py +4 -1
  4. pyworkflow/cli/commands/runs.py +4 -4
  5. pyworkflow/cli/commands/setup.py +203 -4
  6. pyworkflow/cli/utils/config_generator.py +76 -3
  7. pyworkflow/cli/utils/docker_manager.py +232 -0
  8. pyworkflow/context/__init__.py +13 -0
  9. pyworkflow/context/base.py +26 -0
  10. pyworkflow/context/local.py +80 -0
  11. pyworkflow/context/step_context.py +295 -0
  12. pyworkflow/core/registry.py +6 -1
  13. pyworkflow/core/step.py +141 -0
  14. pyworkflow/core/workflow.py +56 -0
  15. pyworkflow/engine/events.py +30 -0
  16. pyworkflow/engine/replay.py +39 -0
  17. pyworkflow/primitives/child_workflow.py +1 -1
  18. pyworkflow/runtime/local.py +1 -1
  19. pyworkflow/storage/__init__.py +14 -0
  20. pyworkflow/storage/base.py +35 -0
  21. pyworkflow/storage/cassandra.py +1747 -0
  22. pyworkflow/storage/config.py +69 -0
  23. pyworkflow/storage/dynamodb.py +31 -2
  24. pyworkflow/storage/file.py +28 -0
  25. pyworkflow/storage/memory.py +18 -0
  26. pyworkflow/storage/mysql.py +1159 -0
  27. pyworkflow/storage/postgres.py +27 -2
  28. pyworkflow/storage/schemas.py +4 -3
  29. pyworkflow/storage/sqlite.py +25 -2
  30. {pyworkflow_engine-0.1.7.dist-info → pyworkflow_engine-0.1.9.dist-info}/METADATA +7 -4
  31. pyworkflow_engine-0.1.9.dist-info/RECORD +91 -0
  32. pyworkflow_engine-0.1.9.dist-info/top_level.txt +1 -0
  33. dashboard/backend/app/__init__.py +0 -1
  34. dashboard/backend/app/config.py +0 -32
  35. dashboard/backend/app/controllers/__init__.py +0 -6
  36. dashboard/backend/app/controllers/run_controller.py +0 -86
  37. dashboard/backend/app/controllers/workflow_controller.py +0 -33
  38. dashboard/backend/app/dependencies/__init__.py +0 -5
  39. dashboard/backend/app/dependencies/storage.py +0 -50
  40. dashboard/backend/app/repositories/__init__.py +0 -6
  41. dashboard/backend/app/repositories/run_repository.py +0 -80
  42. dashboard/backend/app/repositories/workflow_repository.py +0 -27
  43. dashboard/backend/app/rest/__init__.py +0 -8
  44. dashboard/backend/app/rest/v1/__init__.py +0 -12
  45. dashboard/backend/app/rest/v1/health.py +0 -33
  46. dashboard/backend/app/rest/v1/runs.py +0 -133
  47. dashboard/backend/app/rest/v1/workflows.py +0 -41
  48. dashboard/backend/app/schemas/__init__.py +0 -23
  49. dashboard/backend/app/schemas/common.py +0 -16
  50. dashboard/backend/app/schemas/event.py +0 -24
  51. dashboard/backend/app/schemas/hook.py +0 -25
  52. dashboard/backend/app/schemas/run.py +0 -54
  53. dashboard/backend/app/schemas/step.py +0 -28
  54. dashboard/backend/app/schemas/workflow.py +0 -31
  55. dashboard/backend/app/server.py +0 -87
  56. dashboard/backend/app/services/__init__.py +0 -6
  57. dashboard/backend/app/services/run_service.py +0 -240
  58. dashboard/backend/app/services/workflow_service.py +0 -155
  59. dashboard/backend/main.py +0 -18
  60. docs/concepts/cancellation.mdx +0 -362
  61. docs/concepts/continue-as-new.mdx +0 -434
  62. docs/concepts/events.mdx +0 -266
  63. docs/concepts/fault-tolerance.mdx +0 -370
  64. docs/concepts/hooks.mdx +0 -552
  65. docs/concepts/limitations.mdx +0 -167
  66. docs/concepts/schedules.mdx +0 -775
  67. docs/concepts/sleep.mdx +0 -312
  68. docs/concepts/steps.mdx +0 -301
  69. docs/concepts/workflows.mdx +0 -255
  70. docs/guides/cli.mdx +0 -942
  71. docs/guides/configuration.mdx +0 -560
  72. docs/introduction.mdx +0 -155
  73. docs/quickstart.mdx +0 -279
  74. examples/__init__.py +0 -1
  75. examples/celery/__init__.py +0 -1
  76. examples/celery/durable/docker-compose.yml +0 -55
  77. examples/celery/durable/pyworkflow.config.yaml +0 -12
  78. examples/celery/durable/workflows/__init__.py +0 -122
  79. examples/celery/durable/workflows/basic.py +0 -87
  80. examples/celery/durable/workflows/batch_processing.py +0 -102
  81. examples/celery/durable/workflows/cancellation.py +0 -273
  82. examples/celery/durable/workflows/child_workflow_patterns.py +0 -240
  83. examples/celery/durable/workflows/child_workflows.py +0 -202
  84. examples/celery/durable/workflows/continue_as_new.py +0 -260
  85. examples/celery/durable/workflows/fault_tolerance.py +0 -210
  86. examples/celery/durable/workflows/hooks.py +0 -211
  87. examples/celery/durable/workflows/idempotency.py +0 -112
  88. examples/celery/durable/workflows/long_running.py +0 -99
  89. examples/celery/durable/workflows/retries.py +0 -101
  90. examples/celery/durable/workflows/schedules.py +0 -209
  91. examples/celery/transient/01_basic_workflow.py +0 -91
  92. examples/celery/transient/02_fault_tolerance.py +0 -257
  93. examples/celery/transient/__init__.py +0 -20
  94. examples/celery/transient/pyworkflow.config.yaml +0 -25
  95. examples/local/__init__.py +0 -1
  96. examples/local/durable/01_basic_workflow.py +0 -94
  97. examples/local/durable/02_file_storage.py +0 -132
  98. examples/local/durable/03_retries.py +0 -169
  99. examples/local/durable/04_long_running.py +0 -119
  100. examples/local/durable/05_event_log.py +0 -145
  101. examples/local/durable/06_idempotency.py +0 -148
  102. examples/local/durable/07_hooks.py +0 -334
  103. examples/local/durable/08_cancellation.py +0 -233
  104. examples/local/durable/09_child_workflows.py +0 -198
  105. examples/local/durable/10_child_workflow_patterns.py +0 -265
  106. examples/local/durable/11_continue_as_new.py +0 -249
  107. examples/local/durable/12_schedules.py +0 -198
  108. examples/local/durable/__init__.py +0 -1
  109. examples/local/transient/01_quick_tasks.py +0 -87
  110. examples/local/transient/02_retries.py +0 -130
  111. examples/local/transient/03_sleep.py +0 -141
  112. examples/local/transient/__init__.py +0 -1
  113. pyworkflow_engine-0.1.7.dist-info/RECORD +0 -196
  114. pyworkflow_engine-0.1.7.dist-info/top_level.txt +0 -5
  115. tests/examples/__init__.py +0 -0
  116. tests/integration/__init__.py +0 -0
  117. tests/integration/test_cancellation.py +0 -330
  118. tests/integration/test_child_workflows.py +0 -439
  119. tests/integration/test_continue_as_new.py +0 -428
  120. tests/integration/test_dynamodb_storage.py +0 -1146
  121. tests/integration/test_fault_tolerance.py +0 -369
  122. tests/integration/test_schedule_storage.py +0 -484
  123. tests/unit/__init__.py +0 -0
  124. tests/unit/backends/__init__.py +0 -1
  125. tests/unit/backends/test_dynamodb_storage.py +0 -1554
  126. tests/unit/backends/test_postgres_storage.py +0 -1281
  127. tests/unit/backends/test_sqlite_storage.py +0 -1460
  128. tests/unit/conftest.py +0 -41
  129. tests/unit/test_cancellation.py +0 -364
  130. tests/unit/test_child_workflows.py +0 -680
  131. tests/unit/test_continue_as_new.py +0 -441
  132. tests/unit/test_event_limits.py +0 -316
  133. tests/unit/test_executor.py +0 -320
  134. tests/unit/test_fault_tolerance.py +0 -334
  135. tests/unit/test_hooks.py +0 -495
  136. tests/unit/test_registry.py +0 -261
  137. tests/unit/test_replay.py +0 -420
  138. tests/unit/test_schedule_schemas.py +0 -285
  139. tests/unit/test_schedule_utils.py +0 -286
  140. tests/unit/test_scheduled_workflow.py +0 -274
  141. tests/unit/test_step.py +0 -353
  142. tests/unit/test_workflow.py +0 -243
  143. {pyworkflow_engine-0.1.7.dist-info → pyworkflow_engine-0.1.9.dist-info}/WHEEL +0 -0
  144. {pyworkflow_engine-0.1.7.dist-info → pyworkflow_engine-0.1.9.dist-info}/entry_points.txt +0 -0
  145. {pyworkflow_engine-0.1.7.dist-info → pyworkflow_engine-0.1.9.dist-info}/licenses/LICENSE +0 -0
@@ -1,141 +0,0 @@
1
- """
2
- Transient Workflow - Async Sleep
3
-
4
- This example demonstrates sleep() behavior in transient mode.
5
- - Uses asyncio.sleep() under the hood (blocks workflow)
6
- - No workflow suspension (unlike durable mode)
7
- - Simple delay mechanism
8
- - Perfect for rate limiting and delays
9
-
10
- Run: python examples/local/transient/03_sleep.py 2>/dev/null
11
- """
12
-
13
- import asyncio
14
- from datetime import datetime
15
-
16
- from pyworkflow import (
17
- configure,
18
- reset_config,
19
- sleep,
20
- start,
21
- step,
22
- workflow,
23
- )
24
-
25
-
26
- # --- Steps ---
27
- @step()
28
- async def start_task(task_id: str) -> dict:
29
- """Start a task."""
30
- timestamp = datetime.now().strftime("%H:%M:%S")
31
- print(f" [{timestamp}] Starting task {task_id}...")
32
- return {"task_id": task_id, "status": "started"}
33
-
34
-
35
- @step()
36
- async def process_task(task: dict) -> dict:
37
- """Process the task."""
38
- timestamp = datetime.now().strftime("%H:%M:%S")
39
- print(f" [{timestamp}] Processing task {task['task_id']}...")
40
- return {**task, "status": "processed"}
41
-
42
-
43
- @step()
44
- async def complete_task(task: dict) -> dict:
45
- """Complete the task."""
46
- timestamp = datetime.now().strftime("%H:%M:%S")
47
- print(f" [{timestamp}] Completing task {task['task_id']}...")
48
- return {**task, "status": "completed"}
49
-
50
-
51
- # --- Workflows ---
52
- @workflow(durable=False, tags=["local", "transient"])
53
- async def delayed_workflow(task_id: str, delay_seconds: int) -> dict:
54
- """Workflow with sleep delay."""
55
- task = await start_task(task_id)
56
-
57
- timestamp = datetime.now().strftime("%H:%M:%S")
58
- print(f" [{timestamp}] Sleeping for {delay_seconds} seconds...")
59
- await sleep(f"{delay_seconds}s") # Uses asyncio.sleep() in transient mode
60
-
61
- timestamp = datetime.now().strftime("%H:%M:%S")
62
- print(f" [{timestamp}] Woke up from sleep!")
63
-
64
- task = await process_task(task)
65
- task = await complete_task(task)
66
- return task
67
-
68
-
69
- @workflow(durable=False, tags=["local", "transient"])
70
- async def rate_limited_workflow(task_id: str) -> dict:
71
- """Workflow demonstrating rate limiting pattern."""
72
- task = await start_task(task_id)
73
-
74
- # Simulate rate limiting between API calls
75
- print(" Rate limiting: waiting 2 seconds before next API call...")
76
- await sleep("2s")
77
-
78
- task = await process_task(task)
79
-
80
- # Another rate limit delay
81
- print(" Rate limiting: waiting 2 seconds before final call...")
82
- await sleep("2s")
83
-
84
- task = await complete_task(task)
85
- return task
86
-
87
-
88
- async def main():
89
- # Configure for transient mode
90
- reset_config()
91
- configure(default_durable=False)
92
-
93
- print("=== Transient Workflow - Async Sleep ===\n")
94
-
95
- # Example 1: Basic sleep
96
- print("Example 1: Basic sleep (3 seconds)\n")
97
- start_time = datetime.now()
98
-
99
- run_id = await start(delayed_workflow, "task-001", 3)
100
-
101
- end_time = datetime.now()
102
- elapsed = (end_time - start_time).total_seconds()
103
-
104
- print(f"\nWorkflow completed: {run_id}")
105
- print(f"Total time: {elapsed:.1f} seconds")
106
-
107
- # Example 2: Rate limiting
108
- print("\n" + "=" * 60)
109
- print("\nExample 2: Rate limiting with multiple sleeps\n")
110
- start_time = datetime.now()
111
-
112
- run_id = await start(rate_limited_workflow, "task-002")
113
-
114
- end_time = datetime.now()
115
- elapsed = (end_time - start_time).total_seconds()
116
-
117
- print(f"\nWorkflow completed: {run_id}")
118
- print(f"Total time: {elapsed:.1f} seconds")
119
-
120
- print("\n=== Sleep Behavior in Transient Mode ===")
121
- print("✓ Uses asyncio.sleep() (blocks the workflow)")
122
- print("✓ No workflow suspension (process keeps running)")
123
- print("✓ No resource release during sleep")
124
- print("✓ Perfect for short delays and rate limiting")
125
-
126
- print("\n=== Sleep Format Support ===")
127
- print('sleep("5s") - 5 seconds')
128
- print('sleep("2m") - 2 minutes')
129
- print('sleep("1h") - 1 hour')
130
- print("sleep(30) - 30 seconds (int)")
131
- print("sleep(timedelta(seconds=10)) - 10 seconds")
132
-
133
- print("\n=== Difference from Durable Mode ===")
134
- print("Transient: sleep() blocks using asyncio.sleep()")
135
- print("Durable: sleep() suspends workflow, can resume later")
136
- print("\nFor long-running workflows with suspension:")
137
- print(" See examples/local/durable/04_long_running.py")
138
-
139
-
140
- if __name__ == "__main__":
141
- asyncio.run(main())
@@ -1 +0,0 @@
1
- # PyWorkflow Local Transient Examples Package
@@ -1,196 +0,0 @@
1
- dashboard/backend/main.py,sha256=0w7mg8gHbJJPlbD-JQPMJxLsswIvZRW8lNDnjBhY8R4,338
2
- dashboard/backend/app/__init__.py,sha256=VhJu_FV9ke7EZlC3VowVxOmVrcPWPGU2AfMkRgLwEPA,36
3
- dashboard/backend/app/config.py,sha256=SofNanrybmZhgtF0wFT6WZeJrbz9ackwK0XvdjOxglY,814
4
- dashboard/backend/app/server.py,sha256=Vp9y5Eu1ktN9ZDVgFYfRWcVz7QdJmJhVmgfQocldOWI,2405
5
- dashboard/backend/app/controllers/__init__.py,sha256=EUqGJEODJkug1YFHzEgSJTJftIWzzVvXnHZpML7jdYc,201
6
- dashboard/backend/app/controllers/run_controller.py,sha256=HeSw4K3D2txkJFjU5afLnrOg53uWBoLW5aUHPBQdB5w,2716
7
- dashboard/backend/app/controllers/workflow_controller.py,sha256=q0_IzWKsC-qpa7MzF_brO01xjNKzGPKKY1oXut8GQiw,1024
8
- dashboard/backend/app/dependencies/__init__.py,sha256=Bn-fjVgsjNf_Tcai8PyKhwDs3yT86CwmN7fB7VNSiNs,105
9
- dashboard/backend/app/dependencies/storage.py,sha256=rBeHnGQa49vn95peNIouaVHGaGOrsaIAfXEwkqCslR0,1703
10
- dashboard/backend/app/repositories/__init__.py,sha256=T-esMlJimz-Mu1ZhHcPmZI7Mil6n0Hl-HSos_PEIWr4,202
11
- dashboard/backend/app/repositories/run_repository.py,sha256=GhjCGjBdKxYCeA9zJZcZRJea-1PBoLZ3iyFPvEQEkzU,2357
12
- dashboard/backend/app/repositories/workflow_repository.py,sha256=LMSm28-_iWFedQQvzsnGwQGwAj0RXj29v-ZQQEQsqkc,752
13
- dashboard/backend/app/rest/__init__.py,sha256=VruucqKlRXLgK9eoa5M_DoPRJzZhHUY6-3MiTixAwME,172
14
- dashboard/backend/app/rest/v1/__init__.py,sha256=GCUz23b_z8vqLiU-9M3qYlZ5axv6_nesInPdGGJrkRk,443
15
- dashboard/backend/app/rest/v1/health.py,sha256=Zmt0CA5PJcIO_hHPFuM15zrnzZroFdtg4uToleWpY1c,773
16
- dashboard/backend/app/rest/v1/runs.py,sha256=E4XVQYjzSqBTT44gmOA6Io-q7cta465MTwbqv4S3lac,4146
17
- dashboard/backend/app/rest/v1/workflows.py,sha256=ygfM6yettagC-nrJuHo1JGrouGhXFg8saa1-HULpCF4,1078
18
- dashboard/backend/app/schemas/__init__.py,sha256=12Dxel8goPL1-lBRXIq7ieIKVTvUZwlfEAFaZrC7UzY,730
19
- dashboard/backend/app/schemas/common.py,sha256=lIzI4CK4w0YssZG2zEP90fLNa6autOWilAAELFoQCaU,281
20
- dashboard/backend/app/schemas/event.py,sha256=Yb_wPbFNV4njP2SodCnYOscBhUhkUrASzVm7B6a4EB4,462
21
- dashboard/backend/app/schemas/hook.py,sha256=Fo-NLU35JC7rJjgT_la-lR13Sz2aOHddlfUFlBk286U,501
22
- dashboard/backend/app/schemas/run.py,sha256=BfnRSDDS3jnSLX5g6EJvPNP4tT4UQw4_YP38v2OeaZw,1228
23
- dashboard/backend/app/schemas/step.py,sha256=nL9CJtl5nQ3M1xZt4LwlzPkf5j4VKVDzOW3V4GC1-74,600
24
- dashboard/backend/app/schemas/workflow.py,sha256=I-ULGItjMPSqtxqQ1mcRmmb4dVSMebKHUTT5Vh9by70,708
25
- dashboard/backend/app/services/__init__.py,sha256=CiywPcgYKoHfOqqGolfE-LrlZ64Wxa2mpBWoFQQLJRo,174
26
- dashboard/backend/app/services/run_service.py,sha256=WOpp9AzrJdMRWx9NYqYp2LhcL5y3X8-_KLOYeq8fUa0,7178
27
- dashboard/backend/app/services/workflow_service.py,sha256=A0-4-GA7nVnBqolISHblboy6UuxMDeaBb9fjILBAPCo,4287
28
- docs/introduction.mdx,sha256=S_J9FZcVMwBWn5gehphz-6DhYMcRleAtXySpjA9m8BI,5613
29
- docs/quickstart.mdx,sha256=_MYZu3qxdBc1B_Hn7gebCNj6Z0HWANb1mKmDPb0l3DU,7464
30
- docs/concepts/cancellation.mdx,sha256=AaBfXHgNlrXmvDpyZEppgKTu0D4yAp0TG5--hDh0G9E,11568
31
- docs/concepts/continue-as-new.mdx,sha256=F6xBMwXLk5j8doLwIeL7aoS-GjL2PwALnYBVg8jE_gY,13599
32
- docs/concepts/events.mdx,sha256=v4qyp3vu5MVEs7n17Q1Wz4kyPPY-wFfKe0apagEFCWs,7868
33
- docs/concepts/fault-tolerance.mdx,sha256=I2YmY7wcDFST1V4jdBX-Kib0LBJbliORIztYdzkAQwA,14054
34
- docs/concepts/hooks.mdx,sha256=prXaPOGjdKWcOwjKbAFpcjJwUk6qBNuY5L0cu4JBzlk,15393
35
- docs/concepts/limitations.mdx,sha256=-RcgqGtc2KdtORKWTk7LLmXihvP1uGEMyMH5lvXBBcc,5422
36
- docs/concepts/schedules.mdx,sha256=aM6UVyQOQ4cMoXH7nGJA_5k2o_Yo7qxN6dstlix2Ro4,21897
37
- docs/concepts/sleep.mdx,sha256=pxB6P-Ruvp6hgyQiGVzijmkhvzMWqz2ROMOhdFynVc4,7430
38
- docs/concepts/steps.mdx,sha256=Q933pi1W8zln8EU50Ozk98C97Pc1gKTfKFuElUju31Q,8091
39
- docs/concepts/workflows.mdx,sha256=M8MD0tU-hnGhnpdvGCrGwNbfwpJJjA2rh9M2KNgiolg,8010
40
- docs/guides/cli.mdx,sha256=vRhdght9ZoQZ48YqIPb_8d6ABmv2x1lSnJ65cLd9Sak,24072
41
- docs/guides/configuration.mdx,sha256=Qs1yO96HOl8WJism6-0Rqz48XW4Gd6wfVqKaARhYF68,15044
42
- examples/__init__.py,sha256=ZKOmZiyKXe_C014WCgNlcrEHb2FweH2Obl5_jy4tFtI,30
43
- examples/celery/__init__.py,sha256=_WVdfeZVa-byrFJtEm3ox6kTv4MwJ8Q2XIv8VF5kIx4,37
44
- examples/celery/durable/docker-compose.yml,sha256=6clHtaRi974en3ELhZBLcWZnQDd9UivLXuXjNuEfV50,1528
45
- examples/celery/durable/pyworkflow.config.yaml,sha256=s5RQCQTaTnHKwGYhWs7qvnnQxhH0UcmLqY1rlUCAb4g,293
46
- examples/celery/durable/workflows/__init__.py,sha256=sEy7aJnx5rLPRdbGs5iIHFaSBkvp6Y7OUPBSM7r5sxQ,3287
47
- examples/celery/durable/workflows/basic.py,sha256=2CrQ31Y59rWtgeprPG0j1-hH7FfkxB3H-QOsP8sEeuY,2796
48
- examples/celery/durable/workflows/batch_processing.py,sha256=E3Mz9lnrOzb4EaOJ8jarWVqrbz1gxLYtFOE07Fxo5dQ,3371
49
- examples/celery/durable/workflows/cancellation.py,sha256=EMFr-4aZGW15dCgKtFuLQKPC9eBsxgfkw8XTueLXV34,9117
50
- examples/celery/durable/workflows/child_workflow_patterns.py,sha256=L-koPTtjM_JQpt4IXt1s-Z_cJV6C0tu6TocRV1MMCtg,8468
51
- examples/celery/durable/workflows/child_workflows.py,sha256=8ycbf5lpJpACMcm1FiLHPUvd-oKesADvDSg37s9WMfk,7174
52
- examples/celery/durable/workflows/continue_as_new.py,sha256=Z3Ey9bE8fCRHQvih10aRDpd6VHdx7fSAzjfmYfXzjAU,8028
53
- examples/celery/durable/workflows/fault_tolerance.py,sha256=CIblbq9T_zsSKYMuEkLOuZCSMCQ5x8KUp0KEy7QwgOQ,6971
54
- examples/celery/durable/workflows/hooks.py,sha256=3kY276H-vlBxK04zLCKl9BMVTPCVkSutszGbhLlDHB4,6851
55
- examples/celery/durable/workflows/idempotency.py,sha256=3LHGvrL7Jw8dPDPktTWYAiy407lpzFeJRRE3DK65sf4,3984
56
- examples/celery/durable/workflows/long_running.py,sha256=V5t-_fO3GXH3xsflLWruOc4NymJ-nSQanFxUBh6lWBc,3177
57
- examples/celery/durable/workflows/retries.py,sha256=3-zJnF3mvcHrkaUO8afkUOOFroO1iCY8jWjQP3z-QDQ,3284
58
- examples/celery/durable/workflows/schedules.py,sha256=U2Ni8rRFt-3Oau3ek5pzsTC-IrxhnYupNqOcMteEHJY,6672
59
- examples/celery/transient/01_basic_workflow.py,sha256=WuRHofa8wvdnzCu2vtx601cKCivhDD8CVfJIM0xPWDg,2774
60
- examples/celery/transient/02_fault_tolerance.py,sha256=ihoCnuYq2DwIMI88hxY_YM0LPwAO2IBuxphCG2jThbM,9052
61
- examples/celery/transient/__init__.py,sha256=pFNAED54Oj2PSksFPxjtv2KrgMLnRDobHZ53rZQUNGA,798
62
- examples/celery/transient/pyworkflow.config.yaml,sha256=uBxlq4NLyFJrFrPU3ZEh6rbOHCHNuuSSxeMA7t9xAfo,685
63
- examples/local/__init__.py,sha256=ESXk4CALCAUStP3YsGz9cW0h0tw_C7lpfpABM5HGGyQ,36
64
- examples/local/durable/01_basic_workflow.py,sha256=dXk7YeTlzpp2LEtOewmsww0WAC-J7Org_Xf71OCvLPc,2768
65
- examples/local/durable/02_file_storage.py,sha256=4V_MoQBqe-nuMlJhQVFOTgPD4Nl1QgMqYpjwbsu8plw,4330
66
- examples/local/durable/03_retries.py,sha256=Z2fSj3ldMWrLSt2pvg2Uyup9Jv5NiKsCHsL_k_DE_2o,5807
67
- examples/local/durable/04_long_running.py,sha256=fiYpa5QuwZmZKswiSsHspiCBa_tFko3w2pMDa3wGtfw,3892
68
- examples/local/durable/05_event_log.py,sha256=V7n_74u_51THG9vgNDf-1Sqd_TWC6jiszFxx4w5gUx4,4467
69
- examples/local/durable/06_idempotency.py,sha256=6DOT2ws6-Kf-95mGIPU5OVkugoGON9idyFDYX0sIUuc,5047
70
- examples/local/durable/07_hooks.py,sha256=yPOfz1npQ_u7FHkU1LjZCO82kd6xihUOeau2nzWoyZo,10432
71
- examples/local/durable/08_cancellation.py,sha256=bDaZsgnfOfHed7zaY45IUx38Dl9uyta6nm72nxpDGns,7423
72
- examples/local/durable/09_child_workflows.py,sha256=uAH26iBxMsKBcFvn5zVZO2uiuDXK8rMXffiPJNnz8FY,6731
73
- examples/local/durable/10_child_workflow_patterns.py,sha256=tyK0QAJLQJe53jdPgH7ay7GWA0WfqJoav_oRIL8KJGA,8476
74
- examples/local/durable/11_continue_as_new.py,sha256=AHTwKWit1vR1d2zk-o3xZBLBbzX4B7oz_93BNuG6E_s,7747
75
- examples/local/durable/12_schedules.py,sha256=0zzHhUvhmVrqsBd_4bsewWvlUOnVIeQFx9meX11auQA,6219
76
- examples/local/durable/__init__.py,sha256=AnkHdfpABaF0GImcTV0Go9ygGGY00HDgDcl_so7xPIY,44
77
- examples/local/transient/01_quick_tasks.py,sha256=BzbSy69MvnQeyOtYlweqF-nZrIUFDxVJwfDOVcZjl74,2516
78
- examples/local/transient/02_retries.py,sha256=cxgnnZTNYYEv0dnriyzWa_ClqIiQUutsnj2AIVrZsN4,3976
79
- examples/local/transient/03_sleep.py,sha256=j7MXbiJ20OZcHPydITx6BtZV81cBmYp4wmSP8RsmPws,4233
80
- examples/local/transient/__init__.py,sha256=JA91ksUYQCZPAL4mSe71LjFnWuk_dr6fV0m8SQMSKjA,46
81
- pyworkflow/__init__.py,sha256=42YUz_F3w2W8AUjIML5ivo3l_5KVLF_uv2h2ZeIeAVc,6061
82
- pyworkflow/config.py,sha256=a_UvywIwmPtGy0SzeWYVk3DVCEeUlIRkDrt-4KfTtE8,11019
83
- pyworkflow/discovery.py,sha256=snW3l4nvY3Nc067TGlwtn_qdzTU9ybN7YPr8FbvY8iM,8066
84
- pyworkflow/aws/__init__.py,sha256=Ak_xHcR9LTRX-CwcS0XecYmzrXZw4EM3V9aKBBDEmIk,1741
85
- pyworkflow/aws/context.py,sha256=Vjyjip6U1Emg-WA5TlBaxFhcg15rf9mVJiPfT4VywHc,8217
86
- pyworkflow/aws/handler.py,sha256=0SnQuIfQVD99QKMCRFPtrsrV_l1LYKFkzPIRx_2UkSI,5849
87
- pyworkflow/aws/testing.py,sha256=WrRk9wjbycM-UyHFQWNnA83UE9IrYnhfT38WrbxQT2U,8844
88
- pyworkflow/celery/__init__.py,sha256=FywVyqnT8AYz9cXkr-wel7_-N7dHFsPNASEPMFESf4Q,1179
89
- pyworkflow/celery/app.py,sha256=EsmRqervXqnJn7Jl76ZDV9OIcNnIb6fRjDeuZEfYJL8,6456
90
- pyworkflow/celery/scheduler.py,sha256=Ms4rqRpdpMiLM8l4y3DK-Divunj9afYuUaGGoNQe7P4,11288
91
- pyworkflow/celery/tasks.py,sha256=s4S7VTjtrEdUCM9QaalAqLSe2uJ3B9FAN-HuyYZytaY,56453
92
- pyworkflow/cli/__init__.py,sha256=OzK8lQ0qaxy2iQ_TjY9n3Mjd-rKjMxJtkFgJTtAlaQA,3787
93
- pyworkflow/cli/__main__.py,sha256=LxLLS4FEEPXa5rWpLTtKuivn6Xp9pGia-QKGoxt9SS0,148
94
- pyworkflow/cli/commands/__init__.py,sha256=IXvnTgukALckkO8fTlZhVRq80ojSqpnIIgboAg_-yZU,39
95
- pyworkflow/cli/commands/hooks.py,sha256=UtTjfuo4qMwkV0UfdvgWLIqhTw69hnHLjg6-KTVZyRY,21139
96
- pyworkflow/cli/commands/quickstart.py,sha256=4i_eiCLPAkzXpVoDtlEMgU_JtJpmcffKlgb2dIag5aw,14352
97
- pyworkflow/cli/commands/runs.py,sha256=QeA3e-SV6CfWm3N6Gni2cHRGREdXNVzUMftliNmunsU,25109
98
- pyworkflow/cli/commands/scheduler.py,sha256=w2iUoJ1CtEtOg_4TWslTHbzEPVsV-YybqWU9jkf38gs,3706
99
- pyworkflow/cli/commands/schedules.py,sha256=UCKZLTWsiLwCewCEXmqOVQnptvvuIKsWSTXai61RYbM,23466
100
- pyworkflow/cli/commands/setup.py,sha256=XuUCjSpmkgayIMIgIMtDuITj7QvPQT8ZKXTs_SGhI6k,23878
101
- pyworkflow/cli/commands/worker.py,sha256=UJ8bQJTXMEk3BoMiivClTCKNt_f-g75jJ5O-khfcfsY,12110
102
- pyworkflow/cli/commands/workflows.py,sha256=zRBFeqCa4Uo_wwEjgk0SBmkqgcaMznS6ghe1N0ub8Zs,42673
103
- pyworkflow/cli/output/__init__.py,sha256=5VxKL3mXah5rCKmctxcAKVwp42T47qT1oBK5LFVHHEg,48
104
- pyworkflow/cli/output/formatters.py,sha256=QzsgPR3cjIbH0723wuG_HzUx9xC7XMA6-NkT2y2lwtM,8785
105
- pyworkflow/cli/output/styles.py,sha256=WK6GHq_zQGMITGf16U3Vhc4gG4E7YFlE8_d-uBLGbBk,3035
106
- pyworkflow/cli/utils/__init__.py,sha256=yzEuZNPwj-ts1oR8QBD3pObRmGbL0oullXF-jIve5wo,40
107
- pyworkflow/cli/utils/async_helpers.py,sha256=B7bPBiUWV9rzHjtXnINEh7AHO57ytQH1xU6TtxnA2dU,786
108
- pyworkflow/cli/utils/config.py,sha256=Lb75T6-y45v0JiLS-fNNvFU2KDoMIBWyNqmFG_jsEeU,3928
109
- pyworkflow/cli/utils/config_generator.py,sha256=fid3UIfG5dTvF3d_FF3R5BYEMSjdYfN35pZ_UGru_Lc,10905
110
- pyworkflow/cli/utils/discovery.py,sha256=v-5FMresm-kYPW-hQbql6dOIu6sqIoW_TddD16B8SKo,1467
111
- pyworkflow/cli/utils/docker_manager.py,sha256=nCkPcEg9aLLhc7lbKKan58Tg1HLQWwYYuiyLtOhSY-I,18931
112
- pyworkflow/cli/utils/interactive.py,sha256=S2Ell-rUzzt3V10diGo5XCgiDcYFYSxoXNYkJ5EQ_Yc,9740
113
- pyworkflow/cli/utils/storage.py,sha256=a5Iu2Xe1_mPgBVYc8B6I63MFfW12ko7wURqcpq3RBPA,4018
114
- pyworkflow/context/__init__.py,sha256=HJAz4H2nT7BoRTgTmNSZJP7eXK7er0uwMwNFZug5uV4,1825
115
- pyworkflow/context/aws.py,sha256=MYxrFsRzCgaZ0YQAyE26UOT_ryxuag5DwiDSodclQIg,7571
116
- pyworkflow/context/base.py,sha256=-Q49kL8Ow6zRre6Xm60PzYymkvDtxR3SHM8PgfLucI4,12693
117
- pyworkflow/context/local.py,sha256=m1sNxxmmiPS9BliJsgjg669GFQqvd7vudFW_Jj0E3JQ,32995
118
- pyworkflow/context/mock.py,sha256=TJzQ3P3_ZHm1lCJZJACIFFvz2ydFxz2cT9eEGOQS5I0,12061
119
- pyworkflow/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
- pyworkflow/core/exceptions.py,sha256=F2nbXyoed7wlIJMeGfpgsIC8ZyWcYN0iKtOnBA7-xnQ,10719
121
- pyworkflow/core/registry.py,sha256=vUtEv2cYJaqG3229-pQ2X8CZXYk416ilFn-hhahgros,9056
122
- pyworkflow/core/scheduled.py,sha256=479A7IvjHiMob7ZrZtfE6VqtypG6DLIGMGhh16jLIWM,10522
123
- pyworkflow/core/step.py,sha256=zUXC8oIbe4_x4c94pwsUwtGtkNau6vu6t5XfaNqZVo4,17805
124
- pyworkflow/core/workflow.py,sha256=NQACOCFLb0M5QN_wGJpm6U3dwsEy_Lr4R5G3g91mU5g,9597
125
- pyworkflow/engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
- pyworkflow/engine/events.py,sha256=enH1mFOUi50OQUOUWc_cWJAUqtnoq47-IbM8cox2I-8,24368
127
- pyworkflow/engine/executor.py,sha256=5b50m-a4XjrOoIS9hS4Rsgk_N114s5js6b-LuW2L0Jw,20333
128
- pyworkflow/engine/replay.py,sha256=bmMb4wzPKaZwPOage3Z-g_5DndYNoSmavMZ9sPiFzYI,9386
129
- pyworkflow/observability/__init__.py,sha256=M_Uc3WdtshQSxLnj3T8D0M7f4zcCuFzVs8e8PKCuXDc,380
130
- pyworkflow/observability/logging.py,sha256=4b_N4bIHUxlgOzEn5u1uB-ngCWPNDSU7daKAKxkjBUM,7018
131
- pyworkflow/primitives/__init__.py,sha256=rEahSVLhG3nSxvcRhJeM1LBSBIV7AkcRTnxuMLmZMTM,1041
132
- pyworkflow/primitives/child_handle.py,sha256=7NcIaNUQdZEoxmk5gQH1CJ6uQzpro3eFo-sEaM6l6w0,5466
133
- pyworkflow/primitives/child_workflow.py,sha256=-KU9puqd9wnhdkvT6j7mE_7V1QiHNFtMOqiCT77h4PI,13141
134
- pyworkflow/primitives/continue_as_new.py,sha256=NKcimHsgr5ExkvRvfO28hxgPw_I7Q74Vz9WL8r0PhPc,3329
135
- pyworkflow/primitives/define_hook.py,sha256=gNzk7DuObfWG1T9AdHnDnGLHNKjnApiVRlCKPObugfY,4443
136
- pyworkflow/primitives/hooks.py,sha256=ws9U81ymsY8M4FFTvJ2X4EMGmIrilb3vCKZ0V_EGZdE,3085
137
- pyworkflow/primitives/resume_hook.py,sha256=q6gb0qsAhOkFRKMs-PkbLSFLnLerx0VGMkPp9CbkXZQ,6192
138
- pyworkflow/primitives/schedule.py,sha256=2hVM2Swl9dRx3RHd5nblJLaU8HaSy-NHYue2Cf9TOcU,14961
139
- pyworkflow/primitives/shield.py,sha256=MUYakU0euZoYNb6MbFyRfJN8GEXsRFkIbZEo84vRN9c,2924
140
- pyworkflow/primitives/sleep.py,sha256=iH1e5CoWY-jZbYNAU3GRW1xR_8EtCuPIcIohzU4jWJo,3097
141
- pyworkflow/runtime/__init__.py,sha256=DkwTgFCMRGyyW8NGcW7Nyy9beOg5kO1TXhqhysj1-aY,649
142
- pyworkflow/runtime/base.py,sha256=-X2pct03XuA3o1P6yD5ywTDgegN6_a450gG8MBVeKRE,5190
143
- pyworkflow/runtime/celery.py,sha256=0hSwN4alL69ZgnIgYiITcJ0s_iTi8A_xrsdKo89k4Hs,9431
144
- pyworkflow/runtime/factory.py,sha256=TRbqWPfyZ0tPFKb0faI9SkBRXxE5AEVTwGW4pS2diM8,2684
145
- pyworkflow/runtime/local.py,sha256=J3OTbPWtTzD8bMVuFV-0EmJZGI1nI0j9vrwvnmOgG6Q,24129
146
- pyworkflow/scheduler/__init__.py,sha256=lQQo0Cia_ULIg-KPIrqILV30rUIzybxj1k_ZZTQNZyg,222
147
- pyworkflow/scheduler/local.py,sha256=CnK4UC6ofD3_AZJUlO9iUAdgAnbMmJvPaL_VucNKs5Q,8154
148
- pyworkflow/serialization/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
- pyworkflow/serialization/decoder.py,sha256=F7Ofuw1Yzo82iSFFXiK2yoW_v2YRbLMpX3CQbKjm0Ls,3860
150
- pyworkflow/serialization/encoder.py,sha256=ZBwAxe5Bb4MCfFJePHw7ArJlIbBieSwUgsysGCI2iPU,4108
151
- pyworkflow/storage/__init__.py,sha256=dzsZbxtAkouWGVbIi6euHyMMYnfAJ6L5v2ze5tI6-vw,1466
152
- pyworkflow/storage/base.py,sha256=nYub8nwp7G0pD4k-I_FG88G4BA1Sry5sjeEbMiyVhKw,15153
153
- pyworkflow/storage/config.py,sha256=Tg3uWcc-lYZ2NtFhZLi946aygcQhRCINxo2Yoc011tc,6534
154
- pyworkflow/storage/dynamodb.py,sha256=GB3vL9TuiIKx1Gt_wmITrTSYncq8_v7YLsK6azc8a70,52202
155
- pyworkflow/storage/file.py,sha256=wKfFfjQnhQh8VT1fDrBTySxKFukmrNuSHBXTasihZnI,27898
156
- pyworkflow/storage/memory.py,sha256=beE-H9tROs1TMIzn4otk9BrpAVYtwMB35patRC8D2sM,19178
157
- pyworkflow/storage/postgres.py,sha256=CtVSwn3tHYy_1aULWymddkJnLLQr3W6t9oVcp-tlvO0,40569
158
- pyworkflow/storage/schemas.py,sha256=9q0hOOnlilsZ9tVfhHpoLIw1z67P_Gf84mfa27RPq1k,17874
159
- pyworkflow/storage/sqlite.py,sha256=T85b21tUMag8ARjFVrR3YdO9SB7gp6nURdxJCp91-gQ,38845
160
- pyworkflow/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
161
- pyworkflow/utils/duration.py,sha256=C-itmiSQQlplw7j6XB679hLF9xYGnyCwm7twO88OF8U,3978
162
- pyworkflow/utils/schedule.py,sha256=dO_MkGFyfwZpb0LDlW6BGyZzlPuQIA6dc6j9nk9lc4Y,10691
163
- pyworkflow_engine-0.1.7.dist-info/licenses/LICENSE,sha256=Y49RCTZ5ayn_yzBcRxnyIFdcMCyuYm150aty_FIznfY,1080
164
- tests/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
165
- tests/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
166
- tests/integration/test_cancellation.py,sha256=Y57gJxSbFKa2CEeSCY6eZZ3zUEWKCam63svP6qXct8A,9998
167
- tests/integration/test_child_workflows.py,sha256=nTtIqAVYgAnb3gKG_1oDoN2JGOILMZgE1rDyMNYEyFY,12243
168
- tests/integration/test_continue_as_new.py,sha256=D2gkgGyW3ntcdgifb4gC9xyW_h08Su-1c-MAKw1yTtc,13756
169
- tests/integration/test_dynamodb_storage.py,sha256=X9ZBKG05TaKeVRn86uzzI9diYsupVoSaj4RGDdW-Gj8,38093
170
- tests/integration/test_fault_tolerance.py,sha256=yR3Nywb06fpA8pVJ-fgkxomWbYoVxGWGlOarc7Pfd9c,12474
171
- tests/integration/test_schedule_storage.py,sha256=S-6T_x0Xe8H6P5Y54FgRUqw5C4IVT2SjJUCrzhoKqEA,16105
172
- tests/unit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
173
- tests/unit/conftest.py,sha256=5bVhDRtL3F9T5JGGL4R1K6xwbryZpR7ttsWt_29eKwY,997
174
- tests/unit/test_cancellation.py,sha256=HaDpLdnsuBo-keY5FzkU8hvyxKhAlh37_PnoiT02pfI,12285
175
- tests/unit/test_child_workflows.py,sha256=PMGNKpzdhOJ_Cn5FF-JPMZSthk9BAQTh4ieGFik0Zm0,24449
176
- tests/unit/test_continue_as_new.py,sha256=uoicJsHTU8vEOUyHHpPwBb2l9iHoAJz_fvyUsbkfPQY,14870
177
- tests/unit/test_event_limits.py,sha256=DWbj41jqmphcQjhz6vWNB4cm1QHvmExa55YMLyT8qxw,10729
178
- tests/unit/test_executor.py,sha256=yL3In3LXEIDmMgn6q9OihPQnueyMVXICdhDIQS_BVB4,10685
179
- tests/unit/test_fault_tolerance.py,sha256=wjKaHwVAEAJt6N0wrt8L3Qh74NZbEW-qhKF5LIOslbU,11120
180
- tests/unit/test_hooks.py,sha256=nfBr-_FG5l_7LsUpJG-Uup06yNvrrh3NaneW7LdzHIU,16108
181
- tests/unit/test_registry.py,sha256=Bcui3IFDXNbXyi96FDfyGkjdB21vwV-QX6RlGjeb-3E,7430
182
- tests/unit/test_replay.py,sha256=2DifrAa_MNI09ZY2lewVvSJcQ-vjditzTJgHFG_JQzI,13086
183
- tests/unit/test_schedule_schemas.py,sha256=1QS4Qbq_4UrevIJKE5zwWT2Uxlre8pnrzNstMRvAUIk,9607
184
- tests/unit/test_schedule_utils.py,sha256=vP39cddGT4W_S5o9xMQ472EL47lePzbYqCu4uHh7ojo,9953
185
- tests/unit/test_scheduled_workflow.py,sha256=YMPhwSavc9I5i7Wv0_H1mew2cPNVQyLik0FMsiq22fI,8632
186
- tests/unit/test_step.py,sha256=Wr6sxgSSOIaIaiJhZFvMs07dS2ra8Hn3yNHGWOzvi34,11226
187
- tests/unit/test_workflow.py,sha256=vb_kwSMQIJuf1PLmowCs9YMv6zfdZa_Z2zaWUIf6czc,7663
188
- tests/unit/backends/__init__.py,sha256=IznqF3Rfz0wDcNHOIREA2JT7RfUXU6lWUiGmNhx1tJc,39
189
- tests/unit/backends/test_dynamodb_storage.py,sha256=1HAOzxj-izijp54nZUtMH2rlhlhVpEcjZFNIOg17oQc,53890
190
- tests/unit/backends/test_postgres_storage.py,sha256=NIxiS2TAzqWLeUTl0yZcMbLLzpMI85U6GLqBvyyrMvM,42829
191
- tests/unit/backends/test_sqlite_storage.py,sha256=Oh3gvpVS8CxSvNUjk68Y2gYUSirUX3tvF4jwidp6NtU,43243
192
- pyworkflow_engine-0.1.7.dist-info/METADATA,sha256=8pvD6W7ycGQEy10LsdprDg1XZxXMbKRLpwQ5cJRPyuA,19544
193
- pyworkflow_engine-0.1.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
194
- pyworkflow_engine-0.1.7.dist-info/entry_points.txt,sha256=3IGAfuylnS39U0YX0pxnjrj54kB4iT_bNYrmsiDB-dE,51
195
- pyworkflow_engine-0.1.7.dist-info/top_level.txt,sha256=klYTMgil7t1g1J7tiSivbSluzH8gIP4_IXtWmRJY07M,41
196
- pyworkflow_engine-0.1.7.dist-info/RECORD,,
@@ -1,5 +0,0 @@
1
- dashboard
2
- docs
3
- examples
4
- pyworkflow
5
- tests
File without changes
File without changes