Skip to content

Instantly share code, notes, and snippets.

@tdevelioglu
Created December 1, 2015 10:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tdevelioglu/8e433355494ba022f48f to your computer and use it in GitHub Desktop.
Save tdevelioglu/8e433355494ba022f48f to your computer and use it in GitHub Desktop.
Unenveloping None values doesn't work as expected
#!/usr/bin/env python3
from marshmallow import Schema, fields, post_load, pre_load
class Resource(object):
def __init__(self, *args, **kwargs):
for k, v in kwargs.items():
setattr(self, k, v)
class PersonSchema(Schema):
id = fields.String()
type = fields.String(required=True)
address = fields.Nested('AddressSchema', allow_none=True)
@pre_load(pass_many=True)
def _unwrap_data(self, data, many):
return data['data']
@post_load
def _make_object(self, data):
return Resource(**data)
class AddressSchema(Schema):
id = fields.String(required=True)
type = fields.String(required=True)
street = fields.String(required=True)
city = fields.String(required=True)
@pre_load(pass_many=True)
def _unwrap_data(self, data, many):
return data['data']
@post_load
def _make_object(self, data):
return Resource(**data)
s_data = {'data': {'id': '5', 'type': 'employees', 'address': {'data': None}}}
schema = PersonSchema()
data, errors = schema.load(s_data)
print('data: {}'.format(data))
# {'id': '5', 'type': 'employees'}
print('errors: {}'.format(errors))
# {'address': {'id': ['Missing data for required field.'], 'city': ['Missing data for required field.'], 'type': ['Missing data for required field.'], 'street': ['Missing data for required field.']}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment