Skip to content

Commit

Permalink
Merge b717821 into bded0ba
Browse files Browse the repository at this point in the history
  • Loading branch information
lafrech committed Jul 20, 2020
2 parents bded0ba + b717821 commit 9dd4d30
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 4 deletions.
1 change: 1 addition & 0 deletions AUTHORS.rst
Expand Up @@ -18,3 +18,4 @@ Contributors
* Élysson MR `@elyssonmr <https://github.com/elyssonmr>`_
* Mandar Upadhye `@mandarup <https://github.com/mandarup>`_
* Pavel Kulyov `@pkulev <https://github.com/pkulev>`_
* Felix Sonntag `@fsonntag <https://github.com/fsonntag>`_
14 changes: 14 additions & 0 deletions tests/test_fields.py
Expand Up @@ -88,6 +88,20 @@ class MyDoc(Document):
doc.required_validate()


def test_required_nested_allow_none(self):
@self.instance.register
class MyEmbedded(EmbeddedDocument):
field = fields.IntField()

@self.instance.register
class MyDoc(Document):
embedded_list = fields.ListField(fields.EmbeddedField(MyEmbedded), allow_none=True)
embedded_dict = fields.DictField(values=fields.EmbeddedField(MyEmbedded), allow_none=True)
embedded = fields.EmbeddedField(MyEmbedded, allow_none=True)

MyDoc(embedded_list=None, embedded_dict=None, embedded=None).required_validate()


class TestFields(BaseTest):

def test_basefields(self):
Expand Down
2 changes: 2 additions & 0 deletions umongo/data_proxy.py
Expand Up @@ -169,6 +169,8 @@ def required_validate(self):
value = self._data[field.attribute or name]
if field.required and value is ma.missing:
errors[name] = [_("Missing data for required field.")]
elif value is ma.missing or value is None:
continue
elif hasattr(field, '_required_validate'):
try:
field._required_validate(value)
Expand Down
7 changes: 3 additions & 4 deletions umongo/fields.py
Expand Up @@ -230,7 +230,7 @@ def as_marshmallow_field(self, mongo_world=False, **kwargs):
return ma.fields.Dict(self.key_field, inner_ma_schema, **field_kwargs)

def _required_validate(self, value):
if value is ma.missing or not hasattr(self.value_field, '_required_validate'):
if not hasattr(self.value_field, '_required_validate'):
return
required_validate = self.value_field._required_validate
errors = collections.defaultdict(dict)
Expand Down Expand Up @@ -291,7 +291,7 @@ def as_marshmallow_field(self, mongo_world=False, **kwargs):
return ma.fields.List(inner_ma_schema, **field_kwargs)

def _required_validate(self, value):
if value is ma.missing or not hasattr(self.inner, '_required_validate'):
if not hasattr(self.inner, '_required_validate'):
return
required_validate = self.inner._required_validate
errors = {}
Expand Down Expand Up @@ -561,5 +561,4 @@ def as_marshmallow_field(self, mongo_world=False, **kwargs):
return ma.fields.Nested(nested_ma_schema, **field_kwargs)

def _required_validate(self, value):
if value is not ma.missing:
value.required_validate()
value.required_validate()

0 comments on commit 9dd4d30

Please sign in to comment.