Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/jmespath/exceptions.py: 71%
68 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:51 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2023-12-08 06:51 +0000
1from jmespath.compat import with_str_method
4class JMESPathError(ValueError):
5 pass
8@with_str_method
9class ParseError(JMESPathError):
10 _ERROR_MESSAGE = 'Invalid jmespath expression'
11 def __init__(self, lex_position, token_value, token_type,
12 msg=_ERROR_MESSAGE):
13 super(ParseError, self).__init__(lex_position, token_value, token_type)
14 self.lex_position = lex_position
15 self.token_value = token_value
16 self.token_type = token_type.upper()
17 self.msg = msg
18 # Whatever catches the ParseError can fill in the full expression
19 self.expression = None
21 def __str__(self):
22 # self.lex_position +1 to account for the starting double quote char.
23 underline = ' ' * (self.lex_position + 1) + '^'
24 return (
25 '%s: Parse error at column %s, '
26 'token "%s" (%s), for expression:\n"%s"\n%s' % (
27 self.msg, self.lex_position, self.token_value, self.token_type,
28 self.expression, underline))
31@with_str_method
32class IncompleteExpressionError(ParseError):
33 def set_expression(self, expression):
34 self.expression = expression
35 self.lex_position = len(expression)
36 self.token_type = None
37 self.token_value = None
39 def __str__(self):
40 # self.lex_position +1 to account for the starting double quote char.
41 underline = ' ' * (self.lex_position + 1) + '^'
42 return (
43 'Invalid jmespath expression: Incomplete expression:\n'
44 '"%s"\n%s' % (self.expression, underline))
47@with_str_method
48class LexerError(ParseError):
49 def __init__(self, lexer_position, lexer_value, message, expression=None):
50 self.lexer_position = lexer_position
51 self.lexer_value = lexer_value
52 self.message = message
53 super(LexerError, self).__init__(lexer_position,
54 lexer_value,
55 message)
56 # Whatever catches LexerError can set this.
57 self.expression = expression
59 def __str__(self):
60 underline = ' ' * self.lexer_position + '^'
61 return 'Bad jmespath expression: %s:\n%s\n%s' % (
62 self.message, self.expression, underline)
65@with_str_method
66class ArityError(ParseError):
67 def __init__(self, expected, actual, name):
68 self.expected_arity = expected
69 self.actual_arity = actual
70 self.function_name = name
71 self.expression = None
73 def __str__(self):
74 return ("Expected %s %s for function %s(), "
75 "received %s" % (
76 self.expected_arity,
77 self._pluralize('argument', self.expected_arity),
78 self.function_name,
79 self.actual_arity))
81 def _pluralize(self, word, count):
82 if count == 1:
83 return word
84 else:
85 return word + 's'
88@with_str_method
89class VariadictArityError(ArityError):
90 def __str__(self):
91 return ("Expected at least %s %s for function %s(), "
92 "received %s" % (
93 self.expected_arity,
94 self._pluralize('argument', self.expected_arity),
95 self.function_name,
96 self.actual_arity))
99@with_str_method
100class JMESPathTypeError(JMESPathError):
101 def __init__(self, function_name, current_value, actual_type,
102 expected_types):
103 self.function_name = function_name
104 self.current_value = current_value
105 self.actual_type = actual_type
106 self.expected_types = expected_types
108 def __str__(self):
109 return ('In function %s(), invalid type for value: %s, '
110 'expected one of: %s, received: "%s"' % (
111 self.function_name, self.current_value,
112 self.expected_types, self.actual_type))
115class EmptyExpressionError(JMESPathError):
116 def __init__(self):
117 super(EmptyExpressionError, self).__init__(
118 "Invalid JMESPath expression: cannot be empty.")
121class UnknownFunctionError(JMESPathError):
122 pass