Skip to content

Commit 5bb5ca7

Browse files
committed
Created a special function log.unreachable() to mark code unreachable, and changed a function name from log.affirm() to log.assertion().
- Legacy-Id: 12933
1 parent 089f23f commit 5bb5ca7

4 files changed

Lines changed: 41 additions & 22 deletions

File tree

ietf/doc/views_search.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ def retrieve_search_results(form, all_types=False):
186186
return docs
187187

188188
def search(request):
189+
from ietf.utils import log
190+
log.unreachable()
189191
if request.GET:
190192
# backwards compatibility
191193
get_params = request.GET.copy()

ietf/meeting/models.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def sessions_that_can_meet(self):
170170
return qs
171171

172172
def sessions_that_can_be_placed(self):
173-
log.affirm('not "Reachable Code"')
173+
log.unreachable()
174174
from django.db.models import Q
175175
donotplace_groups = Q(group__acronym="edu")
176176
donotplace_groups |= Q(group__acronym="tools")
@@ -544,7 +544,7 @@ def json_url(self):
544544
rooms.
545545
"""
546546
def create_concurrent_timeslots(self):
547-
log.affirm('not "Reachable Code"')
547+
log.unreachable()
548548
rooms = self.meeting.room_set.all()
549549
self.room = rooms[0]
550550
self.save()
@@ -653,7 +653,7 @@ def is_official(self):
653653

654654
@property
655655
def official_class(self):
656-
log.affirm('not "Reachable Code"')
656+
log.unreachable()
657657
if self.is_official:
658658
return "agenda_official"
659659
else:
@@ -698,13 +698,13 @@ def qs_assignments_with_sessions(self):
698698

699699
@property
700700
def group_mapping(self):
701-
log.affirm('not "Reachable Code"')
701+
log.unreachable()
702702
assignments,sessions,total,scheduled = self.group_session_mapping
703703
return assignments
704704

705705
@property
706706
def group_session_mapping(self):
707-
log.affirm('not "Reachable Code"')
707+
log.unreachable()
708708
assignments = dict()
709709
sessions = dict()
710710
total = 0
@@ -730,14 +730,14 @@ def sessions_that_can_meet(self):
730730

731731
# calculate badness of entire schedule
732732
def calc_badness(self):
733-
log.affirm('not "Reachable Code"')
733+
log.unreachable()
734734
# now calculate badness
735735
assignments = self.group_mapping
736736
return self.calc_badness1(assignments)
737737

738738
# calculate badness of entire schedule
739739
def calc_badness1(self, assignments):
740-
log.affirm('not "Reachable Code"')
740+
log.unreachable()
741741
badness = 0
742742
for sess in self.sessions_that_can_meet:
743743
badness += sess.badness(assignments)
@@ -789,7 +789,7 @@ def slot_to_the_right(self):
789789

790790
@property
791791
def area(self):
792-
log.affirm('not "Reachable Code"')
792+
log.unreachable()
793793
if not self.session or not self.session.group:
794794
return ""
795795
if self.session.group.type_id == "irtf":
@@ -802,7 +802,7 @@ def area(self):
802802

803803
@property
804804
def group_type_str(self):
805-
log.affirm('not "Reachable Code"')
805+
log.unreachable()
806806
if not self.session or not self.session.group:
807807
return ""
808808
if self.session.group and self.session.group.type_id == "wg":
@@ -815,7 +815,7 @@ def group_type_str(self):
815815

816816
@property
817817
def slottype(self):
818-
log.affirm('not "Reachable Code"')
818+
log.unreachable()
819819
if self.timeslot and self.timeslot.type:
820820
return self.timeslot.type.slug
821821
else:
@@ -919,20 +919,20 @@ def brief_display(self):
919919

920920
@property
921921
def person_conflicted(self):
922-
log.affirm('not "Reachable Code"')
922+
log.unreachable()
923923
if self.person is None:
924924
return "unknown person"
925925
return self.person.name
926926

927927
def status(self):
928-
log.affirm('not "Reachable Code"')
928+
log.unreachable()
929929
if self.active_status is not None:
930930
return self.active_status
931931
else:
932932
return True
933933

934934
def __lt__(self, y):
935-
log.affirm('not "Reachable Code"')
935+
log.unreachable()
936936
#import sys
937937
#sys.stdout.write("me: %s y: %s\n" % (self.name.slug, y.name.slug))
938938
if self.name.slug == 'conflict' and y.name.slug == 'conflic2':
@@ -944,7 +944,7 @@ def __lt__(self, y):
944944
return False
945945

946946
def constraint_cost(self):
947-
log.affirm('not "Reachable Code"')
947+
log.unreachable()
948948
return self.name.penalty;
949949

950950
def json_url(self):
@@ -1162,7 +1162,7 @@ def official_timeslotassignment(self):
11621162
return self.timeslotassignment_for_agenda(self.meeting.agenda)
11631163

11641164
def unique_constraints(self):
1165-
log.affirm('not "Reachable Code"')
1165+
log.unreachable()
11661166
global constraint_cache_uses, constraint_cache_initials
11671167
constraint_cache_uses += 1
11681168
# this cache keeps the automatic placer from visiting the database continuously
@@ -1267,13 +1267,13 @@ def agenda_file(self):
12671267

12681268
return self._agenda_file
12691269
def badness_test(self, num):
1270-
log.affirm('not "Reachable Code"')
1270+
log.unreachable()
12711271
from settings import BADNESS_CALC_LOG # pylint: disable=import-error
12721272
#sys.stdout.write("num: %u / BAD: %u\n" % (num, BADNESS_CALC_LOG))
12731273
return BADNESS_CALC_LOG >= num
12741274

12751275
def badness_log(self, num, msg):
1276-
log.affirm('not "Reachable Code"')
1276+
log.unreachable()
12771277
if self.badness_test(num):
12781278
sys.stdout.write(msg)
12791279

@@ -1290,7 +1290,7 @@ def badness_log(self, num, msg):
12901290
# not being scheduled is worth 10,000,000 points
12911291
#
12921292
def badness(self, assignments):
1293-
log.affirm('not "Reachable Code"')
1293+
log.unreachable()
12941294
badness = 0
12951295

12961296
if not (self.group in assignments):
@@ -1381,7 +1381,7 @@ def badness(self, assignments):
13811381
return badness
13821382

13831383
def setup_conflicts(self):
1384-
log.affirm('not "Reachable Code"')
1384+
log.unreachable()
13851385
conflicts = self.unique_constraints()
13861386

13871387
self.session_conflicts = []
@@ -1420,7 +1420,7 @@ def setup_conflicts(self):
14201420
# not being scheduled is worth 10,000,000 points
14211421
#
14221422
def badness_fast(self, timeslot, scheduleslot, session_pk_list):
1423-
log.affirm('not "Reachable Code"')
1423+
log.unreachable()
14241424
from settings import BADNESS_UNPLACED, BADNESS_TOOSMALL_50, BADNESS_TOOSMALL_100, BADNESS_TOOBIG, BADNESS_MUCHTOOBIG # pylint: disable=import-error
14251425

14261426
badness = 0

ietf/submit/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,7 @@ def update_authors(draft, submission):
444444

445445
a.order = order
446446
a.save()
447-
log.affirm('a.author_id != "none"')
447+
log.assertion('a.author_id != "none"')
448448

449449
authors.append(email)
450450

ietf/utils/log.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ def log(msg):
5353

5454
logger = logging.getLogger('django')
5555

56-
def affirm(statement):
56+
def assertion(statement):
5757
"""
5858
This acts like an assertion. It uses the django logger in order to send
5959
the failed assertion and a backtrace as for an internal server error.
@@ -74,3 +74,20 @@ class Traceback():
7474
tb.tb_lineno = frame.f_lineno
7575
tb.tb_next = None
7676
logger.error("Assertion '%s' failed.", statement, exc_info=(AssertionError, statement, tb), extra=frame.f_locals)
77+
78+
def unreachable():
79+
"Raises an assertion or sends traceback to admins if executed."
80+
class Traceback():
81+
pass
82+
frame = inspect.stack()[1][0]
83+
if settings.DEBUG is True:
84+
raise AssertionError("Arrived at code in %s() which was marked unreachable." % frame.f_code.co_name)
85+
else:
86+
# build a simulated traceback object
87+
tb = Traceback()
88+
tb.tb_frame = frame
89+
tb.tb_lasti = None
90+
tb.tb_lineno = frame.f_lineno
91+
tb.tb_next = None
92+
logger.error("Arrived at code in %s() which was marked unreachable.", frame.f_code.co_name, exc_info=(AssertionError, frame.f_code.co_name, tb), extra=frame.f_locals)
93+

0 commit comments

Comments
 (0)