dbos 1.9.0a1__tar.gz → 1.9.0a3__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.
Potentially problematic release.
This version of dbos might be problematic. Click here for more details.
- {dbos-1.9.0a1 → dbos-1.9.0a3}/PKG-INFO +1 -1
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_core.py +2 -1
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/cli/cli.py +6 -6
- {dbos-1.9.0a1 → dbos-1.9.0a3}/pyproject.toml +1 -1
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_admin_server.py +3 -3
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_async.py +6 -6
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_async_workflow_management.py +3 -3
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_dbos.py +6 -7
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_queue.py +2 -3
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_workflow_management.py +4 -4
- {dbos-1.9.0a1 → dbos-1.9.0a3}/LICENSE +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/README.md +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/__init__.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/__main__.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_admin_server.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_app_db.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_classproperty.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_client.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_conductor/conductor.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_conductor/protocol.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_context.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_croniter.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_dbos.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_dbos_config.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_debug.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_docker_pg_helper.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_error.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_event_loop.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_fastapi.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_flask.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_kafka.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_kafka_message.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_logger.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/env.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/script.py.mako +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/27ac6900c6ad_add_queue_dedup.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/50f3227f0b4b_fix_job_queue.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/66478e1b95e5_consolidate_queues.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/83f3732ae8e7_workflow_timeout.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/933e86bdac6a_add_queue_priority.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/a3b18ad34abe_added_triggers.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/d76646551a6c_workflow_queue.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/d994145b47b6_consolidate_inputs.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/eab0cc1d9a14_job_queue.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/f4b9b32ba814_functionname_childid_op_outputs.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_outcome.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_queue.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_recovery.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_registrations.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_roles.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_scheduler.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_schemas/__init__.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_schemas/application_database.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_schemas/system_database.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_serialization.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_sys_db.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/README.md +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/__package/__init__.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/__package/main.py.dbos +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/__package/schema.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/alembic.ini +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/migrations/env.py.dbos +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/migrations/script.py.mako +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_templates/dbos-db-starter/start_postgres_docker.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_tracer.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_utils.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_workflow_commands.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/cli/_github_init.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/cli/_template_init.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/dbos-config.schema.json +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/py.typed +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/__init__.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/atexit_no_ctor.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/atexit_no_launch.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/classdefs.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/client_collateral.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/client_worker.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/conftest.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/dupname_classdefs1.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/dupname_classdefsa.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/more_classdefs.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/queuedworkflow.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_classdecorators.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_cli.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_client.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_concurrency.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_config.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_croniter.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_debug.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_docker_secrets.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_failures.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_fastapi.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_fastapi_roles.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_flask.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_kafka.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_outcome.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_package.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_scheduler.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_schema_migration.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_singleton.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_spans.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_sqlalchemy.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/tests/test_workflow_introspection.py +0 -0
- {dbos-1.9.0a1 → dbos-1.9.0a3}/version/__init__.py +0 -0
|
@@ -49,6 +49,7 @@ from ._context import (
|
|
|
49
49
|
get_local_dbos_context,
|
|
50
50
|
)
|
|
51
51
|
from ._error import (
|
|
52
|
+
DBOSAwaitedWorkflowCancelledError,
|
|
52
53
|
DBOSException,
|
|
53
54
|
DBOSMaxStepRetriesExceeded,
|
|
54
55
|
DBOSNonExistentWorkflowError,
|
|
@@ -370,7 +371,7 @@ def _get_wf_invoke_func(
|
|
|
370
371
|
r: R = dbos._sys_db.await_workflow_result(status["workflow_uuid"])
|
|
371
372
|
return r
|
|
372
373
|
except DBOSWorkflowCancelledError as error:
|
|
373
|
-
raise
|
|
374
|
+
raise DBOSAwaitedWorkflowCancelledError(status["workflow_uuid"])
|
|
374
375
|
except Exception as error:
|
|
375
376
|
if not dbos.debug_mode:
|
|
376
377
|
dbos._sys_db.update_workflow_outcome(
|
|
@@ -10,7 +10,7 @@ from typing import Any, Optional
|
|
|
10
10
|
import jsonpickle # type: ignore
|
|
11
11
|
import sqlalchemy as sa
|
|
12
12
|
import typer
|
|
13
|
-
from rich import print
|
|
13
|
+
from rich import print as richprint
|
|
14
14
|
from rich.prompt import IntPrompt
|
|
15
15
|
from typing_extensions import Annotated, List
|
|
16
16
|
|
|
@@ -196,7 +196,7 @@ def init(
|
|
|
196
196
|
path.join(templates_dir, template), project_name, config_mode=config
|
|
197
197
|
)
|
|
198
198
|
except Exception as e:
|
|
199
|
-
|
|
199
|
+
richprint(f"[red]{e}[/red]")
|
|
200
200
|
|
|
201
201
|
|
|
202
202
|
def _resolve_project_name_and_template(
|
|
@@ -217,9 +217,9 @@ def _resolve_project_name_and_template(
|
|
|
217
217
|
if template not in templates:
|
|
218
218
|
raise Exception(f"Template {template} not found in {templates_dir}")
|
|
219
219
|
else:
|
|
220
|
-
|
|
220
|
+
richprint("\n[bold]Available templates:[/bold]")
|
|
221
221
|
for idx, template_name in enumerate(templates, 1):
|
|
222
|
-
|
|
222
|
+
richprint(f" {idx}. {template_name}")
|
|
223
223
|
while True:
|
|
224
224
|
try:
|
|
225
225
|
choice = IntPrompt.ask(
|
|
@@ -231,13 +231,13 @@ def _resolve_project_name_and_template(
|
|
|
231
231
|
template = templates[choice - 1]
|
|
232
232
|
break
|
|
233
233
|
else:
|
|
234
|
-
|
|
234
|
+
richprint(
|
|
235
235
|
"[red]Invalid selection. Please choose a number from the list.[/red]"
|
|
236
236
|
)
|
|
237
237
|
except (KeyboardInterrupt, EOFError):
|
|
238
238
|
raise typer.Abort()
|
|
239
239
|
except ValueError:
|
|
240
|
-
|
|
240
|
+
richprint("[red]Please enter a valid number.[/red]")
|
|
241
241
|
|
|
242
242
|
if template in git_templates:
|
|
243
243
|
if project_name is None:
|
|
@@ -20,7 +20,7 @@ from dbos import (
|
|
|
20
20
|
WorkflowHandle,
|
|
21
21
|
_workflow_commands,
|
|
22
22
|
)
|
|
23
|
-
from dbos._error import
|
|
23
|
+
from dbos._error import DBOSAwaitedWorkflowCancelledError
|
|
24
24
|
from dbos._schemas.system_database import SystemSchema
|
|
25
25
|
from dbos._sys_db import SystemDatabase, WorkflowStatusString
|
|
26
26
|
from dbos._utils import INTERNAL_QUEUE_NAME, GlobalParams
|
|
@@ -306,7 +306,7 @@ def test_admin_workflow_resume(dbos: DBOS, sys_db: SystemDatabase) -> None:
|
|
|
306
306
|
)
|
|
307
307
|
assert response.status_code == 204
|
|
308
308
|
event.set()
|
|
309
|
-
with pytest.raises(
|
|
309
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
310
310
|
handle.get_result()
|
|
311
311
|
info = _workflow_commands.get_workflow(sys_db, wfid)
|
|
312
312
|
assert info is not None
|
|
@@ -750,7 +750,7 @@ def test_admin_global_timeout(dbos: DBOS) -> None:
|
|
|
750
750
|
timeout=5,
|
|
751
751
|
)
|
|
752
752
|
response.raise_for_status()
|
|
753
|
-
with pytest.raises(
|
|
753
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
754
754
|
handle.get_result()
|
|
755
755
|
|
|
756
756
|
|
|
@@ -18,7 +18,7 @@ from dbos import (
|
|
|
18
18
|
from dbos._context import assert_current_dbos_context
|
|
19
19
|
from dbos._dbos import WorkflowHandle
|
|
20
20
|
from dbos._dbos_config import ConfigFile
|
|
21
|
-
from dbos._error import
|
|
21
|
+
from dbos._error import DBOSAwaitedWorkflowCancelledError, DBOSException
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
@pytest.mark.asyncio
|
|
@@ -492,20 +492,20 @@ async def test_workflow_timeout_async(dbos: DBOS) -> None:
|
|
|
492
492
|
DBOS.sleep(0.1)
|
|
493
493
|
|
|
494
494
|
with SetWorkflowTimeout(0.1):
|
|
495
|
-
with pytest.raises(
|
|
495
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
496
496
|
await blocked_workflow()
|
|
497
497
|
handle = await DBOS.start_workflow_async(blocked_workflow)
|
|
498
|
-
with pytest.raises(
|
|
498
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
499
499
|
await handle.get_result()
|
|
500
500
|
|
|
501
501
|
@DBOS.workflow()
|
|
502
502
|
async def parent_workflow_with_timeout() -> None:
|
|
503
503
|
assert assert_current_dbos_context().workflow_deadline_epoch_ms is None
|
|
504
504
|
with SetWorkflowTimeout(0.1):
|
|
505
|
-
with pytest.raises(
|
|
505
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
506
506
|
await blocked_workflow()
|
|
507
507
|
handle = await DBOS.start_workflow_async(blocked_workflow)
|
|
508
|
-
with pytest.raises(
|
|
508
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
509
509
|
await handle.get_result()
|
|
510
510
|
assert assert_current_dbos_context().workflow_deadline_epoch_ms is None
|
|
511
511
|
|
|
@@ -526,7 +526,7 @@ async def test_workflow_timeout_async(dbos: DBOS) -> None:
|
|
|
526
526
|
# Verify if a parent called with a timeout calls a blocked child
|
|
527
527
|
# the deadline propagates and the children are also cancelled.
|
|
528
528
|
with SetWorkflowTimeout(1.0):
|
|
529
|
-
with pytest.raises(
|
|
529
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
530
530
|
await parent_workflow()
|
|
531
531
|
|
|
532
532
|
with pytest.raises(Exception) as exc_info:
|
|
@@ -7,7 +7,7 @@ from typing import List
|
|
|
7
7
|
import pytest
|
|
8
8
|
|
|
9
9
|
from dbos import DBOS, Queue, SetWorkflowID
|
|
10
|
-
from dbos._error import
|
|
10
|
+
from dbos._error import DBOSAwaitedWorkflowCancelledError
|
|
11
11
|
from dbos._sys_db import StepInfo, WorkflowStatus
|
|
12
12
|
from tests.conftest import queue_entries_are_cleaned_up
|
|
13
13
|
|
|
@@ -46,7 +46,7 @@ async def test_cancel_workflow_async(dbos: DBOS) -> None:
|
|
|
46
46
|
await DBOS.cancel_workflow_async(wfid)
|
|
47
47
|
workflow_event.set()
|
|
48
48
|
|
|
49
|
-
with pytest.raises(
|
|
49
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
50
50
|
handle.get_result()
|
|
51
51
|
assert steps_completed == 1
|
|
52
52
|
|
|
@@ -85,7 +85,7 @@ async def test_resume_workflow_async(dbos: DBOS) -> None:
|
|
|
85
85
|
DBOS.cancel_workflow(wfid)
|
|
86
86
|
workflow_event.set()
|
|
87
87
|
|
|
88
|
-
with pytest.raises(
|
|
88
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
89
89
|
handle.get_result()
|
|
90
90
|
assert steps_completed == 1
|
|
91
91
|
|
|
@@ -28,7 +28,6 @@ from dbos._error import (
|
|
|
28
28
|
DBOSAwaitedWorkflowCancelledError,
|
|
29
29
|
DBOSConflictingRegistrationError,
|
|
30
30
|
DBOSMaxStepRetriesExceeded,
|
|
31
|
-
DBOSWorkflowCancelledError,
|
|
32
31
|
)
|
|
33
32
|
from dbos._schemas.system_database import SystemSchema
|
|
34
33
|
from dbos._sys_db import GetWorkflowsInput
|
|
@@ -1493,7 +1492,7 @@ def test_workflow_timeout(dbos: DBOS) -> None:
|
|
|
1493
1492
|
# Verify a blocked workflow called with a timeout is cancelled
|
|
1494
1493
|
wfid = str(uuid.uuid4())
|
|
1495
1494
|
with SetWorkflowTimeout(0.1):
|
|
1496
|
-
with pytest.raises(
|
|
1495
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
1497
1496
|
with SetWorkflowID(wfid):
|
|
1498
1497
|
blocked_workflow()
|
|
1499
1498
|
assert assert_current_dbos_context().workflow_deadline_epoch_ms is None
|
|
@@ -1505,7 +1504,7 @@ def test_workflow_timeout(dbos: DBOS) -> None:
|
|
|
1505
1504
|
status.workflow_deadline_epoch_ms is not None
|
|
1506
1505
|
and status.workflow_deadline_epoch_ms > start_time
|
|
1507
1506
|
)
|
|
1508
|
-
with pytest.raises(
|
|
1507
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
1509
1508
|
handle.get_result()
|
|
1510
1509
|
|
|
1511
1510
|
# Change the workflow status to pending
|
|
@@ -1518,17 +1517,17 @@ def test_workflow_timeout(dbos: DBOS) -> None:
|
|
|
1518
1517
|
# Recover the workflow, verify it still times out
|
|
1519
1518
|
handles = DBOS._recover_pending_workflows()
|
|
1520
1519
|
assert len(handles) == 1
|
|
1521
|
-
with pytest.raises(
|
|
1520
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
1522
1521
|
handles[0].get_result()
|
|
1523
1522
|
|
|
1524
1523
|
@DBOS.workflow()
|
|
1525
1524
|
def parent_workflow_with_timeout() -> None:
|
|
1526
1525
|
assert assert_current_dbos_context().workflow_deadline_epoch_ms is None
|
|
1527
1526
|
with SetWorkflowTimeout(0.1):
|
|
1528
|
-
with pytest.raises(
|
|
1527
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
1529
1528
|
blocked_workflow()
|
|
1530
1529
|
handle = DBOS.start_workflow(blocked_workflow)
|
|
1531
|
-
with pytest.raises(
|
|
1530
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
1532
1531
|
handle.get_result()
|
|
1533
1532
|
assert assert_current_dbos_context().workflow_deadline_epoch_ms is None
|
|
1534
1533
|
|
|
@@ -1549,7 +1548,7 @@ def test_workflow_timeout(dbos: DBOS) -> None:
|
|
|
1549
1548
|
# Verify if a parent called with a timeout calls a blocked child
|
|
1550
1549
|
# the deadline propagates and the children are also cancelled.
|
|
1551
1550
|
with SetWorkflowTimeout(1.0):
|
|
1552
|
-
with pytest.raises(
|
|
1551
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
1553
1552
|
parent_workflow()
|
|
1554
1553
|
|
|
1555
1554
|
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
-
import logging
|
|
3
2
|
import multiprocessing
|
|
4
3
|
import multiprocessing.synchronize
|
|
5
4
|
import os
|
|
@@ -27,7 +26,7 @@ from dbos import (
|
|
|
27
26
|
)
|
|
28
27
|
from dbos._context import assert_current_dbos_context
|
|
29
28
|
from dbos._dbos import WorkflowHandleAsync
|
|
30
|
-
from dbos._error import DBOSAwaitedWorkflowCancelledError
|
|
29
|
+
from dbos._error import DBOSAwaitedWorkflowCancelledError
|
|
31
30
|
from dbos._schemas.system_database import SystemSchema
|
|
32
31
|
from dbos._sys_db import WorkflowStatusString
|
|
33
32
|
from dbos._utils import GlobalParams
|
|
@@ -943,7 +942,7 @@ def test_timeout_queue(dbos: DBOS) -> None:
|
|
|
943
942
|
|
|
944
943
|
with SetWorkflowTimeout(1.0):
|
|
945
944
|
handle = DBOS.start_workflow(blocked_parent_workflow)
|
|
946
|
-
with pytest.raises(
|
|
945
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
947
946
|
handle.get_result()
|
|
948
947
|
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
949
948
|
DBOS.retrieve_workflow(child_id).get_result()
|
|
@@ -9,7 +9,7 @@ import sqlalchemy as sa
|
|
|
9
9
|
# Public API
|
|
10
10
|
from dbos import DBOS, Queue, SetWorkflowID
|
|
11
11
|
from dbos._dbos import DBOSConfiguredInstance
|
|
12
|
-
from dbos._error import
|
|
12
|
+
from dbos._error import DBOSAwaitedWorkflowCancelledError
|
|
13
13
|
from dbos._schemas.application_database import ApplicationSchema
|
|
14
14
|
from dbos._utils import INTERNAL_QUEUE_NAME, GlobalParams
|
|
15
15
|
from dbos._workflow_commands import garbage_collect, global_timeout
|
|
@@ -52,7 +52,7 @@ def test_cancel_resume(dbos: DBOS) -> None:
|
|
|
52
52
|
main_thread_event.wait()
|
|
53
53
|
DBOS.cancel_workflow(wfid)
|
|
54
54
|
workflow_event.set()
|
|
55
|
-
with pytest.raises(
|
|
55
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
56
56
|
handle.get_result()
|
|
57
57
|
assert steps_completed == 1
|
|
58
58
|
|
|
@@ -103,7 +103,7 @@ def test_cancel_resume_txn(dbos: DBOS) -> None:
|
|
|
103
103
|
main_thread_event.wait()
|
|
104
104
|
DBOS.cancel_workflow(wfid)
|
|
105
105
|
workflow_event.set()
|
|
106
|
-
with pytest.raises(
|
|
106
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
107
107
|
handle.get_result()
|
|
108
108
|
assert txn_completed == 1
|
|
109
109
|
|
|
@@ -746,7 +746,7 @@ def test_global_timeout(dbos: DBOS) -> None:
|
|
|
746
746
|
|
|
747
747
|
# Verify all workflows started before the global timeout are cancelled
|
|
748
748
|
for handle in handles:
|
|
749
|
-
with pytest.raises(
|
|
749
|
+
with pytest.raises(DBOSAwaitedWorkflowCancelledError):
|
|
750
750
|
handle.get_result()
|
|
751
751
|
event.set()
|
|
752
752
|
assert final_handle.get_result() is not None
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbos-1.9.0a1 → dbos-1.9.0a3}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|