Remove proxies

- Legacy-Id: 6826
This commit is contained in:
Ole Laursen 2013-12-07 12:01:57 +00:00
parent ae2b0e2bcc
commit 3e709e3f24
5 changed files with 0 additions and 1709 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,271 +0,0 @@
from ietf.utils.proxy import TranslatingManager, proxy_role_email
from models import *
class Acronym(Group):
class LazyIndividualSubmitter(object):
def __get__(self, obj, type=None):
return Group.objects.get(acronym="none").id
INDIVIDUAL_SUBMITTER = LazyIndividualSubmitter()
def from_object(self, base):
for f in base._meta.fields:
setattr(self, f.name, getattr(base, f.name))
return self
#acronym_id = models.AutoField(primary_key=True)
@property
def acronym_id(self):
return self.id
#acronym = models.CharField(max_length=12) # same name
#name = models.CharField(max_length=100) # same name
#name_key = models.CharField(max_length=50, editable=False)
@property
def name_key(self):
return self.name.upper()
@property
def ietfwg(self):
return IETFWG().from_object(self)
def __str__(self):
return self.acronym
def __unicode__(self):
return self.acronym
class Meta:
proxy = True
class Area(Group):
objects = TranslatingManager(dict(area_acronym__acronym="acronym",
area_acronym__name="name",
status=lambda v: ("state", {1: "active", 2: "dormant", 3: "conclude"}[v] )),
always_filter=dict(type="area"))
def from_object(self, base):
for f in base._meta.fields:
setattr(self, f.name, getattr(base, f.name))
return self
ACTIVE=1
#area_acronym = models.OneToOneField(Acronym, primary_key=True)
@property
def area_acronym(self):
return Acronym().from_object(self)
#start_date = models.DateField(auto_now_add=True)
#concluded_date = models.DateField(null=True, blank=True)
#status = models.ForeignKey(AreaStatus)
@property
def status_id(self):
return { "active": 1, "dormant": 2, "conclude": 3, "proposed": 4 }[self.state_id]
#comments = models.TextField(blank=True)
#last_modified_date = models.DateField(auto_now=True)
@property
def last_modified_date(self):
return self.time.date()
#extra_email_addresses = models.TextField(blank=True,null=True)
#def additional_urls(self):
# return AreaWGURL.objects.filter(name=self.area_acronym.name)
def active_wgs(self):
return IETFWG.objects.filter(type="wg", state="active", parent=self).select_related('type', 'state', 'parent').order_by("acronym")
@property
def areadirector_set(self):
return proxied_role_emails(Email.objects.filter(role__group=self, role__name="ad"))
@staticmethod
def active_areas():
return Area.objects.filter(type="area", state="active").select_related('type', 'state', 'parent').order_by('acronym')
def __str__(self):
return self.acronym
def __unicode__(self):
return self.acronym
class Meta:
proxy = True
def proxied_role_emails(emails):
for e in emails:
proxy_role_email(e)
return emails
class WGDelegateProxy(Role):
#person = models.ForeignKey(PersonOrOrgInfo) # same name
#wg = models.ForeignKey(IETFWG)
@property
def wg(self):
return self.group
def __unicode__(self):
return u"%s" % self.person
class Meta:
proxy = True
class IETFWG(Group):
objects = TranslatingManager(dict(group_acronym="id",
group_acronym__acronym="acronym",
group_acronym__acronym__in="acronym__in",
group_acronym__acronym__contains="acronym__contains",
email_archive__startswith="list_archive__startswith",
group_type=lambda v: ("type__in", { 1: ("wg",), 2: ("wg", "rg") }[int(v)]),
status=lambda v: ("state__in", { 1: ("active", "bof") }[int(v)]),
areagroup__area__status=lambda v: ("parent__state", { 1: "active" }[v]),
start_date__isnull=lambda v: None if v else ("groupevent__changestategroupevent__state__slug", "active"),
),
always_filter=dict(type__in=("wg", "rg", "individ", "area")))
def from_object(self, base):
for f in base._meta.fields:
setattr(self, f.name, getattr(base, f.name))
return self
ACTIVE=1
#group_acronym = models.OneToOneField(Acronym, primary_key=True, editable=False)
@property
def group_acronym(self):
return Acronym().from_object(self)
#group_type = models.ForeignKey(WGType)
#proposed_date = models.DateField(null=True, blank=True)
#start_date = models.DateField(null=True, blank=True)
@property
def start_date(self):
e = GroupEvent.objects.filter(group=self, type="changed_state", changestategroupevent__state="active").order_by('time')[:1]
return e[0].time.date() if e else None
#dormant_date = models.DateField(null=True, blank=True)
#concluded_date = models.DateField(null=True, blank=True)
#status = models.ForeignKey(WGStatus)
@property
def status_id(self):
return { "active": 1, "dormant": 2, "conclude": 3, "bof-conc": 3, "proposed": 4, "bof": 4, "abandon": 4, "replaced": 4}[self.state_id]
#area_director = models.ForeignKey(AreaDirector, null=True)
#meeting_scheduled = models.CharField(blank=True, max_length=3)
@property
def meeting_scheduled(self):
from ietf.meeting.models import Meeting
latest_meeting = Meeting.objects.order_by('-date')[0]
return "YES" if self.session_set.filter(meeting=latest_meeting) else "NO"
#email_address = models.CharField(blank=True, max_length=60)
@property
def email_address(self):
return self.list_email
#email_subscribe = models.CharField(blank=True, max_length=120)
@property
def email_subscribe(self):
return self.list_subscribe
#email_keyword = models.CharField(blank=True, max_length=50)
#email_archive = models.CharField(blank=True, max_length=95)
@property
def email_archive(self):
return self.list_archive
#comments = models.TextField(blank=True)
#last_modified_date = models.DateField()
@property
def last_modified_date(self):
return self.time.date()
#meeting_scheduled_old = models.CharField(blank=True, max_length=3)
#area = FKAsOneToOne('areagroup', reverse=True)
@property
def area(self):
if self.parent:
areagroup = AreaGroup().from_object(self)
return areagroup
else:
return None
def __str__(self):
return self.group_acronym.acronym
def __unicode__(self):
return self.group_acronym.acronym
def active_drafts(self):
from ietf.doc.proxy import InternetDraft
return InternetDraft.objects.filter(group=self, states__type="draft", states__slug="active")
# def choices():
# return [(wg.group_acronym_id, wg.group_acronym.acronym) for wg in IETFWG.objects.all().filter(group_type__type='WG').select_related().order_by('acronym.acronym')]
# choices = staticmethod(choices)
def area_acronym(self):
return Area().from_object(self.parent) if self.parent else None
def area_directors(self):
if not self.parent:
return None
return proxied_role_emails(sorted(Email.objects.filter(role__group=self.parent, role__name="ad"), key=lambda e: e.person.name_parts()[3]))
def chairs(self): # return a set of WGChair objects for this work group
return proxied_role_emails(sorted(Email.objects.filter(role__group=self, role__name="chair"), key=lambda e: e.person.name_parts()[3]))
# def secretaries(self): # return a set of WGSecretary objects for this group
# return WGSecretary.objects.filter(group_acronym__exact=self.group_acronym)
# def milestones(self): # return a set of GoalMilestone objects for this group
# return GoalMilestone.objects.filter(group_acronym__exact=self.group_acronym)
# def rfcs(self): # return a set of Rfc objects for this group
# return Rfc.objects.filter(group_acronym__exact=self.group_acronym)
# def drafts(self): # return a set of Rfc objects for this group
# return InternetDraft.objects.filter(group__exact=self.group_acronym)
def charter_text(self): # return string containing WG description read from file
from ietf.group.utils import get_charter_text
return get_charter_text(self)
def additional_urls(self):
return self.groupurl_set.all().order_by("name")
def clean_email_archive(self):
return self.list_archive
@property
def wgchair_set(self):
# gross hack ...
class Dummy: pass
d = Dummy()
d.all = self.chairs
return d
@property
def wgdelegate_set(self):
return WGDelegateProxy.objects.filter(group=self, name="delegate")
class Meta:
proxy = True
class IRTF(Group):
objects = TranslatingManager(dict(),
always_filter=dict(type="rg"))
#irtf_id = models.AutoField(primary_key=True)
@property
def irtf_id(self):
return self.pk
#acronym = models.CharField(blank=True, max_length=25, db_column='irtf_acronym') # same name
#name = models.CharField(blank=True, max_length=255, db_column='irtf_name') # same name
#charter_text = models.TextField(blank=True,null=True)
#meeting_scheduled = models.BooleanField(blank=True)
def __str__(self):
return self.acronym
def __unicode__(self):
return self.acronym
#def chairs(self): # return a set of IRTFChair objects for this work group
# return IRTFChair.objects.filter(irtf=self)
class Meta:
proxy = True
class AreaGroup(Group):
objects = TranslatingManager(dict(group=lambda v: ("pk", v.pk)),
always_filter=dict(type="wg"))
def from_object(self, base):
for f in base._meta.fields:
setattr(self, f.name, getattr(base, f.name))
return self
@property
def area(self):
return Area().from_object(self.parent)
@property
def group(self):
return self
class Meta:
proxy = True

View file

@ -1,63 +0,0 @@
from ietf.utils.proxy import TranslatingManager
from models import *
class IDSubStateManager(TranslatingManager):
def __init__(self, *args):
super(IDSubStateManager, self).__init__(*args)
def all(self):
return self.filter(slug__in=['extpty', 'need-rev', 'ad-f-up', 'point'])
class IDSubState(DocTagName):
objects = IDSubStateManager(dict(pk="order"))
def from_object(self, base):
for f in base._meta.fields:
setattr(self, f.name, getattr(base, f.name))
return self
#sub_state_id = models.AutoField(primary_key=True)
@property
def sub_state_id(self):
return self.order
#sub_state = models.CharField(max_length=55, db_column='sub_state_val')
@property
def sub_state(self):
return self.name
#description = models.TextField(blank=True, db_column='sub_state_desc')
@property
def description(self):
return self.desc
def __str__(self):
return self.sub_state
class Meta:
proxy = True
class AnnotationTagObjectRelationProxy(DocTagName):
objects = TranslatingManager(dict(annotation_tag__name="name"))
@property
def annotation_tag(self):
return self
class Meta:
proxy = True
class StreamProxy(StreamName):
def get_chairs(self):
from ietf.group.models import Role
from ietf.utils.proxy import proxy_personify_role
return [proxy_personify_role(r) for r in Role.objects.filter(group__acronym=self.slug, name="chair")]
def get_delegates(self):
from ietf.group.models import Role
from ietf.utils.proxy import proxy_personify_role
return [proxy_personify_role(r) for r in Role.objects.filter(group__acronym=self.slug, name="delegate")]
class Meta:
proxy = True

View file

@ -1,55 +0,0 @@
from ietf.utils.proxy import TranslatingManager
from models import *
class IESGLogin(Person):
objects = TranslatingManager(dict(user_level__in=None,
first_name="name"
))
def from_object(self, base):
for f in base._meta.fields:
setattr(self, f.name, getattr(base, f.name))
return self
SECRETARIAT_LEVEL = 0
AD_LEVEL = 1
INACTIVE_AD_LEVEL = 2
#login_name = models.CharField(blank=True, max_length=255)
@property
def login_name(self): raise NotImplemented
#password = models.CharField(max_length=25)
@property
def password(self): raise NotImplemented
#user_level = models.IntegerField(choices=USER_LEVEL_CHOICES)
@property
def user_level(self): raise NotImplemented
#first_name = models.CharField(blank=True, max_length=25)
@property
def first_name(self):
return self.name_parts()[1]
#last_name = models.CharField(blank=True, max_length=25)
@property
def last_name(self):
return self.name_parts()[3]
# FIXME: person isn't wrapped yet
#person = BrokenForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', unique=True, null_values=(0, 888888), null=True)
# apparently unused
#pgp_id = models.CharField(blank=True, null=True, max_length=20)
#default_search = models.NullBooleanField()
def __str__(self):
return self.plain_name()
def is_current_ad(self):
return bool(self.role_set.filter(name="ad", group__state="active"))
@staticmethod
def active_iesg():
return IESGLogin.objects.filter(role__name="ad", role__group__state="active").distinct().order_by('name')
class Meta:
proxy = True

View file

@ -1,282 +0,0 @@
# some helpers for the proxy layer bridging the gap between the legacy
# and the redesigned schema, eventually this should all go
from django.db.models.manager import Manager
from django.db.models.query import QuerySet
def proxy_personify_role(role):
"""Turn role into person with email() method using email from role."""
p = role.person
p.email = lambda: (p.plain_name(), role.email.address)
return p
def proxy_role_email(e):
"""Add email() method to person on email."""
e.person.email = lambda: (e.person.plain_name(), e.address)
return e
def chunks(l, n):
"""Split list l up in chunks of max size n."""
return (l[i:i+n] for i in xrange(0, len(l), n))
class TranslatingQuerySet(QuerySet):
"""Query set that can do some simple mappings of the filter args."""
def translated_args(self, args):
trans = self.translated_attrs
res = []
for a in args:
if a.startswith("-"):
prefix = "-"
a = a[1:]
else:
prefix = ""
if a in trans:
t = trans[a]
if callable(t):
t, _ = t(None)
if t:
res.append(prefix + t)
else:
res.append(prefix + a)
return res
def translated_kwargs(self, kwargs):
trans = self.translated_attrs
res = dict()
for k, v in kwargs.iteritems():
if k in trans:
t = trans[k]
if callable(t):
ts = t(v)
else:
ts = (t, v)
for t, v in chunks(ts, 2):
if t:
res[t] = v
else:
res[k] = v
return res
# overridden methods
def _clone(self, *args, **kwargs):
c = super(TranslatingQuerySet, self)._clone(*args, **kwargs)
c.translated_attrs = self.translated_attrs
return c
def dates(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).dates(*args, **kwargs)
def distinct(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).distinct(*args, **kwargs)
def extra(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).extra(*args, **kwargs)
def get(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).get(*args, **kwargs)
def get_or_create(self, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).get_or_create(**kwargs)
def create(self, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).create(**kwargs)
def filter(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).filter(*args, **kwargs)
def aggregate(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).aggregate(*args, **kwargs)
def annotate(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).annotate(*args, **kwargs)
def complex_filter(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).complex_filter(*args, **kwargs)
def exclude(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).exclude(*args, **kwargs)
def in_bulk(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).in_bulk(*args, **kwargs)
def iterator(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).iterator(*args, **kwargs)
def latest(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).latest(*args, **kwargs)
def order_by(self, *args, **kwargs):
args = self.translated_args(args)
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).order_by(*args, **kwargs)
def select_related(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).select_related(*args, **kwargs)
def values(self, *args, **kwargs):
args = self.translated_args(args)
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).values(*args, **kwargs)
def values_list(self, *args, **kwargs):
args = self.translated_args(args)
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).values_list(*args, **kwargs)
def update(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).update(*args, **kwargs)
def reverse(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).reverse(*args, **kwargs)
def defer(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).defer(*args, **kwargs)
def only(self, *args, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self).only(*args, **kwargs)
def _insert(self, values, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return insert_query(self.model, values, **kwargs)
def _update(self, values, **kwargs):
kwargs = self.translated_kwargs(kwargs)
return super(TranslatingQuerySet, self)._update(values, **kwargs)
class TranslatingManager(Manager):
"""Translates keyword arguments for the ORM, for use in proxy
wrapping, e.g. given trans={'foo': 'bar'} it will transform a
lookup of the field foo to a lookup on the field bar. The right
hand side can either be a string or a function which is called
with the right-hand side to transform it."""
def __init__(self, trans, always_filter=None):
super(TranslatingManager, self).__init__()
self.translated_attrs = trans
self.always_filter = always_filter
def get_query_set(self):
qs = TranslatingQuerySet(self.model)
qs.translated_attrs = self.translated_attrs
if self.always_filter:
qs = qs.filter(**self.always_filter)
return qs
# def dates(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().dates(*args, **kwargs)
# def distinct(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().distinct(*args, **kwargs)
# def extra(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().extra(*args, **kwargs)
# def get(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().get(*args, **kwargs)
# def get_or_create(self, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().get_or_create(**kwargs)
# def create(self, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().create(**kwargs)
# def filter(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().filter(*args, **kwargs)
# def aggregate(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().aggregate(*args, **kwargs)
# def annotate(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().annotate(*args, **kwargs)
# def complex_filter(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().complex_filter(*args, **kwargs)
# def exclude(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().exclude(*args, **kwargs)
# def in_bulk(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().in_bulk(*args, **kwargs)
# def iterator(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().iterator(*args, **kwargs)
# def latest(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().latest(*args, **kwargs)
# def order_by(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().order_by(*args, **kwargs)
# def select_related(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().select_related(*args, **kwargs)
# def values(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().values(*args, **kwargs)
# def values_list(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().values_list(*args, **kwargs)
# def update(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().update(*args, **kwargs)
# def reverse(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().reverse(*args, **kwargs)
# def defer(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().defer(*args, **kwargs)
# def only(self, *args, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set().only(*args, **kwargs)
# def _insert(self, values, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return insert_query(self.model, values, **kwargs)
# def _update(self, values, **kwargs):
# kwargs = self.translated_kwargs(kwargs)
# return self.get_query_set()._update(values, **kwargs)