'''Stubs for httplib2'''

from httplib2 import HTTPConnectionWithTimeout, HTTPSConnectionWithTimeout
from ..stubs import VCRHTTPConnection, VCRHTTPSConnection


class VCRHTTPConnectionWithTimeout(VCRHTTPConnection,
                                   HTTPConnectionWithTimeout):
    _baseclass = HTTPConnectionWithTimeout

    def __init__(self, *args, **kwargs):
        '''I overrode the init because I need to clean kwargs before calling
        HTTPConnection.__init__.'''

        # Delete the keyword arguments that HTTPConnection would not recognize
        safe_keys = {'host', 'port', 'strict', 'timeout', 'source_address'}
        unknown_keys = set(kwargs.keys()) - safe_keys
        safe_kwargs = kwargs.copy()
        for kw in unknown_keys:
            del safe_kwargs[kw]

        self.proxy_info = kwargs.pop('proxy_info', None)
        VCRHTTPConnection.__init__(self, *args, **safe_kwargs)
        self.sock = self.real_connection.sock


class VCRHTTPSConnectionWithTimeout(VCRHTTPSConnection,
                                    HTTPSConnectionWithTimeout):
    _baseclass = HTTPSConnectionWithTimeout

    def __init__(self, *args, **kwargs):

        # Delete the keyword arguments that HTTPSConnection would not recognize
        safe_keys = {
            'host',
            'port',
            'key_file',
            'cert_file',
            'strict',
            'timeout',
            'source_address',
            'ca_certs',
        }
        unknown_keys = set(kwargs.keys()) - safe_keys
        safe_kwargs = kwargs.copy()
        for kw in unknown_keys:
            del safe_kwargs[kw]
        self.proxy_info = kwargs.pop('proxy_info', None)
        if 'ca_certs' not in kwargs or kwargs['ca_certs'] is None:
            try:
                import httplib2
                self.ca_certs = httplib2.CA_CERTS
            except ImportError:
                self.ca_certs = None
        else:
            self.ca_certs = kwargs['ca_certs']

        self.disable_ssl_certificate_validation = kwargs.pop(
            'disable_ssl_certificate_validation', None)
        VCRHTTPSConnection.__init__(self, *args, **safe_kwargs)
        self.sock = self.real_connection.sock
