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.persisters': 'vcr/persisters',
},
install_requires=['PyYAML', 'mock', 'six', 'contextlib2'],
install_requires=['PyYAML', 'mock', 'six', 'contextlib2', 'wrapt'],
license='MIT',
tests_require=['pytest', 'mock', 'pytest-localserver'],
cmdclass={'test': PyTest},

View File

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