mirror of
https://github.com/kevin1024/vcrpy.git
synced 2025-12-10 17:45:35 +00:00
update serializers
This commit is contained in:
10
README.md
10
README.md
@@ -410,6 +410,16 @@ single cassette.
|
|||||||
*Note*: Back up your cassettes files before migration.
|
*Note*: Back up your cassettes files before migration.
|
||||||
The migration *should* only modify cassettes using the old 0.x format.
|
The migration *should* only modify cassettes using the old 0.x format.
|
||||||
|
|
||||||
|
## New serializer / deserializer API
|
||||||
|
|
||||||
|
If you made a custom serializer, you will need to update it to match the new
|
||||||
|
API in version 1.0.x
|
||||||
|
|
||||||
|
* Serializers now take dicts and return strings.
|
||||||
|
* Deserializers take strings and return dicts (instead of requests, responses
|
||||||
|
pair)
|
||||||
|
|
||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
* 1.0.0 (in development) - _BACKWARDS INCOMPATIBLE_: Please see the 'upgrade'
|
* 1.0.0 (in development) - _BACKWARDS INCOMPATIBLE_: Please see the 'upgrade'
|
||||||
section in the README. Add support for filtering sensitive data from
|
section in the README. Add support for filtering sensitive data from
|
||||||
|
|||||||
2
tests/fixtures/wild/domain_redirect.yaml
vendored
2
tests/fixtures/wild/domain_redirect.yaml
vendored
@@ -1,3 +1,5 @@
|
|||||||
|
version: 1
|
||||||
|
interactions:
|
||||||
- request:
|
- request:
|
||||||
body: null
|
body: null
|
||||||
headers:
|
headers:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class MockSerializer(object):
|
|||||||
def deserialize(self, cassette_string):
|
def deserialize(self, cassette_string):
|
||||||
self.serialize_count += 1
|
self.serialize_count += 1
|
||||||
self.cassette_string = cassette_string
|
self.cassette_string = cassette_string
|
||||||
return []
|
return {'interactions':[]}
|
||||||
|
|
||||||
def serialize(self, cassette_dict):
|
def serialize(self, cassette_dict):
|
||||||
self.deserialize_count += 1
|
self.deserialize_count += 1
|
||||||
|
|||||||
@@ -1,30 +1,12 @@
|
|||||||
import tempfile
|
|
||||||
|
|
||||||
from .persisters.filesystem import FilesystemPersister
|
from .persisters.filesystem import FilesystemPersister
|
||||||
from .serialize import serialize, deserialize
|
from .serialize import serialize, deserialize
|
||||||
|
|
||||||
|
|
||||||
def _check_for_old_cassette(cassette_content):
|
|
||||||
# crate tmp with cassete content and try to migrate it
|
|
||||||
with tempfile.NamedTemporaryFile(mode='w+') as f:
|
|
||||||
f.write(cassette_content)
|
|
||||||
f.seek(0)
|
|
||||||
if migration.try_migrate(f.name):
|
|
||||||
raise ValueError(
|
|
||||||
"Your cassette files were generated in an older version "
|
|
||||||
"of VCR. Delete your cassettes or run the migration script."
|
|
||||||
"See http://git.io/mHhLBg for more details."
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def load_cassette(cassette_path, serializer):
|
def load_cassette(cassette_path, serializer):
|
||||||
with open(cassette_path) as f:
|
with open(cassette_path) as f:
|
||||||
cassette_content = f.read()
|
cassette_content = f.read()
|
||||||
try:
|
cassette = deserialize(cassette_content, serializer)
|
||||||
cassette = deserialize(cassette_content, serializer)
|
|
||||||
except TypeError:
|
|
||||||
_check_for_old_cassette(cassette_content)
|
|
||||||
raise
|
|
||||||
return cassette
|
return cassette
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
from vcr.serializers import compat
|
from vcr.serializers import compat
|
||||||
from vcr.request import Request
|
from vcr.request import Request
|
||||||
|
|
||||||
|
#version 1 cassettes started with VCR 1.0.x. Before 1.0.x, there was no versioning.
|
||||||
|
CASSETTE_FORMAT_VERSION = 1
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Just a general note on the serialization philosophy here:
|
Just a general note on the serialization philosophy here:
|
||||||
I prefer cassettes to be human-readable if possible. Yaml serializes
|
I prefer cassettes to be human-readable if possible. Yaml serializes
|
||||||
@@ -16,18 +19,21 @@ Deserializing: string (yaml converts from utf-8) -> bytestring
|
|||||||
|
|
||||||
def deserialize(cassette_string, serializer):
|
def deserialize(cassette_string, serializer):
|
||||||
data = serializer.deserialize(cassette_string)
|
data = serializer.deserialize(cassette_string)
|
||||||
requests = [Request._from_dict(r['request']) for r in data]
|
requests = [Request._from_dict(r['request']) for r in data['interactions']]
|
||||||
responses = [r['response'] for r in data]
|
responses = [compat.convert_to_bytes(r['response']) for r in data['interactions']]
|
||||||
responses = [compat.convert_to_bytes(r['response']) for r in data]
|
|
||||||
return requests, responses
|
return requests, responses
|
||||||
|
|
||||||
|
|
||||||
def serialize(cassette_dict, serializer):
|
def serialize(cassette_dict, serializer):
|
||||||
data = ([{
|
interactions = ([{
|
||||||
'request': request._to_dict(),
|
'request': request._to_dict(),
|
||||||
'response': compat.convert_to_unicode(response),
|
'response': compat.convert_to_unicode(response),
|
||||||
} for request, response in zip(
|
} for request, response in zip(
|
||||||
cassette_dict['requests'],
|
cassette_dict['requests'],
|
||||||
cassette_dict['responses'],
|
cassette_dict['responses'],
|
||||||
)])
|
)])
|
||||||
|
data = {
|
||||||
|
'version': CASSETTE_FORMAT_VERSION,
|
||||||
|
'interactions': interactions,
|
||||||
|
}
|
||||||
return serializer.serialize(data)
|
return serializer.serialize(data)
|
||||||
|
|||||||
Reference in New Issue
Block a user