From 76594a4c4dbcb56b33375e456fa13e6c02608b3c Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Fri, 20 Jul 2012 11:36:01 +0000 Subject: [PATCH] Added support for IRTF liaisons. - Legacy-Id: 4625 --- ietf/liaisons/accountsREDESIGN.py | 11 +++++++ ietf/liaisons/utils.py | 47 +++++++++++++++++++++++++++- ietf/liaisons/utilsREDESIGN.py | 52 ++++++++++++++++++++++++++++--- 3 files changed, 104 insertions(+), 6 deletions(-) diff --git a/ietf/liaisons/accountsREDESIGN.py b/ietf/liaisons/accountsREDESIGN.py index f4fde54df..fc3fffa07 100644 --- a/ietf/liaisons/accountsREDESIGN.py +++ b/ietf/liaisons/accountsREDESIGN.py @@ -23,6 +23,13 @@ def get_iab_chair(): return None +def get_irtf_chair(): + try: + return proxy_personify_role(Role.objects.get(name="chair", group__acronym="irtf")) + except Role.DoesNotExist: + return None + + def get_iab_executive_director(): try: return proxy_personify_role(Role.objects.get(name="execdir", group__acronym="iab")) @@ -64,6 +71,10 @@ def is_iab_executive_director(person): return bool(Role.objects.filter(person=person, name="execdir", group__acronym="iab")) +def is_irtfchair(person): + return bool(Role.objects.filter(person=person, name="chair", group__acronym="irtf")) + + def can_add_outgoing_liaison(user): person = get_person_for_user(user) if not person: diff --git a/ietf/liaisons/utils.py b/ietf/liaisons/utils.py index acbbb4ae8..0d8b48c59 100644 --- a/ietf/liaisons/utils.py +++ b/ietf/liaisons/utils.py @@ -2,7 +2,7 @@ from django.conf import settings from ietf.idtracker.models import Area, IETFWG from ietf.liaisons.models import SDOs, LiaisonManagers -from ietf.liaisons.accounts import (is_ietfchair, is_iabchair, is_iab_executive_director, +from ietf.liaisons.accounts import (is_ietfchair, is_iabchair, is_iab_executive_director, is_irtfchair, get_ietf_chair, get_iab_chair, get_iab_executive_director, is_secretariat) @@ -11,6 +11,7 @@ IESG = {'name': u'The IESG', 'address': u'iesg@ietf.org'} IAB = {'name': u'The IAB', 'address': u'iab@iab.org'} IABCHAIR = {'name': u'The IAB Chair', 'address': u'iab-chair@iab.org'} IABEXECUTIVEDIRECTOR = {'name': u'The IAB Executive Director', 'address': u'execd@iab.org'} +IRTFCHAIR = {'name': u'The IRTF Chair', 'address': u'irtf-chair@irtf.org'} def get_all_sdo_managers(): @@ -88,6 +89,29 @@ class IETFEntity(Entity): return result +class IRTFEntity(Entity): + + poc = FakePerson(**IRTFCHAIR) + + def get_from_cc(self, person): + result = [] + if not is_irtfchair(person): + result.append(self.poc) + return result + + def needs_approval(self, person=None): + if is_irtfchair(person): + return False + return True + + def can_approve(self): + return [self.poc] + + def full_user_list(self): + result.append(get_irtf_chair()) + return result + + class IABEntity(Entity): chair = FakePerson(**IABCHAIR) director = FakePerson(**IABEXECUTIVEDIRECTOR) @@ -270,6 +294,26 @@ class IABEntityManager(EntityManager): return [] +class IRTFEntityManager(EntityManager): + + def __init__(self, *args, **kwargs): + super(IRTFEntityManager, self).__init__(*args, **kwargs) + self.entity = IRTFEntity(name=self.name) + + def get_entity(self, pk=None): + return self.entity + + def can_send_on_behalf(self, person): + if is_irtfchair(person): + return self.get_managed_list() + return [] + + def can_approve_list(self, person): + if is_irtfchair(person): + return self.get_managed_list() + return [] + + class AreaEntityManager(EntityManager): def __init__(self, pk=None, name=None, queryset=None): @@ -358,6 +402,7 @@ class IETFHierarchyManager(object): self.managers = {'ietf': IETFEntityManager(pk='ietf', name=u'The IETF'), 'iesg': IETFEntityManager(pk='iesg', name=u'The IESG'), 'iab': IABEntityManager(pk='iab', name=u'The IAB'), + 'irtf': IRTFEntityManager(pk='irtf', name=u'The IAB'), 'area': AreaEntityManager(pk='area', name=u'IETF Areas'), 'wg': WGEntityManager(pk='wg', name=u'IETF Working Groups'), 'sdo': SDOEntityManager(pk='sdo', name=u'Standards Development Organizations'), diff --git a/ietf/liaisons/utilsREDESIGN.py b/ietf/liaisons/utilsREDESIGN.py index 644f59b37..53668003c 100644 --- a/ietf/liaisons/utilsREDESIGN.py +++ b/ietf/liaisons/utilsREDESIGN.py @@ -11,6 +11,8 @@ IESG = {'name': u'The IESG', 'address': u'iesg@ietf.org'} IAB = {'name': u'The IAB', 'address': u'iab@iab.org'} IABCHAIR = {'name': u'The IAB Chair', 'address': u'iab-chair@iab.org'} IABEXECUTIVEDIRECTOR = {'name': u'The IAB Executive Director', 'address': u'execd@iab.org'} +IRTFCHAIR = {'name': u'The IRTF Chair', 'address': u'irtf-chair@irtf.org'} +IESGANDIAB = {'name': u'The IESG and IAB', 'address': u'iesg-iab@ietf.org'} class FakePerson(object): @@ -124,10 +126,31 @@ class IABEntity(Entity): return result +class IRTFEntity(Entity): + chair = FakePerson(**IRTFCHAIR) + poc = [chair,] + + def get_from_cc(self, person): + result = [] + return result + + def needs_approval(self, person=None): + if is_irtfchair(person): + return False + return True + + def can_approve(self): + return [self.chair] + + def full_user_list(self): + result = [get_irtf_chair()] + return result + + class IAB_IESG_Entity(Entity): - poc = [IABEntity.chair, IABEntity.director, FakePerson(**IETFCHAIR)] - cc = [FakePerson(**IAB), FakePerson(**IESG)] + poc = [IABEntity.chair, IABEntity.director, FakePerson(**IETFCHAIR), FakePerson(**IESGANDIAB), ] + cc = [FakePerson(**IAB), FakePerson(**IESG), FakePerson(**IESGANDIAB)] def __init__(self, name, obj=None): self.name = name @@ -149,9 +172,8 @@ class IAB_IESG_Entity(Entity): return list(set(self.iab.can_approve() + self.iesg.can_approve())) def full_user_list(self): - return list(set(self.iab.full_user_list() + self.iesg.full_user_list())) - - + return [get_ietf_chair(), get_iab_chair(), get_iab_executive_director()] + class AreaEntity(Entity): def get_poc(self): @@ -302,6 +324,26 @@ class IABEntityManager(EntityManager): return [] +class IRTFEntityManager(EntityManager): + + def __init__(self, *args, **kwargs): + super(IRTFEntityManager, self).__init__(*args, **kwargs) + self.entity = IRTFEntity(name=self.name) + + def get_entity(self, pk=None): + return self.entity + + def can_send_on_behalf(self, person): + if is_irtfchair(person): + return self.get_managed_list() + return [] + + def can_approve_list(self, person): + if is_irtfchair(person): + return self.get_managed_list() + return [] + + class IAB_IESG_EntityManager(EntityManager): def __init__(self, *args, **kwargs):