Skip to content

Commit

Permalink
split parsing and verification
Browse files Browse the repository at this point in the history
Signed-off-by: Eliott Bouhana <eliott.bouhana@datadoghq.com>
  • Loading branch information
eliottness committed Aug 14, 2024
1 parent 246dac3 commit 9d1aceb
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions ddapm_test_agent/trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,17 +133,14 @@ def verify_span(d: Any) -> Span:
assert isinstance(
v, bytes
), f"Expected msgpack'd value of key 'meta_struct.{k}' to be of type: 'bytes', got: {type(v)}"
# Decode meta_struct msgpack values
decoded_meta_struct = {key: msgpack.unpackb(val_bytes) for key, val_bytes in d["meta_struct"].items()}
for k, val in decoded_meta_struct.items():
for k, val in d["meta_struct"].items():
assert isinstance(
val, dict
), f"Expected msgpack decoded value of key 'meta_struct.{k}' to be of type: 'dict', got: {type(val)}"
for inner_k in val:
assert isinstance(
inner_k, str
), f"Expected key 'meta_struct.{k}.{inner_k}' to be of type: 'str', got: {type(inner_k)}"
d["meta_struct"] = decoded_meta_struct
if "metrics" in d:
assert isinstance(d["metrics"], dict)
for k, v in d["metrics"].items():
Expand Down Expand Up @@ -188,6 +185,26 @@ def verify_span(d: Any) -> Span:
raise TypeError(*e.args) from e


def _parse_meta_struct(value: Any) -> Dict[str, Dict[str, Any]]:
if not isinstance(value, dict):
raise TypeError("Expected meta_struct to be of type: 'dict', got: %s" % type(value))

return {key: msgpack.unpackb(val_bytes) for key, val_bytes in value.items()}


def _flexible_decode_meta_struct(value: Any):
if not isinstance(value, list):
return
for maybe_trace in value:
if not isinstance(maybe_trace, list):
continue
for maybe_span in maybe_trace:
if not isinstance(maybe_span, dict):
continue
if "meta_struct" in maybe_span:
maybe_span["meta_struct"] = _parse_meta_struct(maybe_span["meta_struct"])


def v04_verify_trace(maybe_trace: Any) -> Trace:
if not isinstance(maybe_trace, list):
raise TypeError("Trace must be a list.")
Expand Down Expand Up @@ -411,6 +428,7 @@ def decode_v04(content_type: str, data: bytes, suppress_errors: bool) -> v04Trac
payload = _trace_decoder_flexible(data) if suppress_errors else json.loads(data)
else:
raise TypeError("Content type %r not supported" % content_type)
_flexible_decode_meta_struct(payload)
return _verify_v04_payload(payload)


Expand Down

0 comments on commit 9d1aceb

Please sign in to comment.