chalkpy 2.90.1__py3-none-any.whl → 2.95.3__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.
- chalk/__init__.py +2 -1
- chalk/_gen/chalk/arrow/v1/arrow_pb2.py +7 -5
- chalk/_gen/chalk/arrow/v1/arrow_pb2.pyi +6 -0
- chalk/_gen/chalk/artifacts/v1/chart_pb2.py +16 -16
- chalk/_gen/chalk/artifacts/v1/chart_pb2.pyi +4 -0
- chalk/_gen/chalk/artifacts/v1/cron_query_pb2.py +8 -7
- chalk/_gen/chalk/artifacts/v1/cron_query_pb2.pyi +5 -0
- chalk/_gen/chalk/common/v1/offline_query_pb2.py +17 -15
- chalk/_gen/chalk/common/v1/offline_query_pb2.pyi +25 -0
- chalk/_gen/chalk/common/v1/script_task_pb2.py +3 -3
- chalk/_gen/chalk/common/v1/script_task_pb2.pyi +2 -0
- chalk/_gen/chalk/dataframe/__init__.py +0 -0
- chalk/_gen/chalk/dataframe/v1/__init__.py +0 -0
- chalk/_gen/chalk/dataframe/v1/dataframe_pb2.py +48 -0
- chalk/_gen/chalk/dataframe/v1/dataframe_pb2.pyi +123 -0
- chalk/_gen/chalk/dataframe/v1/dataframe_pb2_grpc.py +4 -0
- chalk/_gen/chalk/dataframe/v1/dataframe_pb2_grpc.pyi +4 -0
- chalk/_gen/chalk/graph/v1/graph_pb2.py +150 -149
- chalk/_gen/chalk/graph/v1/graph_pb2.pyi +25 -0
- chalk/_gen/chalk/graph/v1/sources_pb2.py +94 -84
- chalk/_gen/chalk/graph/v1/sources_pb2.pyi +56 -0
- chalk/_gen/chalk/kubernetes/v1/horizontalpodautoscaler_pb2.py +79 -0
- chalk/_gen/chalk/kubernetes/v1/horizontalpodautoscaler_pb2.pyi +377 -0
- chalk/_gen/chalk/kubernetes/v1/horizontalpodautoscaler_pb2_grpc.py +4 -0
- chalk/_gen/chalk/kubernetes/v1/horizontalpodautoscaler_pb2_grpc.pyi +4 -0
- chalk/_gen/chalk/kubernetes/v1/scaledobject_pb2.py +43 -7
- chalk/_gen/chalk/kubernetes/v1/scaledobject_pb2.pyi +252 -2
- chalk/_gen/chalk/protosql/v1/sql_service_pb2.py +54 -27
- chalk/_gen/chalk/protosql/v1/sql_service_pb2.pyi +131 -3
- chalk/_gen/chalk/protosql/v1/sql_service_pb2_grpc.py +45 -0
- chalk/_gen/chalk/protosql/v1/sql_service_pb2_grpc.pyi +14 -0
- chalk/_gen/chalk/python/v1/types_pb2.py +14 -14
- chalk/_gen/chalk/python/v1/types_pb2.pyi +8 -0
- chalk/_gen/chalk/server/v1/benchmark_pb2.py +76 -0
- chalk/_gen/chalk/server/v1/benchmark_pb2.pyi +156 -0
- chalk/_gen/chalk/server/v1/benchmark_pb2_grpc.py +258 -0
- chalk/_gen/chalk/server/v1/benchmark_pb2_grpc.pyi +84 -0
- chalk/_gen/chalk/server/v1/billing_pb2.py +40 -38
- chalk/_gen/chalk/server/v1/billing_pb2.pyi +17 -1
- chalk/_gen/chalk/server/v1/branches_pb2.py +45 -0
- chalk/_gen/chalk/server/v1/branches_pb2.pyi +80 -0
- chalk/_gen/chalk/server/v1/branches_pb2_grpc.pyi +36 -0
- chalk/_gen/chalk/server/v1/builder_pb2.py +358 -288
- chalk/_gen/chalk/server/v1/builder_pb2.pyi +360 -10
- chalk/_gen/chalk/server/v1/builder_pb2_grpc.py +225 -0
- chalk/_gen/chalk/server/v1/builder_pb2_grpc.pyi +60 -0
- chalk/_gen/chalk/server/v1/chart_pb2.py +10 -10
- chalk/_gen/chalk/server/v1/chart_pb2.pyi +18 -2
- chalk/_gen/chalk/server/v1/clickhouse_pb2.py +42 -0
- chalk/_gen/chalk/server/v1/clickhouse_pb2.pyi +17 -0
- chalk/_gen/chalk/server/v1/clickhouse_pb2_grpc.py +78 -0
- chalk/_gen/chalk/server/v1/clickhouse_pb2_grpc.pyi +38 -0
- chalk/_gen/chalk/server/v1/cloud_components_pb2.py +141 -119
- chalk/_gen/chalk/server/v1/cloud_components_pb2.pyi +106 -4
- chalk/_gen/chalk/server/v1/cloud_components_pb2_grpc.py +45 -0
- chalk/_gen/chalk/server/v1/cloud_components_pb2_grpc.pyi +12 -0
- chalk/_gen/chalk/server/v1/cloud_credentials_pb2.py +11 -3
- chalk/_gen/chalk/server/v1/cloud_credentials_pb2.pyi +20 -0
- chalk/_gen/chalk/server/v1/cloud_credentials_pb2_grpc.py +45 -0
- chalk/_gen/chalk/server/v1/cloud_credentials_pb2_grpc.pyi +12 -0
- chalk/_gen/chalk/server/v1/dataplanejobqueue_pb2.py +52 -38
- chalk/_gen/chalk/server/v1/dataplanejobqueue_pb2.pyi +62 -1
- chalk/_gen/chalk/server/v1/dataplanejobqueue_pb2_grpc.py +90 -0
- chalk/_gen/chalk/server/v1/dataplanejobqueue_pb2_grpc.pyi +24 -0
- chalk/_gen/chalk/server/v1/dataplaneworkflows_pb2.py +90 -0
- chalk/_gen/chalk/server/v1/dataplaneworkflows_pb2.pyi +264 -0
- chalk/_gen/chalk/server/v1/dataplaneworkflows_pb2_grpc.py +170 -0
- chalk/_gen/chalk/server/v1/dataplaneworkflows_pb2_grpc.pyi +62 -0
- chalk/_gen/chalk/server/v1/deploy_pb2.py +9 -3
- chalk/_gen/chalk/server/v1/deploy_pb2.pyi +12 -0
- chalk/_gen/chalk/server/v1/deploy_pb2_grpc.py +45 -0
- chalk/_gen/chalk/server/v1/deploy_pb2_grpc.pyi +12 -0
- chalk/_gen/chalk/server/v1/deployment_pb2.py +6 -6
- chalk/_gen/chalk/server/v1/deployment_pb2.pyi +20 -0
- chalk/_gen/chalk/server/v1/environment_pb2.py +14 -12
- chalk/_gen/chalk/server/v1/environment_pb2.pyi +19 -0
- chalk/_gen/chalk/server/v1/eventbus_pb2.py +4 -2
- chalk/_gen/chalk/server/v1/files_pb2.py +65 -0
- chalk/_gen/chalk/server/v1/files_pb2.pyi +167 -0
- chalk/_gen/chalk/server/v1/files_pb2_grpc.py +4 -0
- chalk/_gen/chalk/server/v1/files_pb2_grpc.pyi +4 -0
- chalk/_gen/chalk/server/v1/graph_pb2.py +38 -26
- chalk/_gen/chalk/server/v1/graph_pb2.pyi +58 -0
- chalk/_gen/chalk/server/v1/graph_pb2_grpc.py +47 -0
- chalk/_gen/chalk/server/v1/graph_pb2_grpc.pyi +18 -0
- chalk/_gen/chalk/server/v1/incident_pb2.py +23 -21
- chalk/_gen/chalk/server/v1/incident_pb2.pyi +15 -1
- chalk/_gen/chalk/server/v1/indexing_job_pb2.py +44 -0
- chalk/_gen/chalk/server/v1/indexing_job_pb2.pyi +38 -0
- chalk/_gen/chalk/server/v1/indexing_job_pb2_grpc.py +78 -0
- chalk/_gen/chalk/server/v1/indexing_job_pb2_grpc.pyi +38 -0
- chalk/_gen/chalk/server/v1/integrations_pb2.py +11 -9
- chalk/_gen/chalk/server/v1/integrations_pb2.pyi +34 -2
- chalk/_gen/chalk/server/v1/kube_pb2.py +29 -19
- chalk/_gen/chalk/server/v1/kube_pb2.pyi +28 -0
- chalk/_gen/chalk/server/v1/kube_pb2_grpc.py +45 -0
- chalk/_gen/chalk/server/v1/kube_pb2_grpc.pyi +12 -0
- chalk/_gen/chalk/server/v1/log_pb2.py +21 -3
- chalk/_gen/chalk/server/v1/log_pb2.pyi +68 -0
- chalk/_gen/chalk/server/v1/log_pb2_grpc.py +90 -0
- chalk/_gen/chalk/server/v1/log_pb2_grpc.pyi +24 -0
- chalk/_gen/chalk/server/v1/model_registry_pb2.py +10 -10
- chalk/_gen/chalk/server/v1/model_registry_pb2.pyi +4 -1
- chalk/_gen/chalk/server/v1/plandebug_pb2.py +53 -0
- chalk/_gen/chalk/server/v1/plandebug_pb2.pyi +86 -0
- chalk/_gen/chalk/server/v1/plandebug_pb2_grpc.py +168 -0
- chalk/_gen/chalk/server/v1/plandebug_pb2_grpc.pyi +60 -0
- chalk/_gen/chalk/server/v1/queries_pb2.py +66 -66
- chalk/_gen/chalk/server/v1/queries_pb2.pyi +32 -2
- chalk/_gen/chalk/server/v1/scheduled_query_run_pb2.py +12 -12
- chalk/_gen/chalk/server/v1/scheduled_query_run_pb2.pyi +16 -3
- chalk/_gen/chalk/server/v1/scheduler_pb2.py +24 -12
- chalk/_gen/chalk/server/v1/scheduler_pb2.pyi +61 -1
- chalk/_gen/chalk/server/v1/scheduler_pb2_grpc.py +90 -0
- chalk/_gen/chalk/server/v1/scheduler_pb2_grpc.pyi +24 -0
- chalk/_gen/chalk/server/v1/script_tasks_pb2.py +15 -3
- chalk/_gen/chalk/server/v1/script_tasks_pb2.pyi +22 -0
- chalk/_gen/chalk/server/v1/script_tasks_pb2_grpc.py +90 -0
- chalk/_gen/chalk/server/v1/script_tasks_pb2_grpc.pyi +24 -0
- chalk/_gen/chalk/server/v1/sql_interface_pb2.py +75 -0
- chalk/_gen/chalk/server/v1/sql_interface_pb2.pyi +142 -0
- chalk/_gen/chalk/server/v1/sql_interface_pb2_grpc.py +349 -0
- chalk/_gen/chalk/server/v1/sql_interface_pb2_grpc.pyi +114 -0
- chalk/_gen/chalk/server/v1/sql_queries_pb2.py +48 -0
- chalk/_gen/chalk/server/v1/sql_queries_pb2.pyi +150 -0
- chalk/_gen/chalk/server/v1/sql_queries_pb2_grpc.py +123 -0
- chalk/_gen/chalk/server/v1/sql_queries_pb2_grpc.pyi +52 -0
- chalk/_gen/chalk/server/v1/team_pb2.py +154 -141
- chalk/_gen/chalk/server/v1/team_pb2.pyi +30 -2
- chalk/_gen/chalk/server/v1/team_pb2_grpc.py +45 -0
- chalk/_gen/chalk/server/v1/team_pb2_grpc.pyi +12 -0
- chalk/_gen/chalk/server/v1/topic_pb2.py +5 -3
- chalk/_gen/chalk/server/v1/topic_pb2.pyi +10 -1
- chalk/_gen/chalk/server/v1/trace_pb2.py +44 -40
- chalk/_gen/chalk/server/v1/trace_pb2.pyi +20 -0
- chalk/_gen/chalk/streaming/v1/debug_service_pb2.py +62 -0
- chalk/_gen/chalk/streaming/v1/debug_service_pb2.pyi +75 -0
- chalk/_gen/chalk/streaming/v1/debug_service_pb2_grpc.py +221 -0
- chalk/_gen/chalk/streaming/v1/debug_service_pb2_grpc.pyi +88 -0
- chalk/_gen/chalk/streaming/v1/simple_streaming_service_pb2.py +16 -10
- chalk/_gen/chalk/streaming/v1/simple_streaming_service_pb2.pyi +52 -1
- chalk/_gen/chalk/streaming/v1/simple_streaming_service_pb2_grpc.py +48 -0
- chalk/_gen/chalk/streaming/v1/simple_streaming_service_pb2_grpc.pyi +20 -0
- chalk/_gen/chalk/utils/v1/field_change_pb2.py +32 -0
- chalk/_gen/chalk/utils/v1/field_change_pb2.pyi +42 -0
- chalk/_gen/chalk/utils/v1/field_change_pb2_grpc.py +4 -0
- chalk/_gen/chalk/utils/v1/field_change_pb2_grpc.pyi +4 -0
- chalk/_lsp/error_builder.py +11 -0
- chalk/_version.py +1 -1
- chalk/client/client.py +128 -43
- chalk/client/client_async.py +149 -0
- chalk/client/client_async_impl.py +22 -0
- chalk/client/client_grpc.py +539 -104
- chalk/client/client_impl.py +449 -122
- chalk/client/dataset.py +7 -1
- chalk/client/models.py +98 -0
- chalk/client/serialization/model_serialization.py +92 -9
- chalk/df/LazyFramePlaceholder.py +1154 -0
- chalk/features/_class_property.py +7 -0
- chalk/features/_embedding/embedding.py +1 -0
- chalk/features/_encoding/converter.py +83 -2
- chalk/features/feature_field.py +40 -30
- chalk/features/feature_set_decorator.py +1 -0
- chalk/features/feature_wrapper.py +42 -3
- chalk/features/hooks.py +81 -10
- chalk/features/inference.py +33 -31
- chalk/features/resolver.py +224 -24
- chalk/functions/__init__.py +65 -3
- chalk/gitignore/gitignore_parser.py +5 -1
- chalk/importer.py +142 -68
- chalk/ml/__init__.py +2 -0
- chalk/ml/model_hooks.py +194 -26
- chalk/ml/model_reference.py +56 -8
- chalk/ml/model_version.py +24 -15
- chalk/ml/utils.py +20 -17
- chalk/operators/_utils.py +10 -3
- chalk/parsed/_proto/export.py +22 -0
- chalk/parsed/duplicate_input_gql.py +3 -0
- chalk/parsed/json_conversions.py +20 -14
- chalk/parsed/to_proto.py +16 -4
- chalk/parsed/user_types_to_json.py +31 -10
- chalk/parsed/validation_from_registries.py +182 -0
- chalk/queries/named_query.py +16 -6
- chalk/queries/scheduled_query.py +9 -1
- chalk/serialization/parsed_annotation.py +24 -11
- chalk/sql/__init__.py +18 -0
- chalk/sql/_internal/integrations/databricks.py +55 -17
- chalk/sql/_internal/integrations/mssql.py +127 -62
- chalk/sql/_internal/integrations/redshift.py +4 -0
- chalk/sql/_internal/sql_file_resolver.py +53 -9
- chalk/sql/_internal/sql_source.py +35 -2
- chalk/streams/_kafka_source.py +5 -1
- chalk/streams/_windows.py +15 -2
- chalk/utils/_otel_version.py +13 -0
- chalk/utils/async_helpers.py +2 -2
- chalk/utils/missing_dependency.py +5 -4
- chalk/utils/tracing.py +185 -95
- {chalkpy-2.90.1.dist-info → chalkpy-2.95.3.dist-info}/METADATA +4 -6
- {chalkpy-2.90.1.dist-info → chalkpy-2.95.3.dist-info}/RECORD +202 -146
- {chalkpy-2.90.1.dist-info → chalkpy-2.95.3.dist-info}/WHEEL +0 -0
- {chalkpy-2.90.1.dist-info → chalkpy-2.95.3.dist-info}/entry_points.txt +0 -0
- {chalkpy-2.90.1.dist-info → chalkpy-2.95.3.dist-info}/top_level.txt +0 -0
chalk/utils/tracing.py
CHANGED
|
@@ -8,37 +8,85 @@ import types
|
|
|
8
8
|
from typing import TYPE_CHECKING, Any, Mapping, Union, cast
|
|
9
9
|
|
|
10
10
|
from chalk.utils._ddtrace_version import can_use_datadog_statsd, can_use_ddtrace
|
|
11
|
+
from chalk.utils._otel_version import can_use_otel_trace
|
|
11
12
|
from chalk.utils.environment_parsing import env_var_bool
|
|
13
|
+
from chalk.utils.log_with_context import get_logger
|
|
12
14
|
|
|
13
15
|
if TYPE_CHECKING:
|
|
14
16
|
import ddtrace.context
|
|
17
|
+
from opentelemetry import trace as otel_trace
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
import ddtrace
|
|
18
|
-
from datadog.dogstatsd.base import statsd
|
|
19
|
-
from ddtrace.propagation.http import HTTPPropagator
|
|
19
|
+
_logger = get_logger(__name__)
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
if can_use_otel_trace:
|
|
22
|
+
from opentelemetry import context as otel_context
|
|
23
|
+
from opentelemetry import trace as otel_trace
|
|
24
|
+
from opentelemetry.propagate import inject as otel_inject
|
|
23
25
|
|
|
24
|
-
|
|
25
|
-
statsd.increment(counter, value, tags)
|
|
26
|
+
_logger.debug("OTEL trace packages installed, otel tracing is available")
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
@contextlib.contextmanager
|
|
29
|
+
def safe_trace(span_id: str, attributes: Mapping[str, str] | None = None): # pyright: ignore[reportRedeclaration]
|
|
30
|
+
if attributes is None:
|
|
31
|
+
attributes = {}
|
|
32
|
+
attributes = dict(attributes)
|
|
33
|
+
attributes["thread_id"] = str(threading.get_native_id())
|
|
34
|
+
with otel_trace.get_tracer("chalk").start_as_current_span(span_id) as span:
|
|
35
|
+
span.set_attributes(attributes)
|
|
36
|
+
yield span
|
|
37
|
+
|
|
38
|
+
def safe_add_metrics(metrics: Mapping[str, Union[int, float]]): # pyright: ignore[reportRedeclaration]
|
|
39
|
+
current_span = otel_trace.get_current_span()
|
|
40
|
+
current_span.set_attributes(dict(metrics))
|
|
41
|
+
|
|
42
|
+
def safe_add_tags(tags: Mapping[str, str]):
|
|
43
|
+
current_span = otel_trace.get_current_span()
|
|
44
|
+
current_span.set_attributes(dict(tags))
|
|
45
|
+
|
|
46
|
+
def safe_current_trace_context() -> ddtrace.context.Context | otel_trace.SpanContext | None: # pyright: ignore[reportRedeclaration]
|
|
47
|
+
return otel_trace.get_current_span().get_span_context()
|
|
29
48
|
|
|
30
49
|
@contextlib.contextmanager
|
|
31
|
-
def
|
|
32
|
-
|
|
50
|
+
def safe_activate_trace_context( # pyright: ignore[reportRedeclaration]
|
|
51
|
+
ctx: ddtrace.context.Context
|
|
52
|
+
| ddtrace.Span
|
|
53
|
+
| otel_trace.SpanContext
|
|
54
|
+
| None, # pyright: ignore[reportPrivateImportUsage]
|
|
55
|
+
):
|
|
56
|
+
if isinstance(ctx, otel_trace.SpanContext):
|
|
57
|
+
new_span = otel_trace.NonRecordingSpan(ctx)
|
|
58
|
+
new_context = otel_trace.set_span_in_context(new_span)
|
|
59
|
+
token = otel_context.attach(new_context)
|
|
33
60
|
yield
|
|
34
|
-
|
|
35
|
-
|
|
61
|
+
otel_context.detach(token)
|
|
62
|
+
else:
|
|
36
63
|
yield
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
64
|
+
|
|
65
|
+
def add_trace_headers( # pyright: ignore[reportRedeclaration]
|
|
66
|
+
input_headers: None | dict[str, str]
|
|
67
|
+
) -> dict[str, str]:
|
|
68
|
+
current_span_ctx = otel_trace.get_current_span().get_span_context()
|
|
69
|
+
new_span_ctx = otel_trace.SpanContext(
|
|
70
|
+
trace_id=current_span_ctx.trace_id,
|
|
71
|
+
span_id=current_span_ctx.span_id,
|
|
72
|
+
is_remote=current_span_ctx.is_remote,
|
|
73
|
+
trace_flags=otel_trace.TraceFlags(otel_trace.TraceFlags.SAMPLED),
|
|
74
|
+
trace_state=current_span_ctx.trace_state,
|
|
75
|
+
)
|
|
76
|
+
ctx = otel_trace.set_span_in_context(otel_trace.NonRecordingSpan(new_span_ctx))
|
|
77
|
+
headers: dict[str, str] = dict(input_headers if input_headers is not None else {})
|
|
78
|
+
otel_inject(headers, context=ctx)
|
|
79
|
+
return headers
|
|
80
|
+
|
|
81
|
+
elif can_use_ddtrace:
|
|
82
|
+
import ddtrace
|
|
83
|
+
from ddtrace.propagation.http import HTTPPropagator
|
|
84
|
+
|
|
85
|
+
_logger.debug("ddtrace installed and available, using it to trace")
|
|
86
|
+
|
|
87
|
+
@contextlib.contextmanager
|
|
88
|
+
def safe_trace(span_id: str, attributes: Mapping[str, str] | None = None): # pyright: ignore[reportRedeclaration]
|
|
89
|
+
if not ddtrace.tracer.enabled:
|
|
42
90
|
yield
|
|
43
91
|
return
|
|
44
92
|
if attributes is None:
|
|
@@ -57,69 +105,95 @@ if can_use_ddtrace and can_use_datadog_statsd:
|
|
|
57
105
|
span.set_tags(cast(Any, attributes))
|
|
58
106
|
yield
|
|
59
107
|
|
|
60
|
-
def safe_add_metrics(metrics: Mapping[str, Union[int, float]]):
|
|
108
|
+
def safe_add_metrics(metrics: Mapping[str, Union[int, float]]): # pyright: ignore[reportRedeclaration]
|
|
61
109
|
span = ddtrace.tracer.current_span()
|
|
62
110
|
if span:
|
|
63
111
|
span.set_metrics(cast(Any, metrics))
|
|
64
112
|
|
|
65
|
-
def safe_add_tags(tags: Mapping[str, str]):
|
|
113
|
+
def safe_add_tags(tags: Mapping[str, str]): # pyright: ignore[reportRedeclaration]
|
|
66
114
|
span = ddtrace.tracer.current_span()
|
|
67
115
|
if span:
|
|
68
116
|
span.set_tags(cast(Any, tags))
|
|
69
117
|
|
|
70
|
-
def safe_current_trace_context(): # pyright: ignore[reportRedeclaration]
|
|
118
|
+
def safe_current_trace_context() -> ddtrace.context.Context | otel_trace.SpanContext | None: # pyright: ignore[reportRedeclaration]
|
|
71
119
|
return ddtrace.tracer.current_trace_context()
|
|
72
120
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
ddtrace.
|
|
121
|
+
@contextlib.contextmanager
|
|
122
|
+
def safe_activate_trace_context( # pyright: ignore[reportRedeclaration]
|
|
123
|
+
ctx: ddtrace.context.Context
|
|
124
|
+
| ddtrace.Span
|
|
125
|
+
| otel_trace.SpanContext
|
|
126
|
+
| None, # pyright: ignore[reportPrivateImportUsage]
|
|
127
|
+
):
|
|
128
|
+
if isinstance(ctx, ddtrace.context.Context) or isinstance(ctx, ddtrace.Span):
|
|
129
|
+
ddtrace.tracer.context_provider.activate(ctx)
|
|
130
|
+
yield
|
|
77
131
|
|
|
78
132
|
def add_trace_headers( # pyright: ignore[reportRedeclaration]
|
|
79
133
|
input_headers: None | dict[str, str]
|
|
80
134
|
) -> dict[str, str]:
|
|
81
|
-
if input_headers is None
|
|
82
|
-
input_headers = dict[str, str]()
|
|
83
|
-
headers = dict(input_headers)
|
|
135
|
+
headers: dict[str, str] = dict(input_headers if input_headers is not None else {})
|
|
84
136
|
span = ddtrace.tracer.current_span()
|
|
85
137
|
if span:
|
|
138
|
+
span.context.sampling_priority = 2
|
|
86
139
|
span.set_tags({ddtrace.constants.SAMPLING_PRIORITY_KEY: 2}) # Ensure that sampling is enabled
|
|
87
140
|
HTTPPropagator.inject(span.context, headers)
|
|
88
141
|
return headers
|
|
89
142
|
|
|
90
143
|
else:
|
|
144
|
+
_logger.debug("no trace packages found, tracing will not work")
|
|
91
145
|
|
|
92
|
-
|
|
146
|
+
@contextlib.contextmanager
|
|
147
|
+
def safe_trace(span_id: str, attributes: Mapping[str, str] | None = None): # pyright: ignore[reportRedeclaration]
|
|
148
|
+
yield
|
|
149
|
+
|
|
150
|
+
def safe_add_metrics(metrics: Mapping[str, Union[int, float]]): # pyright: ignore[reportRedeclaration]
|
|
93
151
|
pass
|
|
94
152
|
|
|
95
|
-
def
|
|
153
|
+
def safe_add_tags(tags: Mapping[str, str]): # pyright: ignore[reportRedeclaration]
|
|
96
154
|
pass
|
|
97
155
|
|
|
156
|
+
def safe_current_trace_context() -> ddtrace.context.Context | otel_trace.SpanContext | None: # pyright: ignore[reportRedeclaration]
|
|
157
|
+
return
|
|
158
|
+
|
|
98
159
|
@contextlib.contextmanager
|
|
99
|
-
def
|
|
160
|
+
def safe_activate_trace_context( # pyright: ignore[reportRedeclaration]
|
|
161
|
+
ctx: ddtrace.context.Context
|
|
162
|
+
| ddtrace.Span
|
|
163
|
+
| otel_trace.Context
|
|
164
|
+
| otel_trace.SpanContext
|
|
165
|
+
| None, # pyright: ignore[reportPrivateImportUsage]
|
|
166
|
+
):
|
|
100
167
|
yield
|
|
101
168
|
|
|
102
|
-
def
|
|
103
|
-
|
|
169
|
+
def add_trace_headers(headers: None | dict[str, str]) -> dict[str, str]: # pyright: ignore[reportRedeclaration]
|
|
170
|
+
if headers is None:
|
|
171
|
+
return {}
|
|
172
|
+
return headers
|
|
104
173
|
|
|
105
|
-
def safe_add_tags(tags: Mapping[str, str]):
|
|
106
|
-
pass
|
|
107
174
|
|
|
108
|
-
|
|
109
|
-
|
|
175
|
+
if can_use_datadog_statsd:
|
|
176
|
+
from datadog.dogstatsd.base import statsd
|
|
110
177
|
|
|
111
|
-
def
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
178
|
+
def safe_set_gauge(gauge: str, value: int | float):
|
|
179
|
+
statsd.gauge(gauge, value)
|
|
180
|
+
|
|
181
|
+
def safe_incr(counter: str, value: int | float, tags: list[str] | None = None):
|
|
182
|
+
statsd.increment(counter, value, tags)
|
|
115
183
|
|
|
116
184
|
def safe_distribution(counter: str, value: int | float, tags: list[str] | None = None):
|
|
185
|
+
statsd.distribution(counter, value, tags)
|
|
186
|
+
|
|
187
|
+
else:
|
|
188
|
+
|
|
189
|
+
def safe_set_gauge(gauge: str, value: int | float):
|
|
117
190
|
pass
|
|
118
191
|
|
|
119
|
-
def
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
192
|
+
def safe_incr(counter: str, value: int | float, tags: list[str] | None = None):
|
|
193
|
+
pass
|
|
194
|
+
|
|
195
|
+
def safe_distribution(counter: str, value: int | float, tags: list[str] | None = None):
|
|
196
|
+
pass
|
|
123
197
|
|
|
124
198
|
|
|
125
199
|
class PerfTimer:
|
|
@@ -153,54 +227,70 @@ def configure_tracing(default_service_name: str):
|
|
|
153
227
|
|
|
154
228
|
_logger = get_logger(__name__)
|
|
155
229
|
|
|
156
|
-
if
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
#
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
requests=True,
|
|
200
|
-
sqlalchemy=False,
|
|
201
|
-
urllib3=True,
|
|
230
|
+
if can_use_otel_trace:
|
|
231
|
+
from opentelemetry import trace as otel_trace
|
|
232
|
+
from opentelemetry.sdk.resources import Resource
|
|
233
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
234
|
+
|
|
235
|
+
provider = TracerProvider(
|
|
236
|
+
resource=Resource.create(
|
|
237
|
+
{
|
|
238
|
+
"service.name": default_service_name,
|
|
239
|
+
}
|
|
240
|
+
),
|
|
241
|
+
)
|
|
242
|
+
otel_trace.set_tracer_provider(provider)
|
|
243
|
+
|
|
244
|
+
elif can_use_ddtrace:
|
|
245
|
+
import ddtrace
|
|
246
|
+
from ddtrace.filters import FilterRequestsOnUrl
|
|
247
|
+
|
|
248
|
+
if ddtrace.config.service is None:
|
|
249
|
+
ddtrace.config.service = default_service_name
|
|
250
|
+
# Re-configuring the global tracer to capture any setting changes from environs from a .dotenv file
|
|
251
|
+
# which might be loaded after the first ddtrace import
|
|
252
|
+
|
|
253
|
+
ddtrace.tracer.configure(
|
|
254
|
+
enabled=None if "DD_TRACE_ENABLED" not in os.environ else env_var_bool("DD_TRACE_ENABLED"),
|
|
255
|
+
hostname=os.getenv("DD_AGENT_HOST") or os.getenv("DD_TRACE_AGENT_URL"),
|
|
256
|
+
uds_path=os.getenv("DD_TRACE_AGENT_URL"),
|
|
257
|
+
dogstatsd_url=os.getenv("DD_DOGSTATSD_URL"),
|
|
258
|
+
api_version=os.getenv("DD_TRACE_API_VERSION"),
|
|
259
|
+
compute_stats_enabled=env_var_bool("DD_TRACE_COMPUTE_STATS"),
|
|
260
|
+
iast_enabled=None if "DD_IAST_ENABLED" not in os.environ else env_var_bool("DD_IAST_ENABLED"),
|
|
261
|
+
# exclude healthcheck url from apm trace collection
|
|
262
|
+
settings={
|
|
263
|
+
"FILTERS": [
|
|
264
|
+
FilterRequestsOnUrl(
|
|
265
|
+
[
|
|
266
|
+
r"^http://.*/healthcheck$",
|
|
267
|
+
r"^http://.*/ready$",
|
|
268
|
+
r"^http://[^/]*/$", # exclude "/"
|
|
269
|
+
]
|
|
270
|
+
)
|
|
271
|
+
]
|
|
272
|
+
},
|
|
202
273
|
)
|
|
274
|
+
if ddtrace.tracer.enabled:
|
|
275
|
+
ddtrace.patch(
|
|
276
|
+
asyncio=True,
|
|
277
|
+
databricks=False,
|
|
278
|
+
fastapi=True,
|
|
279
|
+
futures=True,
|
|
280
|
+
httplib=True,
|
|
281
|
+
httpx=True,
|
|
282
|
+
psycopg=True,
|
|
283
|
+
redis=True,
|
|
284
|
+
requests=True,
|
|
285
|
+
sqlalchemy=False,
|
|
286
|
+
urllib3=True,
|
|
287
|
+
)
|
|
288
|
+
|
|
289
|
+
_logger.info(
|
|
290
|
+
f"Configuring DDtrace tracing: enabled={ddtrace.tracer.enabled}, service={ddtrace.config.service}, env={ddtrace.config.env}, trace_agent_url: {ddtrace.config._trace_agent_url}, effective trace agent: {ddtrace.tracer._agent_url}" # pyright: ignore [reportAttributeAccessIssue, reportPrivateUsage]
|
|
291
|
+
)
|
|
292
|
+
else:
|
|
293
|
+
_logger.warning("neither opentelemetry nor ddtrace are installed")
|
|
294
|
+
|
|
203
295
|
|
|
204
|
-
|
|
205
|
-
f"Configuring DDtrace tracing: enabled={ddtrace.tracer.enabled}, service={ddtrace.config.service}, env={ddtrace.config.env}, trace_agent_url: {ddtrace.config._trace_agent_url}, effective trace agent: {ddtrace.tracer._agent_url}" # pyright: ignore [reportAttributeAccessIssue, reportPrivateUsage]
|
|
206
|
-
)
|
|
296
|
+
configure_tracing("chalkpy")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: chalkpy
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.95.3
|
|
4
4
|
Summary: Python SDK for Chalk
|
|
5
5
|
Author: Chalk AI, Inc.
|
|
6
6
|
Project-URL: Homepage, https://chalk.ai
|
|
@@ -24,7 +24,7 @@ Requires-Dist: cattrs<25,>=22.1.0
|
|
|
24
24
|
Requires-Dist: dataclasses_json>=0.5.7
|
|
25
25
|
Requires-Dist: executing<3,>=1.2.0
|
|
26
26
|
Requires-Dist: googleapis-common-protos>=1.56.0
|
|
27
|
-
Requires-Dist: grpcio<2,>=1.
|
|
27
|
+
Requires-Dist: grpcio<2,>=1.63.0
|
|
28
28
|
Requires-Dist: ipywidgets>=8.0.6
|
|
29
29
|
Requires-Dist: isodate<0.8,>=0.6.1
|
|
30
30
|
Requires-Dist: numpy<3
|
|
@@ -211,9 +211,8 @@ Requires-Dist: s3fs; extra == "redshift"
|
|
|
211
211
|
Requires-Dist: sqlalchemy[asyncio]<2,>=1.4.26; extra == "redshift"
|
|
212
212
|
Requires-Dist: sqlglot<21.2.0,>=19.0.0; extra == "redshift"
|
|
213
213
|
Provides-Extra: mssql
|
|
214
|
-
Requires-Dist:
|
|
214
|
+
Requires-Dist: azure-identity<2,>=1.12.0; extra == "mssql"
|
|
215
215
|
Requires-Dist: pyodbc<6,>=4.0.0; extra == "mssql"
|
|
216
|
-
Requires-Dist: aioodbc<1,>=0.5.0; extra == "mssql"
|
|
217
216
|
Requires-Dist: adlfs; extra == "mssql"
|
|
218
217
|
Requires-Dist: duckdb<1.2.0,>=0.6; extra == "mssql"
|
|
219
218
|
Requires-Dist: fsspec; extra == "mssql"
|
|
@@ -284,8 +283,8 @@ Provides-Extra: all
|
|
|
284
283
|
Requires-Dist: PyAthena>=3.0.0; extra == "all"
|
|
285
284
|
Requires-Dist: adlfs; extra == "all"
|
|
286
285
|
Requires-Dist: aiomysql<0.3,>=0.1.1; extra == "all"
|
|
287
|
-
Requires-Dist: aioodbc<1,>=0.5.0; extra == "all"
|
|
288
286
|
Requires-Dist: aiosqlite<0.21,>=0.19.0; extra == "all"
|
|
287
|
+
Requires-Dist: azure-identity<2,>=1.12.0; extra == "all"
|
|
289
288
|
Requires-Dist: boto3; extra == "all"
|
|
290
289
|
Requires-Dist: chalk-sqlalchemy-redshift<0.9,>=0.8.11; extra == "all"
|
|
291
290
|
Requires-Dist: clickhouse-driver; extra == "all"
|
|
@@ -309,7 +308,6 @@ Requires-Dist: polars[timezone]!=1.0,!=1.1,!=1.10,!=1.11,!=1.12,!=1.13,!=1.14,!=
|
|
|
309
308
|
Requires-Dist: psycopg2<3,>=2.9.4; extra == "all"
|
|
310
309
|
Requires-Dist: psycopg[binary]<3.3,>=3.1.9; extra == "all"
|
|
311
310
|
Requires-Dist: pydynamodb<0.8,>=0.6; extra == "all"
|
|
312
|
-
Requires-Dist: pymssql<3,>=2.2.0; extra == "all"
|
|
313
311
|
Requires-Dist: pymysql<2,>=1.0.2; extra == "all"
|
|
314
312
|
Requires-Dist: pyodbc<6,>=4.0.0; extra == "all"
|
|
315
313
|
Requires-Dist: python-json-logger<4.0.0,>=3.0.0; extra == "all"
|