From 1478ce82fd595b493991083e4c2280c715f71082 Mon Sep 17 00:00:00 2001 From: Kevin McCarthy Date: Mon, 19 Aug 2013 19:12:32 -1000 Subject: [PATCH] make config options actually do stuff --- README.md | 4 ++-- vcr/cassette.py | 2 +- vcr/config.py | 30 +++++++++++++++++++++++++++++- vcr/persist.py | 19 +++---------------- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 5b743e9..a1c050b 100644 --- a/README.md +++ b/README.md @@ -116,12 +116,12 @@ import vcr MySerializer(object): """ - Must implement serialize() and deserialize() functions + Must implement serialize() and deserialize() classmethods """ pass my_vcr = VCR() -my_vcr.register_serializer(MySerializer) +my_vcr.register_serializer('my', MySerializer) ``` ##Installation diff --git a/vcr/cassette.py b/vcr/cassette.py index 03db125..3f587fb 100644 --- a/vcr/cassette.py +++ b/vcr/cassette.py @@ -21,7 +21,7 @@ class Cassette(object): new_cassette._load() return new_cassette - def __init__(self, path, serializer="yaml"): + def __init__(self, path, serializer): self._path = path self._serializer = serializer self.data = OrderedDict() diff --git a/vcr/config.py b/vcr/config.py index a708994..88ac41f 100644 --- a/vcr/config.py +++ b/vcr/config.py @@ -1,9 +1,37 @@ from .cassette import Cassette +from .serializers.yamlserializer import YamlSerializer +from .serializers.jsonserializer import JSONSerializer class VCR(object): def __init__(self, serializer='yaml', cassette_library_dir=None): self.serializer = serializer 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): - 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 + diff --git a/vcr/persist.py b/vcr/persist.py index e7f8c70..ed142ff 100644 --- a/vcr/persist.py +++ b/vcr/persist.py @@ -1,21 +1,8 @@ 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): - serializer_cls = _get_serializer_cls(serializer) - return serializer_cls.load(cassette_path) - + return serializer.load(cassette_path) + def save_cassette(cassette_path, requests, responses, serializer): - serializer_cls = _get_serializer_cls(serializer) - data = serializer_cls.dumps(requests, responses) + data = serializer.dumps(requests, responses) FilesystemPersister.write(cassette_path, data)