Example #1
0
def query_basic_ruler(t, default_ruler):
    """Define basic rule consisting of matching full words on payee field.
    """
    default_field = 'payee'
    if not t[default_field]:
        return
    set_completer(sorted(complete_matches(t[default_field])))
    ruler = quick_input('\n%s match %s' % (default_field.title(),
            '[%s]' % default_ruler if default_ruler else ''))
    ruler = tags.rulify(ruler)
    set_completer()
    return ruler
Example #2
0
def query_cat(cached_cat):
    """Query category. If empty string entered then prompt to remove existing
       category, if any.
    """
    set_completer(sorted(tags.TAGS.keys()))
    cat = quick_input('\nCategory', vanish=True).strip()

    if not cat and cached_cat:
        erase = quick_input('\nRemove existing category', 'yN', True)
        if erase.upper() == 'N':
            cat = cached_cat
    set_completer()
    return cat.strip() or None
Example #3
0
def query_basic_ruler(t, default_ruler):
    """Define basic rule consisting of matching full words on payee field.
    """
    default_field = 'payee'
    if not t[default_field]:
        return
    set_completer(sorted(complete_matches(t[default_field])))
    ruler = quick_input('\n%s match %s' %
                        (default_field.title(),
                         '[%s]' % default_ruler if default_ruler else ''))
    ruler = tags.rulify(ruler)
    set_completer()
    return ruler
Example #4
0
def query_cat(cached_cat):
    """Query category. If empty string entered then prompt to remove existing
       category, if any.
    """
    set_completer(sorted(tags.TAGS.keys()))

    cat = quick_input('\nCategory', vanish=True).strip()

    if not cat and cached_cat:
        erase = quick_input('\nRemove existing category', 'yN', True)
        if erase.upper() == 'N':
            cat = cached_cat
    set_completer()
    return cat.strip() or None
Example #5
0
def query_tag(cached_tag):
    """Query category. If empty string entered then prompt to remove existing
       category, if any.
    """
    set_completer(sorted(tags.TAGS.keys()))

    tag = quick_input('Category').strip()
    print(CLEAR, end='')

    if not tag and cached_tag:
        erase = quick_input('Remove existing category', 'yN')
        if erase.upper() == 'N':
            tag = cached_tag
    set_completer()
    return tag
Example #6
0
def query_tag(cached_tag):
    """Query category. If empty string entered then prompt to remove existing
       category, if any.
    """
    set_completer(sorted(tags.TAGS.keys()))

    tag = quick_input('Category').strip()
    print(CLEAR, end='')

    if not tag and cached_tag:
        erase = quick_input('Remove existing category', 'yN')
        if erase.upper() == 'N':
            tag = cached_tag
    set_completer()
    return tag
Example #7
0
def query_match(payee):
    """Query a match for payee line as long as a correct one is not entered.
    """
    set_completer(sorted(complete_matches(payee)))
    while True:
        match = quick_input('Match')
        if match.isspace():  # Go back, discard entered category
            print(2 * CLEAR, end='')
            break
        if not tags.is_match(match, payee):
            print(CLEAR + '%s Match rejected: %s' %
                  (TERM.red('✖'), diff(payee, match, TERM, as_error=True)))
        else:
            print(CLEAR + "%s Match accepted: %s" %
                  (TERM.green('✔'), str(match) if match else
                   TERM.red('<none>')))
            break
    set_completer()
    return match
Example #8
0
def query_guru_ruler(t):
    """Define rules on a combination of fields. All rules must match
       corresponding fields for the ruler to be valid.
    """
    extras = sorted([k for (k, v) in t.items() if (v and not k.isdigit())])
    set_completer(extras)
    guru_ruler = {}
    extras = {}
    field = True
    while field:
        # Enter field
        while True:
            # Update fields match indicators
            print(TERM.move_y(0))
            print_transaction(t, short=False, extras=extras)
            field = quick_input("\nMatch on field", clear=True).lower()
            regex = "*" in field
            field = field.strip("*")
            if not field or field in set(config.FIELDS_FULL.values()) - {"category"}:
                break
        # Enter match
        while field:
            print(TERM.move_y(0))
            print_transaction(t, short=False, extras=extras)
            existing_match = guru_ruler.get(field, "")
            ruler = quick_input(
                "\n%s match (%s)%s"
                % (
                    field.title(),
                    "regex" if regex else "chars",
                    " [%s]" % existing_match if existing_match else "",
                ),
                clear=True,
            )
            if ruler.isspace():  # remove field rule from ruler
                extras.pop(field, None)
                guru_ruler.pop(field, None)
            elif ruler:
                guru_ruler[field] = r"%s" % ruler if regex else re.escape(ruler)
            match, extras = check_ruler(guru_ruler, t)
            if match:
                break
    return guru_ruler
Example #9
0
def query_match(payee):
    """Query a match for payee line as long as a correct one is not entered.
    """
    set_completer(sorted(complete_matches(payee)))
    while True:
        match = quick_input('Match')
        if match.isspace():  # Go back, discard entered category
            print(2 * CLEAR, end='')
            break
        if not tags.is_match(match, payee):
            print(CLEAR + '%s Match rejected: %s' %
                  (TERM.red('✖'), diff(payee, match, TERM, as_error=True)))
        else:
            print(
                CLEAR + "%s Match accepted: %s" %
                (TERM.green('✔'), str(match) if match else TERM.red('<none>')))
            break
    set_completer()
    return match
Example #10
0
def query_guru_ruler(t):
    """Define rules on a combination of fields. All rules must match
       corresponding fields for the ruler to be valid.
    """
    extras = sorted([k for (k, v) in t.iteritems() if (
                     v and not k.isdigit())])
    set_completer(extras)
    guru_ruler = {}
    extras = {}
    field = True
    while field:
        # Enter field
        while True:
            # Update fields match indicators
            print(TERM.move_y(0))
            print_transaction(t, short=False, extras=extras)
            field = quick_input('\nMatch on field', vanish=True).lower()
            regex = '*' in field
            field = field.strip('*')
            if not field or field in set(FIELDS_FULL.values()) - {'category'}:
                break
        # Enter match
        while field:
            print(TERM.move_y(0))
            print_transaction(t, short=False, extras=extras)
            existing_match = guru_ruler.get(field, '')
            ruler = quick_input('\n%s match (%s)%s' % (field.title(),
                    'regex' if regex else 'chars',
                    ' [%s]' % existing_match if existing_match else ''),
                vanish=True)
            if ruler.isspace():  # remove field rule from ruler
                extras.pop(field, None)
                guru_ruler.pop(field, None)
                # break
            elif ruler:
                guru_ruler[field] = r'%s' % ruler if regex else re.escape(
                    ruler)
            match, extras = check_ruler(guru_ruler, t)
            if match:
                break
    return guru_ruler