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