Source code for natch.rules.partial

from natch.abstract import Rule
from natch.rules.eq import Eq


[docs]class Partial(Rule): def __init__(self, *args, **kwargs): super(Partial, self).__init__(*args, **kwargs)
[docs] def set_kwargs(self, kwargs): self.del_kwargs() for key, value in kwargs.items(): if not isinstance(value, Rule): value = Eq(value) self.kwargs[key] = value
def _does_match_object(self, obj): for key, rule in self.kwargs.items(): has_attr = hasattr(obj, key) if not has_attr: return False partial_value = getattr(obj, key, None) does_match = rule.does_match(partial_value) if not does_match: return False return True def _does_match_dict(self, d): for key, rule in self.kwargs.items(): if key not in d: return False partial_value = d.get(key) does_match = rule.does_match(partial_value) if not does_match: return False return True
[docs] def does_match(self, *args, **kwargs): value = args[0] if len(args) else kwargs check = self._does_match_object if isinstance(value, dict): check = self._does_match_dict does_match = check(value) return does_match