Mercurial > p > roundup > code
comparison roundup/cgi/client.py @ 8241:741ea8a86012
fix: issue2551374. Error handling for filter expressions.
Errors in filter expressions are now reported. The UI needs some work
but even the current code is helpful when debugging filter
expressions.
mlink_expr:
defines/raises ExpressionError(error string template,
context=dict())
raises ExpressionError when it detects errors when popping arguments
off stack
raises ExpressionError when more than one element left on the stack
before returning
also ruff fix to group boolean expression with parens
back_anydbm.py, rdbms_common.py:
catches ExpressionError, augments context with class and
attribute being searched. raises the exception
for both link and multilink relations
client.py
catches ExpressionError returning a basic error page. The page is a
dead end. There are no links or anything for the user to move
forward. The user has to go back, possibly refresh the page (because
the submit button may be disalbled) re-enter the query and try
again.
This needs to be improved.
test_liveserver.py
test the error page generated by client.py
db_test_base
unit tests for filter with too few arguments, too many arguments,
check all repr and str formats.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Mon, 30 Dec 2024 20:22:55 -0500 |
| parents | 57325fea9982 |
| children | 6747051fef79 |
comparison
equal
deleted
inserted
replaced
| 8240:1189c742e4b3 | 8241:741ea8a86012 |
|---|---|
| 52 Reject, | 52 Reject, |
| 53 RejectRaw, | 53 RejectRaw, |
| 54 Unauthorised, | 54 Unauthorised, |
| 55 UsageError, | 55 UsageError, |
| 56 ) | 56 ) |
| 57 | |
| 58 from roundup.mlink_expr import ExpressionError | |
| 59 | |
| 57 from roundup.mailer import Mailer, MessageSendError | 60 from roundup.mailer import Mailer, MessageSendError |
| 58 | 61 |
| 59 logger = logging.getLogger('roundup') | 62 logger = logging.getLogger('roundup') |
| 60 | 63 |
| 61 if not random_.is_weak: | 64 if not random_.is_weak: |
| 2214 # let the template render figure stuff out | 2217 # let the template render figure stuff out |
| 2215 try: | 2218 try: |
| 2216 result = pt.render(self, None, None, **args) | 2219 result = pt.render(self, None, None, **args) |
| 2217 except IndexerQueryError as e: | 2220 except IndexerQueryError as e: |
| 2218 result = self.renderError(e.args[0]) | 2221 result = self.renderError(e.args[0]) |
| 2222 except ExpressionError as e: | |
| 2223 self.add_error_message(str(e)) | |
| 2224 result = self.renderError(str(e)) | |
| 2219 | 2225 |
| 2220 if 'Content-Type' not in self.additional_headers: | 2226 if 'Content-Type' not in self.additional_headers: |
| 2221 self.additional_headers['Content-Type'] = pt.content_type | 2227 self.additional_headers['Content-Type'] = pt.content_type |
| 2222 if self.env.get('CGI_SHOW_TIMING', ''): | 2228 if self.env.get('CGI_SHOW_TIMING', ''): |
| 2223 if self.env['CGI_SHOW_TIMING'].upper() == 'COMMENT': | 2229 if self.env['CGI_SHOW_TIMING'].upper() == 'COMMENT': |
