Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .changelog/5440.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
`opentelemetry-propagator-jaeger`: fix typing issues and enable pyright typechecking for the package
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def extract(
self,
carrier: CarrierT,
context: Context | None = None,
getter: Getter = default_getter,
getter: Getter[CarrierT] = default_getter,
) -> Context:
if context is None:
context = Context()
Expand Down Expand Up @@ -62,17 +62,17 @@ def inject(
self,
carrier: CarrierT,
context: Context | None = None,
setter: Setter = default_setter,
setter: Setter[CarrierT] = default_setter,
) -> None:
span = trace.get_current_span(context=context)
span_context = span.get_span_context()
if span_context == trace.INVALID_SPAN_CONTEXT:
return

# Non-recording spans do not have a parent
span_parent_id = (
span.parent.span_id if span.is_recording() and span.parent else 0
)
# Non-recording spans do not have a parent; the API Span type does not
# declare a parent attribute, so it has to be accessed via getattr
parent = getattr(span, "parent", None) if span.is_recording() else None
span_parent_id = parent.span_id if parent else 0
trace_flags = span_context.trace_flags
if trace_flags.sampled:
trace_flags |= self.DEBUG_FLAG
Expand Down Expand Up @@ -101,14 +101,21 @@ def inject(
def fields(self) -> set[str]:
return {self.TRACE_ID_KEY}

def _extract_baggage(self, getter, carrier, context):
def _extract_baggage(
self,
getter: Getter[CarrierT],
carrier: CarrierT,
context: Context,
) -> Context:
baggage_keys = [
key
for key in getter.keys(carrier)
if key.startswith(self.BAGGAGE_PREFIX)
]
for key in baggage_keys:
value = _extract_first_element(getter.get(carrier, key))
if value is None:
continue
context = baggage.set_baggage(
key.replace(self.BAGGAGE_PREFIX, ""),
urllib.parse.unquote(value).strip(),
Expand All @@ -122,16 +129,16 @@ def _format_uber_trace_id(trace_id, span_id, parent_span_id, flags):


def _extract_first_element(
items: collections.abc.Iterable[CarrierT],
) -> CarrierT | None:
items: collections.abc.Iterable[str] | None,
) -> str | None:
if items is None:
return None
return next(iter(items), None)


def _parse_trace_id_header(
items: collections.abc.Iterable[CarrierT],
) -> tuple[int]:
items: collections.abc.Iterable[str],
) -> tuple[int, int, int]:
invalid_header_result = (trace.INVALID_TRACE_ID, trace.INVALID_SPAN_ID, 0)

header = _extract_first_element(items)
Expand All @@ -143,17 +150,21 @@ def _parse_trace_id_header(
return invalid_header_result

trace_id_str, span_id_str, _parent_id_str, flags_str = fields
flags = _int_from_hex_str(flags_str, None)
flags = _int_from_hex_str(flags_str)
if flags is None:
return invalid_header_result

trace_id = _int_from_hex_str(trace_id_str, trace.INVALID_TRACE_ID)
span_id = _int_from_hex_str(span_id_str, trace.INVALID_SPAN_ID)
trace_id = _int_from_hex_str(trace_id_str)
if trace_id is None:
trace_id = trace.INVALID_TRACE_ID
span_id = _int_from_hex_str(span_id_str)
if span_id is None:
span_id = trace.INVALID_SPAN_ID
return trace_id, span_id, flags


def _int_from_hex_str(identifier: str, default: int | None) -> int | None:
def _int_from_hex_str(identifier: str) -> int | None:
try:
return int(identifier, 16)
except ValueError:
return default
return None
4 changes: 3 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,8 @@ include = [
"exporter/opentelemetry-exporter-otlp-proto-http",
"exporter/opentelemetry-exporter-otlp-json-common",
"exporter/opentelemetry-exporter-otlp-common",
"codegen/opentelemetry-codegen-json"
"codegen/opentelemetry-codegen-json",
"propagator/opentelemetry-propagator-jaeger",
]

exclude = [
Expand All @@ -154,6 +155,7 @@ exclude = [
"exporter/opentelemetry-exporter-otlp-json-common/tests",
"exporter/opentelemetry-exporter-otlp-common/tests",
"exporter/opentelemetry-exporter-otlp-json-common/benchmarks",
"propagator/opentelemetry-propagator-jaeger/tests",
]

# When packages are correct typed add them to the strict list
Expand Down
Loading