1from ddtrace.internal.compat import httplib 2from ddtrace.internal.compat import parse 3 4 5class BasePathMixin(httplib.HTTPConnection, object): 6 """ 7 Mixin for HTTPConnection to insert a base path to requested URLs 8 """ 9 10 _base_path = "/" # type: str 11 12 def putrequest(self, method, url, skip_host=False, skip_accept_encoding=False): 13 # type: (str, str, bool, bool) -> None 14 url = parse.urljoin(self._base_path, url) 15 return super(BasePathMixin, self).putrequest( 16 method, url, skip_host=skip_host, skip_accept_encoding=skip_accept_encoding 17 ) 18 19 @classmethod 20 def with_base_path(cls, *args, **kwargs): 21 base_path = kwargs.pop("base_path", None) 22 obj = cls(*args, **kwargs) 23 obj._base_path = base_path 24 return obj 25 26 27class HTTPConnection(BasePathMixin, httplib.HTTPConnection): 28 """ 29 httplib.HTTPConnection wrapper to add a base path to requested URLs 30 """ 31 32 33class HTTPSConnection(BasePathMixin, httplib.HTTPSConnection): 34 """ 35 httplib.HTTPSConnection wrapper to add a base path to requested URLs 36 """ 37