1
0
mirror of https://github.com/kevin1024/vcrpy.git synced 2025-12-10 01:25:34 +00:00

Adding json serializer

This commit is contained in:
shu zOMG chen
2013-08-18 21:43:14 -10:00
committed by Kevin McCarthy
parent 3e247a2efb
commit 51f0f1bacd
10 changed files with 134 additions and 55 deletions

View File

View File

@@ -0,0 +1,31 @@
from vcr.request import Request
try:
import simplejson as json
except ImportError:
import json
def _json_default(obj):
if isinstance(obj, frozenset):
return dict(obj)
return obj
def _fix_response_unicode(d):
d['body']['string'] = d['body']['string'].encode('utf-8')
return d
class JSONSerializer(object):
@classmethod
def load(cls, cassette_path):
with open(cassette_path) as fh:
data = json.load(fh)
requests = [Request._from_dict(r['request']) for r in data]
responses = [_fix_response_unicode(r['response']) for r in data]
return requests, responses
@classmethod
def dumps(cls, requests, responses):
data = ([{
'request': request._to_dict(),
'response': response,
} for request, response in zip(requests, responses)])
return json.dumps(data, indent=4, default=_json_default)

View File

@@ -0,0 +1,24 @@
import yaml
# Use the libYAML versions if possible
try:
from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
from yaml import Loader, Dumper
class YamlSerializer(object):
@classmethod
def load(cls, cassette_path):
data = yaml.load(open(cassette_path), Loader=Loader)
requests = [r['request'] for r in data]
responses = [r['response'] for r in data]
return requests, responses
@classmethod
def dumps(cls, requests, responses):
data = ([{
'request': request,
'response': response,
} for request, response in zip(requests, responses)])
return yaml.dump(data, Dumper=Dumper)