mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-10 17:45:35 +00:00
Updated migration script to use new yaml serialization
This commit is contained in:
@@ -14,10 +14,19 @@ The PATH can be path to the directory with cassettes or cassette itself
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
import shutil
|
import shutil
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
from .serializers import compat, yamlserializer
|
||||||
|
from . import request
|
||||||
|
|
||||||
|
# Use the libYAML versions if possible
|
||||||
|
try:
|
||||||
|
from yaml import CLoader as Loader
|
||||||
|
except ImportError:
|
||||||
|
from yaml import Loader
|
||||||
|
|
||||||
|
|
||||||
PARTS = [
|
PARTS = [
|
||||||
@@ -41,24 +50,48 @@ def migrate_json(in_fp, out_fp):
|
|||||||
json.dump(data, out_fp, indent=4)
|
json.dump(data, out_fp, indent=4)
|
||||||
|
|
||||||
|
|
||||||
def migrate_yml(in_fp, out_fp):
|
def _restore_frozenset():
|
||||||
migrated = False
|
"""
|
||||||
uri = dict.fromkeys(PARTS, None)
|
Restore __builtin__.frozenset for cassettes serialized in python2 but
|
||||||
for line in in_fp:
|
deserialized in python3 and builtins.frozenset for cassettes serialized
|
||||||
for part in uri:
|
in python3 and deserialized in python2
|
||||||
match = re.match('\s+{0}:\s(.*)'.format(part), line)
|
"""
|
||||||
if match:
|
|
||||||
uri[part] = match.group(1)
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
out_fp.write(line)
|
|
||||||
|
|
||||||
if None not in uri.values(): # if all uri parts are collected
|
if '__builtin__' not in sys.modules:
|
||||||
out_fp.write(" uri: {0}\n".format(build_uri(**uri)))
|
import builtins
|
||||||
uri = dict.fromkeys(PARTS, None) # reset dict
|
sys.modules['__builtin__'] = builtins
|
||||||
migrated = True
|
|
||||||
if not migrated:
|
if 'builtins' not in sys.modules:
|
||||||
raise RuntimeError("migration failed")
|
sys.modules['builtins'] = sys.modules['__builtin__']
|
||||||
|
|
||||||
|
|
||||||
|
def _old_deserialize(cassette_string):
|
||||||
|
_restore_frozenset()
|
||||||
|
data = yaml.load(cassette_string, Loader=Loader)
|
||||||
|
requests = [r['request'] for r in data]
|
||||||
|
responses = [r['response'] for r in data]
|
||||||
|
responses = [compat.convert_to_bytes(r['response']) for r in data]
|
||||||
|
return requests, responses
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_yml(in_fp, out_fp):
|
||||||
|
(requests, responses) = _old_deserialize(in_fp.read())
|
||||||
|
for req in requests:
|
||||||
|
if not isinstance(req, request.Request):
|
||||||
|
raise Exception("already migrated")
|
||||||
|
else:
|
||||||
|
req.uri = "{0}://{1}:{2}{3}".format(
|
||||||
|
req.__dict__['protocol'],
|
||||||
|
req.__dict__['host'],
|
||||||
|
req.__dict__['port'],
|
||||||
|
req.__dict__['path'],
|
||||||
|
)
|
||||||
|
|
||||||
|
data = yamlserializer.serialize({
|
||||||
|
"requests": requests,
|
||||||
|
"responses": responses,
|
||||||
|
})
|
||||||
|
out_fp.write(data)
|
||||||
|
|
||||||
|
|
||||||
def migrate(file_path, migration_fn):
|
def migrate(file_path, migration_fn):
|
||||||
|
|||||||
Reference in New Issue
Block a user