dbos 0.26.0a24__tar.gz → 0.27.0a1__tar.gz

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.

Files changed (104) hide show
  1. {dbos-0.26.0a24 → dbos-0.27.0a1}/PKG-INFO +1 -1
  2. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_dbos.py +6 -1
  3. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_dbos_config.py +0 -12
  4. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_tracer.py +9 -1
  5. {dbos-0.26.0a24 → dbos-0.27.0a1}/pyproject.toml +1 -1
  6. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_spans.py +24 -10
  7. {dbos-0.26.0a24 → dbos-0.27.0a1}/LICENSE +0 -0
  8. {dbos-0.26.0a24 → dbos-0.27.0a1}/README.md +0 -0
  9. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/__init__.py +0 -0
  10. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/__main__.py +0 -0
  11. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_admin_server.py +0 -0
  12. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_app_db.py +0 -0
  13. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_classproperty.py +0 -0
  14. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_client.py +0 -0
  15. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_conductor/conductor.py +0 -0
  16. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_conductor/protocol.py +0 -0
  17. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_context.py +0 -0
  18. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_core.py +0 -0
  19. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_croniter.py +0 -0
  20. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_debug.py +0 -0
  21. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_docker_pg_helper.py +0 -0
  22. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_error.py +0 -0
  23. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_event_loop.py +0 -0
  24. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_fastapi.py +0 -0
  25. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_flask.py +0 -0
  26. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_kafka.py +0 -0
  27. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_kafka_message.py +0 -0
  28. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_logger.py +0 -0
  29. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/env.py +0 -0
  30. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/script.py.mako +0 -0
  31. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py +0 -0
  32. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/50f3227f0b4b_fix_job_queue.py +0 -0
  33. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py +0 -0
  34. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/83f3732ae8e7_workflow_timeout.py +0 -0
  35. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/a3b18ad34abe_added_triggers.py +0 -0
  36. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py +0 -0
  37. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/d76646551a6c_workflow_queue.py +0 -0
  38. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/eab0cc1d9a14_job_queue.py +0 -0
  39. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/f4b9b32ba814_functionname_childid_op_outputs.py +0 -0
  40. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_outcome.py +0 -0
  41. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_queue.py +0 -0
  42. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_recovery.py +0 -0
  43. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_registrations.py +0 -0
  44. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_request.py +0 -0
  45. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_roles.py +0 -0
  46. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_scheduler.py +0 -0
  47. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_schemas/__init__.py +0 -0
  48. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_schemas/application_database.py +0 -0
  49. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_schemas/system_database.py +0 -0
  50. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_serialization.py +0 -0
  51. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_sys_db.py +0 -0
  52. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/README.md +0 -0
  53. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/__package/__init__.py +0 -0
  54. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/__package/main.py +0 -0
  55. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/__package/schema.py +0 -0
  56. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/alembic.ini +0 -0
  57. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos +0 -0
  58. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/migrations/env.py.dbos +0 -0
  59. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/migrations/script.py.mako +0 -0
  60. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py +0 -0
  61. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/start_postgres_docker.py +0 -0
  62. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_utils.py +0 -0
  63. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_workflow_commands.py +0 -0
  64. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/cli/_github_init.py +0 -0
  65. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/cli/_template_init.py +0 -0
  66. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/cli/cli.py +0 -0
  67. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/dbos-config.schema.json +0 -0
  68. {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/py.typed +0 -0
  69. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/__init__.py +0 -0
  70. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/atexit_no_ctor.py +0 -0
  71. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/atexit_no_launch.py +0 -0
  72. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/classdefs.py +0 -0
  73. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/client_collateral.py +0 -0
  74. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/client_worker.py +0 -0
  75. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/conftest.py +0 -0
  76. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/dupname_classdefs1.py +0 -0
  77. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/dupname_classdefsa.py +0 -0
  78. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/more_classdefs.py +0 -0
  79. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/queuedworkflow.py +0 -0
  80. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_admin_server.py +0 -0
  81. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_async.py +0 -0
  82. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_classdecorators.py +0 -0
  83. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_client.py +0 -0
  84. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_concurrency.py +0 -0
  85. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_config.py +0 -0
  86. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_croniter.py +0 -0
  87. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_dbos.py +0 -0
  88. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_debug.py +0 -0
  89. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_docker_secrets.py +0 -0
  90. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_failures.py +0 -0
  91. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_fastapi.py +0 -0
  92. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_fastapi_roles.py +0 -0
  93. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_flask.py +0 -0
  94. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_kafka.py +0 -0
  95. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_outcome.py +0 -0
  96. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_package.py +0 -0
  97. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_queue.py +0 -0
  98. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_scheduler.py +0 -0
  99. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_schema_migration.py +0 -0
  100. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_singleton.py +0 -0
  101. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_sqlalchemy.py +0 -0
  102. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_workflow_introspection.py +0 -0
  103. {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_workflow_management.py +0 -0
  104. {dbos-0.26.0a24 → dbos-0.27.0a1}/version/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dbos
3
- Version: 0.26.0a24
3
+ Version: 0.27.0a1
4
4
  Summary: Ultra-lightweight durable execution in Python
5
5
  Author-Email: "DBOS, Inc." <contact@dbos.dev>
6
6
  License: MIT
@@ -65,7 +65,7 @@ from ._registrations import (
65
65
  from ._roles import default_required_roles, required_roles
66
66
  from ._scheduler import ScheduledWorkflow, scheduled
67
67
  from ._sys_db import StepInfo, WorkflowStatus, reset_system_database
68
- from ._tracer import dbos_tracer
68
+ from ._tracer import DBOSTracer, dbos_tracer
69
69
 
70
70
  if TYPE_CHECKING:
71
71
  from fastapi import FastAPI
@@ -1166,6 +1166,11 @@ class DBOS:
1166
1166
  ctx.authenticated_user = authenticated_user
1167
1167
  ctx.authenticated_roles = authenticated_roles
1168
1168
 
1169
+ @classproperty
1170
+ def tracer(self) -> DBOSTracer:
1171
+ """Return the DBOS OpenTelemetry tracer."""
1172
+ return dbos_tracer
1173
+
1169
1174
 
1170
1175
  class WorkflowHandle(Generic[R], Protocol):
1171
1176
  """
@@ -1,4 +1,3 @@
1
- import inspect
2
1
  import json
3
2
  import os
4
3
  import re
@@ -311,17 +310,6 @@ def load_config(
311
310
 
312
311
  """
313
312
 
314
- # Get the current call stack
315
- frame_records = inspect.stack()
316
- called_from_cli = False
317
- for frame_record in frame_records:
318
- if "dbos/cli/cli.py" in frame_record.filename:
319
- called_from_cli = True
320
- if not called_from_cli and not silent:
321
- dbos_logger.warning(
322
- "This function is deprecated and will be removed in a future version. Use `DBOS.config` instead."
323
- )
324
-
325
313
  with open(config_file_path, "r") as file:
326
314
  content = file.read()
327
315
  substituted_content = _substitute_env_vars(content, silent=silent)
@@ -3,8 +3,10 @@ from typing import TYPE_CHECKING, Optional
3
3
 
4
4
  from opentelemetry import trace
5
5
  from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
6
+ from opentelemetry.sdk.resources import Resource
6
7
  from opentelemetry.sdk.trace import TracerProvider
7
8
  from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
9
+ from opentelemetry.semconv.resource import ResourceAttributes
8
10
  from opentelemetry.trace import Span
9
11
 
10
12
  from dbos._utils import GlobalParams
@@ -23,7 +25,13 @@ class DBOSTracer:
23
25
 
24
26
  def config(self, config: ConfigFile) -> None:
25
27
  if not isinstance(trace.get_tracer_provider(), TracerProvider):
26
- provider = TracerProvider()
28
+ resource = Resource(
29
+ attributes={
30
+ ResourceAttributes.SERVICE_NAME: config["name"],
31
+ }
32
+ )
33
+
34
+ provider = TracerProvider(resource=resource)
27
35
  if os.environ.get("DBOS__CONSOLE_TRACES", None) is not None:
28
36
  processor = BatchSpanProcessor(ConsoleSpanExporter())
29
37
  provider.add_span_processor(processor)
@@ -28,7 +28,7 @@ dependencies = [
28
28
  ]
29
29
  requires-python = ">=3.9"
30
30
  readme = "README.md"
31
- version = "0.26.0a24"
31
+ version = "0.27.0a1"
32
32
 
33
33
  [project.license]
34
34
  text = "MIT"
@@ -17,6 +17,10 @@ def test_spans(dbos: DBOS) -> None:
17
17
  @DBOS.workflow()
18
18
  def test_workflow() -> None:
19
19
  test_step()
20
+ current_span = DBOS.span
21
+ subspan = DBOS.tracer.start_span({"name": "a new span"}, parent=current_span)
22
+ subspan.add_event("greeting_event", {"name": "a new event"})
23
+ DBOS.tracer.end_span(subspan)
20
24
 
21
25
  @DBOS.step()
22
26
  def test_step() -> None:
@@ -33,20 +37,23 @@ def test_spans(dbos: DBOS) -> None:
33
37
 
34
38
  spans = exporter.get_finished_spans()
35
39
 
36
- assert len(spans) == 3
40
+ assert len(spans) == 4
37
41
 
38
42
  for span in spans:
39
43
  assert span.attributes is not None
40
44
  assert span.attributes["applicationVersion"] == GlobalParams.app_version
45
+ assert span.attributes["executorID"] == GlobalParams.executor_id
41
46
  assert span.context is not None
42
47
 
43
48
  assert spans[0].name == test_step.__name__
44
- assert spans[1].name == test_workflow.__name__
45
- assert spans[2].name == test_step.__name__
49
+ assert spans[1].name == 'a new span'
50
+ assert spans[2].name == test_workflow.__name__
51
+ assert spans[3].name == test_step.__name__
46
52
 
47
- assert spans[0].parent.span_id == spans[1].context.span_id # type: ignore
48
- assert spans[1].parent == None
53
+ assert spans[0].parent.span_id == spans[2].context.span_id # type: ignore
54
+ assert spans[1].parent.span_id == spans[2].context.span_id # type: ignore
49
55
  assert spans[2].parent == None
56
+ assert spans[3].parent == None
50
57
 
51
58
 
52
59
  @pytest.mark.asyncio
@@ -55,6 +62,10 @@ async def test_spans_async(dbos: DBOS) -> None:
55
62
  @DBOS.workflow()
56
63
  async def test_workflow() -> None:
57
64
  await test_step()
65
+ current_span = DBOS.span
66
+ subspan = DBOS.tracer.start_span({"name": "a new span"}, parent=current_span)
67
+ subspan.add_event("greeting_event", {"name": "a new event"})
68
+ DBOS.tracer.end_span(subspan)
58
69
 
59
70
  @DBOS.step()
60
71
  async def test_step() -> None:
@@ -71,20 +82,23 @@ async def test_spans_async(dbos: DBOS) -> None:
71
82
 
72
83
  spans = exporter.get_finished_spans()
73
84
 
74
- assert len(spans) == 3
85
+ assert len(spans) == 4
75
86
 
76
87
  for span in spans:
77
88
  assert span.attributes is not None
78
89
  assert span.attributes["applicationVersion"] == GlobalParams.app_version
90
+ assert span.attributes["executorID"] == GlobalParams.executor_id
79
91
  assert span.context is not None
80
92
 
81
93
  assert spans[0].name == test_step.__name__
82
- assert spans[1].name == test_workflow.__name__
83
- assert spans[2].name == test_step.__name__
94
+ assert spans[1].name == 'a new span'
95
+ assert spans[2].name == test_workflow.__name__
96
+ assert spans[3].name == test_step.__name__
84
97
 
85
- assert spans[0].parent.span_id == spans[1].context.span_id # type: ignore
86
- assert spans[1].parent == None
98
+ assert spans[0].parent.span_id == spans[2].context.span_id # type: ignore
99
+ assert spans[1].parent.span_id == spans[2].context.span_id # type: ignore
87
100
  assert spans[2].parent == None
101
+ assert spans[3].parent == None
88
102
 
89
103
 
90
104
  def test_temp_wf_fastapi(dbos_fastapi: Tuple[DBOS, FastAPI]) -> None:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes