warpzone-sdk 15.0.0.dev4__tar.gz → 15.0.0.dev5__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.
Files changed (57) hide show
  1. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/PKG-INFO +1 -1
  2. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/pyproject.toml +1 -1
  3. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/monitor.py +2 -1
  4. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/monitor/traces.py +13 -22
  5. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/README.md +0 -0
  6. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/__init__.py +0 -0
  7. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/blobstorage/__init__.py +0 -0
  8. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/blobstorage/client.py +0 -0
  9. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/db/__init__.py +0 -0
  10. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/db/client.py +0 -0
  11. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/deltastorage/__init__.py +0 -0
  12. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/deltastorage/data_types.py +0 -0
  13. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/deltastorage/generated_columns.py +0 -0
  14. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/deltastorage/lock_client.py +0 -0
  15. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/deltastorage/schema.py +0 -0
  16. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/deltastorage/slicing.py +0 -0
  17. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/deltastorage/store.py +0 -0
  18. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/deltastorage/table.py +0 -0
  19. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/enums/__init__.py +0 -0
  20. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/enums/topicenum.py +0 -0
  21. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/__init__.py +0 -0
  22. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/checks.py +0 -0
  23. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/functionize.py +0 -0
  24. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/integrations.py +0 -0
  25. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/process.py +0 -0
  26. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/processors/__init__.py +0 -0
  27. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/processors/dependencies.py +0 -0
  28. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/processors/outputs.py +0 -0
  29. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/processors/triggers.py +0 -0
  30. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/signature.py +0 -0
  31. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/function/types.py +0 -0
  32. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/healthchecks/__init__.py +0 -0
  33. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/healthchecks/model.py +0 -0
  34. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/monitor/__init__.py +0 -0
  35. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/monitor/logs.py +0 -0
  36. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/servicebus/data/__init__.py +0 -0
  37. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/servicebus/data/client.py +0 -0
  38. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/servicebus/events/__init__.py +0 -0
  39. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/servicebus/events/client.py +0 -0
  40. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/servicebus/events/triggers.py +0 -0
  41. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tablestorage/db/__init__.py +0 -0
  42. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tablestorage/db/base_client.py +0 -0
  43. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tablestorage/db/client.py +0 -0
  44. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tablestorage/db/table_config.py +0 -0
  45. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tablestorage/tables/__init__.py +0 -0
  46. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tablestorage/tables/client.py +0 -0
  47. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tablestorage/tables/entities.py +0 -0
  48. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tablestorage/tables/helpers.py +0 -0
  49. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/testing/__init__.py +0 -0
  50. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/testing/assertions.py +0 -0
  51. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/testing/data.py +0 -0
  52. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/testing/matchers.py +0 -0
  53. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tools/__init__.py +0 -0
  54. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/tools/copy.py +0 -0
  55. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/transform/__init__.py +0 -0
  56. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/transform/data.py +0 -0
  57. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev5}/warpzone/transform/schema.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: warpzone-sdk
3
- Version: 15.0.0.dev4
3
+ Version: 15.0.0.dev5
4
4
  Summary: The main objective of this package is to centralize logic used to interact with Azure Functions, Azure Service Bus and Azure Table Storage
5
5
  Author: Team Enigma
6
6
  Author-email: enigma@energinet.dk
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "warpzone-sdk"
3
- version = "15.0.0.dev4"
3
+ version = "15.0.0.dev5"
4
4
  description = "The main objective of this package is to centralize logic used to interact with Azure Functions, Azure Service Bus and Azure Table Storage"
5
5
  authors = [{ name = "Team Enigma", email = "enigma@energinet.dk" }]
6
6
  requires-python = ">=3.10"
@@ -28,7 +28,8 @@ SUBJECT_IDENTIFIER = "<Subject>"
28
28
  @contextmanager
29
29
  def run_in_trace_context(context: func.Context):
30
30
  trace_context = context.trace_context
31
- with traces.set_trace_context(trace_context.trace_parent):
31
+ span_name = context.function_name or "azure_function"
32
+ with traces.set_trace_context(trace_context.trace_parent, span_name=span_name):
32
33
  yield
33
34
 
34
35
 
@@ -63,36 +63,27 @@ class AzureSDKTraceFilter(SpanProcessor):
63
63
 
64
64
 
65
65
  @contextmanager
66
- def set_trace_context(trace_parent: str):
67
- """Context manager for setting the trace context.
66
+ def set_trace_context(trace_parent: str, span_name: str = "function_execution"):
67
+ """Context manager for setting the trace context with a recording span.
68
68
 
69
- Attaches the propagated trace context with a NonRecordingSpan so that
70
- logs emitted within this context are properly correlated with the trace
71
- created by Azure Functions.
72
-
73
- The NonRecordingSpan is necessary because the LoggingHandler needs an
74
- actual span (not just a SpanContext) to extract trace correlation IDs.
75
- Using NonRecordingSpan avoids creating duplicate spans while still
76
- providing the trace_id and span_id for log correlation.
69
+ Creates a child span of the propagated trace context. This is necessary
70
+ because the LoggingHandler requires a recording span to properly correlate
71
+ logs with the trace. A NonRecordingSpan (which is what TraceContextTextMapPropagator
72
+ creates) may not be correctly handled during log batching/export.
77
73
 
78
74
  Args:
79
75
  trace_parent (str): Trace parent ID from the incoming request
76
+ span_name (str): Name for the span. Defaults to "function_execution".
80
77
  """
81
78
  carrier = {"traceparent": trace_parent}
82
79
  ctx = TraceContextTextMapPropagator().extract(carrier=carrier)
83
80
 
84
- # Get the span from the extracted context - this is a NonRecordingSpan
85
- # created by the propagator with the correct trace_id and span_id
86
- span = trace.get_current_span(ctx)
87
-
88
- # Set this span as the current span in context
89
- ctx = trace.set_span_in_context(span)
90
-
91
- token = context.attach(ctx)
92
- try:
93
- yield
94
- finally:
95
- context.detach(token)
81
+ # Start a recording span as a child of the propagated context.
82
+ # This ensures logs are properly correlated with the trace.
83
+ tracer = trace.get_tracer(__name__)
84
+ with trace.use_span(trace.get_current_span(ctx), end_on_exit=False):
85
+ with tracer.start_as_current_span(span_name):
86
+ yield
96
87
 
97
88
 
98
89
  def get_tracer(name: str):