diff --git a/ddtrace/encoding.py b/ddtrace/encoding.py index 2cb00f59ae74..991adc2be5b2 100644 --- a/ddtrace/encoding.py +++ b/ddtrace/encoding.py @@ -1,10 +1,13 @@ import json import struct -import msgpack +try: + import msgpack +except ImportError: + pass from .internal.logger import get_logger -from .internal._encoding import TraceMsgPackEncoder +from .internal._encoding import TraceMsgpackEncoder log = get_logger(__name__) @@ -144,4 +147,4 @@ def join_encoded(objs): return struct.pack('>BI', 0xdd, count) + buf -Encoder = TraceMsgPackEncoder +Encoder = TraceMsgpackEncoder diff --git a/ddtrace/internal/_encoding.pyx b/ddtrace/internal/_encoding.pyx index 8f0817ec80b8..6078f5d4955f 100644 --- a/ddtrace/internal/_encoding.pyx +++ b/ddtrace/internal/_encoding.pyx @@ -328,9 +328,15 @@ cdef class Packer(object): return buff_to_buff(self.pk.buf, self.pk.length) -cdef class TraceMsgPackEncoder(object): +cdef class TraceMsgpackEncoder(object): content_type = "application/msgpack" + cpdef decode(self, data): + import msgpack + if msgpack.version[:2] < (0, 6): + return msgpack.unpackb(data) + return msgpack.unpackb(data, raw=True) + cpdef encode_trace(self, trace): return Packer().pack(trace) diff --git a/setup.py b/setup.py index 52158019bb3e..0a595f4a09ff 100644 --- a/setup.py +++ b/setup.py @@ -115,11 +115,9 @@ def get_exts_for(name): python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", # enum34 is an enum backport for earlier versions of python # funcsigs backport required for vendored debtcollector - # encoding using msgpack install_requires=[ "enum34; python_version<'3.4'", "funcsigs>=1.0.0; python_version=='2.7'", - "msgpack>=0.5.0", "protobuf>=3", "intervaltree", "tenacity>=5", diff --git a/tests/utils/tracer.py b/tests/utils/tracer.py index b7e6e2b01837..6b582b73aefa 100644 --- a/tests/utils/tracer.py +++ b/tests/utils/tracer.py @@ -1,4 +1,4 @@ -from ddtrace.encoding import JSONEncoder, MsgpackEncoder +from ddtrace.encoding import JSONEncoder, TraceMsgPackEncoder from ddtrace.internal.writer import AgentWriter from ddtrace.tracer import Tracer @@ -15,7 +15,7 @@ def __init__(self, *args, **kwargs): self.traces = [] self.services = {} self.json_encoder = JSONEncoder() - self.msgpack_encoder = MsgpackEncoder() + self.msgpack_encoder = TraceMsgpackEncoder() def write(self, spans=None, services=None): if spans: