diff --git a/ietf/group/models.py b/ietf/group/models.py index c8353ad87..d81a9c2e7 100644 --- a/ietf/group/models.py +++ b/ietf/group/models.py @@ -14,7 +14,7 @@ from ietf.group.colors import fg_group_colors, bg_group_colors from ietf.name.models import GroupStateName, GroupTypeName, DocTagName, GroupMilestoneStateName, RoleName from ietf.person.models import Email, Person from ietf.utils.mail import formataddr -from ietf.utils.log import unreachable +from ietf.utils import log class GroupInfo(models.Model): @@ -93,13 +93,14 @@ class Group(GroupInfo): return user.is_authenticated and self.role_set.filter(name__in=role_names, person__user=user).exists() def is_decendant_of(self, sought_parent): - p = self.parent - seen = set() - while ((p != None) and (p != self) and (p not in seen)): - seen.add(p) - if p.acronym == sought_parent: + parent = self.parent + decendants = [ self, ] + while (parent != None) and (parent not in decendants): + decendants = [ parent ] + decendants + if parent.acronym == sought_parent: return True - p = p.parent + parent = parent.parent + log.assertion('parent not in decendants') return False def get_chair(self): @@ -286,7 +287,7 @@ class Role(models.Model): Is intended for display use, not in email context. Use self.formatted_email() for that. """ - unreachable() + log.unreachable() if self.person: return u"%s <%s>" % (self.person.plain_name(), self.email.address) else: diff --git a/ietf/group/tests_info.py b/ietf/group/tests_info.py index 2a1215f4d..3d8106a1f 100644 --- a/ietf/group/tests_info.py +++ b/ietf/group/tests_info.py @@ -1319,6 +1319,8 @@ class GroupParentLoopTests(TestCase): signal.alarm(1) # One second try: test2.is_decendant_of("ietf") + except AssertionError: + pass except Exception: raise finally: