pyworkflow-engine 0.1.7__py3-none-any.whl → 0.1.10__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 (146) 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/config.py +94 -17
  9. pyworkflow/context/__init__.py +13 -0
  10. pyworkflow/context/base.py +26 -0
  11. pyworkflow/context/local.py +80 -0
  12. pyworkflow/context/step_context.py +295 -0
  13. pyworkflow/core/registry.py +6 -1
  14. pyworkflow/core/step.py +141 -0
  15. pyworkflow/core/workflow.py +56 -0
  16. pyworkflow/engine/events.py +30 -0
  17. pyworkflow/engine/replay.py +39 -0
  18. pyworkflow/primitives/child_workflow.py +1 -1
  19. pyworkflow/runtime/local.py +1 -1
  20. pyworkflow/storage/__init__.py +14 -0
  21. pyworkflow/storage/base.py +35 -0
  22. pyworkflow/storage/cassandra.py +1747 -0
  23. pyworkflow/storage/config.py +69 -0
  24. pyworkflow/storage/dynamodb.py +31 -2
  25. pyworkflow/storage/file.py +28 -0
  26. pyworkflow/storage/memory.py +18 -0
  27. pyworkflow/storage/mysql.py +1159 -0
  28. pyworkflow/storage/postgres.py +27 -2
  29. pyworkflow/storage/schemas.py +4 -3
  30. pyworkflow/storage/sqlite.py +25 -2
  31. {pyworkflow_engine-0.1.7.dist-info → pyworkflow_engine-0.1.10.dist-info}/METADATA +7 -4
  32. pyworkflow_engine-0.1.10.dist-info/RECORD +91 -0
  33. pyworkflow_engine-0.1.10.dist-info/top_level.txt +1 -0
  34. dashboard/backend/app/__init__.py +0 -1
  35. dashboard/backend/app/config.py +0 -32
  36. dashboard/backend/app/controllers/__init__.py +0 -6
  37. dashboard/backend/app/controllers/run_controller.py +0 -86
  38. dashboard/backend/app/controllers/workflow_controller.py +0 -33
  39. dashboard/backend/app/dependencies/__init__.py +0 -5
  40. dashboard/backend/app/dependencies/storage.py +0 -50
  41. dashboard/backend/app/repositories/__init__.py +0 -6
  42. dashboard/backend/app/repositories/run_repository.py +0 -80
  43. dashboard/backend/app/repositories/workflow_repository.py +0 -27
  44. dashboard/backend/app/rest/__init__.py +0 -8
  45. dashboard/backend/app/rest/v1/__init__.py +0 -12
  46. dashboard/backend/app/rest/v1/health.py +0 -33
  47. dashboard/backend/app/rest/v1/runs.py +0 -133
  48. dashboard/backend/app/rest/v1/workflows.py +0 -41
  49. dashboard/backend/app/schemas/__init__.py +0 -23
  50. dashboard/backend/app/schemas/common.py +0 -16
  51. dashboard/backend/app/schemas/event.py +0 -24
  52. dashboard/backend/app/schemas/hook.py +0 -25
  53. dashboard/backend/app/schemas/run.py +0 -54
  54. dashboard/backend/app/schemas/step.py +0 -28
  55. dashboard/backend/app/schemas/workflow.py +0 -31
  56. dashboard/backend/app/server.py +0 -87
  57. dashboard/backend/app/services/__init__.py +0 -6
  58. dashboard/backend/app/services/run_service.py +0 -240
  59. dashboard/backend/app/services/workflow_service.py +0 -155
  60. dashboard/backend/main.py +0 -18
  61. docs/concepts/cancellation.mdx +0 -362
  62. docs/concepts/continue-as-new.mdx +0 -434
  63. docs/concepts/events.mdx +0 -266
  64. docs/concepts/fault-tolerance.mdx +0 -370
  65. docs/concepts/hooks.mdx +0 -552
  66. docs/concepts/limitations.mdx +0 -167
  67. docs/concepts/schedules.mdx +0 -775
  68. docs/concepts/sleep.mdx +0 -312
  69. docs/concepts/steps.mdx +0 -301
  70. docs/concepts/workflows.mdx +0 -255
  71. docs/guides/cli.mdx +0 -942
  72. docs/guides/configuration.mdx +0 -560
  73. docs/introduction.mdx +0 -155
  74. docs/quickstart.mdx +0 -279
  75. examples/__init__.py +0 -1
  76. examples/celery/__init__.py +0 -1
  77. examples/celery/durable/docker-compose.yml +0 -55
  78. examples/celery/durable/pyworkflow.config.yaml +0 -12
  79. examples/celery/durable/workflows/__init__.py +0 -122
  80. examples/celery/durable/workflows/basic.py +0 -87
  81. examples/celery/durable/workflows/batch_processing.py +0 -102
  82. examples/celery/durable/workflows/cancellation.py +0 -273
  83. examples/celery/durable/workflows/child_workflow_patterns.py +0 -240
  84. examples/celery/durable/workflows/child_workflows.py +0 -202
  85. examples/celery/durable/workflows/continue_as_new.py +0 -260
  86. examples/celery/durable/workflows/fault_tolerance.py +0 -210
  87. examples/celery/durable/workflows/hooks.py +0 -211
  88. examples/celery/durable/workflows/idempotency.py +0 -112
  89. examples/celery/durable/workflows/long_running.py +0 -99
  90. examples/celery/durable/workflows/retries.py +0 -101
  91. examples/celery/durable/workflows/schedules.py +0 -209
  92. examples/celery/transient/01_basic_workflow.py +0 -91
  93. examples/celery/transient/02_fault_tolerance.py +0 -257
  94. examples/celery/transient/__init__.py +0 -20
  95. examples/celery/transient/pyworkflow.config.yaml +0 -25
  96. examples/local/__init__.py +0 -1
  97. examples/local/durable/01_basic_workflow.py +0 -94
  98. examples/local/durable/02_file_storage.py +0 -132
  99. examples/local/durable/03_retries.py +0 -169
  100. examples/local/durable/04_long_running.py +0 -119
  101. examples/local/durable/05_event_log.py +0 -145
  102. examples/local/durable/06_idempotency.py +0 -148
  103. examples/local/durable/07_hooks.py +0 -334
  104. examples/local/durable/08_cancellation.py +0 -233
  105. examples/local/durable/09_child_workflows.py +0 -198
  106. examples/local/durable/10_child_workflow_patterns.py +0 -265
  107. examples/local/durable/11_continue_as_new.py +0 -249
  108. examples/local/durable/12_schedules.py +0 -198
  109. examples/local/durable/__init__.py +0 -1
  110. examples/local/transient/01_quick_tasks.py +0 -87
  111. examples/local/transient/02_retries.py +0 -130
  112. examples/local/transient/03_sleep.py +0 -141
  113. examples/local/transient/__init__.py +0 -1
  114. pyworkflow_engine-0.1.7.dist-info/RECORD +0 -196
  115. pyworkflow_engine-0.1.7.dist-info/top_level.txt +0 -5
  116. tests/examples/__init__.py +0 -0
  117. tests/integration/__init__.py +0 -0
  118. tests/integration/test_cancellation.py +0 -330
  119. tests/integration/test_child_workflows.py +0 -439
  120. tests/integration/test_continue_as_new.py +0 -428
  121. tests/integration/test_dynamodb_storage.py +0 -1146
  122. tests/integration/test_fault_tolerance.py +0 -369
  123. tests/integration/test_schedule_storage.py +0 -484
  124. tests/unit/__init__.py +0 -0
  125. tests/unit/backends/__init__.py +0 -1
  126. tests/unit/backends/test_dynamodb_storage.py +0 -1554
  127. tests/unit/backends/test_postgres_storage.py +0 -1281
  128. tests/unit/backends/test_sqlite_storage.py +0 -1460
  129. tests/unit/conftest.py +0 -41
  130. tests/unit/test_cancellation.py +0 -364
  131. tests/unit/test_child_workflows.py +0 -680
  132. tests/unit/test_continue_as_new.py +0 -441
  133. tests/unit/test_event_limits.py +0 -316
  134. tests/unit/test_executor.py +0 -320
  135. tests/unit/test_fault_tolerance.py +0 -334
  136. tests/unit/test_hooks.py +0 -495
  137. tests/unit/test_registry.py +0 -261
  138. tests/unit/test_replay.py +0 -420
  139. tests/unit/test_schedule_schemas.py +0 -285
  140. tests/unit/test_schedule_utils.py +0 -286
  141. tests/unit/test_scheduled_workflow.py +0 -274
  142. tests/unit/test_step.py +0 -353
  143. tests/unit/test_workflow.py +0 -243
  144. {pyworkflow_engine-0.1.7.dist-info → pyworkflow_engine-0.1.10.dist-info}/WHEEL +0 -0
  145. {pyworkflow_engine-0.1.7.dist-info → pyworkflow_engine-0.1.10.dist-info}/entry_points.txt +0 -0
  146. {pyworkflow_engine-0.1.7.dist-info → pyworkflow_engine-0.1.10.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