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
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: ')
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')
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
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
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"'
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
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
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))
def p_error(self, _): raise FilterException('filter', 'Failed to parse filter: ')
def p_error(self, _): raise FilterException("filter", "Failed to parse filter: ")