def convert_spans(spans, output_encoding, input_encoding=None): """Converts encoded spans to a different encoding. param spans: encoded input spans. type spans: byte array param output_encoding: desired output encoding. type output_encoding: Encoding param input_encoding: optional input encoding. If this is not specified, it'll try to understand the encoding automatically by inspecting the input spans. type input_encoding: Encoding :returns: encoded spans. :rtype: byte array """ if not isinstance(input_encoding, Encoding): input_encoding = detect_span_version_and_encoding(message=spans) if input_encoding == output_encoding: return spans decoder = get_decoder(input_encoding) encoder = get_encoder(output_encoding) decoded_spans = decoder.decode_spans(spans) output_spans = [] # Encode each indivicual span for span in decoded_spans: output_spans.append(encoder.encode_span(span)) # Outputs from encoder.encode_span() can be easily concatenated in a list return encoder.encode_queue(output_spans)
def test_get_decoder(): assert isinstance(get_decoder(Encoding.V1_THRIFT), _V1ThriftDecoder) with pytest.raises(NotImplementedError): get_decoder(Encoding.V1_JSON) with pytest.raises(NotImplementedError): get_decoder(Encoding.V2_JSON) with pytest.raises(ZipkinError): get_decoder(None)