dbos 1.1.0a3__py3-none-any.whl → 1.2.0__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.
- dbos/_admin_server.py +24 -4
- dbos/_app_db.py +0 -15
- dbos/_client.py +4 -3
- dbos/_context.py +6 -0
- dbos/_core.py +11 -4
- dbos/_dbos.py +22 -4
- dbos/_dbos_config.py +21 -39
- dbos/_error.py +14 -0
- dbos/_event_loop.py +10 -7
- dbos/_queue.py +6 -7
- dbos/_sys_db.py +201 -138
- dbos/_utils.py +33 -0
- dbos/_workflow_commands.py +1 -10
- dbos/cli/cli.py +2 -1
- {dbos-1.1.0a3.dist-info → dbos-1.2.0.dist-info}/METADATA +1 -1
- {dbos-1.1.0a3.dist-info → dbos-1.2.0.dist-info}/RECORD +19 -19
- {dbos-1.1.0a3.dist-info → dbos-1.2.0.dist-info}/WHEEL +0 -0
- {dbos-1.1.0a3.dist-info → dbos-1.2.0.dist-info}/entry_points.txt +0 -0
- {dbos-1.1.0a3.dist-info → dbos-1.2.0.dist-info}/licenses/LICENSE +0 -0
dbos/_utils.py
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
import importlib.metadata
|
2
2
|
import os
|
3
3
|
|
4
|
+
import psycopg
|
5
|
+
from sqlalchemy.exc import DBAPIError
|
6
|
+
|
4
7
|
INTERNAL_QUEUE_NAME = "_dbos_internal_queue"
|
5
8
|
|
6
9
|
request_id_header = "x-request-id"
|
@@ -15,3 +18,33 @@ class GlobalParams:
|
|
15
18
|
except importlib.metadata.PackageNotFoundError:
|
16
19
|
# If package is not installed or during development
|
17
20
|
dbos_version = "unknown"
|
21
|
+
|
22
|
+
|
23
|
+
def retriable_postgres_exception(e: DBAPIError) -> bool:
|
24
|
+
if e.connection_invalidated:
|
25
|
+
return True
|
26
|
+
if isinstance(e.orig, psycopg.OperationalError):
|
27
|
+
driver_error: psycopg.OperationalError = e.orig
|
28
|
+
pgcode = driver_error.sqlstate or ""
|
29
|
+
# Failure to establish connection
|
30
|
+
if "connection failed" in str(driver_error):
|
31
|
+
return True
|
32
|
+
# Error within database transaction
|
33
|
+
elif "server closed the connection unexpectedly" in str(driver_error):
|
34
|
+
return True
|
35
|
+
# Connection timeout
|
36
|
+
if isinstance(driver_error, psycopg.errors.ConnectionTimeout):
|
37
|
+
return True
|
38
|
+
# Insufficient resources
|
39
|
+
elif pgcode.startswith("53"):
|
40
|
+
return True
|
41
|
+
# Connection exception
|
42
|
+
elif pgcode.startswith("08"):
|
43
|
+
return True
|
44
|
+
# Operator intervention
|
45
|
+
elif pgcode.startswith("57"):
|
46
|
+
return True
|
47
|
+
else:
|
48
|
+
return False
|
49
|
+
else:
|
50
|
+
return False
|
dbos/_workflow_commands.py
CHANGED
@@ -103,16 +103,7 @@ def fork_workflow(
|
|
103
103
|
*,
|
104
104
|
application_version: Optional[str],
|
105
105
|
) -> str:
|
106
|
-
|
107
|
-
max_transactions = app_db.get_max_function_id(workflow_uuid) or 0
|
108
|
-
max_operations = sys_db.get_max_function_id(workflow_uuid) or 0
|
109
|
-
return max(max_transactions, max_operations)
|
110
|
-
|
111
|
-
max_function_id = get_max_function_id(workflow_id)
|
112
|
-
if max_function_id > 0 and start_step > max_function_id:
|
113
|
-
raise DBOSException(
|
114
|
-
f"Cannot fork workflow {workflow_id} from step {start_step}. The workflow has {max_function_id} steps."
|
115
|
-
)
|
106
|
+
|
116
107
|
ctx = get_local_dbos_context()
|
117
108
|
if ctx is not None and len(ctx.id_assigned_for_next_workflow) > 0:
|
118
109
|
forked_workflow_id = ctx.id_assigned_for_next_workflow
|
dbos/cli/cli.py
CHANGED
@@ -18,7 +18,7 @@ from dbos._debug import debug_workflow, parse_start_command
|
|
18
18
|
|
19
19
|
from .._app_db import ApplicationDatabase
|
20
20
|
from .._client import DBOSClient
|
21
|
-
from .._dbos_config import _is_valid_app_name, load_config
|
21
|
+
from .._dbos_config import _is_valid_app_name, is_valid_database_url, load_config
|
22
22
|
from .._docker_pg_helper import start_docker_pg, stop_docker_pg
|
23
23
|
from .._schemas.system_database import SystemSchema
|
24
24
|
from .._sys_db import SystemDatabase, reset_system_database
|
@@ -35,6 +35,7 @@ def _get_db_url(db_url: Optional[str]) -> str:
|
|
35
35
|
raise ValueError(
|
36
36
|
"Missing database URL: please set it using the --db-url flag or the DBOS_DATABASE_URL environment variable."
|
37
37
|
)
|
38
|
+
assert is_valid_database_url(database_url)
|
38
39
|
return database_url
|
39
40
|
|
40
41
|
|
@@ -1,24 +1,24 @@
|
|
1
|
-
dbos-1.
|
2
|
-
dbos-1.
|
3
|
-
dbos-1.
|
4
|
-
dbos-1.
|
1
|
+
dbos-1.2.0.dist-info/METADATA,sha256=I-2ce9trkyIdOk3YBcO0biggnP6qfW-qDMFrFqjTXiU,13265
|
2
|
+
dbos-1.2.0.dist-info/WHEEL,sha256=tSfRZzRHthuv7vxpI4aehrdN9scLjk-dCJkPLzkHxGg,90
|
3
|
+
dbos-1.2.0.dist-info/entry_points.txt,sha256=_QOQ3tVfEjtjBlr1jS4sHqHya9lI2aIEIWkz8dqYp14,58
|
4
|
+
dbos-1.2.0.dist-info/licenses/LICENSE,sha256=VGZit_a5-kdw9WT6fY5jxAWVwGQzgLFyPWrcVVUhVNU,1067
|
5
5
|
dbos/__init__.py,sha256=NssPCubaBxdiKarOWa-wViz1hdJSkmBGcpLX_gQ4NeA,891
|
6
6
|
dbos/__main__.py,sha256=G7Exn-MhGrVJVDbgNlpzhfh8WMX_72t3_oJaFT9Lmt8,653
|
7
|
-
dbos/_admin_server.py,sha256=
|
8
|
-
dbos/_app_db.py,sha256=
|
7
|
+
dbos/_admin_server.py,sha256=TWXi4drrzKFpKkUmEJpJkQBZxAtOalnhtYicEn2nDK0,10618
|
8
|
+
dbos/_app_db.py,sha256=0PKqpxJ3EbIaak3Wl0lNl3hXvhBfz4EEHaCw1bUOvIM,9937
|
9
9
|
dbos/_classproperty.py,sha256=f0X-_BySzn3yFDRKB2JpCbLYQ9tLwt1XftfshvY7CBs,626
|
10
|
-
dbos/_client.py,sha256
|
10
|
+
dbos/_client.py,sha256=BZ5mROMnHrWyMsMj8gYCfey79Zc4eZp1Srlrgel485o,14302
|
11
11
|
dbos/_conductor/conductor.py,sha256=o0IaZjwnZ2TOyHeP2H4iSX6UnXLXQ4uODvWAKD9hHMs,21703
|
12
12
|
dbos/_conductor/protocol.py,sha256=wgOFZxmS81bv0WCB9dAyg0s6QzldpzVKQDoSPeaX0Ws,6967
|
13
|
-
dbos/_context.py,sha256=
|
14
|
-
dbos/_core.py,sha256=
|
13
|
+
dbos/_context.py,sha256=5ajoWAmToAfzzmMLylnJZoL4Ny9rBwZWuG05sXadMIA,24798
|
14
|
+
dbos/_core.py,sha256=m2i9lsHjNKTi8BQyiSOUBrAVH5OvMoBswNZPRpMVIC0,48662
|
15
15
|
dbos/_croniter.py,sha256=XHAyUyibs_59sJQfSNWkP7rqQY6_XrlfuuCxk4jYqek,47559
|
16
|
-
dbos/_dbos.py,sha256=
|
17
|
-
dbos/_dbos_config.py,sha256=
|
16
|
+
dbos/_dbos.py,sha256=tby_y__7jWQ7O2j2Ws9W_7QKq25IrV54cvWgiPuZngU,47216
|
17
|
+
dbos/_dbos_config.py,sha256=JWVuPE_Ifyr-pYHFxclFalB_HZ8ETFCGNJzBHGpClXw,20347
|
18
18
|
dbos/_debug.py,sha256=MNlQVZ6TscGCRQeEEL0VE8Uignvr6dPeDDDefS3xgIE,1823
|
19
19
|
dbos/_docker_pg_helper.py,sha256=tLJXWqZ4S-ExcaPnxg_i6cVxL6ZxrYlZjaGsklY-s2I,6115
|
20
|
-
dbos/_error.py,sha256=
|
21
|
-
dbos/_event_loop.py,sha256=
|
20
|
+
dbos/_error.py,sha256=q0OQJZTbR8FFHV9hEpAGpz9oWBT5L509zUhmyff7FJw,8500
|
21
|
+
dbos/_event_loop.py,sha256=ts2T1_imfQjdu6hPs7-WZHui4DtmsZ2HUsPgIJ1GXZg,2335
|
22
22
|
dbos/_fastapi.py,sha256=m4SL3H9P-NBQ_ZrbFxAWMOqNyIi3HGEn2ODR7xAK038,3118
|
23
23
|
dbos/_flask.py,sha256=Npnakt-a3W5OykONFRkDRnumaDhTQmA0NPdUCGRYKXE,1652
|
24
24
|
dbos/_kafka.py,sha256=pz0xZ9F3X9Ky1k-VSbeF3tfPhP3UPr3lUUhUfE41__U,4198
|
@@ -38,7 +38,7 @@ dbos/_migrations/versions/d76646551a6c_workflow_queue.py,sha256=G942nophZ2uC2vc4
|
|
38
38
|
dbos/_migrations/versions/eab0cc1d9a14_job_queue.py,sha256=uvhFOtqbBreCePhAxZfIT0qCAI7BiZTou9wt6QnbY7c,1412
|
39
39
|
dbos/_migrations/versions/f4b9b32ba814_functionname_childid_op_outputs.py,sha256=m90Lc5YH0ZISSq1MyxND6oq3RZrZKrIqEsZtwJ1jWxA,1049
|
40
40
|
dbos/_outcome.py,sha256=EXxBg4jXCVJsByDQ1VOCIedmbeq_03S6d-p1vqQrLFU,6810
|
41
|
-
dbos/_queue.py,sha256=
|
41
|
+
dbos/_queue.py,sha256=oDQcydDwYM68U5KQKN6iZiSC-4LXye6KFmSJ7ohG048,3558
|
42
42
|
dbos/_recovery.py,sha256=jVMexjfCCNopzyn8gVQzJCmGJaP9G3C1EFaoCQ_Nh7g,2564
|
43
43
|
dbos/_registrations.py,sha256=CZt1ElqDjCT7hz6iyT-1av76Yu-iuwu_c9lozO87wvM,7303
|
44
44
|
dbos/_roles.py,sha256=iOsgmIAf1XVzxs3gYWdGRe1B880YfOw5fpU7Jwx8_A8,2271
|
@@ -47,7 +47,7 @@ dbos/_schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
47
|
dbos/_schemas/application_database.py,sha256=SypAS9l9EsaBHFn9FR8jmnqt01M74d9AF1AMa4m2hhI,1040
|
48
48
|
dbos/_schemas/system_database.py,sha256=3Z0L72bOgHnusK1hBaETWU9RfiLBP0QnS-fdu41i0yY,5835
|
49
49
|
dbos/_serialization.py,sha256=bWuwhXSQcGmiazvhJHA5gwhrRWxtmFmcCFQSDJnqqkU,3666
|
50
|
-
dbos/_sys_db.py,sha256=
|
50
|
+
dbos/_sys_db.py,sha256=dNb2xeidel6-YEApxFCN0TTJZNpYr6Wc8LdFvX3pEb4,85730
|
51
51
|
dbos/_templates/dbos-db-starter/README.md,sha256=GhxhBj42wjTt1fWEtwNriHbJuKb66Vzu89G4pxNHw2g,930
|
52
52
|
dbos/_templates/dbos-db-starter/__package/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
53
53
|
dbos/_templates/dbos-db-starter/__package/main.py.dbos,sha256=aQnBPSSQpkB8ERfhf7gB7P9tsU6OPKhZscfeh0yiaD8,2702
|
@@ -59,12 +59,12 @@ dbos/_templates/dbos-db-starter/migrations/script.py.mako,sha256=MEqL-2qATlST9TA
|
|
59
59
|
dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py,sha256=MpS7LGaJS0CpvsjhfDkp9EJqvMvVCjRPfUp4c0aE2ys,941
|
60
60
|
dbos/_templates/dbos-db-starter/start_postgres_docker.py,sha256=lQVLlYO5YkhGPEgPqwGc7Y8uDKse9HsWv5fynJEFJHM,1681
|
61
61
|
dbos/_tracer.py,sha256=yN6GRDKu_1p-EqtQLNarMocPfga2ZuqpzStzzSPYhzo,2732
|
62
|
-
dbos/_utils.py,sha256=
|
63
|
-
dbos/_workflow_commands.py,sha256=
|
62
|
+
dbos/_utils.py,sha256=uywq1QrjMwy17btjxW4bES49povlQwYwYbvKwMT6C2U,1575
|
63
|
+
dbos/_workflow_commands.py,sha256=UCpHWvCEXjVZtf5FNanFvtJpgUJDSI1EFBqQP0x_2A0,3346
|
64
64
|
dbos/cli/_github_init.py,sha256=Y_bDF9gfO2jB1id4FV5h1oIxEJRWyqVjhb7bNEa5nQ0,3224
|
65
65
|
dbos/cli/_template_init.py,sha256=7JBcpMqP1r2mfCnvWatu33z8ctEGHJarlZYKgB83cXE,2972
|
66
|
-
dbos/cli/cli.py,sha256=
|
66
|
+
dbos/cli/cli.py,sha256=EemOMqNpzSU2BQhAxV_e59pBRITDLwt49HF6W3uWBZg,20775
|
67
67
|
dbos/dbos-config.schema.json,sha256=CjaspeYmOkx6Ip_pcxtmfXJTn_YGdSx_0pcPBF7KZmo,6060
|
68
68
|
dbos/py.typed,sha256=QfzXT1Ktfk3Rj84akygc7_42z0lRpCq0Ilh8OXI6Zas,44
|
69
69
|
version/__init__.py,sha256=L4sNxecRuqdtSFdpUGX3TtBi9KL3k7YsZVIvv-fv9-A,1678
|
70
|
-
dbos-1.
|
70
|
+
dbos-1.2.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|