def make_context(data, base=None, prev=None): """Create and return a filter list for some tuple rule. :param data: a list of items. These items are one of the following: - ``None``, which signals that `base` should be used. - ``True``, which signals that `prev` should be used. - an arbitrary object, which is sent to `filters.auto`. The result is "and"-ed with `base`, if `base` is defined. :param base: the corresponding base filter. :param prev: the corresponding filter created on the previous tuple. """ returned = [] for i, datum in enumerate(data): if datum is None: result = base[i] elif datum is True: result = prev[i] else: extension = F.auto(datum) try: b = base[i] except IndexError: b = None if b is None or b is F.allow_all: result = extension else: result = extension & b returned.append(result) return returned
def _make_window(row, anuvrtti, prev_rule): returned = [] base_args = anuvrtti.base_args prev_window = prev_rule.window if prev_rule else ([None], [None], [None]) for base, item, p_item in zip(base_args, row.window, prev_window): if item is Shesha: item = None if not hasattr(item, '__iter__'): item = [item] returned.append(make_context(item, base=[F.auto(base)], prev=p_item)) return returned