diff --git a/schema.py b/schema.py index 37b0fb1..436de82 100644 --- a/schema.py +++ b/schema.py @@ -401,6 +401,9 @@ def validate(self, data, **kwargs): continue skey.handler(nkey, data, e) else: + if isinstance(skey, Optional): + if hasattr(skey, "ignore_none") and skey.ignore_none and value is None: + continue try: nvalue = Schema(svalue, error=e, ignore_extra_keys=i).validate(value, **kwargs) except SchemaError as x: @@ -698,7 +701,8 @@ class Optional(Schema): _MARKER = object() - def __init__(self, *args, **kwargs): + def __init__(self, *args, ignore_none=False, **kwargs): + self.ignore_none = ignore_none default = kwargs.pop("default", self._MARKER) super(Optional, self).__init__(*args, **kwargs) if default is not self._MARKER: