dbos 0.23.0a13__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/_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 as e:
37
- dbos_logger.warning(f"Error scheduling workflow: ", e)
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(
@@ -154,7 +154,7 @@ class SystemSchema:
154
154
  nullable=False,
155
155
  primary_key=True,
156
156
  ),
157
- Column("executor_id", Text),
157
+ # Column("executor_id", Text), # This column is deprecated. Do *not* use it.
158
158
  Column("queue_name", Text, nullable=False),
159
159
  Column(
160
160
  "created_at_epoch_ms",
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, pool_size=20, max_overflow=5, pool_timeout=30
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
- dbos_logger.warning(
626
- f"Workflow inputs for {workflow_uuid} changed since the first call! Use the original inputs."
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
@@ -1324,24 +1330,32 @@ class SystemDatabase:
1324
1330
  # If there is a global or local concurrency limit N, select only the N oldest enqueued
1325
1331
  # functions, else select all of them.
1326
1332
 
1327
- # First lets figure out how many tasks the worker can dequeue
1333
+ # First lets figure out how many tasks are eligible for dequeue.
1334
+ # This means figuring out how many unstarted tasks are within the local and global concurrency limits
1328
1335
  running_tasks_query = (
1329
1336
  sa.select(
1330
- SystemSchema.workflow_queue.c.executor_id,
1337
+ SystemSchema.workflow_status.c.executor_id,
1331
1338
  sa.func.count().label("task_count"),
1332
1339
  )
1340
+ .select_from(
1341
+ SystemSchema.workflow_queue.join(
1342
+ SystemSchema.workflow_status,
1343
+ SystemSchema.workflow_queue.c.workflow_uuid
1344
+ == SystemSchema.workflow_status.c.workflow_uuid,
1345
+ )
1346
+ )
1333
1347
  .where(SystemSchema.workflow_queue.c.queue_name == queue.name)
1334
1348
  .where(
1335
- SystemSchema.workflow_queue.c.executor_id.isnot(
1349
+ SystemSchema.workflow_queue.c.started_at_epoch_ms.isnot(
1336
1350
  None
1337
- ) # Task is dequeued
1351
+ ) # Task is started
1338
1352
  )
1339
1353
  .where(
1340
1354
  SystemSchema.workflow_queue.c.completed_at_epoch_ms.is_(
1341
1355
  None
1342
- ) # Task is not completed
1356
+ ) # Task is not completed.
1343
1357
  )
1344
- .group_by(SystemSchema.workflow_queue.c.executor_id)
1358
+ .group_by(SystemSchema.workflow_status.c.executor_id)
1345
1359
  )
1346
1360
  running_tasks_result = c.execute(running_tasks_query).fetchall()
1347
1361
  running_tasks_result_dict = {row[0]: row[1] for row in running_tasks_result}
@@ -1351,12 +1365,6 @@ class SystemDatabase:
1351
1365
 
1352
1366
  max_tasks = float("inf")
1353
1367
  if queue.worker_concurrency is not None:
1354
- # Worker local concurrency limit should always be >= running_tasks_for_this_worker
1355
- # This should never happen but a check + warning doesn't hurt
1356
- if running_tasks_for_this_worker > queue.worker_concurrency:
1357
- dbos_logger.warning(
1358
- f"Number of tasks on this worker ({running_tasks_for_this_worker}) exceeds the worker concurrency limit ({queue.worker_concurrency})"
1359
- )
1360
1368
  max_tasks = max(
1361
1369
  0, queue.worker_concurrency - running_tasks_for_this_worker
1362
1370
  )
@@ -1371,16 +1379,14 @@ class SystemDatabase:
1371
1379
  available_tasks = max(0, queue.concurrency - total_running_tasks)
1372
1380
  max_tasks = min(max_tasks, available_tasks)
1373
1381
 
1374
- # Lookup tasks
1382
+ # Lookup unstarted/uncompleted tasks (not running)
1375
1383
  query = (
1376
1384
  sa.select(
1377
1385
  SystemSchema.workflow_queue.c.workflow_uuid,
1378
- SystemSchema.workflow_queue.c.started_at_epoch_ms,
1379
- SystemSchema.workflow_queue.c.executor_id,
1380
1386
  )
1381
1387
  .where(SystemSchema.workflow_queue.c.queue_name == queue.name)
1388
+ .where(SystemSchema.workflow_queue.c.started_at_epoch_ms == None)
1382
1389
  .where(SystemSchema.workflow_queue.c.completed_at_epoch_ms == None)
1383
- .where(SystemSchema.workflow_queue.c.executor_id == None)
1384
1390
  .order_by(SystemSchema.workflow_queue.c.created_at_epoch_ms.asc())
1385
1391
  .with_for_update(nowait=True) # Error out early
1386
1392
  )
@@ -1423,7 +1429,7 @@ class SystemDatabase:
1423
1429
  c.execute(
1424
1430
  SystemSchema.workflow_queue.update()
1425
1431
  .where(SystemSchema.workflow_queue.c.workflow_uuid == id)
1426
- .values(started_at_epoch_ms=start_time_ms, executor_id=executor_id)
1432
+ .values(started_at_epoch_ms=start_time_ms)
1427
1433
  )
1428
1434
  ret_ids.append(id)
1429
1435
 
@@ -1468,23 +1474,26 @@ class SystemDatabase:
1468
1474
 
1469
1475
  with self.engine.connect() as conn:
1470
1476
  with conn.begin() as transaction:
1477
+ # Reset the start time in the queue to mark it as not started
1471
1478
  res = conn.execute(
1472
1479
  sa.update(SystemSchema.workflow_queue)
1473
1480
  .where(SystemSchema.workflow_queue.c.workflow_uuid == workflow_id)
1474
- .values(executor_id=None, started_at_epoch_ms=None)
1481
+ .where(
1482
+ SystemSchema.workflow_queue.c.completed_at_epoch_ms.is_(None)
1483
+ )
1484
+ .values(started_at_epoch_ms=None)
1475
1485
  )
1476
1486
 
1477
- # If no rows were affected, the workflow is not anymore in the queue
1487
+ # If no rows were affected, the workflow is not anymore in the queue or was already completed
1478
1488
  if res.rowcount == 0:
1479
1489
  transaction.rollback()
1480
1490
  return False
1481
1491
 
1492
+ # Reset the status of the task to "ENQUEUED"
1482
1493
  res = conn.execute(
1483
1494
  sa.update(SystemSchema.workflow_status)
1484
1495
  .where(SystemSchema.workflow_status.c.workflow_uuid == workflow_id)
1485
- .values(
1486
- executor_id=None, status=WorkflowStatusString.ENQUEUED.value
1487
- )
1496
+ .values(status=WorkflowStatusString.ENQUEUED.value)
1488
1497
  )
1489
1498
  if res.rowcount == 0:
1490
1499
  # This should never happen
@@ -8,9 +8,7 @@ language: python
8
8
  runtimeConfig:
9
9
  start:
10
10
  - "fastapi run ${package_name}/main.py"
11
+ database_url: ${DBOS_DATABASE_URL}
11
12
  database:
12
13
  migrate:
13
- - ${migration_command}
14
- telemetry:
15
- logs:
16
- logLevel: INFO
14
+ - ${migration_command}
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
- otlp_traces_endpoint = (
30
+ otlp_traces_endpoints = (
31
31
  config.get("telemetry", {}).get("OTLPExporter", {}).get("tracesEndpoint") # type: ignore
32
32
  )
33
- if otlp_traces_endpoint:
34
- processor = BatchSpanProcessor(
35
- OTLPSpanExporter(endpoint=otlp_traces_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:
@@ -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.23.0a13
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.23.0a13.dist-info/METADATA,sha256=NGDpQapDUzGaa6Iu-0sMoP32p_Fi_Co7-WFC_kACtIU,5556
2
- dbos-0.23.0a13.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
3
- dbos-0.23.0a13.dist-info/entry_points.txt,sha256=_QOQ3tVfEjtjBlr1jS4sHqHya9lI2aIEIWkz8dqYp14,58
4
- dbos-0.23.0a13.dist-info/licenses/LICENSE,sha256=VGZit_a5-kdw9WT6fY5jxAWVwGQzgLFyPWrcVVUhVNU,1067
5
- dbos/__init__.py,sha256=CxRHBHEthPL4PZoLbZhp3rdm44-KkRTT2-7DkK9d4QQ,724
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=QFL1ceCugJFj_LBvK_G_0tt5jjyTM-4KnqmhbuC1ggg,5826
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=uX6DsAw0vpu4Gf5pxZJL7YrMSfJptCvRCnt14AUURFo,11123
14
- dbos/_conductor/protocol.py,sha256=HLHS1bOdFdQhwA05wXDCd3O704ki72ju1UUBXz0UB-0,4841
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=UQb068FT59Op-F5RmtxreSeSQ1_wljOso0dQCUOPrC4,37528
16
+ dbos/_core.py,sha256=_a_rSkAWNLoHqzQbkqez0mpctkjDs301123ti3wmKHk,41340
17
17
  dbos/_croniter.py,sha256=XHAyUyibs_59sJQfSNWkP7rqQY6_XrlfuuCxk4jYqek,47559
18
- dbos/_db_wizard.py,sha256=6tfJaCRa1NtkUdNW75a2yvi_mEgnPJ9C1HP2zPG1hCU,8067
19
- dbos/_dbos.py,sha256=0kX3fgdTqAn-eMKSbh73LFVR08YPMoB030g4dzvc9Yk,41150
20
- dbos/_dbos_config.py,sha256=_VETbEsMZ66563A8sX05B_coKz2BrILbIm9H5BmnPmk,9572
21
- dbos/_debug.py,sha256=wcvjM2k4BrK7mlYjImUZXNBUB00fPGjQrNimZXlj76c,1491
22
- dbos/_error.py,sha256=xqB7b7g5AF_OwOvqLKLXL1xldn2gAtORix2ZC2B8zK0,5089
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=utroNAXW71MLYb5D3lsM5xifXT19n5mAidyW-4kwyMA,3499
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=I2gBc7zQ4G0vyDDBnKwIFzxtqfD7DxHO2IZ41brFSOM,2927
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=0I3e8Y-OIBG3wiUCIskShd-Sk_eUFCFyRB5u4L7IHXI,1940
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
- dbos/_schemas/system_database.py,sha256=rwp4EvCSaXcUoMaRczZCvETCxGp72k3-hvLyGUDkih0,5163
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=05kxY9YY9iUZ1jQmfpymJuZS8Oi69ju_mF_M6lJi8qU,64513
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=OMlcpdYUJKjyAme7phOz3pbn9upcIRjm42iwEThWUEQ,495
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=_Id9j9kCrptSNpEpLiRk_g5VPp-DrTWP1WNZInd5BA4,2439
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=ThomRytw7EP5iOcrjEgwnpaWgXNTLfnFEBBvCGHxtJs,15590
65
- dbos/dbos-config.schema.json,sha256=X5TpXNcARGceX0zQs0fVgtZW_Xj9uBbY5afPt9Rz9yk,5741
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.23.0a13.dist-info/RECORD,,
68
+ dbos-0.24.0.dist-info/RECORD,,