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 +3 -1
- dbos/_core.py +26 -1
- dbos/_dbos.py +23 -10
- dbos/_error.py +11 -0
- dbos/_logger.py +5 -6
- dbos/_queue.py +5 -1
- dbos/_recovery.py +4 -2
- dbos/_sys_db.py +4 -6
- dbos/_tracer.py +4 -4
- dbos/_utils.py +6 -0
- {dbos-0.22.0a11.dist-info → dbos-0.23.0a2.dist-info}/METADATA +1 -1
- {dbos-0.22.0a11.dist-info → dbos-0.23.0a2.dist-info}/RECORD +15 -14
- {dbos-0.22.0a11.dist-info → dbos-0.23.0a2.dist-info}/WHEEL +0 -0
- {dbos-0.22.0a11.dist-info → dbos-0.23.0a2.dist-info}/entry_points.txt +0 -0
- {dbos-0.22.0a11.dist-info → dbos-0.23.0a2.dist-info}/licenses/LICENSE +0 -0
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 =
|
|
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":
|
|
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
|
|
383
|
-
|
|
384
|
-
dbos_logger.info(f"Application 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
|
-
|
|
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 {
|
|
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 {
|
|
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(
|
|
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 =
|
|
28
|
-
record.executorID =
|
|
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(
|
|
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(
|
|
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,
|
|
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 {
|
|
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"] =
|
|
55
|
-
attributes["executorID"] =
|
|
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
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
dbos-0.
|
|
2
|
-
dbos-0.
|
|
3
|
-
dbos-0.
|
|
4
|
-
dbos-0.
|
|
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=
|
|
13
|
-
dbos/_core.py,sha256=
|
|
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=
|
|
16
|
+
dbos/_dbos.py,sha256=JNAFYQ3kVjnZsUl0qJ-JWeaSHKI51VGE3JBXdaPD8Oo,39054
|
|
17
17
|
dbos/_dbos_config.py,sha256=DfiqVVxNqnafkocSzLqBp1Ig5vCviDTDK_GO3zTtQqI,8298
|
|
18
|
-
dbos/_error.py,sha256=
|
|
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=
|
|
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=
|
|
35
|
-
dbos/_recovery.py,sha256=
|
|
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=
|
|
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=
|
|
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.
|
|
64
|
+
dbos-0.23.0a2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|