mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 01:03:24 +00:00
change serializer API so it doesn't have to do file stuff
This commit is contained in:
@@ -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'):
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user