From de0fc12ce8bede1d942001823322879bda89be31 Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Tue, 20 Dec 2011 13:12:12 +0000 Subject: [PATCH] Port telechat dates - Legacy-Id: 3774 --- ietf/idrfc/testsREDESIGN.py | 10 +-- ietf/iesg/admin.py | 11 ++-- ietf/iesg/models.py | 76 ++++++++++++++++++++++ ietf/iesg/tests.py | 99 +++++++++++++++-------------- ietf/iesg/views.py | 12 ++-- ietf/utils/test_data.py | 15 ++--- redesign/importing/import-groups.py | 11 +++- 7 files changed, 162 insertions(+), 72 deletions(-) diff --git a/ietf/idrfc/testsREDESIGN.py b/ietf/idrfc/testsREDESIGN.py index f16152ad2..131f4b573 100644 --- a/ietf/idrfc/testsREDESIGN.py +++ b/ietf/idrfc/testsREDESIGN.py @@ -46,7 +46,7 @@ from redesign.doc.models import * from redesign.name.models import * from redesign.group.models import * from redesign.person.models import * -from ietf.iesg.models import TelechatDates +from ietf.iesg.models import TelechatDate from ietf.utils.test_utils import SimpleUrlTestCase, RealDatabaseTest, login_testing_unauthorized from ietf.utils.test_data import make_test_data from ietf.utils.mail import outbox @@ -225,21 +225,21 @@ class EditInfoTestCase(django.test.TestCase): # add to telechat self.assertTrue(not draft.latest_event(TelechatDocEvent, "scheduled_for_telechat")) - data["telechat_date"] = TelechatDates.objects.all()[0].date1.isoformat() + data["telechat_date"] = TelechatDate.objects.active()[0].date.isoformat() r = self.client.post(url, data) self.assertEquals(r.status_code, 302) draft = Document.objects.get(name=draft.name) self.assertTrue(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat")) - self.assertEquals(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, TelechatDates.objects.all()[0].date1) + self.assertEquals(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, TelechatDate.objects.active()[0].date) # change telechat - data["telechat_date"] = TelechatDates.objects.all()[0].date2.isoformat() + data["telechat_date"] = TelechatDate.objects.active()[1].date.isoformat() r = self.client.post(url, data) self.assertEquals(r.status_code, 302) draft = Document.objects.get(name=draft.name) - self.assertEquals(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, TelechatDates.objects.all()[0].date2) + self.assertEquals(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, TelechatDate.objects.active()[1].date) # remove from agenda data["telechat_date"] = "" diff --git a/ietf/iesg/admin.py b/ietf/iesg/admin.py index 94aa193ad..3365a5075 100644 --- a/ietf/iesg/admin.py +++ b/ietf/iesg/admin.py @@ -1,16 +1,19 @@ #coding: utf-8 from django.contrib import admin from ietf.iesg.models import * - + class TelechatAgendaItemAdmin(admin.ModelAdmin): pass admin.site.register(TelechatAgendaItem, TelechatAgendaItemAdmin) -class TelechatDatesAdmin(admin.ModelAdmin): - pass -admin.site.register(TelechatDates, TelechatDatesAdmin) +if not settings.USE_DB_REDESIGN_PROXY_CLASSES: + class TelechatDatesAdmin(admin.ModelAdmin): + pass + admin.site.register(TelechatDates, TelechatDatesAdmin) class WGActionAdmin(admin.ModelAdmin): pass admin.site.register(WGAction, WGActionAdmin) +admin.site.register(TelechatDate) + diff --git a/ietf/iesg/models.py b/ietf/iesg/models.py index c8bf877d9..6b95c22e1 100644 --- a/ietf/iesg/models.py +++ b/ietf/iesg/models.py @@ -33,7 +33,9 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from django.db import models +from django.conf import settings from ietf.idtracker.models import Acronym +import datetime # This table is not used by any code right now, and according to Glen, # probably not currently (Aug 2009) maintained by the secretariat. @@ -121,3 +123,77 @@ class WGAction(models.Model): db_table = 'group_internal' ordering = ['-telechat_date'] verbose_name = "WG Action" + + +def next_telechat_date(): + dates = TelechatDate.objects.order_by("-date") + if dates: + return dates[0].date + datetime.timedelta(days=14) + return datetime.date.today() + +class TelechatDateManager(models.Manager): + def active(self): + return self.get_query_set().filter(date__gte=datetime.date.today()) + +class TelechatDate(models.Model): + objects = TelechatDateManager() + + date = models.DateField(default=next_telechat_date) + + def __unicode__(self): + return self.date.isoformat() + + class Meta: + ordering = ['-date'] + +class TelechatDatesProxyDummy(object): + def all(self): + class Dummy(object): + def __getitem__(self, i): + return self + + def get_date(self, index): + if not hasattr(self, "date_cache"): + self.date_cache = TelechatDate.objects.active().order_by("date") + + if index < len(self.date_cache): + return self.date_cache[index].date + return None + + #date1 = models.DateField(primary_key=True, null=True, blank= True) + @property + def date1(self): + return self.get_date(0) + #date2 = models.DateField(null=True, blank=True) + @property + def date2(self): + return self.get_date(1) + #date3 = models.DateField(null=True, blank=True) + @property + def date3(self): + return self.get_date(2) + #date4 = models.DateField(null=True, blank=True) + @property + def date4(self): + return self.get_date(3) + + def dates(self): + l = [] + if self.date1: + l.append(self.date1) + if self.date2: + l.append(self.date2) + if self.date3: + l.append(self.date3) + if self.date4: + l.append(self.date4) + return l + + return Dummy() + +class TelechatDatesProxy(object): + objects = TelechatDatesProxyDummy() + +if settings.USE_DB_REDESIGN_PROXY_CLASSES: + TelechatDatesOld = TelechatDates + TelechatDates = TelechatDatesProxy diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py index 771bec6b9..719e97bc8 100644 --- a/ietf/iesg/tests.py +++ b/ietf/iesg/tests.py @@ -69,7 +69,7 @@ class RescheduleOnAgendaTestCaseREDESIGN(django.test.TestCase): e = TelechatDocEvent(type="scheduled_for_telechat") e.doc = draft e.by = Person.objects.get(name="Aread Irector") - e.telechat_date = TelechatDates.objects.all()[0].date1 + e.telechat_date = TelechatDate.objects.active()[0].date e.returning_item = True e.save() @@ -90,16 +90,16 @@ class RescheduleOnAgendaTestCaseREDESIGN(django.test.TestCase): # reschedule events_before = draft.docevent_set.count() - d = TelechatDates.objects.all()[0].dates()[2] + d = TelechatDate.objects.active()[3].date - r = self.client.post(url, { '%s-telechat_date' % form_id: d.strftime("%Y-%m-%d"), + r = self.client.post(url, { '%s-telechat_date' % form_id: d.isoformat(), '%s-clear_returning_item' % form_id: "1" }) self.assertEquals(r.status_code, 200) # check that it moved below the right header in the DOM on the # agenda docs page - d_header_pos = r.content.find("IESG telechat %s" % d.strftime("%Y-%m-%d")) + d_header_pos = r.content.find("IESG telechat %s" % d.isoformat()) draft_pos = r.content.find(draft.name) self.assertTrue(d_header_pos < draft_pos) @@ -153,55 +153,56 @@ class ManageTelechatDatesTestCase(django.test.TestCase): self.assertTrue(dates.date4 == new_date) self.assertTrue(dates.date1 == old_date2) -class ManageTelechatDatesTestCaseREDESIGN(django.test.TestCase): - fixtures = ['names'] +# class ManageTelechatDatesTestCaseREDESIGN(django.test.TestCase): +# fixtures = ['names'] - def test_set_dates(self): - from ietf.utils.test_data import make_test_data - make_test_data() +# def test_set_dates(self): +# from ietf.utils.test_data import make_test_data +# make_test_data() - dates = TelechatDates.objects.all()[0] - url = urlreverse('ietf.iesg.views.telechat_dates') - login_testing_unauthorized(self, "secretary", url) +# dates = TelechatDates.objects.all()[0] +# url = urlreverse('ietf.iesg.views.telechat_dates') +# login_testing_unauthorized(self, "secretary", url) - # normal get - r = self.client.get(url) - self.assertEquals(r.status_code, 200) - q = PyQuery(r.content) - self.assertEquals(len(q('form input[name=date1]')), 1) +# # normal get +# r = self.client.get(url) +# self.assertEquals(r.status_code, 200) +# q = PyQuery(r.content) +# self.assertEquals(len(q('form input[name=date1]')), 1) - # post - new_date = dates.date1 + timedelta(days=7) +# # post +# new_date = dates.date1 + timedelta(days=7) - r = self.client.post(url, dict(date1=new_date.isoformat(), - date2=new_date.isoformat(), - date3=new_date.isoformat(), - date4=new_date.isoformat(), - )) - self.assertEquals(r.status_code, 200) +# r = self.client.post(url, dict(date1=new_date.isoformat(), +# date2=new_date.isoformat(), +# date3=new_date.isoformat(), +# date4=new_date.isoformat(), +# )) +# self.assertEquals(r.status_code, 200) - dates = TelechatDates.objects.all()[0] - self.assertTrue(dates.date1 == new_date) +# dates = TelechatDates.objects.all()[0] +# self.assertTrue(dates.date1 == new_date) - def test_rollup_dates(self): - from ietf.utils.test_data import make_test_data - make_test_data() +# def test_rollup_dates(self): +# from ietf.utils.test_data import make_test_data +# make_test_data() - dates = TelechatDates.objects.all()[0] - url = urlreverse('ietf.iesg.views.telechat_dates') - login_testing_unauthorized(self, "secretary", url) +# dates = TelechatDates.objects.all()[0] +# url = urlreverse('ietf.iesg.views.telechat_dates') +# login_testing_unauthorized(self, "secretary", url) - old_date2 = dates.date2 - new_date = dates.date4 + timedelta(days=14) - r = self.client.post(url, dict(rollup_dates="1")) - self.assertEquals(r.status_code, 200) +# old_date2 = dates.date2 +# new_date = dates.date4 + timedelta(days=14) +# r = self.client.post(url, dict(rollup_dates="1")) +# self.assertEquals(r.status_code, 200) - dates = TelechatDates.objects.all()[0] - self.assertTrue(dates.date4 == new_date) - self.assertTrue(dates.date1 == old_date2) +# dates = TelechatDates.objects.all()[0] +# self.assertTrue(dates.date4 == new_date) +# self.assertTrue(dates.date1 == old_date2) if settings.USE_DB_REDESIGN_PROXY_CLASSES: - ManageTelechatDatesTestCase = ManageTelechatDatesTestCaseREDESIGN + #ManageTelechatDatesTestCase = ManageTelechatDatesTestCaseREDESIGN + del ManageTelechatDatesTestCase class WorkingGroupActionsTestCase(django.test.TestCase): fixtures = ['base', 'wgactions'] @@ -380,22 +381,22 @@ class WorkingGroupActionsTestCaseREDESIGN(django.test.TestCase): self.assertEquals(len(q('form select[name=telechat_date]')), 1) # change - dates = TelechatDates.objects.all()[0] + dates = TelechatDate.objects.active() token_name = Person.objects.get(name="Ad No1").name_parts()[1] old = wga.pk - r = self.client.post(url, dict(status_date=dates.date1.isoformat(), + r = self.client.post(url, dict(status_date=dates[0].date.isoformat(), token_name=token_name, category="23", note="Testing.", - telechat_date=dates.date4.isoformat())) + telechat_date=dates[3].date.isoformat())) self.assertEquals(r.status_code, 302) wga = WGAction.objects.get(pk=old) - self.assertEquals(wga.status_date, dates.date1) + self.assertEquals(wga.status_date, dates[0].date) self.assertEquals(wga.token_name, token_name) self.assertEquals(wga.category, 23) self.assertEquals(wga.note, "Testing.") - self.assertEquals(wga.telechat_date, dates.date4) + self.assertEquals(wga.telechat_date, dates[3].date) def test_add_possible_wg(self): from ietf.utils.test_data import make_test_data @@ -431,14 +432,14 @@ class WorkingGroupActionsTestCaseREDESIGN(django.test.TestCase): self.assertEquals(len(q('form select[name=telechat_date]')), 1) wgas_before = WGAction.objects.all().count() - dates = TelechatDates.objects.all()[0] + dates = TelechatDate.objects.active() token_name = Person.objects.get(name="Ad No1").name_parts()[1] r = self.client.post(add_url, - dict(status_date=dates.date1.isoformat(), + dict(status_date=dates[0].date.isoformat(), token_name=token_name, category="23", note="Testing.", - telechat_date=dates.date4.isoformat())) + telechat_date=dates[3].date.isoformat())) self.assertEquals(r.status_code, 302) self.assertEquals(wgas_before + 1, WGAction.objects.all().count()) diff --git a/ietf/iesg/views.py b/ietf/iesg/views.py index fee0d080f..102c35f47 100644 --- a/ietf/iesg/views.py +++ b/ietf/iesg/views.py @@ -536,13 +536,17 @@ def discusses(request): return direct_to_template(request, 'iesg/discusses.html', {'docs':res}) -class TelechatDatesForm(forms.ModelForm): - class Meta: - model = TelechatDates - fields = ['date1', 'date2', 'date3', 'date4'] +if not settings.USE_DB_REDESIGN_PROXY_CLASSES: + class TelechatDatesForm(forms.ModelForm): + class Meta: + model = TelechatDates + fields = ['date1', 'date2', 'date3', 'date4'] @group_required('Secretariat') def telechat_dates(request): + if settings.USE_DB_REDESIGN_PROXY_CLASSES: + return HttpResponseRedirect("/admin/iesg/telechatdate/") + dates = TelechatDates.objects.all()[0] if request.method == 'POST': diff --git a/ietf/utils/test_data.py b/ietf/utils/test_data.py index 622cb180b..e01cd207b 100644 --- a/ietf/utils/test_data.py +++ b/ietf/utils/test_data.py @@ -1,6 +1,6 @@ from django.contrib.auth.models import User -from ietf.iesg.models import TelechatDates, WGAction +from ietf.iesg.models import TelechatDate, WGAction from ietf.ipr.models import IprDetail, IprDocAlias from ietf.meeting.models import Meeting from redesign.doc.models import * @@ -226,12 +226,11 @@ def make_test_data(): # telechat dates t = datetime.date.today() - dates = TelechatDates(date1=t, - date2=t + datetime.timedelta(days=7), - date3=t + datetime.timedelta(days=14), - date4=t + datetime.timedelta(days=21), - ) - super(dates.__class__, dates).save(force_insert=True) # work-around hard-coded save block + old = TelechatDate.objects.create(date=t - datetime.timedelta(days=14)).date + date1 = TelechatDate.objects.create(date=t).date + date2 = TelechatDate.objects.create(date=t + datetime.timedelta(days=14)).date + date3 = TelechatDate.objects.create(date=t + datetime.timedelta(days=14 * 2)).date + date4 = TelechatDate.objects.create(date=t + datetime.timedelta(days=14 * 3)).date # WG Actions group = Group.objects.create( @@ -248,7 +247,7 @@ def make_test_data(): agenda=1, token_name="Aread", category=13, - telechat_date=dates.date2 + telechat_date=date2 ) # Meeting diff --git a/redesign/importing/import-groups.py b/redesign/importing/import-groups.py index e97b60719..266aa2e7b 100755 --- a/redesign/importing/import-groups.py +++ b/redesign/importing/import-groups.py @@ -21,9 +21,10 @@ from redesign.name.utils import name from redesign.importing.utils import old_person_to_person from ietf.idtracker.models import AreaGroup, IETFWG, Area, AreaGroup, Acronym, AreaWGURL, IRTF, ChairsHistory, Role, AreaDirector from ietf.liaisons.models import SDOs +from ietf.iesg.models import TelechatDates, TelechatDate import workflows.utils -# imports IETFWG, Area, AreaGroup, Acronym, IRTF, AreaWGURL, SDOs +# imports IETFWG, Area, AreaGroup, Acronym, IRTF, AreaWGURL, SDOs, TelechatDates # also creates nomcom groups @@ -116,6 +117,13 @@ iepg_group.save() system = Person.objects.get(name="(System)") +for o in TelechatDates.objects.all(): + print "importing TelechatDates" + for x in range(1, 5): + d = getattr(o, "date%s" % x) + if d: + TelechatDate.objects.get_or_create(date=d) + # NomCom for o in ChairsHistory.objects.filter(chair_type=Role.NOMCOM_CHAIR).order_by("start_year"): print "importing ChairsHistory/Nomcom", o.pk, "nomcom%s" % o.start_year @@ -231,7 +239,6 @@ for o in Area.objects.all(): # FIXME: missing fields from old: extra_email_addresses - # IETFWG, AreaGroup for o in IETFWG.objects.all().order_by("pk"): print "importing IETFWG", o.pk, o.group_acronym.acronym