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:
2
setup.py
2
setup.py
@@ -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},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'''
|
||||
|
||||
Reference in New Issue
Block a user