@@ -84,7 +84,22 @@ def _trace_similarity(t1: Trace, t2: Trace) -> int:
84
84
return score
85
85
86
86
87
- def _normalize_traces (traces : List [Trace ]) -> List [Trace ]:
87
+ def _walk_span_attributes_with_regex_replaces (
88
+ dictionary : Dict [str , Any ], attribute_regex_replaces : Dict [str , Pattern [str ]]
89
+ ) -> None :
90
+ for key , val in dictionary .items ():
91
+ if isinstance (val , str ):
92
+ for placeholder , pattern in attribute_regex_replaces .items ():
93
+ dictionary [key ] = pattern .sub (placeholder , dictionary [key ])
94
+ elif isinstance (val , Dict ):
95
+ _walk_span_attributes_with_regex_replaces (val , attribute_regex_replaces )
96
+ elif isinstance (val , List ):
97
+ for v in val :
98
+ if isinstance (v , Dict ):
99
+ _walk_span_attributes_with_regex_replaces (v , attribute_regex_replaces )
100
+
101
+
102
+ def _normalize_traces (traces : List [Trace ], attribute_regex_replaces : Dict [str , Pattern [str ]]) -> List [Trace ]:
88
103
normed_traces = []
89
104
trace_id_map : Dict [TraceId , Tuple [int , Dict [SpanId , int ]]] = {}
90
105
@@ -115,6 +130,9 @@ def _normalize_traces(traces: List[Trace]) -> List[Trace]:
115
130
span ["metrics" ] = {}
116
131
span_id += 1
117
132
133
+ if attribute_regex_replaces : # only walk if we actually have something to replace
134
+ _walk_span_attributes_with_regex_replaces (cast (Dict [str , Any ], span ), attribute_regex_replaces )
135
+
118
136
normed_traces .append (normed_trace )
119
137
120
138
if old_trace_id != 0 :
@@ -401,9 +419,14 @@ def check(self, *args, **kwargs):
401
419
pass
402
420
403
421
404
- def snapshot (expected_traces : List [Trace ], received_traces : List [Trace ], ignored : List [str ]) -> None :
405
- normed_expected = _normalize_traces (expected_traces )
406
- normed_received = _normalize_traces (received_traces )
422
+ def snapshot (
423
+ expected_traces : List [Trace ],
424
+ received_traces : List [Trace ],
425
+ ignored : List [str ],
426
+ attribute_regex_replaces : Dict [str , Pattern [str ]],
427
+ ) -> None :
428
+ normed_expected = _normalize_traces (expected_traces , {})
429
+ normed_received = _normalize_traces (received_traces , attribute_regex_replaces )
407
430
with CheckTrace .add_frame (
408
431
f"compare of { len (normed_expected )} expected trace(s) to { len (normed_received )} received trace(s)"
409
432
):
@@ -460,22 +483,7 @@ def _ordered_span(s: Span) -> OrderedDictType[str, TopLevelSpanValue]:
460
483
return d # type: ignore
461
484
462
485
463
- def _walk_span_attributes_with_regex_replaces (
464
- dictionary : Dict [str , Any ], attribute_regex_replaces : Dict [str , Pattern [str ]]
465
- ) -> None :
466
- for key , val in dictionary .items ():
467
- if isinstance (val , str ):
468
- for placeholder , pattern in attribute_regex_replaces .items ():
469
- dictionary [key ] = pattern .sub (placeholder , dictionary [key ])
470
- elif isinstance (val , Dict ):
471
- _walk_span_attributes_with_regex_replaces (val , attribute_regex_replaces )
472
- elif isinstance (val , List ):
473
- for v in val :
474
- if isinstance (v , Dict ):
475
- _walk_span_attributes_with_regex_replaces (v , attribute_regex_replaces )
476
-
477
-
478
- def _snapshot_trace_str (trace : Trace , removed : List [str ], attribute_regex_replaces : Dict [str , Pattern [str ]]) -> str :
486
+ def _snapshot_trace_str (trace : Trace , removed : List [str ]) -> str :
479
487
cmap = child_map (trace )
480
488
stack : List [Tuple [int , Span ]] = [(0 , root_span (trace ))]
481
489
s = "[\n "
@@ -509,9 +517,6 @@ def _snapshot_trace_str(trace: Trace, removed: List[str], attribute_regex_replac
509
517
else :
510
518
span .pop (key , None ) # type: ignore
511
519
512
- if attribute_regex_replaces : # only walk if we actually have something to replace
513
- _walk_span_attributes_with_regex_replaces (cast (Dict [str , Any ], span ), attribute_regex_replaces )
514
-
515
520
for i , child in enumerate (reversed (cmap [span ["span_id" ]])):
516
521
if i == 0 :
517
522
stack .insert (0 , (prefix + 3 , child ))
@@ -525,10 +530,10 @@ def _snapshot_trace_str(trace: Trace, removed: List[str], attribute_regex_replac
525
530
return s
526
531
527
532
528
- def _snapshot_json (traces : List [Trace ], removed : List [str ], attribute_regex_replaces : Dict [ str , Pattern [ str ]] ) -> str :
533
+ def _snapshot_json (traces : List [Trace ], removed : List [str ]) -> str :
529
534
s = "["
530
535
for t in traces :
531
- s += _snapshot_trace_str (t , removed , attribute_regex_replaces )
536
+ s += _snapshot_trace_str (t , removed )
532
537
if t != traces [- 1 ]:
533
538
s += ",\n "
534
539
s += "]\n "
@@ -540,4 +545,4 @@ def generate_snapshot(
540
545
removed : Optional [List [str ]] = None ,
541
546
attribute_regex_replaces : Optional [Dict [str , Pattern [str ]]] = None ,
542
547
) -> str :
543
- return _snapshot_json (_normalize_traces (received_traces ), removed or [], attribute_regex_replaces or {} )
548
+ return _snapshot_json (_normalize_traces (received_traces , attribute_regex_replaces or {}), removed or [] )
0 commit comments