dbos 0.7.0a8__py3-none-any.whl → 0.7.1__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/error.py CHANGED
@@ -32,7 +32,6 @@ class DBOSErrorCode(Enum):
32
32
  InitializationError = 3
33
33
  WorkflowFunctionNotFound = 4
34
34
  NonExistentWorkflowError = 5
35
- DuplicateWorkflowEventError = 6
36
35
  MaxStepRetriesExceeded = 7
37
36
  NotAuthorized = 8
38
37
 
@@ -87,16 +86,6 @@ class DBOSNonExistentWorkflowError(DBOSException):
87
86
  )
88
87
 
89
88
 
90
- class DBOSDuplicateWorkflowEventError(DBOSException):
91
- """Exception raised when a workflow attempts to set an event value more than once per key."""
92
-
93
- def __init__(self, workflow_id: str, key: str):
94
- super().__init__(
95
- f"Workflow {workflow_id} has already emitted an event with key {key}",
96
- dbos_error_code=DBOSErrorCode.DuplicateWorkflowEventError.value,
97
- )
98
-
99
-
100
89
  class DBOSNotAuthorizedError(DBOSException):
101
90
  """Exception raised by DBOS role-based security when the user is not authorized to access a function."""
102
91
 
@@ -0,0 +1,34 @@
1
+ """fix_job_queue
2
+
3
+ Revision ID: 50f3227f0b4b
4
+ Revises: eab0cc1d9a14
5
+ Create Date: 2024-09-25 14:03:53.308068
6
+
7
+ """
8
+
9
+ from typing import Sequence, Union
10
+
11
+ from alembic import op
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision: str = "50f3227f0b4b"
15
+ down_revision: Union[str, None] = "eab0cc1d9a14"
16
+ branch_labels: Union[str, Sequence[str], None] = None
17
+ depends_on: Union[str, Sequence[str], None] = None
18
+
19
+
20
+ def upgrade() -> None:
21
+ op.drop_constraint("job_queue_pkey", "job_queue", schema="dbos", type_="primary")
22
+
23
+ op.create_primary_key(
24
+ "job_queue_pkey", "job_queue", ["workflow_uuid"], schema="dbos"
25
+ )
26
+
27
+
28
+ def downgrade() -> None:
29
+ # Reverting the changes
30
+ op.drop_constraint("job_queue_pkey", "job_queue", schema="dbos", type_="primary")
31
+
32
+ op.create_primary_key(
33
+ "job_queue_pkey", "job_queue", ["created_at_epoch_ms"], schema="dbos"
34
+ )
dbos/queue.py CHANGED
@@ -1,9 +1,9 @@
1
1
  import threading
2
2
  import time
3
+ import traceback
3
4
  from typing import TYPE_CHECKING, Optional
4
5
 
5
6
  from dbos.core import P, R, _execute_workflow_id, _start_workflow
6
- from dbos.error import DBOSInitializationError
7
7
 
8
8
  if TYPE_CHECKING:
9
9
  from dbos.dbos import DBOS, Workflow, WorkflowHandle
@@ -31,6 +31,13 @@ def queue_thread(stop_event: threading.Event, dbos: "DBOS") -> None:
31
31
  while not stop_event.is_set():
32
32
  time.sleep(1)
33
33
  for queue_name, queue in dbos._registry.queue_info_map.items():
34
- wf_ids = dbos._sys_db.start_queued_workflows(queue_name, queue.concurrency)
35
- for id in wf_ids:
36
- _execute_workflow_id(dbos, id)
34
+ try:
35
+ wf_ids = dbos._sys_db.start_queued_workflows(
36
+ queue_name, queue.concurrency
37
+ )
38
+ for id in wf_ids:
39
+ _execute_workflow_id(dbos, id)
40
+ except Exception:
41
+ dbos.logger.warning(
42
+ f"Exception encountered in queue thread: {traceback.format_exc()}"
43
+ )
dbos/system_database.py CHANGED
@@ -1,6 +1,5 @@
1
1
  import datetime
2
2
  import os
3
- import select
4
3
  import threading
5
4
  import time
6
5
  from enum import Enum
@@ -14,11 +13,7 @@ from alembic.config import Config
14
13
  from sqlalchemy.exc import DBAPIError
15
14
 
16
15
  import dbos.utils as utils
17
- from dbos.error import (
18
- DBOSDuplicateWorkflowEventError,
19
- DBOSNonExistentWorkflowError,
20
- DBOSWorkflowConflictIDError,
21
- )
16
+ from dbos.error import DBOSNonExistentWorkflowError, DBOSWorkflowConflictIDError
22
17
 
23
18
  from .dbos_config import ConfigFile
24
19
  from .logger import dbos_logger
@@ -832,18 +827,18 @@ class SystemDatabase:
832
827
  if recorded_output is not None:
833
828
  return # Already sent before
834
829
 
835
- try:
836
- c.execute(
837
- pg.insert(SystemSchema.workflow_events).values(
838
- workflow_uuid=workflow_uuid,
839
- key=key,
840
- value=utils.serialize(message),
841
- )
830
+ c.execute(
831
+ pg.insert(SystemSchema.workflow_events)
832
+ .values(
833
+ workflow_uuid=workflow_uuid,
834
+ key=key,
835
+ value=utils.serialize(message),
842
836
  )
843
- except DBAPIError as dbapi_error:
844
- if dbapi_error.orig.sqlstate == "23505": # type: ignore
845
- raise DBOSDuplicateWorkflowEventError(workflow_uuid, key)
846
- raise
837
+ .on_conflict_do_update(
838
+ index_elements=["workflow_uuid", "key"],
839
+ set_={"value": utils.serialize(message)},
840
+ )
841
+ )
847
842
  output: OperationResultInternal = {
848
843
  "workflow_uuid": workflow_uuid,
849
844
  "function_id": function_id,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dbos
3
- Version: 0.7.0a8
3
+ Version: 0.7.1
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.7.0a8.dist-info/METADATA,sha256=WCNkAofLXq_TaFlZzWzLRCBhYqN1JeaOE7zydAtR5TU,5010
2
- dbos-0.7.0a8.dist-info/WHEEL,sha256=rSwsxJWe3vzyR5HCwjWXQruDgschpei4h_giTm0dJVE,90
3
- dbos-0.7.0a8.dist-info/entry_points.txt,sha256=3PmOPbM4FYxEmggRRdJw0oAsiBzKR8U0yx7bmwUmMOM,39
4
- dbos-0.7.0a8.dist-info/licenses/LICENSE,sha256=VGZit_a5-kdw9WT6fY5jxAWVwGQzgLFyPWrcVVUhVNU,1067
1
+ dbos-0.7.1.dist-info/METADATA,sha256=QHt_JDIOSevYneZp55Ub9nMvdDDZlf0eTVd5GY6DUEI,5008
2
+ dbos-0.7.1.dist-info/WHEEL,sha256=Vza3XR51HW1KmFP0iIMUVYIvz0uQuKJpIXKYOBGQyFQ,90
3
+ dbos-0.7.1.dist-info/entry_points.txt,sha256=z6GcVANQV7Uw_82H9Ob2axJX6V3imftyZsljdh-M1HU,54
4
+ dbos-0.7.1.dist-info/licenses/LICENSE,sha256=VGZit_a5-kdw9WT6fY5jxAWVwGQzgLFyPWrcVVUhVNU,1067
5
5
  dbos/__init__.py,sha256=jjlBFzSAzO2e-LD5IKJw7bRqZjrxpF5Sn-_JUJJptHU,680
6
6
  dbos/admin_sever.py,sha256=Qg5T3YRrbPW05PR_99yAaxgo1ugQrAp_uTeTqSfjm_k,3397
7
7
  dbos/application_database.py,sha256=knFK8We8y6WrIpnFCKvFq5hvSuFQqUuJqOqDpSVMCPI,5521
@@ -12,7 +12,7 @@ dbos/dbos-config.schema.json,sha256=azpfmoDZg7WfSy3kvIsk9iEiKB_-VZt03VEOoXJAkqE,
12
12
  dbos/dbos.py,sha256=RtDcvKe4sm1TlnCGU4cyex-UI7hMMlhgzmOl1NuRLo4,29294
13
13
  dbos/dbos_config.py,sha256=NJVze2GkKgYUmcPP31Unb-QpsA0TzImEeQGJgVq6W6k,5352
14
14
  dbos/decorators.py,sha256=lbPefsLK6Cya4cb7TrOcLglOpGT3pc6qjZdsQKlfZLg,629
15
- dbos/error.py,sha256=DDhB0VHmoZE_CP51ICdFMZSL2gmVS3Dm0aPNWncci94,3876
15
+ dbos/error.py,sha256=c2y7d3Cbb-ZOO-M9txcCxuyPE1bdnwKrJnXgJXYb-pQ,3437
16
16
  dbos/fastapi.py,sha256=gx9hlpxYOiwbuhSlbY9bn5C-F_FsCbrJvkX9ZAvDG6U,3418
17
17
  dbos/flask.py,sha256=azr4geMEGuuTBCyxIZmgDmmP-6s_pTIF-lGyp9Q4IB8,2430
18
18
  dbos/kafka.py,sha256=LH3hbNapnkjLcuXNUtdGU0398JafWb-t0GwUl3LOzkc,3645
@@ -20,11 +20,12 @@ dbos/kafka_message.py,sha256=NYvOXNG3Qn7bghn1pv3fg4Pbs86ILZGcK4IB-MLUNu0,409
20
20
  dbos/logger.py,sha256=D-aFSZUCHBP34J1IZ5YNkTrJW-rDiH3py_v9jLU4Yrk,3565
21
21
  dbos/migrations/env.py,sha256=38SIGVbmn_VV2x2u1aHLcPOoWgZ84eCymf3g_NljmbU,1626
22
22
  dbos/migrations/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
23
+ dbos/migrations/versions/50f3227f0b4b_fix_job_queue.py,sha256=ZtnsZFMuon-D0n8V5BR10jQEqJPUsYsOwt29FAoKG8g,868
23
24
  dbos/migrations/versions/5c361fc04708_added_system_tables.py,sha256=QMgFMb0aLgC25YicsvPSr6AHRCA6Zd66hyaRUhwKzrQ,6404
24
25
  dbos/migrations/versions/a3b18ad34abe_added_triggers.py,sha256=Rv0ZsZYZ_WdgGEULYsPfnp4YzaO5L198gDTgYY39AVA,2022
25
26
  dbos/migrations/versions/eab0cc1d9a14_job_queue.py,sha256=_9-FCW-zOpCQfblTS_yRLtFiUaWlC1tM4BoKBTDeH9k,1395
26
27
  dbos/py.typed,sha256=QfzXT1Ktfk3Rj84akygc7_42z0lRpCq0Ilh8OXI6Zas,44
27
- dbos/queue.py,sha256=5unMPX1ThoVWfXOR2IUSeIjgATgcX_YmZS3Fz1Uoc7o,1228
28
+ dbos/queue.py,sha256=ngY1MN3xD7jAvEXlrl_D16FUPpP_vpRgbyERLfPyU9Y,1437
28
29
  dbos/recovery.py,sha256=zqtO_ExGoIErLMVnbneU3VeHLVWvhV4jnfqssAVlQQk,2016
29
30
  dbos/registrations.py,sha256=gMI-u05tv5bpvyddQGtoUgCsqARx51aOY7p0JXPafQo,6539
30
31
  dbos/request.py,sha256=-FIwtknayvRl6OjvqO4V2GySVzSdP1Ft3cc9ZBS-PLY,928
@@ -34,7 +35,7 @@ dbos/scheduler/scheduler.py,sha256=Sz4EIpAtur7so2YajTic64GrTpa4qPw8QxXn0M34v80,1
34
35
  dbos/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
36
  dbos/schemas/application_database.py,sha256=q_Wr2XbiZNBYFkOtu7uKavo1T_cSOBblxKGHThYGGsY,962
36
37
  dbos/schemas/system_database.py,sha256=ed4c1UntsD-cqXD0ekM4jvcYYEViavDh_G6c0pVDe7k,4938
37
- dbos/system_database.py,sha256=y59uFRWsNlp_tBSyZpq4geXDAC1Vii6074iFQZkgltY,41974
38
+ dbos/system_database.py,sha256=VSGFSPubbMokGYsZfRb6cQPltLfjoWM-Re_2Gj9qkRc,41844
38
39
  dbos/templates/hello/README.md,sha256=GhxhBj42wjTt1fWEtwNriHbJuKb66Vzu89G4pxNHw2g,930
39
40
  dbos/templates/hello/__package/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
41
  dbos/templates/hello/__package/main.py,sha256=eI0SS9Nwj-fldtiuSzIlIG6dC91GXXwdRsoHxv6S_WI,2719
@@ -48,4 +49,4 @@ dbos/templates/hello/start_postgres_docker.py,sha256=lQVLlYO5YkhGPEgPqwGc7Y8uDKs
48
49
  dbos/tracer.py,sha256=GaXDhdKKF_IQp5SAMipGXiDVwteRKjNbrXyYCH1mor0,2520
49
50
  dbos/utils.py,sha256=hWj9iWDrby2cVEhb0pG-IdnrxLqP64NhkaWUXiLc8bA,402
50
51
  version/__init__.py,sha256=L4sNxecRuqdtSFdpUGX3TtBi9KL3k7YsZVIvv-fv9-A,1678
51
- dbos-0.7.0a8.dist-info/RECORD,,
52
+ dbos-0.7.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: pdm-backend (2.3.3)
2
+ Generator: pdm-backend (2.4.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,3 +1,5 @@
1
1
  [console_scripts]
2
2
  dbos = dbos.cli:app
3
3
 
4
+ [gui_scripts]
5
+