コード例 #1
0
ファイル: expand.py プロジェクト: performance/vyakarana
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
コード例 #2
0
ファイル: expand.py プロジェクト: performance/vyakarana
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