mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-09 09:13:23 +00:00
Refactor again to try to give Cassette a cleaner interface
This commit is contained in:
44
vcr/persist.py
Normal file
44
vcr/persist.py
Normal file
@@ -0,0 +1,44 @@
|
||||
import tempfile
|
||||
import os
|
||||
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
|
||||
|
||||
def _serialize_cassette(requests, responses):
|
||||
'''Return a serializable version of the cassette'''
|
||||
return ([{
|
||||
'request': request,
|
||||
'response': response,
|
||||
} for request, response in zip(requests, responses)])
|
||||
|
||||
def _deserialize_cassette(data):
|
||||
requests = [r['request'] for r in data]
|
||||
responses = [r['response'] for r in data]
|
||||
return requests, responses
|
||||
|
||||
def _secure_write(path, contents):
|
||||
"""
|
||||
We'll overwrite the old version securely by writing out a temporary
|
||||
version and then moving it to replace the old version
|
||||
"""
|
||||
dirname, filename = os.path.split(path)
|
||||
fd, name = tempfile.mkstemp(dir=dirname, prefix=filename)
|
||||
with os.fdopen(fd, 'w') as fout:
|
||||
fout.write(contents)
|
||||
os.rename(name, path)
|
||||
|
||||
def load_cassette(cassette_path):
|
||||
data = yaml.load(open(cassette_path), Loader=Loader)
|
||||
return _deserialize_cassette(data)
|
||||
|
||||
def save_cassette(cassette_path, requests, responses):
|
||||
dirname, filename = os.path.split(cassette_path)
|
||||
if not os.path.exists(dirname):
|
||||
os.makedirs(dirname)
|
||||
data = _serialize_cassette(requests, responses)
|
||||
data = yaml.dump(data, Dumper=Dumper)
|
||||
_secure_write(cassette_path, data)
|
||||
Reference in New Issue
Block a user