Source code for natch.rules.pattern
from natch.abstract import Rule
from natch.rules.eq import Eq
[docs]class Pattern(Rule):
def __init__(self, *rules, **kwargs):
super(Pattern, self).__init__(*rules)
[docs] def set_args(self, args):
self.del_args()
for arg in args:
if not isinstance(arg, Rule):
arg = Eq(arg)
self.args.append(arg)
[docs] def does_match(self, *args, **kwargs):
len_args = len(args)
check_kwargs = bool(len(kwargs))
if check_kwargs:
len_args += 1
if len(self.args) != len_args:
return False
for rule_idx, arg in enumerate(args):
rule = self.args[rule_idx]
has_match = rule.does_match(arg)
if not has_match:
return False
if check_kwargs:
rule = self.args[len_args - 1]
has_match = rule.does_match(kwargs)
if not has_match:
return False
return True