dbos 0.22.0a11__py3-none-any.whl → 0.23.0a2__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/_context.py CHANGED
@@ -12,6 +12,8 @@ from typing import List, Literal, Optional, Type, TypedDict
12
12
  from opentelemetry.trace import Span, Status, StatusCode
13
13
  from sqlalchemy.orm import Session
14
14
 
15
+ from dbos._utils import GlobalParams
16
+
15
17
  from ._logger import dbos_logger
16
18
  from ._request import Request
17
19
  from ._tracer import dbos_tracer
@@ -48,7 +50,7 @@ class TracedAttributes(TypedDict, total=False):
48
50
 
49
51
  class DBOSContext:
50
52
  def __init__(self) -> None:
51
- self.executor_id = os.environ.get("DBOS__VMID", "local")
53
+ self.executor_id = GlobalParams.executor_id
52
54
  self.app_id = os.environ.get("DBOS__APPID", "")
53
55
 
54
56
  self.logger = dbos_logger
dbos/_core.py CHANGED
@@ -22,6 +22,7 @@ from typing import (
22
22
  )
23
23
 
24
24
  from dbos._outcome import Immediate, NoResult, Outcome, Pending
25
+ from dbos._utils import GlobalParams
25
26
 
26
27
  from ._app_db import ApplicationDatabase, TransactionResultInternal
27
28
 
@@ -51,6 +52,7 @@ from ._error import (
51
52
  DBOSMaxStepRetriesExceeded,
52
53
  DBOSNonExistentWorkflowError,
53
54
  DBOSRecoveryError,
55
+ DBOSWorkflowCancelledError,
54
56
  DBOSWorkflowConflictIDError,
55
57
  DBOSWorkflowFunctionNotFoundError,
56
58
  )
@@ -163,7 +165,7 @@ def _init_workflow(
163
165
  "output": None,
164
166
  "error": None,
165
167
  "app_id": ctx.app_id,
166
- "app_version": dbos.app_version,
168
+ "app_version": GlobalParams.app_version,
167
169
  "executor_id": ctx.executor_id,
168
170
  "request": (
169
171
  _serialization.serialize(ctx.request) if ctx.request is not None else None
@@ -224,6 +226,8 @@ def _get_wf_invoke_func(
224
226
  )
225
227
  output = wf_handle.get_result()
226
228
  return output
229
+ except DBOSWorkflowCancelledError as error:
230
+ raise
227
231
  except Exception as error:
228
232
  status["status"] = "ERROR"
229
233
  status["error"] = _serialization.serialize_exception(error)
@@ -539,6 +543,13 @@ def decorate_transaction(
539
543
  raise DBOSException(
540
544
  f"Function {func.__name__} invoked before DBOS initialized"
541
545
  )
546
+
547
+ ctx = assert_current_dbos_context()
548
+ if dbosreg.is_workflow_cancelled(ctx.workflow_id):
549
+ raise DBOSWorkflowCancelledError(
550
+ f"Workflow {ctx.workflow_id} is cancelled. Aborting transaction {func.__name__}."
551
+ )
552
+
542
553
  dbos = dbosreg.dbos
543
554
  with dbos._app_db.sessionmaker() as session:
544
555
  attributes: TracedAttributes = {
@@ -560,6 +571,12 @@ def decorate_transaction(
560
571
  backoff_factor = 1.5
561
572
  max_retry_wait_seconds = 2.0
562
573
  while True:
574
+
575
+ if dbosreg.is_workflow_cancelled(ctx.workflow_id):
576
+ raise DBOSWorkflowCancelledError(
577
+ f"Workflow {ctx.workflow_id} is cancelled. Aborting transaction {func.__name__}."
578
+ )
579
+
563
580
  has_recorded_error = False
564
581
  txn_error: Optional[Exception] = None
565
582
  try:
@@ -710,6 +727,13 @@ def decorate_step(
710
727
  "operationType": OperationType.STEP.value,
711
728
  }
712
729
 
730
+ # Check if the workflow is cancelled
731
+ ctx = assert_current_dbos_context()
732
+ if dbosreg.is_workflow_cancelled(ctx.workflow_id):
733
+ raise DBOSWorkflowCancelledError(
734
+ f"Workflow {ctx.workflow_id} is cancelled. Aborting step {func.__name__}."
735
+ )
736
+
713
737
  attempts = max_attempts if retries_allowed else 1
714
738
  max_retry_interval_seconds: float = 3600 # 1 Hour
715
739
 
@@ -800,6 +824,7 @@ def decorate_step(
800
824
  ctx = get_local_dbos_context()
801
825
  if ctx and ctx.is_step():
802
826
  # Call the original function directly
827
+
803
828
  return func(*args, **kwargs)
804
829
  if ctx and ctx.is_within_workflow():
805
830
  assert ctx.is_workflow(), "Steps must be called from within workflows"
dbos/_dbos.py CHANGED
@@ -32,6 +32,8 @@ from typing import (
32
32
 
33
33
  from opentelemetry.trace import Span
34
34
 
35
+ from dbos._utils import GlobalParams
36
+
35
37
  from ._classproperty import classproperty
36
38
  from ._core import (
37
39
  TEMP_SEND_WF_NAME,
@@ -155,6 +157,7 @@ class DBOSRegistry:
155
157
  self.pollers: list[RegisteredJob] = []
156
158
  self.dbos: Optional[DBOS] = None
157
159
  self.config: Optional[ConfigFile] = None
160
+ self.workflow_cancelled_map: dict[str, bool] = {}
158
161
 
159
162
  def register_wf_function(self, name: str, wrapped_func: F, functype: str) -> None:
160
163
  if name in self.function_type_map:
@@ -197,6 +200,15 @@ class DBOSRegistry:
197
200
  else:
198
201
  self.instance_info_map[fn] = inst
199
202
 
203
+ def cancel_workflow(self, workflow_id: str) -> None:
204
+ self.workflow_cancelled_map[workflow_id] = True
205
+
206
+ def is_workflow_cancelled(self, workflow_id: str) -> bool:
207
+ return self.workflow_cancelled_map.get(workflow_id, False)
208
+
209
+ def clear_workflow_cancelled(self, workflow_id: str) -> None:
210
+ self.workflow_cancelled_map.pop(workflow_id, None)
211
+
200
212
  def compute_app_version(self) -> str:
201
213
  """
202
214
  An application's version is computed from a hash of the source of its workflows.
@@ -280,6 +292,8 @@ class DBOS:
280
292
  if destroy_registry:
281
293
  global _dbos_global_registry
282
294
  _dbos_global_registry = None
295
+ GlobalParams.app_version = os.environ.get("DBOS__APPVERSION", "")
296
+ GlobalParams.executor_id = os.environ.get("DBOS__VMID", "local")
283
297
 
284
298
  def __init__(
285
299
  self,
@@ -309,8 +323,6 @@ class DBOS:
309
323
  self.flask: Optional["Flask"] = flask
310
324
  self._executor_field: Optional[ThreadPoolExecutor] = None
311
325
  self._background_threads: List[threading.Thread] = []
312
- self._executor_id: str = os.environ.get("DBOS__VMID", "local")
313
- self.app_version: str = os.environ.get("DBOS__APPVERSION", "")
314
326
 
315
327
  # If using FastAPI, set up middleware and lifecycle events
316
328
  if self.fastapi is not None:
@@ -379,10 +391,9 @@ class DBOS:
379
391
  dbos_logger.warning(f"DBOS was already launched")
380
392
  return
381
393
  self._launched = True
382
- if self.app_version == "":
383
- self.app_version = self._registry.compute_app_version()
384
- dbos_logger.info(f"Application version: {self.app_version}")
385
- dbos_tracer.app_version = self.app_version
394
+ if GlobalParams.app_version == "":
395
+ GlobalParams.app_version = self._registry.compute_app_version()
396
+ dbos_logger.info(f"Application version: {GlobalParams.app_version}")
386
397
  self._executor_field = ThreadPoolExecutor(max_workers=64)
387
398
  self._sys_db_field = SystemDatabase(self.config)
388
399
  self._app_db_field = ApplicationDatabase(self.config)
@@ -392,15 +403,15 @@ class DBOS:
392
403
  self._admin_server_field = AdminServer(dbos=self, port=admin_port)
393
404
 
394
405
  workflow_ids = self._sys_db.get_pending_workflows(
395
- self._executor_id, self.app_version
406
+ GlobalParams.executor_id, GlobalParams.app_version
396
407
  )
397
408
  if (len(workflow_ids)) > 0:
398
409
  self.logger.info(
399
- f"Recovering {len(workflow_ids)} workflows from application version {self.app_version}"
410
+ f"Recovering {len(workflow_ids)} workflows from application version {GlobalParams.app_version}"
400
411
  )
401
412
  else:
402
413
  self.logger.info(
403
- f"No workflows to recover from application version {self.app_version}"
414
+ f"No workflows to recover from application version {GlobalParams.app_version}"
404
415
  )
405
416
 
406
417
  self._executor.submit(startup_recovery_thread, self, workflow_ids)
@@ -446,7 +457,7 @@ class DBOS:
446
457
  # to enable their export in DBOS Cloud
447
458
  for handler in dbos_logger.handlers:
448
459
  handler.flush()
449
- add_otlp_to_all_loggers(self.app_version)
460
+ add_otlp_to_all_loggers()
450
461
  except Exception:
451
462
  dbos_logger.error(f"DBOS failed to launch: {traceback.format_exc()}")
452
463
  raise
@@ -844,11 +855,13 @@ class DBOS:
844
855
  def cancel_workflow(cls, workflow_id: str) -> None:
845
856
  """Cancel a workflow by ID."""
846
857
  _get_dbos_instance()._sys_db.cancel_workflow(workflow_id)
858
+ _get_or_create_dbos_registry().cancel_workflow(workflow_id)
847
859
 
848
860
  @classmethod
849
861
  def resume_workflow(cls, workflow_id: str) -> WorkflowHandle[Any]:
850
862
  """Resume a workflow by ID."""
851
863
  _get_dbos_instance()._sys_db.resume_workflow(workflow_id)
864
+ _get_or_create_dbos_registry().clear_workflow_cancelled(workflow_id)
852
865
  return execute_workflow_by_id(_get_dbos_instance(), workflow_id, False)
853
866
 
854
867
  @classproperty
dbos/_error.py CHANGED
@@ -36,6 +36,7 @@ class DBOSErrorCode(Enum):
36
36
  MaxStepRetriesExceeded = 7
37
37
  NotAuthorized = 8
38
38
  ConflictingWorkflowError = 9
39
+ WorkflowCancelled = 10
39
40
  ConflictingRegistrationError = 25
40
41
 
41
42
 
@@ -130,6 +131,16 @@ class DBOSMaxStepRetriesExceeded(DBOSException):
130
131
  )
131
132
 
132
133
 
134
+ class DBOSWorkflowCancelledError(DBOSException):
135
+ """Exception raised when the workflow has already been cancelled."""
136
+
137
+ def __init__(self, msg: str) -> None:
138
+ super().__init__(
139
+ msg,
140
+ dbos_error_code=DBOSErrorCode.WorkflowCancelled.value,
141
+ )
142
+
143
+
133
144
  class DBOSConflictingRegistrationError(DBOSException):
134
145
  """Exception raised when conflicting decorators are applied to the same function."""
135
146
 
dbos/_logger.py CHANGED
@@ -8,6 +8,8 @@ from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
8
8
  from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
9
9
  from opentelemetry.sdk.resources import Resource
10
10
 
11
+ from dbos._utils import GlobalParams
12
+
11
13
  if TYPE_CHECKING:
12
14
  from ._dbos_config import ConfigFile
13
15
 
@@ -19,13 +21,11 @@ class DBOSLogTransformer(logging.Filter):
19
21
  def __init__(self) -> None:
20
22
  super().__init__()
21
23
  self.app_id = os.environ.get("DBOS__APPID", "")
22
- self.app_version = os.environ.get("DBOS__APPVERSION", "")
23
- self.executor_id = os.environ.get("DBOS__VMID", "local")
24
24
 
25
25
  def filter(self, record: Any) -> bool:
26
26
  record.applicationID = self.app_id
27
- record.applicationVersion = self.app_version
28
- record.executorID = self.executor_id
27
+ record.applicationVersion = GlobalParams.app_version
28
+ record.executorID = GlobalParams.executor_id
29
29
  return True
30
30
 
31
31
 
@@ -86,9 +86,8 @@ def config_logger(config: "ConfigFile") -> None:
86
86
  dbos_logger.addFilter(_otlp_transformer)
87
87
 
88
88
 
89
- def add_otlp_to_all_loggers(app_version: str) -> None:
89
+ def add_otlp_to_all_loggers() -> None:
90
90
  if _otlp_handler is not None and _otlp_transformer is not None:
91
- _otlp_transformer.app_version = app_version
92
91
  root = logging.root
93
92
 
94
93
  root.addHandler(_otlp_handler)
dbos/_queue.py CHANGED
@@ -5,6 +5,8 @@ from typing import TYPE_CHECKING, Optional, TypedDict
5
5
  from psycopg import errors
6
6
  from sqlalchemy.exc import OperationalError
7
7
 
8
+ from dbos._utils import GlobalParams
9
+
8
10
  from ._core import P, R, execute_workflow_by_id, start_workflow
9
11
 
10
12
  if TYPE_CHECKING:
@@ -71,7 +73,9 @@ def queue_thread(stop_event: threading.Event, dbos: "DBOS") -> None:
71
73
  return
72
74
  for _, queue in dbos._registry.queue_info_map.items():
73
75
  try:
74
- wf_ids = dbos._sys_db.start_queued_workflows(queue, dbos._executor_id)
76
+ wf_ids = dbos._sys_db.start_queued_workflows(
77
+ queue, GlobalParams.executor_id
78
+ )
75
79
  for id in wf_ids:
76
80
  execute_workflow_by_id(dbos, id)
77
81
  except OperationalError as e:
dbos/_recovery.py CHANGED
@@ -4,6 +4,8 @@ import time
4
4
  import traceback
5
5
  from typing import TYPE_CHECKING, Any, List
6
6
 
7
+ from dbos._utils import GlobalParams
8
+
7
9
  from ._core import execute_workflow_by_id
8
10
  from ._error import DBOSWorkflowFunctionNotFoundError
9
11
  from ._sys_db import GetPendingWorkflowsOutput
@@ -45,7 +47,7 @@ def recover_pending_workflows(
45
47
  for executor_id in executor_ids:
46
48
  dbos.logger.debug(f"Recovering pending workflows for executor: {executor_id}")
47
49
  pending_workflows = dbos._sys_db.get_pending_workflows(
48
- executor_id, dbos.app_version
50
+ executor_id, GlobalParams.app_version
49
51
  )
50
52
  for pending_workflow in pending_workflows:
51
53
  if (
@@ -64,6 +66,6 @@ def recover_pending_workflows(
64
66
  execute_workflow_by_id(dbos, pending_workflow.workflow_uuid)
65
67
  )
66
68
  dbos.logger.info(
67
- f"Recovering {len(pending_workflows)} workflows from version {dbos.app_version}"
69
+ f"Recovering {len(pending_workflows)} workflows from version {GlobalParams.app_version}"
68
70
  )
69
71
  return workflow_handles
dbos/_sys_db.py CHANGED
@@ -27,6 +27,8 @@ from alembic.config import Config
27
27
  from sqlalchemy.exc import DBAPIError
28
28
  from sqlalchemy.sql import func
29
29
 
30
+ from dbos._utils import GlobalParams
31
+
30
32
  from . import _serialization
31
33
  from ._dbos_config import ConfigFile
32
34
  from ._error import (
@@ -192,9 +194,7 @@ class SystemDatabase:
192
194
  port=config["database"]["port"],
193
195
  database="postgres",
194
196
  # fills the "application_name" column in pg_stat_activity
195
- query={
196
- "application_name": f"dbos_transact_{os.environ.get('DBOS__VMID', 'local')}"
197
- },
197
+ query={"application_name": f"dbos_transact_{GlobalParams.executor_id}"},
198
198
  )
199
199
  engine = sa.create_engine(postgres_db_url)
200
200
  with engine.connect() as conn:
@@ -214,9 +214,7 @@ class SystemDatabase:
214
214
  port=config["database"]["port"],
215
215
  database=sysdb_name,
216
216
  # fills the "application_name" column in pg_stat_activity
217
- query={
218
- "application_name": f"dbos_transact_{os.environ.get('DBOS__VMID', 'local')}"
219
- },
217
+ query={"application_name": f"dbos_transact_{GlobalParams.executor_id}"},
220
218
  )
221
219
 
222
220
  # Create a connection pool for the system database
dbos/_tracer.py CHANGED
@@ -7,6 +7,8 @@ from opentelemetry.sdk.trace import TracerProvider
7
7
  from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
8
8
  from opentelemetry.trace import Span
9
9
 
10
+ from dbos._utils import GlobalParams
11
+
10
12
  from ._dbos_config import ConfigFile
11
13
 
12
14
  if TYPE_CHECKING:
@@ -17,8 +19,6 @@ class DBOSTracer:
17
19
 
18
20
  def __init__(self) -> None:
19
21
  self.app_id = os.environ.get("DBOS__APPID", None)
20
- self.app_version = os.environ.get("DBOS__APPVERSION", None)
21
- self.executor_id = os.environ.get("DBOS__VMID", "local")
22
22
  self.provider: Optional[TracerProvider] = None
23
23
 
24
24
  def config(self, config: ConfigFile) -> None:
@@ -51,8 +51,8 @@ class DBOSTracer:
51
51
  context = trace.set_span_in_context(parent) if parent else None
52
52
  span: Span = tracer.start_span(name=attributes["name"], context=context)
53
53
  attributes["applicationID"] = self.app_id
54
- attributes["applicationVersion"] = self.app_version
55
- attributes["executorID"] = self.executor_id
54
+ attributes["applicationVersion"] = GlobalParams.app_version
55
+ attributes["executorID"] = GlobalParams.executor_id
56
56
  for k, v in attributes.items():
57
57
  if k != "name" and v is not None and isinstance(v, (str, bool, int, float)):
58
58
  span.set_attribute(k, v)
dbos/_utils.py ADDED
@@ -0,0 +1,6 @@
1
+ import os
2
+
3
+
4
+ class GlobalParams:
5
+ app_version: str = os.environ.get("DBOS__APPVERSION", "")
6
+ executor_id: str = os.environ.get("DBOS__VMID", "local")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dbos
3
- Version: 0.22.0a11
3
+ Version: 0.23.0a2
4
4
  Summary: Ultra-lightweight durable execution in Python
5
5
  Author-Email: "DBOS, Inc." <contact@dbos.dev>
6
6
  License: MIT
@@ -1,7 +1,7 @@
1
- dbos-0.22.0a11.dist-info/METADATA,sha256=GwtVyx4eSaBm_pisSa54YLA2Fu8vtttyOkeuahFU9SE,5310
2
- dbos-0.22.0a11.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
3
- dbos-0.22.0a11.dist-info/entry_points.txt,sha256=_QOQ3tVfEjtjBlr1jS4sHqHya9lI2aIEIWkz8dqYp14,58
4
- dbos-0.22.0a11.dist-info/licenses/LICENSE,sha256=VGZit_a5-kdw9WT6fY5jxAWVwGQzgLFyPWrcVVUhVNU,1067
1
+ dbos-0.23.0a2.dist-info/METADATA,sha256=wgdLApRAu84t1Ar5ZfNUwDmH-k6PCT7goVKBXsLPmZw,5309
2
+ dbos-0.23.0a2.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
3
+ dbos-0.23.0a2.dist-info/entry_points.txt,sha256=_QOQ3tVfEjtjBlr1jS4sHqHya9lI2aIEIWkz8dqYp14,58
4
+ dbos-0.23.0a2.dist-info/licenses/LICENSE,sha256=VGZit_a5-kdw9WT6fY5jxAWVwGQzgLFyPWrcVVUhVNU,1067
5
5
  dbos/__init__.py,sha256=CxRHBHEthPL4PZoLbZhp3rdm44-KkRTT2-7DkK9d4QQ,724
6
6
  dbos/_admin_server.py,sha256=YiVn5lywz2Vg8_juyNHOYl0HVEy48--7b4phwK7r92o,5732
7
7
  dbos/_app_db.py,sha256=_tv2vmPjjiaikwgxH3mqxgJ4nUUcG2-0uMXKWCqVu1c,5509
@@ -9,18 +9,18 @@ dbos/_classproperty.py,sha256=f0X-_BySzn3yFDRKB2JpCbLYQ9tLwt1XftfshvY7CBs,626
9
9
  dbos/_cloudutils/authentication.py,sha256=V0fCWQN9stCkhbuuxgPTGpvuQcDqfU3KAxPAh01vKW4,5007
10
10
  dbos/_cloudutils/cloudutils.py,sha256=YC7jGsIopT0KveLsqbRpQk2KlRBk-nIRC_UCgep4f3o,7797
11
11
  dbos/_cloudutils/databases.py,sha256=_shqaqSvhY4n2ScgQ8IP5PDZvzvcx3YBKV8fj-cxhSY,8543
12
- dbos/_context.py,sha256=gikN5lUVqnvR-ISoOElXYeYsR_BO2whebB3YP2DJBM4,17713
13
- dbos/_core.py,sha256=b1IL3LDRGmomHhcs929n_G2pfFSmNuSxFrwhcBuo20k,35519
12
+ dbos/_context.py,sha256=Ue5qu3rzLfRmPkz-UUZi9ZS8iXpapRN0NTM4mbA2QmQ,17738
13
+ dbos/_core.py,sha256=2nd_0p1aZM3nVN_nKzwtmgKosU9VIQwE-tPVqeBKryY,36557
14
14
  dbos/_croniter.py,sha256=hbhgfsHBqclUS8VeLnJ9PSE9Z54z6mi4nnrr1aUXn0k,47561
15
15
  dbos/_db_wizard.py,sha256=6tfJaCRa1NtkUdNW75a2yvi_mEgnPJ9C1HP2zPG1hCU,8067
16
- dbos/_dbos.py,sha256=h25S5Mjl1JAfwMEpqRdyBSuUB_HI3TC8J9Nqtqy_XwQ,38453
16
+ dbos/_dbos.py,sha256=JNAFYQ3kVjnZsUl0qJ-JWeaSHKI51VGE3JBXdaPD8Oo,39054
17
17
  dbos/_dbos_config.py,sha256=DfiqVVxNqnafkocSzLqBp1Ig5vCviDTDK_GO3zTtQqI,8298
18
- dbos/_error.py,sha256=NqlobQneZ2ycCQacXc8a38TIOHxFRjBXdF40i3wZUaA,4775
18
+ dbos/_error.py,sha256=xqB7b7g5AF_OwOvqLKLXL1xldn2gAtORix2ZC2B8zK0,5089
19
19
  dbos/_fastapi.py,sha256=ke03vqsSYDnO6XeOtOVFXj0-f-v1MGsOxa9McaROvNc,3616
20
20
  dbos/_flask.py,sha256=DZKUZR5-xOzPI7tYZ53r2PvvHVoAb8SYwLzMVFsVfjI,2608
21
21
  dbos/_kafka.py,sha256=o6DbwnsYRDtvVTZVsN7BAK8cdP79AfoWX3Q7CGY2Yuo,4199
22
22
  dbos/_kafka_message.py,sha256=NYvOXNG3Qn7bghn1pv3fg4Pbs86ILZGcK4IB-MLUNu0,409
23
- dbos/_logger.py,sha256=hNEeOgR9yOwdgcOuvnW_wN9rbfpTk5OowPNhEJmjoQE,3644
23
+ dbos/_logger.py,sha256=utroNAXW71MLYb5D3lsM5xifXT19n5mAidyW-4kwyMA,3499
24
24
  dbos/_migrations/env.py,sha256=38SIGVbmn_VV2x2u1aHLcPOoWgZ84eCymf3g_NljmbU,1626
25
25
  dbos/_migrations/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
26
26
  dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py,sha256=ICLPl8CN9tQXMsLDsAj8z1TsL831-Z3F8jSBvrR-wyw,736
@@ -31,8 +31,8 @@ dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py,sha256=8PyFi8rd6CN-m
31
31
  dbos/_migrations/versions/d76646551a6c_workflow_queue.py,sha256=G942nophZ2uC2vc4hGBC02Ptng1715roTjY3xiyzZU4,729
32
32
  dbos/_migrations/versions/eab0cc1d9a14_job_queue.py,sha256=uvhFOtqbBreCePhAxZfIT0qCAI7BiZTou9wt6QnbY7c,1412
33
33
  dbos/_outcome.py,sha256=FDMgWVjZ06vm9xO-38H17mTqBImUYQxgKs_bDCSIAhE,6648
34
- dbos/_queue.py,sha256=eZiapBcyn70-viW0y9fo7u09V6_VF5ACNGJxD-U_dNM,2844
35
- dbos/_recovery.py,sha256=GtNMvPFM9qetob-gCU9FPI2fo_BGZYRws4EFSpOuFa4,2675
34
+ dbos/_queue.py,sha256=I2gBc7zQ4G0vyDDBnKwIFzxtqfD7DxHO2IZ41brFSOM,2927
35
+ dbos/_recovery.py,sha256=j5OqZEWanwrrt51gHD6bOLS2shCJ5t7bWFOAvsYf-D8,2729
36
36
  dbos/_registrations.py,sha256=_zy6k944Ll8QwqU12Kr3OP23ukVtm8axPNN1TS_kJRc,6717
37
37
  dbos/_request.py,sha256=cX1B3Atlh160phgS35gF1VEEV4pD126c9F3BDgBmxZU,929
38
38
  dbos/_roles.py,sha256=iOsgmIAf1XVzxs3gYWdGRe1B880YfOw5fpU7Jwx8_A8,2271
@@ -41,7 +41,7 @@ dbos/_schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  dbos/_schemas/application_database.py,sha256=KeyoPrF7hy_ODXV7QNike_VFSD74QBRfQ76D7QyE9HI,966
42
42
  dbos/_schemas/system_database.py,sha256=rwp4EvCSaXcUoMaRczZCvETCxGp72k3-hvLyGUDkih0,5163
43
43
  dbos/_serialization.py,sha256=YCYv0qKAwAZ1djZisBC7khvKqG-5OcIv9t9EC5PFIog,1743
44
- dbos/_sys_db.py,sha256=aGa3KDKUVeK9d7r_yK21uoKV3LJGzRzsg8S3Bea5j_U,62685
44
+ dbos/_sys_db.py,sha256=k3vz6G23IdHAO90LtY6lfcbWr74xcBbt0sHTZpFhgTE,62637
45
45
  dbos/_templates/dbos-db-starter/README.md,sha256=GhxhBj42wjTt1fWEtwNriHbJuKb66Vzu89G4pxNHw2g,930
46
46
  dbos/_templates/dbos-db-starter/__package/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
47
  dbos/_templates/dbos-db-starter/__package/main.py,sha256=eI0SS9Nwj-fldtiuSzIlIG6dC91GXXwdRsoHxv6S_WI,2719
@@ -52,7 +52,8 @@ dbos/_templates/dbos-db-starter/migrations/env.py.dbos,sha256=GUV6sjkDzf9Vl6wkGE
52
52
  dbos/_templates/dbos-db-starter/migrations/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
53
53
  dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py,sha256=U5thFWGqNN4QLrNXT7wUUqftIFDNE5eSdqD8JNW1mec,942
54
54
  dbos/_templates/dbos-db-starter/start_postgres_docker.py,sha256=lQVLlYO5YkhGPEgPqwGc7Y8uDKse9HsWv5fynJEFJHM,1681
55
- dbos/_tracer.py,sha256=rvBY1RQU6DO7rL7EnaJJxGcmd4tP_PpGqUEE6imZnhY,2518
55
+ dbos/_tracer.py,sha256=_Id9j9kCrptSNpEpLiRk_g5VPp-DrTWP1WNZInd5BA4,2439
56
+ dbos/_utils.py,sha256=wjOJzxN66IzL9p4dwcEmQACRQah_V09G6mJI2exQfOM,155
56
57
  dbos/_workflow_commands.py,sha256=gAynfrq5sAMhdNpMIphiAm_hC2-xk1ZyWEYA-whtfPs,5402
57
58
  dbos/cli/_github_init.py,sha256=Y_bDF9gfO2jB1id4FV5h1oIxEJRWyqVjhb7bNEa5nQ0,3224
58
59
  dbos/cli/_template_init.py,sha256=AfuMaO8bmr9WsPNHr6j2cp7kjVVZDUpH7KpbTg0hhFs,2722
@@ -60,4 +61,4 @@ dbos/cli/cli.py,sha256=_tXw2IQrWW7fV_h51f_R99vEBSi6aMLz-vCOxKaENiQ,14155
60
61
  dbos/dbos-config.schema.json,sha256=X5TpXNcARGceX0zQs0fVgtZW_Xj9uBbY5afPt9Rz9yk,5741
61
62
  dbos/py.typed,sha256=QfzXT1Ktfk3Rj84akygc7_42z0lRpCq0Ilh8OXI6Zas,44
62
63
  version/__init__.py,sha256=L4sNxecRuqdtSFdpUGX3TtBi9KL3k7YsZVIvv-fv9-A,1678
63
- dbos-0.22.0a11.dist-info/RECORD,,
64
+ dbos-0.23.0a2.dist-info/RECORD,,