Exemplo n.º 1
0
    def getresponse(self, _=False, **kwargs):
        '''Retrieve the response'''
        # Check to see if the cassette has a response for this request. If so,
        # then return it
        if self.cassette.can_play_response_for(self._vcr_request):
            log.info(
                "Playing response for {0} from cassette".format(
                    self._vcr_request
                )
            )
            response = self.cassette.play_response(self._vcr_request)
            return VCRHTTPResponse(response)
        else:
            if self.cassette.write_protected and self.cassette.filter_request(
                self._vcr_request
            ):
                raise CannotOverwriteExistingCassetteException(
                    "No match for the request (%r) was found. "
                    "Can't overwrite existing cassette (%r) in "
                    "your current record mode (%r)."
                    % (self._vcr_request, self.cassette._path,
                       self.cassette.record_mode)
                )

            # Otherwise, we should send the request, then get the response
            # and return it.

            log.info(
                "{0} not in cassette, sending to real server".format(
                    self._vcr_request
                )
            )
            # This is imported here to avoid circular import.
            # TODO(@IvanMalison): Refactor to allow normal import.
            from vcr.patch import force_reset
            with force_reset():
                self.real_connection.request(
                    method=self._vcr_request.method,
                    url=self._url(self._vcr_request.uri),
                    body=self._vcr_request.body,
                    headers=self._vcr_request.headers,
                )

            # get the response
            response = self.real_connection.getresponse()

            # put the response into the cassette
            response = {
                'status': {
                    'code': response.status,
                    'message': response.reason
                },
                'headers': serialize_headers(response),
                'body': {'string': response.read()},
            }
            self.cassette.append(self._vcr_request, response)
        return VCRHTTPResponse(response)
Exemplo n.º 2
0
    def getresponse(self, _=False, **kwargs):
        '''Retrieve the response'''
        # Check to see if the cassette has a response for this request. If so,
        # then return it
        if self.cassette.can_play_response_for(self._vcr_request):
            log.info(
                "Playing response for {0} from cassette".format(
                    self._vcr_request
                )
            )
            response = self.cassette.play_response(self._vcr_request)
            return VCRHTTPResponse(response)
        else:
            if self.cassette.write_protected and self.cassette.filter_request(
                self._vcr_request
            ):
                raise CannotOverwriteExistingCassetteException(
                    "No match for the request (%r) was found. "
                    "Can't overwrite existing cassette (%r) in "
                    "your current record mode (%r)."
                    % (self._vcr_request, self.cassette._path,
                       self.cassette.record_mode)
                )

            # Otherwise, we should send the request, then get the response
            # and return it.

            log.info(
                "{0} not in cassette, sending to real server".format(
                    self._vcr_request
                )
            )
            # This is imported here to avoid circular import.
            # TODO(@IvanMalison): Refactor to allow normal import.
            from vcr.patch import force_reset
            with force_reset():
                self.real_connection.request(
                    method=self._vcr_request.method,
                    url=self._url(self._vcr_request.uri),
                    body=self._vcr_request.body,
                    headers=self._vcr_request.headers,
                )

            # get the response
            response = self.real_connection.getresponse()

            # put the response into the cassette
            response = {
                'status': {
                    'code': response.status,
                    'message': response.reason
                },
                'headers': serialize_headers(response),
                'body': {'string': response.read()},
            }
            self.cassette.append(self._vcr_request, response)
        return VCRHTTPResponse(response)
Exemplo n.º 3
0
    def __init__(self, *args, **kwargs):
        if six.PY3:
            kwargs.pop('strict', None)  # apparently this is gone in py3

        # need to temporarily reset here because the real connection
        # inherits from the thing that we are mocking out.  Take out
        # the reset if you want to see what I mean :)
        from vcr.patch import force_reset
        with force_reset():
            self.real_connection = self._baseclass(*args, **kwargs)
Exemplo n.º 4
0
    def __init__(self, *args, **kwargs):
        if six.PY3:
            kwargs.pop('strict', None)  # apparently this is gone in py3

        # need to temporarily reset here because the real connection
        # inherits from the thing that we are mocking out.  Take out
        # the reset if you want to see what I mean :)
        from vcr.patch import force_reset
        with force_reset():
            self.real_connection = self._baseclass(*args, **kwargs)
Exemplo n.º 5
0
def test_nesting_context_managers_by_checking_references_of_http_connection():
    original = httplib.HTTPConnection
    with Cassette.use(path="test"):
        first_cassette_HTTPConnection = httplib.HTTPConnection
        with Cassette.use(path="test"):
            second_cassette_HTTPConnection = httplib.HTTPConnection
            assert second_cassette_HTTPConnection is not first_cassette_HTTPConnection
            with Cassette.use(path="test"):
                assert httplib.HTTPConnection is not second_cassette_HTTPConnection
                with force_reset():
                    assert httplib.HTTPConnection is original
            assert httplib.HTTPConnection is second_cassette_HTTPConnection
        assert httplib.HTTPConnection is first_cassette_HTTPConnection
Exemplo n.º 6
0
def test_nesting_context_managers_by_checking_references_of_http_connection():
    original = httplib.HTTPConnection
    with Cassette.use(path='test'):
        first_cassette_HTTPConnection = httplib.HTTPConnection
        with Cassette.use(path='test'):
            second_cassette_HTTPConnection = httplib.HTTPConnection
            assert second_cassette_HTTPConnection is not first_cassette_HTTPConnection
            with Cassette.use(path='test'):
                assert httplib.HTTPConnection is not second_cassette_HTTPConnection
                with force_reset():
                    assert httplib.HTTPConnection is original
            assert httplib.HTTPConnection is second_cassette_HTTPConnection
        assert httplib.HTTPConnection is first_cassette_HTTPConnection
Exemplo n.º 7
0
    def getresponse(self, _=False, **kwargs):
        """Retrieve the response"""
        # Check to see if the cassette has a response for this request. If so,
        # then return it
        if self.cassette.can_play_response_for(self._vcr_request):
            log.info("Playing response for {} from cassette".format(
                self._vcr_request))
            response = self.cassette.play_response(self._vcr_request)
            return VCRHTTPResponse(response)
        else:
            if self.cassette.write_protected and self.cassette.filter_request(
                    self._vcr_request):
                raise CannotOverwriteExistingCassetteException(
                    cassette=self.cassette, failed_request=self._vcr_request)

            # Otherwise, we should send the request, then get the response
            # and return it.

            log.info("{} not in cassette, sending to real server".format(
                self._vcr_request))
            # This is imported here to avoid circular import.
            # TODO(@IvanMalison): Refactor to allow normal import.
            from vcr.patch import force_reset

            with force_reset():
                self.real_connection.request(
                    method=self._vcr_request.method,
                    url=self._url(self._vcr_request.uri),
                    body=self._vcr_request.body,
                    headers=self._vcr_request.headers,
                )

            # get the response
            response = self.real_connection.getresponse()

            # put the response into the cassette
            response = {
                "status": {
                    "code": response.status,
                    "message": response.reason
                },
                "headers": serialize_headers(response),
                "body": {
                    "string": response.read()
                },
            }
            self.cassette.append(self._vcr_request, response)
        return VCRHTTPResponse(response)
def test_urllib3_force_reset():
    cpool = urllib3.connectionpool
    http_original = cpool.HTTPConnection
    https_original = cpool.HTTPSConnection
    verified_https_original = cpool.VerifiedHTTPSConnection
    with vcr.use_cassette(path="test"):
        first_cassette_HTTPConnection = cpool.HTTPConnection
        first_cassette_HTTPSConnection = cpool.HTTPSConnection
        first_cassette_VerifiedHTTPSConnection = cpool.VerifiedHTTPSConnection
        with force_reset():
            assert cpool.HTTPConnection is http_original
            assert cpool.HTTPSConnection is https_original
            assert cpool.VerifiedHTTPSConnection is verified_https_original
        assert cpool.HTTPConnection is first_cassette_HTTPConnection
        assert cpool.HTTPSConnection is first_cassette_HTTPSConnection
        assert cpool.VerifiedHTTPSConnection is first_cassette_VerifiedHTTPSConnection
Exemplo n.º 9
0
def test_urllib3_force_reset():
    cpool = urllib3.connectionpool
    http_original = cpool.HTTPConnection
    https_original = cpool.HTTPSConnection
    verified_https_original = cpool.VerifiedHTTPSConnection
    with vcr.use_cassette(path='test'):
        first_cassette_HTTPConnection = cpool.HTTPConnection
        first_cassette_HTTPSConnection = cpool.HTTPSConnection
        first_cassette_VerifiedHTTPSConnection = cpool.VerifiedHTTPSConnection
        with force_reset():
            assert cpool.HTTPConnection is http_original
            assert cpool.HTTPSConnection is https_original
            assert cpool.VerifiedHTTPSConnection is verified_https_original
        assert cpool.HTTPConnection is first_cassette_HTTPConnection
        assert cpool.HTTPSConnection is first_cassette_HTTPSConnection
        assert cpool.VerifiedHTTPSConnection is first_cassette_VerifiedHTTPSConnection
Exemplo n.º 10
0
    def __init__(self, *args, **kwargs):
        kwargs.pop("strict", None)

        # need to temporarily reset here because the real connection
        # inherits from the thing that we are mocking out.  Take out
        # the reset if you want to see what I mean :)
        from vcr.patch import force_reset

        with force_reset():
            self.real_connection = self._baseclass(*args, **kwargs)
            # Make sure to set those attributes as it seems `AWSHTTPConnection` does not
            # set them, making the connection to fail !
            self.real_connection.assert_hostname = kwargs.get("assert_hostname", False)
            self.real_connection.cert_reqs = kwargs.get("cert_reqs", "CERT_NONE")

        self._sock = None
Exemplo n.º 11
0
    def connect(self, *args, **kwargs):
        """
        httplib2 uses this.  Connects to the server I'm assuming.

        Only pass to the baseclass if we don't have a recorded response
        and are not write-protected.
        """

        if hasattr(self, '_vcr_request') and \
                self.cassette.can_play_response_for(self._vcr_request):
            # We already have a response we are going to play, don't
            # actually connect
            return

        if self.cassette.write_protected:
            # Cassette is write-protected, don't actually connect
            return

        from vcr.patch import force_reset
        with force_reset():
            return self.real_connection.connect(*args, **kwargs)
Exemplo n.º 12
0
    def connect(self, *args, **kwargs):
        """
        httplib2 uses this.  Connects to the server I'm assuming.

        Only pass to the baseclass if we don't have a recorded response
        and are not write-protected.
        """

        if hasattr(self, '_vcr_request') and \
                self.cassette.can_play_response_for(self._vcr_request):
            # We already have a response we are going to play, don't
            # actually connect
            return

        if self.cassette.write_protected:
            # Cassette is write-protected, don't actually connect
            return

        from vcr.patch import force_reset
        with force_reset():
            return self.real_connection.connect(*args, **kwargs)
Exemplo n.º 13
0
 def initialize(self, *args, **kwargs):
     from vcr.patch import force_reset
     with force_reset():
         self.real_client = self._baseclass(*args, **kwargs)
Exemplo n.º 14
0
 def test_one(self):
     with force_reset():
         self.no_decoration()
     with force_reset():
         self.test_two()
     assert httplib.HTTPConnection != _HTTPConnection
Exemplo n.º 15
0
 def test_one(self):
     with force_reset():
         self.no_decoration()
     with force_reset():
         self.test_two()
     assert httplib.HTTPConnection != _HTTPConnection
Exemplo n.º 16
0
 def __new__(cls, *args, **kwargs):
     from vcr.patch import force_reset
     with force_reset():
         return super(_VCRAsyncClient, cls).__new__(cls, *args, **kwargs)
Exemplo n.º 17
0
    def fetch_impl(self, request, callback):
        headers = dict(request.headers)
        if request.user_agent:
            headers.setdefault('User-Agent', request.user_agent)

        # TODO body_producer, header_callback, and streaming_callback are not
        # yet supported.

        unsupported_call = (
            request.body_producer is not None or
            request.header_callback is not None or
            request.streaming_callback is not None
        )
        if unsupported_call:
            response = HTTPResponse(
                request,
                599,
                error=Exception(
                    "The request (%s) uses AsyncHTTPClient functionality "
                    "that is not yet supported by VCR.py. Please make the "
                    "request outside a VCR.py context." % repr(request)
                ),
            )
            return callback(response)

        vcr_request = Request(
            request.method,
            request.url,
            request.body,
            headers,
        )

        if self.cassette.can_play_response_for(vcr_request):
            vcr_response = self.cassette.play_response(vcr_request)
            headers = httputil.HTTPHeaders()

            recorded_headers = vcr_response['headers']
            if isinstance(recorded_headers, dict):
                recorded_headers = recorded_headers.items()
            for k, vs in recorded_headers:
                for v in vs:
                    headers.add(k, v)
            response = HTTPResponse(
                request,
                code=vcr_response['status']['code'],
                reason=vcr_response['status']['message'],
                headers=headers,
                buffer=BytesIO(vcr_response['body']['string']),
            )
            return callback(response)
        else:
            if self.cassette.write_protected and self.cassette.filter_request(
                vcr_request
            ):
                response = HTTPResponse(
                    request,
                    599,
                    error=CannotOverwriteExistingCassetteException(
                        "No match for the request (%r) was found. "
                        "Can't overwrite existing cassette (%r) in "
                        "your current record mode (%r)."
                        % (vcr_request, self.cassette._path,
                           self.cassette.record_mode)
                    ),
                )
                return callback(response)

            def new_callback(response):
                headers = [
                    (k, response.headers.get_list(k))
                    for k in response.headers.keys()
                ]

                vcr_response = {
                    'status': {
                        'code': response.code,
                        'message': response.reason,
                    },
                    'headers': headers,
                    'body': {'string': response.body},
                }
                self.cassette.append(vcr_request, vcr_response)
                return callback(response)

            from vcr.patch import force_reset
            with force_reset():
                self.real_client.fetch_impl(request, new_callback)
Exemplo n.º 18
0
 def close(self):
     from vcr.patch import force_reset
     with force_reset():
         self.real_client.close()