Skip to content

Commit e86bf01

Browse files
committed
Added an assertion to catch an unexpected document state (no IESG state set). Updated the log.assertion() function to accept a "note" argument, for more informative assertion messages.
- Legacy-Id: 18479
1 parent f99d6fd commit e86bf01

3 files changed

Lines changed: 14 additions & 4 deletions

File tree

ietf/doc/factories.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,12 @@ def states(obj, create, extracted, **kwargs):
205205
obj.set_state(State.objects.get(type_id=state_type_id,slug=state_slug))
206206
if not obj.get_state('draft-stream-irtf'):
207207
obj.set_state(State.objects.get(type_id='draft-stream-irtf', slug='pub'))
208+
if not obj.get_state('draft-iesg'):
209+
obj.set_state(State.objects.get(type_id='draft-iesg',slug='idexists'))
208210
else:
209211
obj.set_state(State.objects.get(type_id='draft',slug='rfc'))
210212
obj.set_state(State.objects.get(type_id='draft-stream-irtf', slug='pub'))
213+
obj.set_state(State.objects.get(type_id='draft-iesg',slug='idexists'))
211214

212215

213216
class CharterFactory(BaseDocumentFactory):

ietf/doc/views_doc.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
from ietf.review.models import ReviewAssignment
7777
from ietf.review.utils import can_request_review_of_doc, review_assignments_to_list_for_docs
7878
from ietf.review.utils import no_review_from_teams_on_doc
79-
from ietf.utils import markup_txt
79+
from ietf.utils import markup_txt, log
8080
from ietf.utils.response import permission_denied
8181
from ietf.utils.text import maybe_split
8282

@@ -174,6 +174,7 @@ def document_main(request, name, rev=None):
174174
split_content = not ( request.GET.get('include_text') or request.COOKIES.get("full_draft", settings.USER_PREFERENCE_DEFAULTS["full_draft"]) == "on" )
175175

176176
iesg_state = doc.get_state("draft-iesg")
177+
log.assertion('iesg_state', note="A document's 'draft-iesg' state should never be unset'. Failed for %s"%doc.name)
177178
iesg_state_slug = iesg_state.slug if iesg_state else None
178179
iesg_state_summary = doc.friendly_state()
179180
irsg_state = doc.get_state("draft-stream-irtf")

ietf/utils/log.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class Traceback():
119119
break
120120
return tb
121121

122-
def assertion(statement, state=True):
122+
def assertion(statement, state=True, note=None):
123123
"""
124124
This acts like an assertion. It uses the django logger in order to send
125125
the failed assertion and a backtrace as for an internal server error.
@@ -128,7 +128,10 @@ def assertion(statement, state=True):
128128
value = eval(statement, frame.f_globals, frame.f_locals)
129129
if bool(value) != bool(state):
130130
if (settings.DEBUG is True) or (settings.SERVER_MODE == 'test') :
131-
raise AssertionError("Assertion failed: '%s': %s != %s." % (statement, repr(value), state))
131+
if note:
132+
raise AssertionError("Assertion failed: '%s': %s != %s (%s)." % (statement, repr(value), state, note))
133+
else:
134+
raise AssertionError("Assertion failed: '%s': %s != %s." % (statement, repr(value), state))
132135
else:
133136
# build a simulated traceback object
134137
tb = build_traceback(inspect.stack()[1:])
@@ -137,7 +140,10 @@ def assertion(statement, state=True):
137140
for key in [ 'request', 'status_code', ]:
138141
if key in frame.f_locals:
139142
extra[key] = frame.f_locals[key]
140-
logger.error("Assertion failed: '%s': %s != %s", statement, repr(value), state, exc_info=(AssertionError, None, tb), extra=extra)
143+
if note:
144+
logger.error("Assertion failed: '%s': %s != %s (%s)", statement, repr(value), state, note, exc_info=(AssertionError, None, tb), extra=extra)
145+
else:
146+
logger.error("Assertion failed: '%s': %s != %s", statement, repr(value), state, exc_info=(AssertionError, None, tb), extra=extra)
141147

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

0 commit comments

Comments
 (0)