mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 09:13:23 +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
|
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:
|
you would like. Create your own module or class instance with 2 methods:
|
||||||
|
|
||||||
* `def load(cassette_path)`
|
* `def deserialize(cassette_string)`
|
||||||
* `def dumps(requests, responses)`
|
* `def serialize(cassette_dict)`
|
||||||
|
|
||||||
Finally, register your class with VCR to use your
|
Finally, register your class with VCR to use your
|
||||||
new serializer.
|
new serializer.
|
||||||
@@ -125,11 +125,11 @@ import vcr
|
|||||||
|
|
||||||
BogoSerializer(object):
|
BogoSerializer(object):
|
||||||
"""
|
"""
|
||||||
Must implement load() and dumps() methods
|
Must implement serialize() and deserialize() methods
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
my_vcr = VCR()
|
my_vcr = vcr.VCR()
|
||||||
my_vcr.register_serializer('bogo', BogoSerializer())
|
my_vcr.register_serializer('bogo', BogoSerializer())
|
||||||
|
|
||||||
with my_vcr.use_cassette('test.bogo', serializer='bogo'):
|
with my_vcr.use_cassette('test.bogo', serializer='bogo'):
|
||||||
|
|||||||
@@ -53,7 +53,10 @@ class Cassette(object):
|
|||||||
return self.data[request]
|
return self.data[request]
|
||||||
|
|
||||||
def _save(self):
|
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):
|
def _load(self):
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
from .persisters.filesystem import FilesystemPersister
|
from .persisters.filesystem import FilesystemPersister
|
||||||
|
|
||||||
def load_cassette(cassette_path, serializer):
|
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):
|
def save_cassette(cassette_path, cassette_dict, serializer):
|
||||||
data = serializer.dumps(requests, responses)
|
data = serializer.serialize(cassette_dict)
|
||||||
FilesystemPersister.write(cassette_path, data)
|
FilesystemPersister.write(cassette_path, data)
|
||||||
|
|||||||
@@ -13,16 +13,15 @@ def _fix_response_unicode(d):
|
|||||||
d['body']['string'] = d['body']['string'].encode('utf-8')
|
d['body']['string'] = d['body']['string'].encode('utf-8')
|
||||||
return d
|
return d
|
||||||
|
|
||||||
def load(cassette_path):
|
def deserialize(cassette_string):
|
||||||
with open(cassette_path) as fh:
|
data = json.loads(cassette_string)
|
||||||
data = json.load(fh)
|
|
||||||
requests = [Request._from_dict(r['request']) for r in data]
|
requests = [Request._from_dict(r['request']) for r in data]
|
||||||
responses = [_fix_response_unicode(r['response']) for r in data]
|
responses = [_fix_response_unicode(r['response']) for r in data]
|
||||||
return requests, responses
|
return requests, responses
|
||||||
|
|
||||||
def dumps(requests, responses):
|
def serialize(cassette_dict):
|
||||||
data = ([{
|
data = ([{
|
||||||
'request': request._to_dict(),
|
'request': request._to_dict(),
|
||||||
'response': response,
|
'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)
|
return json.dumps(data, indent=4, default=_json_default)
|
||||||
|
|||||||
@@ -7,16 +7,16 @@ except ImportError:
|
|||||||
from yaml import Loader, Dumper
|
from yaml import Loader, Dumper
|
||||||
|
|
||||||
|
|
||||||
def load(cassette_path):
|
def deserialize(cassette_string):
|
||||||
data = yaml.load(open(cassette_path), Loader=Loader)
|
data = yaml.load(cassette_string, Loader=Loader)
|
||||||
requests = [r['request'] for r in data]
|
requests = [r['request'] for r in data]
|
||||||
responses = [r['response'] for r in data]
|
responses = [r['response'] for r in data]
|
||||||
return requests, responses
|
return requests, responses
|
||||||
|
|
||||||
|
|
||||||
def dumps(requests, responses):
|
def serialize(cassette_dict):
|
||||||
data = ([{
|
data = ([{
|
||||||
'request': request,
|
'request': request,
|
||||||
'response': response,
|
'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)
|
return yaml.dump(data, Dumper=Dumper)
|
||||||
|
|||||||
Reference in New Issue
Block a user