def is_span_id(self) -> bool: """Return whether the current value is a valid span id Empty strings are valid, so that it can be used for has:trace.span queries """ if not isinstance(self.raw_value, str): return False return is_span_id(self.raw_value) or self.raw_value == ""
def from_str(s: str) -> Span: parts = s.rsplit(":", 1) if len(parts) != 2: raise ValueError( "span must consist of of a span op and a valid 16 character hex delimited by a colon (:)" ) if not is_span_id(parts[1]): raise ValueError(INVALID_SPAN_ID.format("spanGroup")) return Span(op=parts[0], group=parts[1])
def validate_spanGroup(self, span_groups): for group in span_groups: if not is_span_id(group): raise serializers.ValidationError( INVALID_SPAN_ID.format("spanGroup")) return span_groups
def test_is_span_id(): assert is_span_id("202ab439bb9c4f31") assert is_span_id("202AB439BB9C4F31") assert is_span_id("202AB439bb9c4f31") assert is_span_id(b"202AB439bb9c4f31") assert not is_span_id("") assert not is_span_id("202a-b439-bb9c-4f31") assert not is_span_id("ZZZZZZZZZZZZZZZZ") assert not is_span_id("202ab439bb9c4f31AAAAAAAAAA") assert not is_span_id("202ab439") assert not is_span_id(4711) assert not is_span_id(False) assert not is_span_id(None)