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.
- {dbos-0.26.0a24 → dbos-0.27.0a1}/PKG-INFO +1 -1
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_dbos.py +6 -1
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_dbos_config.py +0 -12
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_tracer.py +9 -1
- {dbos-0.26.0a24 → dbos-0.27.0a1}/pyproject.toml +1 -1
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_spans.py +24 -10
- {dbos-0.26.0a24 → dbos-0.27.0a1}/LICENSE +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/README.md +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/__init__.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/__main__.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_admin_server.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_app_db.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_classproperty.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_client.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_conductor/conductor.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_conductor/protocol.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_context.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_core.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_croniter.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_debug.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_docker_pg_helper.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_error.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_event_loop.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_fastapi.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_flask.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_kafka.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_kafka_message.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_logger.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/env.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/script.py.mako +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/04ca4f231047_workflow_queues_executor_id.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/50f3227f0b4b_fix_job_queue.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/83f3732ae8e7_workflow_timeout.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/a3b18ad34abe_added_triggers.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/d76646551a6c_workflow_queue.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/eab0cc1d9a14_job_queue.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/f4b9b32ba814_functionname_childid_op_outputs.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_outcome.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_queue.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_recovery.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_registrations.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_request.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_roles.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_scheduler.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_schemas/__init__.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_schemas/application_database.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_schemas/system_database.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_serialization.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_sys_db.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/README.md +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/__package/__init__.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/__package/main.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/__package/schema.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/alembic.ini +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/dbos-config.yaml.dbos +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/migrations/env.py.dbos +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/migrations/script.py.mako +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/migrations/versions/2024_07_31_180642_init.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_templates/dbos-db-starter/start_postgres_docker.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_utils.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_workflow_commands.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/cli/_github_init.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/cli/_template_init.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/cli/cli.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/dbos-config.schema.json +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/py.typed +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/__init__.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/atexit_no_ctor.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/atexit_no_launch.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/classdefs.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/client_collateral.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/client_worker.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/conftest.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/dupname_classdefs1.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/dupname_classdefsa.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/more_classdefs.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/queuedworkflow.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_admin_server.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_async.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_classdecorators.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_client.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_concurrency.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_config.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_croniter.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_dbos.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_debug.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_docker_secrets.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_failures.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_fastapi.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_fastapi_roles.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_flask.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_kafka.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_outcome.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_package.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_queue.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_scheduler.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_schema_migration.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_singleton.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_sqlalchemy.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_workflow_introspection.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/tests/test_workflow_management.py +0 -0
- {dbos-0.26.0a24 → dbos-0.27.0a1}/version/__init__.py +0 -0
|
@@ -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
|
-
|
|
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)
|
|
@@ -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) ==
|
|
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 ==
|
|
45
|
-
assert spans[2].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[
|
|
48
|
-
assert spans[1].parent ==
|
|
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) ==
|
|
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 ==
|
|
83
|
-
assert spans[2].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[
|
|
86
|
-
assert spans[1].parent ==
|
|
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
|
{dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/5c361fc04708_added_system_tables.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dbos-0.26.0a24 → dbos-0.27.0a1}/dbos/_migrations/versions/d76646551a6b_job_queue_limiter.py
RENAMED
|
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
|
|
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
|