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
This commit is contained in:
parent
f99d6fd38e
commit
e86bf0194b
|
@ -205,9 +205,12 @@ class RgRfcFactory(RgDraftFactory):
|
|||
obj.set_state(State.objects.get(type_id=state_type_id,slug=state_slug))
|
||||
if not obj.get_state('draft-stream-irtf'):
|
||||
obj.set_state(State.objects.get(type_id='draft-stream-irtf', slug='pub'))
|
||||
if not obj.get_state('draft-iesg'):
|
||||
obj.set_state(State.objects.get(type_id='draft-iesg',slug='idexists'))
|
||||
else:
|
||||
obj.set_state(State.objects.get(type_id='draft',slug='rfc'))
|
||||
obj.set_state(State.objects.get(type_id='draft-stream-irtf', slug='pub'))
|
||||
obj.set_state(State.objects.get(type_id='draft-iesg',slug='idexists'))
|
||||
|
||||
|
||||
class CharterFactory(BaseDocumentFactory):
|
||||
|
|
|
@ -76,7 +76,7 @@ from ietf.meeting.utils import group_sessions, get_upcoming_manageable_sessions,
|
|||
from ietf.review.models import ReviewAssignment
|
||||
from ietf.review.utils import can_request_review_of_doc, review_assignments_to_list_for_docs
|
||||
from ietf.review.utils import no_review_from_teams_on_doc
|
||||
from ietf.utils import markup_txt
|
||||
from ietf.utils import markup_txt, log
|
||||
from ietf.utils.response import permission_denied
|
||||
from ietf.utils.text import maybe_split
|
||||
|
||||
|
@ -174,6 +174,7 @@ def document_main(request, name, rev=None):
|
|||
split_content = not ( request.GET.get('include_text') or request.COOKIES.get("full_draft", settings.USER_PREFERENCE_DEFAULTS["full_draft"]) == "on" )
|
||||
|
||||
iesg_state = doc.get_state("draft-iesg")
|
||||
log.assertion('iesg_state', note="A document's 'draft-iesg' state should never be unset'. Failed for %s"%doc.name)
|
||||
iesg_state_slug = iesg_state.slug if iesg_state else None
|
||||
iesg_state_summary = doc.friendly_state()
|
||||
irsg_state = doc.get_state("draft-stream-irtf")
|
||||
|
|
|
@ -119,7 +119,7 @@ def build_traceback(stack):
|
|||
break
|
||||
return tb
|
||||
|
||||
def assertion(statement, state=True):
|
||||
def assertion(statement, state=True, note=None):
|
||||
"""
|
||||
This acts like an assertion. It uses the django logger in order to send
|
||||
the failed assertion and a backtrace as for an internal server error.
|
||||
|
@ -128,7 +128,10 @@ def assertion(statement, state=True):
|
|||
value = eval(statement, frame.f_globals, frame.f_locals)
|
||||
if bool(value) != bool(state):
|
||||
if (settings.DEBUG is True) or (settings.SERVER_MODE == 'test') :
|
||||
raise AssertionError("Assertion failed: '%s': %s != %s." % (statement, repr(value), state))
|
||||
if note:
|
||||
raise AssertionError("Assertion failed: '%s': %s != %s (%s)." % (statement, repr(value), state, note))
|
||||
else:
|
||||
raise AssertionError("Assertion failed: '%s': %s != %s." % (statement, repr(value), state))
|
||||
else:
|
||||
# build a simulated traceback object
|
||||
tb = build_traceback(inspect.stack()[1:])
|
||||
|
@ -137,7 +140,10 @@ def assertion(statement, state=True):
|
|||
for key in [ 'request', 'status_code', ]:
|
||||
if key in frame.f_locals:
|
||||
extra[key] = frame.f_locals[key]
|
||||
logger.error("Assertion failed: '%s': %s != %s", statement, repr(value), state, exc_info=(AssertionError, None, tb), extra=extra)
|
||||
if note:
|
||||
logger.error("Assertion failed: '%s': %s != %s (%s)", statement, repr(value), state, note, exc_info=(AssertionError, None, tb), extra=extra)
|
||||
else:
|
||||
logger.error("Assertion failed: '%s': %s != %s", statement, repr(value), state, exc_info=(AssertionError, None, tb), extra=extra)
|
||||
|
||||
def unreachable(date="(unknown)"):
|
||||
"Raises an assertion or sends traceback to admins if executed."
|
||||
|
|
Loading…
Reference in a new issue