dbos 0.23.0a14__py3-none-any.whl → 0.24.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.
Potentially problematic release.
This version of dbos might be problematic. Click here for more details.
- dbos/__init__.py +2 -1
- dbos/_app_db.py +16 -2
- dbos/_conductor/conductor.py +122 -56
- dbos/_conductor/protocol.py +29 -0
- dbos/_core.py +159 -39
- dbos/_db_wizard.py +18 -14
- dbos/_dbos.py +96 -31
- dbos/_dbos_config.py +352 -58
- dbos/_debug.py +7 -1
- dbos/_error.py +9 -3
- dbos/_logger.py +8 -7
- dbos/_queue.py +14 -3
- dbos/_scheduler.py +5 -2
- dbos/_sys_db.py +10 -4
- dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos +2 -4
- dbos/_tracer.py +5 -6
- dbos/cli/cli.py +1 -1
- dbos/dbos-config.schema.json +4 -1
- {dbos-0.23.0a14.dist-info → dbos-0.24.0.dist-info}/METADATA +1 -2
- {dbos-0.23.0a14.dist-info → dbos-0.24.0.dist-info}/RECORD +23 -23
- {dbos-0.23.0a14.dist-info → dbos-0.24.0.dist-info}/WHEEL +0 -0
- {dbos-0.23.0a14.dist-info → dbos-0.24.0.dist-info}/entry_points.txt +0 -0
- {dbos-0.23.0a14.dist-info → dbos-0.24.0.dist-info}/licenses/LICENSE +0 -0
dbos/_scheduler.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import threading
|
|
2
|
+
import traceback
|
|
2
3
|
from datetime import datetime, timezone
|
|
3
4
|
from typing import TYPE_CHECKING, Callable
|
|
4
5
|
|
|
@@ -33,8 +34,10 @@ def scheduler_loop(
|
|
|
33
34
|
with SetWorkflowID(f"sched-{func.__qualname__}-{nextExecTime.isoformat()}"):
|
|
34
35
|
try:
|
|
35
36
|
scheduler_queue.enqueue(func, nextExecTime, datetime.now(timezone.utc))
|
|
36
|
-
except Exception
|
|
37
|
-
dbos_logger.warning(
|
|
37
|
+
except Exception:
|
|
38
|
+
dbos_logger.warning(
|
|
39
|
+
f"Exception encountered in scheduler thread: {traceback.format_exc()})"
|
|
40
|
+
)
|
|
38
41
|
|
|
39
42
|
|
|
40
43
|
def scheduled(
|
dbos/_sys_db.py
CHANGED
|
@@ -202,7 +202,11 @@ class SystemDatabase:
|
|
|
202
202
|
|
|
203
203
|
# Create a connection pool for the system database
|
|
204
204
|
self.engine = sa.create_engine(
|
|
205
|
-
system_db_url,
|
|
205
|
+
system_db_url,
|
|
206
|
+
pool_size=config["database"]["sys_db_pool_size"],
|
|
207
|
+
max_overflow=0,
|
|
208
|
+
pool_timeout=30,
|
|
209
|
+
connect_args={"connect_timeout": 10},
|
|
206
210
|
)
|
|
207
211
|
|
|
208
212
|
# Run a schema migration for the system database
|
|
@@ -622,9 +626,11 @@ class SystemDatabase:
|
|
|
622
626
|
with self.engine.begin() as c:
|
|
623
627
|
row = c.execute(cmd).fetchone()
|
|
624
628
|
if row is not None and row[0] != inputs:
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
629
|
+
# In a distributed environment, scheduled workflows are enqueued multiple times with slightly different timestamps
|
|
630
|
+
if not workflow_uuid.startswith("sched-"):
|
|
631
|
+
dbos_logger.warning(
|
|
632
|
+
f"Workflow {workflow_uuid} has been called multiple times with different inputs"
|
|
633
|
+
)
|
|
628
634
|
# TODO: actually changing the input
|
|
629
635
|
if workflow_uuid in self._temp_txn_wf_ids:
|
|
630
636
|
# Clean up the single-transaction tracking sets
|
dbos/_tracer.py
CHANGED
|
@@ -27,14 +27,13 @@ class DBOSTracer:
|
|
|
27
27
|
if os.environ.get("DBOS__CONSOLE_TRACES", None) is not None:
|
|
28
28
|
processor = BatchSpanProcessor(ConsoleSpanExporter())
|
|
29
29
|
provider.add_span_processor(processor)
|
|
30
|
-
|
|
30
|
+
otlp_traces_endpoints = (
|
|
31
31
|
config.get("telemetry", {}).get("OTLPExporter", {}).get("tracesEndpoint") # type: ignore
|
|
32
32
|
)
|
|
33
|
-
if
|
|
34
|
-
|
|
35
|
-
OTLPSpanExporter(endpoint=
|
|
36
|
-
|
|
37
|
-
provider.add_span_processor(processor)
|
|
33
|
+
if otlp_traces_endpoints:
|
|
34
|
+
for e in otlp_traces_endpoints:
|
|
35
|
+
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint=e))
|
|
36
|
+
provider.add_span_processor(processor)
|
|
38
37
|
trace.set_tracer_provider(provider)
|
|
39
38
|
|
|
40
39
|
def set_provider(self, provider: Optional[TracerProvider]) -> None:
|
dbos/cli/cli.py
CHANGED
|
@@ -41,7 +41,7 @@ def _on_windows() -> bool:
|
|
|
41
41
|
help="Start your DBOS application using the start commands in 'dbos-config.yaml'"
|
|
42
42
|
)
|
|
43
43
|
def start() -> None:
|
|
44
|
-
config = load_config()
|
|
44
|
+
config = load_config(run_process_config=False, silent=True)
|
|
45
45
|
start_commands = config["runtimeConfig"]["start"]
|
|
46
46
|
typer.echo("Executing start commands from 'dbos-config.yaml'")
|
|
47
47
|
for command in start_commands:
|
dbos/dbos-config.schema.json
CHANGED
|
@@ -12,10 +12,13 @@
|
|
|
12
12
|
"type": "string",
|
|
13
13
|
"description": "The language used in your application",
|
|
14
14
|
"enum": [
|
|
15
|
-
"typescript",
|
|
16
15
|
"python"
|
|
17
16
|
]
|
|
18
17
|
},
|
|
18
|
+
"database_url": {
|
|
19
|
+
"type": ["string", "null"],
|
|
20
|
+
"description": "The URL of the application database"
|
|
21
|
+
},
|
|
19
22
|
"database": {
|
|
20
23
|
"type": "object",
|
|
21
24
|
"additionalProperties": false,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: dbos
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.24.0
|
|
4
4
|
Summary: Ultra-lightweight durable execution in Python
|
|
5
5
|
Author-Email: "DBOS, Inc." <contact@dbos.dev>
|
|
6
6
|
License: MIT
|
|
@@ -18,7 +18,6 @@ Requires-Dist: python-dateutil>=2.9.0.post0
|
|
|
18
18
|
Requires-Dist: fastapi[standard]>=0.115.2
|
|
19
19
|
Requires-Dist: tomlkit>=0.13.2
|
|
20
20
|
Requires-Dist: psycopg[binary]>=3.1
|
|
21
|
-
Requires-Dist: fastapi-cli==0.0.5
|
|
22
21
|
Requires-Dist: docker>=7.1.0
|
|
23
22
|
Requires-Dist: cryptography>=43.0.3
|
|
24
23
|
Requires-Dist: rich>=13.9.4
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
dbos-0.
|
|
2
|
-
dbos-0.
|
|
3
|
-
dbos-0.
|
|
4
|
-
dbos-0.
|
|
5
|
-
dbos/__init__.py,sha256=
|
|
1
|
+
dbos-0.24.0.dist-info/METADATA,sha256=I8cwgtPEDDay3wENxVS_eGDuAY8Wh8YHlCjSrcWfLpI,5519
|
|
2
|
+
dbos-0.24.0.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
|
|
3
|
+
dbos-0.24.0.dist-info/entry_points.txt,sha256=_QOQ3tVfEjtjBlr1jS4sHqHya9lI2aIEIWkz8dqYp14,58
|
|
4
|
+
dbos-0.24.0.dist-info/licenses/LICENSE,sha256=VGZit_a5-kdw9WT6fY5jxAWVwGQzgLFyPWrcVVUhVNU,1067
|
|
5
|
+
dbos/__init__.py,sha256=uq9LP5uY96kIS9N0yKqlvDwADmtg_Hl30uSUhyuUr-4,754
|
|
6
6
|
dbos/__main__.py,sha256=P7jAr-7L9XE5mrsQ7i4b-bLr2ap1tCQfhMByLCRWDj0,568
|
|
7
7
|
dbos/_admin_server.py,sha256=YiVn5lywz2Vg8_juyNHOYl0HVEy48--7b4phwK7r92o,5732
|
|
8
|
-
dbos/_app_db.py,sha256=
|
|
8
|
+
dbos/_app_db.py,sha256=4EGrYL14rVx96TXn34hoibN9ltf4-2DKcj6nd-HvBxA,6262
|
|
9
9
|
dbos/_classproperty.py,sha256=f0X-_BySzn3yFDRKB2JpCbLYQ9tLwt1XftfshvY7CBs,626
|
|
10
10
|
dbos/_cloudutils/authentication.py,sha256=V0fCWQN9stCkhbuuxgPTGpvuQcDqfU3KAxPAh01vKW4,5007
|
|
11
11
|
dbos/_cloudutils/cloudutils.py,sha256=YC7jGsIopT0KveLsqbRpQk2KlRBk-nIRC_UCgep4f3o,7797
|
|
12
12
|
dbos/_cloudutils/databases.py,sha256=_shqaqSvhY4n2ScgQ8IP5PDZvzvcx3YBKV8fj-cxhSY,8543
|
|
13
|
-
dbos/_conductor/conductor.py,sha256=
|
|
14
|
-
dbos/_conductor/protocol.py,sha256=
|
|
13
|
+
dbos/_conductor/conductor.py,sha256=udu8atyYYrs5bCfokie9ttjHlIg0FMo1p0-24IoneFs,15252
|
|
14
|
+
dbos/_conductor/protocol.py,sha256=MWY3SuIeY6GN2Vg3wQjcxiT0d4zz4ccGzdEkmYYJ6t0,5633
|
|
15
15
|
dbos/_context.py,sha256=Ue5qu3rzLfRmPkz-UUZi9ZS8iXpapRN0NTM4mbA2QmQ,17738
|
|
16
|
-
dbos/_core.py,sha256=
|
|
16
|
+
dbos/_core.py,sha256=_a_rSkAWNLoHqzQbkqez0mpctkjDs301123ti3wmKHk,41340
|
|
17
17
|
dbos/_croniter.py,sha256=XHAyUyibs_59sJQfSNWkP7rqQY6_XrlfuuCxk4jYqek,47559
|
|
18
|
-
dbos/_db_wizard.py,sha256=
|
|
19
|
-
dbos/_dbos.py,sha256=
|
|
20
|
-
dbos/_dbos_config.py,sha256=
|
|
21
|
-
dbos/_debug.py,sha256=
|
|
22
|
-
dbos/_error.py,sha256=
|
|
18
|
+
dbos/_db_wizard.py,sha256=YEW2qoy6hfHQv2fZ_4nHiPUeHMFofPpNTolJ1Kvw7AQ,8394
|
|
19
|
+
dbos/_dbos.py,sha256=ymQnOZ8RQehcPVAjjJipoW8StxM7bktTyT_4a_Zlse8,43599
|
|
20
|
+
dbos/_dbos_config.py,sha256=rWGy8mB7uLGRgkAybBEz-ogsJQYJpXY41cXNy5eITMs,21513
|
|
21
|
+
dbos/_debug.py,sha256=mmgvLkqlrljMBBow9wk01PPur9kUf2rI_11dTJXY4gw,1822
|
|
22
|
+
dbos/_error.py,sha256=B6Y9XLS1f6yrawxB2uAEYFMxFwk9BHhdxPNddKco-Fw,5399
|
|
23
23
|
dbos/_fastapi.py,sha256=ke03vqsSYDnO6XeOtOVFXj0-f-v1MGsOxa9McaROvNc,3616
|
|
24
24
|
dbos/_flask.py,sha256=DZKUZR5-xOzPI7tYZ53r2PvvHVoAb8SYwLzMVFsVfjI,2608
|
|
25
25
|
dbos/_kafka.py,sha256=o6DbwnsYRDtvVTZVsN7BAK8cdP79AfoWX3Q7CGY2Yuo,4199
|
|
26
26
|
dbos/_kafka_message.py,sha256=NYvOXNG3Qn7bghn1pv3fg4Pbs86ILZGcK4IB-MLUNu0,409
|
|
27
|
-
dbos/_logger.py,sha256=
|
|
27
|
+
dbos/_logger.py,sha256=pSP-CyzHUR6ypousTaeKe2zYMKSqvrbsFru8HJpBHsA,3546
|
|
28
28
|
dbos/_migrations/env.py,sha256=38SIGVbmn_VV2x2u1aHLcPOoWgZ84eCymf3g_NljmbU,1626
|
|
29
29
|
dbos/_migrations/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
|
|
30
30
|
dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py,sha256=ICLPl8CN9tQXMsLDsAj8z1TsL831-Z3F8jSBvrR-wyw,736
|
|
@@ -35,34 +35,34 @@ dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py,sha256=8PyFi8rd6CN-m
|
|
|
35
35
|
dbos/_migrations/versions/d76646551a6c_workflow_queue.py,sha256=G942nophZ2uC2vc4hGBC02Ptng1715roTjY3xiyzZU4,729
|
|
36
36
|
dbos/_migrations/versions/eab0cc1d9a14_job_queue.py,sha256=uvhFOtqbBreCePhAxZfIT0qCAI7BiZTou9wt6QnbY7c,1412
|
|
37
37
|
dbos/_outcome.py,sha256=FDMgWVjZ06vm9xO-38H17mTqBImUYQxgKs_bDCSIAhE,6648
|
|
38
|
-
dbos/_queue.py,sha256=
|
|
38
|
+
dbos/_queue.py,sha256=OWUtbBAqdkDAArFWkwlF8STxykV4iQmrZxrF-_lavh4,3341
|
|
39
39
|
dbos/_recovery.py,sha256=4KyZb0XJEUGH7ekYT1kpx38i6y5vygPeH75Ta7RZjYo,2596
|
|
40
40
|
dbos/_registrations.py,sha256=_zy6k944Ll8QwqU12Kr3OP23ukVtm8axPNN1TS_kJRc,6717
|
|
41
41
|
dbos/_request.py,sha256=cX1B3Atlh160phgS35gF1VEEV4pD126c9F3BDgBmxZU,929
|
|
42
42
|
dbos/_roles.py,sha256=iOsgmIAf1XVzxs3gYWdGRe1B880YfOw5fpU7Jwx8_A8,2271
|
|
43
|
-
dbos/_scheduler.py,sha256=
|
|
43
|
+
dbos/_scheduler.py,sha256=boG4BdcncFa3WxR97T5Oou4ppR0TgrEa2QQkjzpFEHU,2028
|
|
44
44
|
dbos/_schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
45
|
dbos/_schemas/application_database.py,sha256=KeyoPrF7hy_ODXV7QNike_VFSD74QBRfQ76D7QyE9HI,966
|
|
46
46
|
dbos/_schemas/system_database.py,sha256=16146P4TLjAGjTYykOs_KUd2c_geJ5fuhk0ko85C65M,5211
|
|
47
47
|
dbos/_serialization.py,sha256=YCYv0qKAwAZ1djZisBC7khvKqG-5OcIv9t9EC5PFIog,1743
|
|
48
|
-
dbos/_sys_db.py,sha256=
|
|
48
|
+
dbos/_sys_db.py,sha256=YzQv26TcF9W6nDDr9hbN147KnVmgBoodjWVop_sLkC4,64891
|
|
49
49
|
dbos/_templates/dbos-db-starter/README.md,sha256=GhxhBj42wjTt1fWEtwNriHbJuKb66Vzu89G4pxNHw2g,930
|
|
50
50
|
dbos/_templates/dbos-db-starter/__package/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
51
|
dbos/_templates/dbos-db-starter/__package/main.py,sha256=eI0SS9Nwj-fldtiuSzIlIG6dC91GXXwdRsoHxv6S_WI,2719
|
|
52
52
|
dbos/_templates/dbos-db-starter/__package/schema.py,sha256=7Z27JGC8yy7Z44cbVXIREYxtUhU4JVkLCp5Q7UahVQ0,260
|
|
53
53
|
dbos/_templates/dbos-db-starter/alembic.ini,sha256=VKBn4Gy8mMuCdY7Hip1jmo3wEUJ1VG1aW7EqY0_n-as,3695
|
|
54
|
-
dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos,sha256=
|
|
54
|
+
dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos,sha256=Z-JC7wp-E9l7NiacjT7E66M812fYFVU3FSS7mNjb6XE,492
|
|
55
55
|
dbos/_templates/dbos-db-starter/migrations/env.py.dbos,sha256=GUV6sjkDzf9Vl6wkGEd0RSkK-ftRfV6EUwSQdd0qFXg,2392
|
|
56
56
|
dbos/_templates/dbos-db-starter/migrations/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
|
|
57
57
|
dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py,sha256=MpS7LGaJS0CpvsjhfDkp9EJqvMvVCjRPfUp4c0aE2ys,941
|
|
58
58
|
dbos/_templates/dbos-db-starter/start_postgres_docker.py,sha256=lQVLlYO5YkhGPEgPqwGc7Y8uDKse9HsWv5fynJEFJHM,1681
|
|
59
|
-
dbos/_tracer.py,sha256=
|
|
59
|
+
dbos/_tracer.py,sha256=dFDSFlta-rfA3-ahIRLYwnnoAOmlavdxAGllqwFgnCA,2440
|
|
60
60
|
dbos/_utils.py,sha256=wjOJzxN66IzL9p4dwcEmQACRQah_V09G6mJI2exQfOM,155
|
|
61
61
|
dbos/_workflow_commands.py,sha256=CEzR5XghoZscbc2RHb9G-7Eoo4MMuzfeTo-QBZu4VPY,4690
|
|
62
62
|
dbos/cli/_github_init.py,sha256=Y_bDF9gfO2jB1id4FV5h1oIxEJRWyqVjhb7bNEa5nQ0,3224
|
|
63
63
|
dbos/cli/_template_init.py,sha256=AfuMaO8bmr9WsPNHr6j2cp7kjVVZDUpH7KpbTg0hhFs,2722
|
|
64
|
-
dbos/cli/cli.py,sha256=
|
|
65
|
-
dbos/dbos-config.schema.json,sha256=
|
|
64
|
+
dbos/cli/cli.py,sha256=pet2vf4GLlSDfxfQbsplM9uewD6pJK2ZpLgZlwgBU5w,15627
|
|
65
|
+
dbos/dbos-config.schema.json,sha256=HtF_njVTGHLdzBGZ4OrGQz3qbPPT0Go-iwd1PgFVTNg,5847
|
|
66
66
|
dbos/py.typed,sha256=QfzXT1Ktfk3Rj84akygc7_42z0lRpCq0Ilh8OXI6Zas,44
|
|
67
67
|
version/__init__.py,sha256=L4sNxecRuqdtSFdpUGX3TtBi9KL3k7YsZVIvv-fv9-A,1678
|
|
68
|
-
dbos-0.
|
|
68
|
+
dbos-0.24.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|