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':

Roundup Issue Tracker: http://roundup-tracker.org/