Exemple #1
0
    def p_simple_expr_key(self, p):
        """
        simple_expr : KEY STRING
        """
        key, value = p[1], p[2]

        if key == 'from':
            try:
                from_clause = QUERY_PARSER.parse('select * from ' +
                                                 value).from_clause
                c_from = query_compile.compile_from(from_clause, ENV_ENTRIES)
            except (query_compile.CompilationError,
                    query_parser.ParseError) as exception:
                raise FilterException('from', str(exception))
            p[0] = c_from.c_expr
            return

        match = Match(value)

        def _key(entry):
            if hasattr(entry, key):
                return match(str(getattr(entry, key) or ''))
            if key in entry.meta:
                return match(str(entry.meta.get(key)))
            return False

        p[0] = _key
Exemple #2
0
    def lex(self, data):
        """A generator yielding all tokens in a given line.

        Arguments:
            data: A string, the line to lex.

        Yields:
            All Tokens in the line.
        """
        ignore = ' \t'
        literals = '-,()'
        regex = self.regex.match

        pos = 0
        length = len(data)
        while pos < length:
            char = data[pos]
            if char in ignore:
                pos += 1
                continue
            match = regex(data, pos)
            if match:
                value = match.group()
                pos += len(value)
                token = match.lastgroup
                func = getattr(self, token)
                ret = func(token, value)
                if ret:
                    yield Token(*ret)
            elif char in literals:
                yield Token(char, char)
                pos += 1
            else:
                raise FilterException('filter',
                                      'Illegal character "{}" in filter: ')
Exemple #3
0
def test_filterexception():
    with pytest.raises(FilterException) as exception:
        raise FilterException('type', 'error')
    exception = exception.value
    assert str(exception) == 'error'
    assert str(exception) == exception.message

    with pytest.raises(FilterException):
        FILTER.set('from:invalid')
Exemple #4
0
    def set(self, value):
        if value == self.value:
            return False
        self.value = value
        if not self.value:
            return True

        self.begin_date, self.end_date = parse_date(self.value)
        if not self.begin_date:
            raise FilterException(
                'time', 'Failed to parse date: {}'.format(self.value))
        return True
Exemple #5
0
    def set(self, value):
        if value == self.value:
            return False
        self.value = value
        if not self.value:
            return True

        self.begin_date, self.end_date = parse_date(
            self.value, self.fava_options['fiscal-year-end'])
        if not self.begin_date:
            self.value = None
            raise FilterException('time',
                                  'Failed to parse date: {}'.format(value))
        return True
Exemple #6
0
def test_filterexception():
    with pytest.raises(FilterException) as exception:
        raise FilterException("type", "error")
    exception = exception.value
    assert str(exception) == "error"
    assert str(exception) == exception.message

    with pytest.raises(FilterException):
        FILTER.set('who:"fff')
        assert str(exception) == 'Illegal character """ in filter: who:"fff'

    with pytest.raises(FilterException):
        FILTER.set('any(who:"Martin"')
        assert str(exception) == 'Failed to parse filter: any(who:"Martin"'
Exemple #7
0
    def set(self, value: Optional[str]) -> bool:
        if value == self.value:
            return False
        self.value = value
        if not self.value:
            return True

        self.begin_date, self.end_date = parse_date(
            self.value, self.fava_options["fiscal-year-end"])
        if not self.begin_date:
            self.value = None
            raise FilterException("time",
                                  "Failed to parse date: {}".format(value))
        return True
Exemple #8
0
 def set(self, value):
     if value == self.value:
         return False
     self.value = value
     if not self.value:
         return True
     try:
         from_clause = self.parser.parse('select * from ' +
                                         value).from_clause
         self.c_from = query_compile.compile_from(from_clause,
                                                  self.env_entries)
     except (query_compile.CompilationError,
             query_parser.ParseError) as exception:
         raise FilterException('from', str(exception))
     return True
Exemple #9
0
    def lex(self, data: str) -> Generator[Token, None, None]:
        """A generator yielding all tokens in a given line.

        Arguments:
            data: A string, the line to lex.

        Yields:
            All Tokens in the line.
        """
        ignore = " \t"
        literals = "-,()"
        regex = self.regex.match

        pos = 0
        length = len(data)
        while pos < length:
            char = data[pos]
            if char in ignore:
                pos += 1
                continue
            match = regex(data, pos)
            if match:
                value = match.group()
                pos += len(value)
                token = match.lastgroup
                assert token is not None, "Internal Error"
                func = getattr(self, token)
                ret = func(token, value)
                if ret:
                    yield Token(*ret)
            elif char in literals:
                yield Token(char, char)
                pos += 1
            else:
                raise FilterException(
                    "filter",
                    'Illegal character "{}" in filter: '.format(char))
Exemple #10
0
 def p_error(self, _):
     raise FilterException('filter', 'Failed to parse filter: ')
Exemple #11
0
 def p_error(self, _):
     raise FilterException("filter", "Failed to parse filter: ")