1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-08 16:53:23 +00:00

Fix use_cassette decorator in python 2 by using wrapt.decorator. Add wrapt as dependency.

This commit is contained in:
Ivan Malison
2014-09-22 16:40:09 -07:00
parent 3dea853482
commit b046ee4bb1
3 changed files with 28 additions and 3 deletions

View File

@@ -41,7 +41,7 @@ setup(
'vcr.compat': 'vcr/compat', 'vcr.compat': 'vcr/compat',
'vcr.persisters': 'vcr/persisters', 'vcr.persisters': 'vcr/persisters',
}, },
install_requires=['PyYAML', 'mock', 'six', 'contextlib2'], install_requires=['PyYAML', 'mock', 'six', 'contextlib2', 'wrapt'],
license='MIT', license='MIT',
tests_require=['pytest', 'mock', 'pytest-localserver'], tests_require=['pytest', 'mock', 'pytest-localserver'],
cmdclass={'test': PyTest}, cmdclass={'test': PyTest},

View File

@@ -1,6 +1,7 @@
import mock import mock
import pytest
from vcr import VCR from vcr import VCR, use_cassette
def test_vcr_use_cassette(): def test_vcr_use_cassette():
@@ -26,3 +27,21 @@ def test_vcr_use_cassette():
with test_vcr.use_cassette('test', filter_headers=new_filter_headers) as cassette: with test_vcr.use_cassette('test', filter_headers=new_filter_headers) as cassette:
assert cassette._filter_headers == new_filter_headers assert cassette._filter_headers == new_filter_headers
@pytest.fixture
def random_fixture():
return 1
@use_cassette('test')
def test_fixtures_with_use_cassette(random_fixture):
# Applying a decorator to a test function that requests features can cause
# problems if the decorator does not preserve the signature of the original
# test function.
# This test ensures that use_cassette preserves the signature of the original
# test function, and thus that use_cassette is compatible with py.test
# fixtures. It is admittedly a bit strange because the test would never even
# run if the relevant feature were broken.
pass

View File

@@ -2,6 +2,7 @@
import logging import logging
import contextlib2 import contextlib2
import wrapt
try: try:
from collections import Counter from collections import Counter
except ImportError: except ImportError:
@@ -19,7 +20,7 @@ from .errors import UnhandledHTTPRequestError
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
class CassetteContextDecorator(contextlib2.ContextDecorator): class CassetteContextDecorator(object):
"""Context manager/decorator that handles installing the cassette and """Context manager/decorator that handles installing the cassette and
removing cassettes. removing cassettes.
@@ -58,6 +59,11 @@ class CassetteContextDecorator(contextlib2.ContextDecorator):
next(self.__finish, None) next(self.__finish, None)
self.__finish = None self.__finish = None
@wrapt.decorator
def __call__(self, function, instance, args, kwargs):
with self:
return function(*args, **kwargs)
class Cassette(object): class Cassette(object):
'''A container for recorded requests and responses''' '''A container for recorded requests and responses'''