Port rest of iesg.views and test cases, move redesign announcement models so tests can run
- Legacy-Id: 3129
This commit is contained in:
parent
c04f107177
commit
1e4b5ee74c
|
@ -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)
|
||||
|
|
|
@ -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']
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]))
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -125,7 +125,6 @@ INSTALLED_APPS = (
|
|||
'redesign.name',
|
||||
'redesign.group',
|
||||
'redesign.doc',
|
||||
'redesign.announcements',
|
||||
'redesign.issue',
|
||||
'ietf.announcements',
|
||||
'ietf.idindex',
|
||||
|
|
|
@ -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:
|
||||
|
|
196
ietf/utils/test_data.py
Normal file
196
ietf/utils/test_data.py
Normal file
|
@ -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
|
|
@ -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)
|
|
@ -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']
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue