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

change serializer API so it doesn't have to do file stuff

This commit is contained in:
Kevin McCarthy
2013-08-22 18:26:40 -10:00
parent 6005420409
commit 65254b4969
5 changed files with 20 additions and 17 deletions

View File

@@ -114,8 +114,8 @@ The Request object has the following properties
Don't like JSON or YAML? That's OK, VCR.py can serialize to any format
you would like. Create your own module or class instance with 2 methods:
* `def load(cassette_path)`
* `def dumps(requests, responses)`
* `def deserialize(cassette_string)`
* `def serialize(cassette_dict)`
Finally, register your class with VCR to use your
new serializer.
@@ -125,11 +125,11 @@ import vcr
BogoSerializer(object):
"""
Must implement load() and dumps() methods
Must implement serialize() and deserialize() methods
"""
pass
my_vcr = VCR()
my_vcr = vcr.VCR()
my_vcr.register_serializer('bogo', BogoSerializer())
with my_vcr.use_cassette('test.bogo', serializer='bogo'):

View File

@@ -53,7 +53,10 @@ class Cassette(object):
return self.data[request]
def _save(self):
save_cassette(self._path, self.requests, self.responses, serializer=self._serializer)
save_cassette(self._path, self._as_dict(), serializer=self._serializer)
def _as_dict(self):
return {"requests": self.requests, "responses": self.responses}
def _load(self):
try:

View File

@@ -1,8 +1,9 @@
from .persisters.filesystem import FilesystemPersister
def load_cassette(cassette_path, serializer):
return serializer.load(cassette_path)
with open(cassette_path) as f:
return serializer.deserialize(f.read())
def save_cassette(cassette_path, requests, responses, serializer):
data = serializer.dumps(requests, responses)
def save_cassette(cassette_path, cassette_dict, serializer):
data = serializer.serialize(cassette_dict)
FilesystemPersister.write(cassette_path, data)

View File

@@ -13,16 +13,15 @@ def _fix_response_unicode(d):
d['body']['string'] = d['body']['string'].encode('utf-8')
return d
def load(cassette_path):
with open(cassette_path) as fh:
data = json.load(fh)
def deserialize(cassette_string):
data = json.loads(cassette_string)
requests = [Request._from_dict(r['request']) for r in data]
responses = [_fix_response_unicode(r['response']) for r in data]
return requests, responses
def dumps(requests, responses):
def serialize(cassette_dict):
data = ([{
'request': request._to_dict(),
'response': response,
} for request, response in zip(requests, responses)])
} for request, response in zip(cassette_dict['requests'], cassette_dict['responses'])])
return json.dumps(data, indent=4, default=_json_default)

View File

@@ -7,16 +7,16 @@ except ImportError:
from yaml import Loader, Dumper
def load(cassette_path):
data = yaml.load(open(cassette_path), Loader=Loader)
def deserialize(cassette_string):
data = yaml.load(cassette_string, Loader=Loader)
requests = [r['request'] for r in data]
responses = [r['response'] for r in data]
return requests, responses
def dumps(requests, responses):
def serialize(cassette_dict):
data = ([{
'request': request,
'response': response,
} for request, response in zip(requests, responses)])
} for request, response in zip(cassette_dict['requests'], cassette_dict['responses'])])
return yaml.dump(data, Dumper=Dumper)