warpzone-sdk 15.0.0.dev4__tar.gz → 15.0.0.dev6__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.dev6}/PKG-INFO +1 -1
  2. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/pyproject.toml +1 -1
  3. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/monitor.py +2 -1
  4. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/monitor/traces.py +13 -18
  5. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/README.md +0 -0
  6. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/__init__.py +0 -0
  7. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/blobstorage/__init__.py +0 -0
  8. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/blobstorage/client.py +0 -0
  9. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/db/__init__.py +0 -0
  10. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/db/client.py +0 -0
  11. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/deltastorage/__init__.py +0 -0
  12. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/deltastorage/data_types.py +0 -0
  13. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/deltastorage/generated_columns.py +0 -0
  14. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/deltastorage/lock_client.py +0 -0
  15. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/deltastorage/schema.py +0 -0
  16. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/deltastorage/slicing.py +0 -0
  17. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/deltastorage/store.py +0 -0
  18. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/deltastorage/table.py +0 -0
  19. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/enums/__init__.py +0 -0
  20. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/enums/topicenum.py +0 -0
  21. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/__init__.py +0 -0
  22. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/checks.py +0 -0
  23. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/functionize.py +0 -0
  24. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/integrations.py +0 -0
  25. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/process.py +0 -0
  26. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/processors/__init__.py +0 -0
  27. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/processors/dependencies.py +0 -0
  28. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/processors/outputs.py +0 -0
  29. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/processors/triggers.py +0 -0
  30. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/signature.py +0 -0
  31. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/function/types.py +0 -0
  32. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/healthchecks/__init__.py +0 -0
  33. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/healthchecks/model.py +0 -0
  34. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/monitor/__init__.py +0 -0
  35. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/monitor/logs.py +0 -0
  36. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/servicebus/data/__init__.py +0 -0
  37. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/servicebus/data/client.py +0 -0
  38. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/servicebus/events/__init__.py +0 -0
  39. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/servicebus/events/client.py +0 -0
  40. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/servicebus/events/triggers.py +0 -0
  41. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tablestorage/db/__init__.py +0 -0
  42. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tablestorage/db/base_client.py +0 -0
  43. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tablestorage/db/client.py +0 -0
  44. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tablestorage/db/table_config.py +0 -0
  45. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tablestorage/tables/__init__.py +0 -0
  46. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tablestorage/tables/client.py +0 -0
  47. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tablestorage/tables/entities.py +0 -0
  48. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tablestorage/tables/helpers.py +0 -0
  49. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/testing/__init__.py +0 -0
  50. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/testing/assertions.py +0 -0
  51. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/testing/data.py +0 -0
  52. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/testing/matchers.py +0 -0
  53. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tools/__init__.py +0 -0
  54. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/tools/copy.py +0 -0
  55. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/transform/__init__.py +0 -0
  56. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/warpzone/transform/data.py +0 -0
  57. {warpzone_sdk-15.0.0.dev4 → warpzone_sdk-15.0.0.dev6}/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.dev6
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.dev6"
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,35 +63,30 @@ 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
-
81
+ # Explicitly attach the extracted context first
91
82
  token = context.attach(ctx)
92
83
  try:
93
- yield
84
+ # Now start a recording span as a child of the propagated context
85
+ tracer = trace.get_tracer(__name__)
86
+ with tracer.start_as_current_span(span_name):
87
+ yield
94
88
  finally:
89
+ # Explicitly detach to restore previous context
95
90
  context.detach(token)
96
91
 
97
92