def apply_on(self, text, aliases=None): initial_aliases = dict(aliases) if aliases is not None else dict() temp_match = SequenceMatch( self.content, BetweenMatch(), EndAnchorMatch(), ) initial_context = MatchContext( text=text, position=0, aliases=initial_aliases, matched_text=None, anchored=True, ) for _ in range(MAX_ITERATIONS): solution = next(temp_match.execute(initial_context), None) if solution is None: return ApplyRuleResult(text=text, aliases=initial_aliases) if solution.aliases != initial_context.aliases: initial_context = initial_context._replace(aliases=solution.aliases) continue return ApplyRuleResult(text=solution.matched_text, aliases=solution.aliases) raise AliasDependenciesTooComplexError()
def _test_match(self, text, match, expected_solutions, position=0, aliases=None, anchored=True): context = MatchContext( text=text, position=position, aliases=dict() if aliases is None else aliases, matched_text=None, anchored=anchored, ) expected_solutions = [context._replace(**diff) for diff in expected_solutions] solutions = list(match.execute(context)) self.assertEqual(solutions, expected_solutions)