1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-09 17:15:35 +00:00

make config options actually do stuff

This commit is contained in:
Kevin McCarthy
2013-08-19 19:12:32 -10:00
parent 9073cf137e
commit 1478ce82fd
4 changed files with 35 additions and 20 deletions

View File

@@ -116,12 +116,12 @@ import vcr
MySerializer(object): MySerializer(object):
""" """
Must implement serialize() and deserialize() functions Must implement serialize() and deserialize() classmethods
""" """
pass pass
my_vcr = VCR() my_vcr = VCR()
my_vcr.register_serializer(MySerializer) my_vcr.register_serializer('my', MySerializer)
``` ```
##Installation ##Installation

View File

@@ -21,7 +21,7 @@ class Cassette(object):
new_cassette._load() new_cassette._load()
return new_cassette return new_cassette
def __init__(self, path, serializer="yaml"): def __init__(self, path, serializer):
self._path = path self._path = path
self._serializer = serializer self._serializer = serializer
self.data = OrderedDict() self.data = OrderedDict()

View File

@@ -1,9 +1,37 @@
from .cassette import Cassette from .cassette import Cassette
from .serializers.yamlserializer import YamlSerializer
from .serializers.jsonserializer import JSONSerializer
class VCR(object): class VCR(object):
def __init__(self, serializer='yaml', cassette_library_dir=None): def __init__(self, serializer='yaml', cassette_library_dir=None):
self.serializer = serializer self.serializer = serializer
self.cassette_library_dir = cassette_library_dir self.cassette_library_dir = cassette_library_dir
self.serializers = {
'yaml': YamlSerializer,
'json': JSONSerializer,
}
def _get_serializer(self, serializer_name):
try:
serializer = self.serializers[serializer_name]
except KeyError:
print "Serializer {0} doesn't exist or isn't registered".format(serializer_name)
raise KeyError
return serializer
def use_cassette(self, path, **kwargs): def use_cassette(self, path, **kwargs):
return Cassette.load(path, **kwargs) serializer_name = kwargs.get('serializer', self.serializer)
cassette_library_dir = kwargs.get('cassette_library_dir', self.cassette_library_dir)
if cassette_library_dir:
path = os.path.join(cassette_library_dir, path)
merged_config = {
"serializer": self._get_serializer(serializer_name),
}
return Cassette.load(path, **merged_config)
def register_serializer(self, name, serializer):
self.serializers[name] = serializer

View File

@@ -1,21 +1,8 @@
from .persisters.filesystem import FilesystemPersister from .persisters.filesystem import FilesystemPersister
from .serializers.yamlserializer import YamlSerializer
from .serializers.jsonserializer import JSONSerializer
def _get_serializer_cls(serializer):
serializer_cls = {
'yaml': YamlSerializer,
'json': JSONSerializer,
}.get(serializer)
if not serializer_cls:
raise ImportError('Invalid serializer %s' % serializer)
return serializer_cls
def load_cassette(cassette_path, serializer): def load_cassette(cassette_path, serializer):
serializer_cls = _get_serializer_cls(serializer) return serializer.load(cassette_path)
return serializer_cls.load(cassette_path)
def save_cassette(cassette_path, requests, responses, serializer): def save_cassette(cassette_path, requests, responses, serializer):
serializer_cls = _get_serializer_cls(serializer) data = serializer.dumps(requests, responses)
data = serializer_cls.dumps(requests, responses)
FilesystemPersister.write(cassette_path, data) FilesystemPersister.write(cassette_path, data)