diff --git a/ietf/announcements/admin.py b/ietf/announcements/admin.py index 0ee7208aa..6f9c1dad4 100644 --- a/ietf/announcements/admin.py +++ b/ietf/announcements/admin.py @@ -1,5 +1,6 @@ #coding: utf-8 from django.contrib import admin +from django.conf import settings from ietf.announcements.models import * class AnnouncedFromAdmin(admin.ModelAdmin): @@ -21,3 +22,22 @@ class ScheduledAnnouncementAdmin(admin.ModelAdmin): pass admin.site.register(ScheduledAnnouncement, ScheduledAnnouncementAdmin) + +if settings.USE_DB_REDESIGN_PROXY_CLASSES: + class MessageAdmin(admin.ModelAdmin): + list_display = ["time", "by", "subject", "groups"] + search_fields = ["text"] + raw_id_fields = ["by"] + + def groups(self, instance): + return ", ".join(g.acronym for g in related_groups.all()) + + admin.site.register(Message, MessageAdmin) + + class SendQueueAdmin(admin.ModelAdmin): + list_display = ["time", "by", "message", "send_at", "sent_at"] + list_filter = ["time", "send_at", "sent_at"] + search_fields = ["message__text"] + raw_id_fields = ["by"] + + admin.site.register(SendQueue, SendQueueAdmin) diff --git a/ietf/announcements/models.py b/ietf/announcements/models.py index cb3c216bf..75ca19aad 100644 --- a/ietf/announcements/models.py +++ b/ietf/announcements/models.py @@ -1,6 +1,7 @@ # Copyright The IETF Trust 2007, All Rights Reserved from django.db import models +from django.conf import settings from ietf.idtracker.models import PersonOrOrgInfo, ChairsHistory #from django.contrib.auth.models import Permission @@ -87,3 +88,39 @@ class ScheduledAnnouncement(models.Model): db_table = 'scheduled_announcements' +if settings.USE_DB_REDESIGN_PROXY_CLASSES: + import datetime + + from person.models import Email + from group.models import Group + + class Message(models.Model): + time = models.DateTimeField(default=datetime.datetime.now) + by = models.ForeignKey(Email) + + subject = models.CharField(max_length=255) + frm = models.CharField(max_length=255) + to = models.CharField(max_length=255) + cc = models.CharField(max_length=255, blank=True) + bcc = models.CharField(max_length=255, blank=True) + reply_to = models.CharField(max_length=255, blank=True) + text = models.TextField() + + related_groups = models.ManyToManyField(Group, blank=True) + + class Meta: + ordering = ['time'] + + def __unicode__(self): + return "'%s' %s -> %s" % (self.subject, self.frm, self.to) + + class SendQueue(models.Model): + time = models.DateTimeField(default=datetime.datetime.now) + by = models.ForeignKey(Email) + comment = models.TextField() + message = models.ForeignKey(Message) + send_at = models.DateTimeField(blank=True, null=True) + sent_at = models.DateTimeField(blank=True, null=True) + + class Meta: + ordering = ['time'] diff --git a/ietf/announcements/views.py b/ietf/announcements/views.py index 286b6182c..1e2fad1d8 100644 --- a/ietf/announcements/views.py +++ b/ietf/announcements/views.py @@ -37,7 +37,7 @@ def nomcom(request): def nomcomREDESIGN(request): from person.models import Email from group.models import Group - from redesign.announcements.models import Message + from ietf.announcements.models import Message address_re = re.compile("<.*>") @@ -77,7 +77,7 @@ if settings.USE_DB_REDESIGN_PROXY_CLASSES: def message_detail(request, object_id, queryset): from person.models import Email from group.models import Group - from redesign.announcements.models import Message + from ietf.announcements.models import Message # restrict to nomcom announcements for the time being nomcoms = Group.objects.filter(acronym__startswith="nomcom").exclude(acronym="nomcom") diff --git a/ietf/idrfc/expire.py b/ietf/idrfc/expire.py index 0a0e0b003..73f3ea1b3 100644 --- a/ietf/idrfc/expire.py +++ b/ietf/idrfc/expire.py @@ -51,8 +51,8 @@ def get_soon_to_expire_idsREDESIGN(days): end_date = start_date + datetime.timedelta(days - 1) for d in expirable_documents(): - e = document_expires(d) - if e and start_date <= e.date() <= end_date: + t = document_expires(d) + if t and start_date <= t.date() <= end_date: yield d def get_expired_ids(): @@ -68,8 +68,8 @@ def get_expired_idsREDESIGN(): today = datetime.date.today() for d in expirable_documents(): - e = document_expires(d) - if e and e.time.date() <= today: + t = document_expires(d) + if t and t.date() <= today: yield d def send_expire_warning_for_id(doc): diff --git a/ietf/idrfc/mirror_rfc_editor_queue.py b/ietf/idrfc/mirror_rfc_editor_queue.py index 5ccce2277..6ec2239b2 100644 --- a/ietf/idrfc/mirror_rfc_editor_queue.py +++ b/ietf/idrfc/mirror_rfc_editor_queue.py @@ -247,7 +247,6 @@ def insert_into_databaseREDESIGN(drafts, refs): for name, date_received, state, stream_id in drafts: try: d = Document.objects.get(name=name) - print "known document", name except Document.DoesNotExist: log("unknown document %s" % name) continue diff --git a/ietf/idrfc/testsREDESIGN.py b/ietf/idrfc/testsREDESIGN.py index dd09d5650..c7d4cedee 100644 --- a/ietf/idrfc/testsREDESIGN.py +++ b/ietf/idrfc/testsREDESIGN.py @@ -41,7 +41,6 @@ from django.conf import settings from pyquery import PyQuery -#from ietf.idrfc.models import * from ietf.idtracker.models import IESGLogin, PersonOrOrgInfo, EmailAddress, IDDates from doc.models import * from name.models import * @@ -50,183 +49,13 @@ from person.models import * from ietf.iesg.models import TelechatDates from ietf.utils.test_utils import SimpleUrlTestCase, RealDatabaseTest, login_testing_unauthorized from ietf.utils.test_runner import mail_outbox +from ietf.utils.test_data import make_test_data class IdRfcUrlTestCase(SimpleUrlTestCase): def testUrls(self): #self.doTestUrls(__file__) self.doTestUrls(os.path.join(os.path.dirname(os.path.abspath(__file__)), "testurlREDESIGN.list")) -def make_test_data(): - # groups - area = Group.objects.create( - name="Far Future", - acronym="farfut", - state_id="active", - type_id="area", - parent=None) - group = Group.objects.create( - name="Martian Special Interest Group", - acronym="mars", - state_id="active", - type_id="wg", - parent=area, - ) - - # persons - Email.objects.get_or_create(address="(System)") - - # ad - p = Person.objects.create( - name="Aread Irector", - ascii="Aread Irector", - ) - ad = Email.objects.create( - address="aread@ietf.org", - person=p) - Role.objects.create( - name_id="ad", - group=area, - email=ad) - porg = PersonOrOrgInfo.objects.create( - first_name="Aread", - last_name="Irector", - middle_initial="", - ) - EmailAddress.objects.create( - person_or_org=porg, - priority=1, - address=ad.address, - ) - IESGLogin.objects.create( - login_name="ad", - password="foo", - user_level=1, - first_name=porg.first_name, - last_name=porg.last_name, - person=porg, - ) - - # create a bunch of ads for swarm tests - for i in range(1, 10): - p = Person.objects.create( - name="Ad No%s" % i, - ascii="Ad No%s" % i, - ) - email = Email.objects.create( - address="ad%s@ietf.org" % i, - person=p) - Role.objects.create( - name_id="ad" if i <= 5 else "ex-ad", - group=area, - email=email) - porg = PersonOrOrgInfo.objects.create( - first_name="Ad", - last_name="No%s" % i, - middle_initial="", - ) - EmailAddress.objects.create( - person_or_org=porg, - priority=1, - address=ad.address, - ) - IESGLogin.objects.create( - login_name="ad%s" % i, - password="foo", - user_level=1, - first_name=porg.first_name, - last_name=porg.last_name, - person=porg, - ) - - # group chair - p = Person.objects.create( - name="WG Chair Man", - ascii="WG Chair Man", - ) - wgchair = Email.objects.create( - address="wgchairman@ietf.org", - person=p) - Role.objects.create( - name=RoleName.objects.get(slug="chair"), - group=group, - email=wgchair, - ) - - # secretary - p = Person.objects.create( - name="Sec Retary", - ascii="Sec Retary", - ) - Email.objects.create( - address="sec.retary@ietf.org", - person=p) - porg = PersonOrOrgInfo.objects.create( - first_name="Sec", - last_name="Retary", - middle_initial="", - ) - EmailAddress.objects.create( - person_or_org=porg, - priority=1, - address="sec.retary@ietf.org", - ) - IESGLogin.objects.create( - login_name="secretary", - password="foo", - user_level=0, - first_name=porg.first_name, - last_name=porg.last_name, - person=porg, - ) - - # draft - draft = Document.objects.create( - name="draft-ietf-test", - time=datetime.datetime.now(), - type_id="draft", - title="Optimizing Martian Network Topologies", - state_id="active", - iesg_state_id="pub-req", - stream_id="ietf", - group=group, - abstract="Techniques for achieving near-optimal Martian networks.", - rev="01", - pages=2, - intended_std_level_id="ps", - ad=ad, - notify="aliens@example.mars", - note="", - ) - - DocAlias.objects.create( - document=draft, - name=draft.name, - ) - - DocumentAuthor.objects.create( - document=draft, - author=Email.objects.get(address="aread@ietf.org"), - order=1 - ) - - # draft has only one event - Event.objects.create( - type="started_iesg_process", - by=ad, - doc=draft, - desc="Added draft", - ) - - # 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 - - return draft class ChangeStateTestCase(django.test.TestCase): fixtures = ['names'] @@ -1051,7 +880,6 @@ class ExpireIDsTestCase(django.test.TestCase): send_expire_warning_for_id(draft) - print mail_outbox[-1] self.assertEquals(len(mail_outbox), mailbox_before + 1) self.assertTrue("aread@ietf.org" in str(mail_outbox[-1])) # author self.assertTrue("wgchairman@ietf.org" in str(mail_outbox[-1])) diff --git a/ietf/iesg/tests.py b/ietf/iesg/tests.py index 3177265ae..f40c92858 100644 --- a/ietf/iesg/tests.py +++ b/ietf/iesg/tests.py @@ -61,6 +61,62 @@ class RescheduleOnAgendaTestCase(django.test.TestCase): self.assertEquals(draft.idinternal.comments().count(), comments_before + 1) self.assertTrue("Telechat" in draft.idinternal.comments()[0].comment_text) +class RescheduleOnAgendaTestCaseREDESIGN(django.test.TestCase): + fixtures = ['names'] + + def test_reschedule(self): + from ietf.utils.test_data import make_test_data + from redesign.person.models import Email + from doc.models import TelechatEvent + + draft = make_test_data() + + # add to schedule + e = TelechatEvent(type="scheduled_for_telechat") + e.doc = draft + e.by = Email.objects.get(address="aread@ietf.org") + e.telechat_date = TelechatDates.objects.all()[0].date1 + e.returning_item = True + e.save() + + form_id = draft.pk + telechat_date_before = e.telechat_date + + url = urlreverse('ietf.iesg.views.agenda_documents') + + self.client.login(remote_user="secretary") + + # normal get + r = self.client.get(url) + self.assertEquals(r.status_code, 200) + q = PyQuery(r.content) + # FIXME + #self.assertEquals(len(q('form select[name=%s-telechat_date]' % form_id)), 1) + #self.assertEquals(len(q('form input[name=%s-clear_returning_item]' % form_id)), 1) + + # reschedule + events_before = draft.event_set.count() + d = TelechatDates.objects.all()[0].dates()[2] + + r = self.client.post(url, { '%s-telechat_date' % form_id: d.strftime("%Y-%m-%d"), + '%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")) + draft_pos = r.content.find(draft.name) + self.assertTrue(d_header_pos < draft_pos) + + self.assertTrue(draft.latest_event(TelechatEvent, "scheduled_for_telechat")) + self.assertEquals(draft.latest_event(TelechatEvent, "scheduled_for_telechat").telechat_date, d) + self.assertTrue(not draft.latest_event(TelechatEvent, "scheduled_for_telechat").returning_item) + self.assertEquals(draft.event_set.count(), events_before + 1) + + +if settings.USE_DB_REDESIGN_PROXY_CLASSES: + RescheduleOnAgendaTestCase = RescheduleOnAgendaTestCaseREDESIGN class ManageTelechatDatesTestCase(django.test.TestCase): fixtures = ['base', 'draft'] @@ -212,7 +268,152 @@ class WorkingGroupActionsTestCase(django.test.TestCase): self.assertEquals(r.status_code, 200) self.assertTrue('(sieve)' not in r.content) + +class WorkingGroupActionsTestCaseREDESIGN(django.test.TestCase): + fixtures = ['names'] + + def setUp(self): + super(self.__class__, self).setUp() + + curdir = os.path.dirname(os.path.abspath(__file__)) + self.evaldir = os.path.join(curdir, "tmp-testdir") + os.mkdir(self.evaldir) + src = os.path.join(curdir, "fixtures", "sieve-charter.txt") + shutil.copy(src, self.evaldir) + + settings.IESG_WG_EVALUATION_DIR = self.evaldir + + def tearDown(self): + super(self.__class__, self).tearDown() + shutil.rmtree(self.evaldir) + + + def test_working_group_actions(self): + from ietf.utils.test_data import make_test_data + + make_test_data() + + url = urlreverse('iesg_working_group_actions') + login_testing_unauthorized(self, "secretary", url) + + r = self.client.get(url) + self.assertEquals(r.status_code, 200) + q = PyQuery(r.content) + for wga in WGAction.objects.all(): + self.assertTrue(wga.group_acronym.name in r.content) + + self.assertTrue('(sieve)' in r.content) + + def test_delete_wgaction(self): + from ietf.utils.test_data import make_test_data + + make_test_data() + + wga = WGAction.objects.all()[0] + url = urlreverse('iesg_edit_working_group_action', kwargs=dict(wga_id=wga.pk)) + login_testing_unauthorized(self, "secretary", url) + + r = self.client.post(url, dict(delete="1")) + self.assertEquals(r.status_code, 302) + self.assertTrue(not WGAction.objects.filter(pk=wga.pk)) + + def test_edit_wgaction(self): + from ietf.utils.test_data import make_test_data + from redesign.person.models import Email + + make_test_data() + + wga = WGAction.objects.all()[0] + url = urlreverse('iesg_edit_working_group_action', kwargs=dict(wga_id=wga.pk)) + 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 select[name=token_name]')), 1) + self.assertEquals(len(q('form select[name=telechat_date]')), 1) + + # change + dates = TelechatDates.objects.all()[0] + token_name = Email.objects.get(address="ad1@ietf.org").get_name().split(" ")[0] + old = wga.pk + r = self.client.post(url, dict(status_date=dates.date1.isoformat(), + token_name=token_name, + category="23", + note="Testing.", + telechat_date=dates.date4.isoformat())) + self.assertEquals(r.status_code, 302) + + wga = WGAction.objects.get(pk=old) + self.assertEquals(wga.status_date, dates.date1) + self.assertEquals(wga.token_name, token_name) + self.assertEquals(wga.category, 23) + self.assertEquals(wga.note, "Testing.") + self.assertEquals(wga.telechat_date, dates.date4) + + def test_add_possible_wg(self): + from ietf.utils.test_data import make_test_data + from redesign.person.models import Email + from redesign.group.models import Group + + make_test_data() + + url = urlreverse('iesg_working_group_actions') + login_testing_unauthorized(self, "secretary", url) + + r = self.client.post(url, dict(add="1", + filename='sieve-charter.txt')) + self.assertEquals(r.status_code, 302) + + # now we got back a URL we can use for adding, but first make + # sure we got a proposed group with the acronym + group = Group.objects.create( + name="Sieve test test", + acronym="sieve", + state_id="proposed", + type_id="wg", + parent=None + ) + + add_url = r['Location'] + r = self.client.get(add_url) + self.assertEquals(r.status_code, 200) + q = PyQuery(r.content) + self.assertTrue('(sieve)' in r.content) + self.assertEquals(len(q('form select[name=token_name]')), 1) + self.assertEquals(q('form input[name=status_date]')[0].get("value"), "2010-05-07") + self.assertEquals(len(q('form select[name=telechat_date]')), 1) + + wgas_before = WGAction.objects.all().count() + dates = TelechatDates.objects.all()[0] + token_name = Email.objects.get(address="ad1@ietf.org").get_name().split(" ")[0] + r = self.client.post(add_url, + dict(status_date=dates.date1.isoformat(), + token_name=token_name, + category="23", + note="Testing.", + telechat_date=dates.date4.isoformat())) + self.assertEquals(r.status_code, 302) + self.assertEquals(wgas_before + 1, WGAction.objects.all().count()) + + def test_delete_possible_wg(self): + from ietf.utils.test_data import make_test_data + + make_test_data() + + url = urlreverse('iesg_working_group_actions') + login_testing_unauthorized(self, "secretary", url) + + r = self.client.post(url, dict(delete="1", + filename='sieve-charter.txt')) + self.assertEquals(r.status_code, 200) + + self.assertTrue('(sieve)' not in r.content) + +if settings.USE_DB_REDESIGN_PROXY_CLASSES: + WorkingGroupActionsTestCase = WorkingGroupActionsTestCaseREDESIGN class IesgUrlTestCase(SimpleUrlTestCase): diff --git a/ietf/iesg/views.py b/ietf/iesg/views.py index f29e0983c..ed8680613 100644 --- a/ietf/iesg/views.py +++ b/ietf/iesg/views.py @@ -380,12 +380,20 @@ def handle_reschedule_form(request, idinternal, dates): if request.method == 'POST': form = RescheduleForm(request.POST, **formargs) if form.is_valid(): - update_telechat(request, idinternal, - form.cleaned_data['telechat_date']) - if form.cleaned_data['clear_returning_item']: - idinternal.returning_item = False - idinternal.event_date = datetime.date.today() - idinternal.save() + if settings.USE_DB_REDESIGN_PROXY_CLASSES: + login = request.user.get_profile().email() + update_telechat(request, idinternal, login, + form.cleaned_data['telechat_date'], + False if form.cleaned_data['clear_returning_item'] else None) + idinternal.time = datetime.datetime.now() + idinternal.save() + else: + update_telechat(request, idinternal, + form.cleaned_data['telechat_date']) + if form.cleaned_data['clear_returning_item']: + idinternal.returning_item = False + idinternal.event_date = datetime.date.today() + idinternal.save() else: form = RescheduleForm(**formargs) @@ -405,7 +413,6 @@ def agenda_documents(request): else: idinternals = list(IDInternal.objects.filter(telechat_date__in=dates,primary_flag=1,agenda=1).order_by('rfc_flag', 'ballot')) for i in idinternals: - # FIXME: this isn't ported, apparently disabled i.reschedule_form = handle_reschedule_form(request, i, dates) # some may have been taken off the schedule by the reschedule form @@ -435,7 +442,14 @@ def agenda_documents(request): def telechat_docs_tarfile(request,year,month,day): from tempfile import mkstemp date=datetime.date(int(year),int(month),int(day)) - docs= IDInternal.objects.filter(telechat_date=date, primary_flag=1, agenda=1) + if settings.USE_DB_REDESIGN_PROXY_CLASSES: + from doc.models import TelechatEvent + docs = [] + for d in IDInternal.objects.filter(event__telechatevent__telechat_date=date): + if d.latest_event(TelechatEvent, type="scheduled_for_telechat").telechat_date == date: + docs.append(d) + else: + docs= IDInternal.objects.filter(telechat_date=date, primary_flag=1, agenda=1) response = HttpResponse(mimetype='application/octet-stream') response['Content-Disposition'] = 'attachment; filename=telechat-%s-%s-%s-docs.tgz'%(year, month, day) tarstream = tarfile.open('','w:gz',response) diff --git a/ietf/settings.py b/ietf/settings.py index 7089cf5f4..110773850 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -125,7 +125,6 @@ INSTALLED_APPS = ( 'redesign.name', 'redesign.group', 'redesign.doc', - 'redesign.announcements', 'redesign.issue', 'ietf.announcements', 'ietf.idindex', diff --git a/ietf/utils/mail.py b/ietf/utils/mail.py index dffac7513..f531384ec 100644 --- a/ietf/utils/mail.py +++ b/ietf/utils/mail.py @@ -143,7 +143,6 @@ def send_mail_mime(request, to, frm, subject, msg, cc=None, extra=None, toUser=N msg['To'] = to if cc: msg['Cc'] = cc - print cc msg['Subject'] = subject msg['X-Test-IDTracker'] = (settings.SERVER_MODE == 'production') and 'no' or 'yes' if extra: diff --git a/ietf/utils/test_data.py b/ietf/utils/test_data.py new file mode 100644 index 000000000..bb74100ea --- /dev/null +++ b/ietf/utils/test_data.py @@ -0,0 +1,196 @@ +from ietf.idtracker.models import IESGLogin, PersonOrOrgInfo, EmailAddress +from ietf.iesg.models import TelechatDates, WGAction +from redesign.doc.models import * +from redesign.name.models import * +from redesign.group.models import * +from redesign.person.models import * + +def make_test_data(): + # groups + area = Group.objects.create( + name="Far Future", + acronym="farfut", + state_id="active", + type_id="area", + parent=None) + group = Group.objects.create( + name="Martian Special Interest Group", + acronym="mars", + state_id="active", + type_id="wg", + parent=area, + ) + + # persons + Email.objects.get_or_create(address="(System)") + + # ad + p = Person.objects.create( + name="Aread Irector", + ascii="Aread Irector", + ) + ad = Email.objects.create( + address="aread@ietf.org", + person=p) + Role.objects.create( + name_id="ad", + group=area, + email=ad) + porg = PersonOrOrgInfo.objects.create( + first_name="Aread", + last_name="Irector", + middle_initial="", + ) + EmailAddress.objects.create( + person_or_org=porg, + priority=1, + address=ad.address, + ) + IESGLogin.objects.create( + login_name="ad", + password="foo", + user_level=1, + first_name=porg.first_name, + last_name=porg.last_name, + person=porg, + ) + + # create a bunch of ads for swarm tests + for i in range(1, 10): + p = Person.objects.create( + name="Ad No%s" % i, + ascii="Ad No%s" % i, + ) + email = Email.objects.create( + address="ad%s@ietf.org" % i, + person=p) + Role.objects.create( + name_id="ad" if i <= 5 else "ex-ad", + group=area, + email=email) + porg = PersonOrOrgInfo.objects.create( + first_name="Ad", + last_name="No%s" % i, + middle_initial="", + ) + EmailAddress.objects.create( + person_or_org=porg, + priority=1, + address=ad.address, + ) + IESGLogin.objects.create( + login_name="ad%s" % i, + password="foo", + user_level=1, + first_name=porg.first_name, + last_name=porg.last_name, + person=porg, + ) + + # group chair + p = Person.objects.create( + name="WG Chair Man", + ascii="WG Chair Man", + ) + wgchair = Email.objects.create( + address="wgchairman@ietf.org", + person=p) + Role.objects.create( + name=RoleName.objects.get(slug="chair"), + group=group, + email=wgchair, + ) + + # secretary + p = Person.objects.create( + name="Sec Retary", + ascii="Sec Retary", + ) + Email.objects.create( + address="sec.retary@ietf.org", + person=p) + porg = PersonOrOrgInfo.objects.create( + first_name="Sec", + last_name="Retary", + middle_initial="", + ) + EmailAddress.objects.create( + person_or_org=porg, + priority=1, + address="sec.retary@ietf.org", + ) + IESGLogin.objects.create( + login_name="secretary", + password="foo", + user_level=0, + first_name=porg.first_name, + last_name=porg.last_name, + person=porg, + ) + + # draft + draft = Document.objects.create( + name="draft-ietf-test", + time=datetime.datetime.now(), + type_id="draft", + title="Optimizing Martian Network Topologies", + state_id="active", + iesg_state_id="pub-req", + stream_id="ietf", + group=group, + abstract="Techniques for achieving near-optimal Martian networks.", + rev="01", + pages=2, + intended_std_level_id="ps", + ad=ad, + notify="aliens@example.mars", + note="", + ) + + DocAlias.objects.create( + document=draft, + name=draft.name, + ) + + DocumentAuthor.objects.create( + document=draft, + author=Email.objects.get(address="aread@ietf.org"), + order=1 + ) + + # draft has only one event + Event.objects.create( + type="started_iesg_process", + by=ad, + doc=draft, + desc="Added draft", + ) + + # 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 + + # WG Actions + group = Group.objects.create( + name="Asteroid Mining Equipment Standardization Group", + acronym="ames", + state_id="proposed", + type_id="wg", + parent=area, + ) + WGAction.objects.create( + pk=group.pk, + note="", + status_date=datetime.date.today(), + agenda=1, + token_name="Aread", + category=13, + telechat_date=dates.date2 + ) + + return draft diff --git a/redesign/announcements/__init__.py b/redesign/announcements/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/redesign/announcements/admin.py b/redesign/announcements/admin.py deleted file mode 100644 index f7ee41c2b..000000000 --- a/redesign/announcements/admin.py +++ /dev/null @@ -1,20 +0,0 @@ -from django.contrib import admin -from models import * - -class MessageAdmin(admin.ModelAdmin): - list_display = ["time", "by", "subject", "groups"] - search_fields = ["text"] - raw_id_fields = ["by"] - - def groups(self, instance): - return ", ".join(g.acronym for g in related_groups.all()) - -admin.site.register(Message, MessageAdmin) - -class SendQueueAdmin(admin.ModelAdmin): - list_display = ["time", "by", "message", "send_at", "sent_at"] - list_filter = ["time", "send_at", "sent_at"] - search_fields = ["message__text"] - raw_id_fields = ["by"] - -admin.site.register(SendQueue, SendQueueAdmin) diff --git a/redesign/announcements/models.py b/redesign/announcements/models.py deleted file mode 100644 index 03c67dbe6..000000000 --- a/redesign/announcements/models.py +++ /dev/null @@ -1,37 +0,0 @@ -from django.db import models - -import datetime - -from person.models import Email -from group.models import Group - -class Message(models.Model): - time = models.DateTimeField(default=datetime.datetime.now) - by = models.ForeignKey(Email) - - subject = models.CharField(max_length=255) - frm = models.CharField(max_length=255) - to = models.CharField(max_length=255) - cc = models.CharField(max_length=255, blank=True) - bcc = models.CharField(max_length=255, blank=True) - reply_to = models.CharField(max_length=255, blank=True) - text = models.TextField() - - related_groups = models.ManyToManyField(Group, blank=True) - - class Meta: - ordering = ['time'] - - def __unicode__(self): - return "'%s' %s -> %s" % (self.subject, self.frm, self.to) - -class SendQueue(models.Model): - time = models.DateTimeField(default=datetime.datetime.now) - by = models.ForeignKey(Email) - comment = models.TextField() - message = models.ForeignKey(Message) - send_at = models.DateTimeField(blank=True, null=True) - sent_at = models.DateTimeField(blank=True, null=True) - - class Meta: - ordering = ['time'] diff --git a/redesign/importing/import-announcements.py b/redesign/importing/import-announcements.py index 213b44640..4a0984bdf 100755 --- a/redesign/importing/import-announcements.py +++ b/redesign/importing/import-announcements.py @@ -13,9 +13,9 @@ management.setup_environ(settings) from redesign.person.models import * from redesign.group.models import * -from redesign.announcements.models import * from redesign.name.utils import name from redesign.importing.utils import person_email +from ietf.announcements.models import Message from ietf.announcements.models import Announcement, PersonOrOrgInfo, AnnouncedTo, AnnouncedFrom # assumptions: