Skip to content

Commit b2bfc78

Browse files
committed
Generalized the log.assertion() function a bit to be able to provide more information on assertion failure.
- Legacy-Id: 15426
1 parent 993765d commit b2bfc78

2 files changed

Lines changed: 7 additions & 6 deletions

File tree

ietf/submit/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def validate_submission_rev(name, rev):
9191

9292
expected = 0
9393
existing_revs = [int(i.rev) for i in Document.objects.filter(name=name) if i.rev and i.rev.isdigit() ]
94-
log.assertion('[ i.rev for i in Document.objects.filter(name=name) if not (i.rev and i.rev.isdigit()) ] == []')
94+
log.assertion('[ i.rev for i in Document.objects.filter(name=name) if not (i.rev and i.rev.isdigit()) ]', [])
9595
if existing_revs:
9696
expected = max(existing_revs) + 1
9797

ietf/utils/log.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class Traceback():
8888
break
8989
return tb
9090

91-
def assertion(statement):
91+
def assertion(statement, state=True):
9292
"""
9393
This acts like an assertion. It uses the django logger in order to send
9494
the failed assertion and a backtrace as for an internal server error.
@@ -97,9 +97,10 @@ def assertion(statement):
9797
stack = inspect.stack()[1:]
9898
frame = stack[0][0]
9999
value = eval(statement, frame.f_globals, frame.f_locals)
100-
if not value:
101-
if settings.DEBUG is True or settings.SERVER_MODE == 'test':
102-
raise AssertionError("Assertion '%s' failed." % (statement,))
100+
if bool(value) != bool(state):
101+
settings.DEBUG = False
102+
if settings.DEBUG is True or settings.SERVER_MODE == 'test' :
103+
raise AssertionError("Assertion failed: '%s': %s != %s." % (statement, repr(value), state))
103104
else:
104105
# build a simulated traceback object
105106
tb = build_traceback(stack)
@@ -108,7 +109,7 @@ def assertion(statement):
108109
for key in [ 'request', 'status_code', ]:
109110
if key in frame.f_locals:
110111
extra[key] = frame.f_locals[key]
111-
logger.error("Assertion '%s' failed.", statement, exc_info=(AssertionError, statement, tb), extra=extra)
112+
logger.error("Assertion failed: '%s': %s != %s", statement, repr(value), state, exc_info=(AssertionError, statement, tb), extra=extra)
112113

113114
def unreachable(date="(unknown)"):
114115
"Raises an assertion or sends traceback to admins if executed."

0 commit comments

Comments
 (0)