From f6ff2a80828fc6226b317c638040a181fbf21498 Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Thu, 10 Oct 2013 16:12:34 +0000 Subject: [PATCH] Delete all old WGAction stuff, it's superceded by the WG charter support, clean up iesg/models.py a bit - Legacy-Id: 6411 --- ietf/iesg/admin.py | 4 - ietf/iesg/models.py | 123 ------------- ietf/iesg/tests.py | 130 -------------- ietf/iesg/urls.py | 8 +- ietf/iesg/views.py | 161 ------------------ ietf/secr/telechat/tests.py | 2 +- ietf/templates/base/left_menu.html | 4 - .../iesg/edit_working_group_action.html | 30 ---- .../templates/iesg/working_group_actions.html | 68 -------- ietf/utils/test_data.py | 11 +- 10 files changed, 5 insertions(+), 536 deletions(-) delete mode 100644 ietf/templates/iesg/edit_working_group_action.html delete mode 100644 ietf/templates/iesg/working_group_actions.html diff --git a/ietf/iesg/admin.py b/ietf/iesg/admin.py index 7f33b717e..8dfe86601 100644 --- a/ietf/iesg/admin.py +++ b/ietf/iesg/admin.py @@ -5,9 +5,5 @@ class TelechatAgendaItemAdmin(admin.ModelAdmin): pass admin.site.register(TelechatAgendaItem, TelechatAgendaItemAdmin) -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 f5b73b922..afed15b62 100644 --- a/ietf/iesg/models.py +++ b/ietf/iesg/models.py @@ -37,49 +37,6 @@ 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. -#class TelechatMinutes(models.Model): -# telechat_date = models.DateField(null=True, blank=True) -# telechat_minute = models.TextField(blank=True) -# exported = models.IntegerField(null=True, blank=True) -# def get_absolute_url(self): -# return "/iesg/telechat/%d/" % self.id -# def __str__(self): -# return "IESG Telechat Minutes for %s" % self.telechat_date -# class Meta: -# db_table = 'telechat_minutes' -# verbose_name = "Telechat Minute Text" -# verbose_name_plural = "Telechat Minutes" - -# this model is deprecated -class TelechatDates(models.Model): - date1 = models.DateField(primary_key=True, null=True, blank=True) - date2 = models.DateField(null=True, blank=True) - date3 = models.DateField(null=True, blank=True) - date4 = models.DateField(null=True, blank=True) - 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 - - def save(self): - # date1 isn't really a primary id, so save() doesn't work - raise NotImplemented - - def __str__(self): - return " / ".join([str(d) for d in [self.date1,self.date2,self.date3,self.date4]]) - class Meta: - db_table = "telechat_dates" - verbose_name = "Next Telechat Date" - class TelechatAgendaItem(models.Model): TYPE_CHOICES = ( (1, "Working Group News"), @@ -98,34 +55,6 @@ class TelechatAgendaItem(models.Model): def __unicode__(self): type_name = self.TYPE_CHOICES_DICT.get(self.type, str(self.type)) return u'%s: %s' % (type_name, self.title or "") - class Meta: - if not settings.USE_DB_REDESIGN_PROXY_CLASSES: - db_table = 'templates' - -class WGAction(models.Model): - CATEGORY_CHOICES = ( - (11, "WG Creation::In Internal Review"), - (12, "WG Creation::Proposed for IETF Review"), - (13, "WG Creation::Proposed for Approval"), - (21, "WG Rechartering::In Internal Review"), - (22, "WG Rechartering::Under evaluation for IETF Review"), - (23, "WG Rechartering::Proposed for Approval") - ) - # note that with the new schema, Acronym is monkey-patched and is really Group - group_acronym = models.ForeignKey(Acronym, db_column='group_acronym_id', primary_key=True, unique=True) - note = models.TextField(blank=True,null=True) - status_date = models.DateField() - agenda = models.BooleanField("On Agenda") - token_name = models.CharField(max_length=25) - category = models.IntegerField(db_column='pwg_cat_id', choices=CATEGORY_CHOICES, default=11) - telechat_date = models.DateField() #choices = [(x.telechat_date,x.telechat_date) for x in Telechat.objects.all().order_by('-telechat_date')]) - def __str__(self): - return str(self.telechat_date)+": "+str(self.group_acronym) - class Meta: - if not settings.USE_DB_REDESIGN_PROXY_CLASSES: - db_table = 'group_internal' - ordering = ['-telechat_date'] - verbose_name = "WG Action" class Telechat(models.Model): telechat_id = models.IntegerField(primary_key=True) @@ -160,55 +89,3 @@ class TelechatDate(models.Model): 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 16ca09746..185218070 100644 --- a/ietf/iesg/tests.py +++ b/ietf/iesg/tests.py @@ -242,136 +242,6 @@ class RescheduleOnAgendaTests(django.test.TestCase): self.assertTrue(not draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").returning_item) self.assertEquals(draft.docevent_set.count(), events_before + 1) - -class WorkingGroupActionsTestCaseREDESIGN(django.test.TestCase): - 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): - 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): - 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): - 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 = TelechatDate.objects.active() - token_name = Person.objects.get(name="Ad No1").plain_name() - old = wga.pk - r = self.client.post(url, dict(status_date=dates[0].date.isoformat(), - token_name=token_name, - category="23", - note="Testing.", - telechat_date=dates[3].date.isoformat())) - self.assertEquals(r.status_code, 302) - - wga = WGAction.objects.get(pk=old) - 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[3].date) - - def test_add_possible_wg(self): - 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 = TelechatDate.objects.active() - token_name = Person.objects.get(name="Ad No1").plain_name() - r = self.client.post(add_url, - dict(status_date=dates[0].date.isoformat(), - token_name=token_name, - category="23", - note="Testing.", - telechat_date=dates[3].date.isoformat())) - self.assertEquals(r.status_code, 302) - self.assertEquals(wgas_before + 1, WGAction.objects.all().count()) - - def test_delete_possible_wg(self): - 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) - - class IesgUrlTestCase(SimpleUrlTestCase): def testUrls(self): self.doTestUrls(__file__) diff --git a/ietf/iesg/urls.py b/ietf/iesg/urls.py index 246588297..9f0fc6c86 100644 --- a/ietf/iesg/urls.py +++ b/ietf/iesg/urls.py @@ -39,6 +39,7 @@ from ietf.iesg import views urlpatterns = patterns('', (r'^telechat/.*$', 'django.views.generic.simple.redirect_to', { 'url': 'http://www.ietf.org/iesg/minutes.html' }), (r'^ann/(?:ind|new|prev)/$', 'django.views.generic.simple.redirect_to', { 'url': "/iesg/decisions/", 'permanent': True }), + (r'^telechatdates/$', 'django.views.generic.simple.redirect_to', { 'url': '/admin/iesg/telechatdate/' }), (r'^decisions/(?:(?P[0-9]{4})/)?$', views.review_decisions), (r'^agenda/(?:(?P\d{4}-\d{2}-\d{2})/)?$', views.agenda), @@ -47,13 +48,10 @@ urlpatterns = patterns('', (r'^agenda/(?:(?P\d{4}-\d{2}-\d{2})/)?scribe_template.html$', views.agenda_scribe_template), (r'^agenda/(?:(?P\d{4}-\d{2}-\d{2})/)?moderator_package.html$', views.agenda_moderator_package), (r'^agenda/(?:(?P\d{4}-\d{2}-\d{2})/)?agenda_package.txt$', views.agenda_package), + (r'^agenda/documents.txt$', views.agenda_documents_txt), (r'^agenda/documents/$', views.agenda_documents), - (r'^agenda/telechat-(?P\d+)-(?P\d+)-(?P\d+)-docs.tgz', views.telechat_docs_tarfile), + (r'^agenda/telechat-(?:(?P\d{4}-\d{2}-\d{2})-)?docs.tgz', views.telechat_docs_tarfile), (r'^discusses/$', views.discusses), (r'^milestones/$', views.milestones_needing_review), - (r'^telechatdates/$', 'django.views.generic.simple.redirect_to', { 'url': '/admin/iesg/telechatdate/' }), - url(r'^wgactions/$', views.working_group_actions, name="iesg_working_group_actions"), - url(r'^wgactions/add/$', views.edit_working_group_action, { 'wga_id': None }, name="iesg_add_working_group_action"), - url(r'^wgactions/(?P\d+)/$', views.edit_working_group_action, name="iesg_edit_working_group_action"), ) diff --git a/ietf/iesg/views.py b/ietf/iesg/views.py index b839cd5ba..efe506dfc 100644 --- a/ietf/iesg/views.py +++ b/ietf/iesg/views.py @@ -46,8 +46,6 @@ from django.utils import simplejson as json from django import forms from ietf.idtracker.models import IDInternal, InternetDraft, AreaGroup, Position, IESGLogin, Acronym - -from ietf.iesg.models import TelechatDates, TelechatAgendaItem, WGAction from ietf.idrfc.idrfc_wrapper import IdWrapper, RfcWrapper from ietf.iesg.models import TelechatDate, TelechatAgendaItem @@ -436,162 +434,3 @@ def milestones_needing_review(request): ), context_instance=RequestContext(request)) -def parse_wg_action_file(path): - f = open(path, 'rU') - - line = f.readline() - while line and not line.strip(): - line = f.readline() - - # name - m = re.search(r'([^\(]*) \(', line) - if not m: - return None - name = m.group(1) - - # acronym - m = re.search(r'\((\w+)\)', line) - if not m: - return None - acronym = m.group(1) - - # date - line = f.readline() - m = re.search(r'(\d{4})-(\d{2})-(\d{2})', line) - while line and not m: - line = f.readline() - m = re.search(r'(\d{4})-(\d{2})-(\d{2})', line) - - last_updated = None - if m: - try: - last_updated = datetime.date(int(m.group(1)), int(m.group(2)), int(m.group(3))) - except: - pass - - # token - line = f.readline() - while line and not 'area director' in line.lower(): - line = f.readline() - - line = f.readline() - line = f.readline() - m = re.search(r'\s*(\w+)\s*', line) - token = "" - if m: - token = m.group(1) - - return dict(filename=os.path.basename(path), name=name, acronym=acronym, - status_date=last_updated, token=token) - -def get_possible_wg_actions(): - res = [] - charters = glob.glob(os.path.join(settings.IESG_WG_EVALUATION_DIR, '*-charter.txt')) - for path in charters: - d = parse_wg_action_file(path) - if d: - if not d['status_date']: - d['status_date'] = datetime.date(1900,1,1) - res.append(d) - - res.sort(key=lambda x: x['status_date']) - - return res - - -@role_required('Area Director', 'Secretariat') -def working_group_actions(request): - current_items = WGAction.objects.order_by('status_date').select_related() - - if request.method == 'POST' and has_role(request.user, 'Secretariat'): - filename = request.POST.get('filename') - if filename and filename in os.listdir(settings.IESG_WG_EVALUATION_DIR): - if 'delete' in request.POST: - os.unlink(os.path.join(settings.IESG_WG_EVALUATION_DIR, filename)) - if 'add' in request.POST: - d = parse_wg_action_file(os.path.join(settings.IESG_WG_EVALUATION_DIR, filename)) - qstr = "?" + "&".join("%s=%s" % t for t in d.iteritems()) - return HttpResponseRedirect(urlreverse('iesg_add_working_group_action') + qstr) - - - skip = [c.group_acronym.acronym for c in current_items] - possible_items = filter(lambda x: x['acronym'] not in skip, - get_possible_wg_actions()) - - return render_to_response("iesg/working_group_actions.html", - dict(current_items=current_items, - possible_items=possible_items), - context_instance=RequestContext(request)) - -class EditWGActionForm(forms.ModelForm): - token_name = forms.ChoiceField(required=True) - telechat_date = forms.TypedChoiceField(coerce=lambda x: datetime.datetime.strptime(x, '%Y-%m-%d').date(), empty_value=None, required=False) - - class Meta: - model = WGAction - fields = ['status_date', 'token_name', 'category', 'note'] - - def __init__(self, *args, **kwargs): - super(self.__class__, self).__init__(*args, **kwargs) - - # token name choices - self.fields['token_name'].choices = [("", "(None)")] + [(p.plain_name(), p.plain_name()) for p in IESGLogin.active_iesg().order_by('first_name')] - - # telechat choices - dates = TelechatDates.objects.all()[0].dates() - init = kwargs['initial']['telechat_date'] - if init and init not in dates: - dates.insert(0, init) - - choices = [("", "(not on agenda)")] - for d in dates: - choices.append((d, d.strftime("%Y-%m-%d"))) - - self.fields['telechat_date'].choices = choices - - -@role_required('Secretariat') -def edit_working_group_action(request, wga_id): - if wga_id != None: - wga = get_object_or_404(WGAction, pk=wga_id) - else: - wga = WGAction() - try: - wga.group_acronym = Acronym.objects.get(acronym=request.GET.get('acronym')) - except Acronym.DoesNotExist: - pass - - wga.token_name = request.GET.get('token') - try: - d = datetime.datetime.strptime(request.GET.get('status_date'), '%Y-%m-%d').date() - except: - d = datetime.date.today() - wga.status_date = d - wga.telechat_date = TelechatDates.objects.all()[0].date1 - wga.agenda = True - - initial = dict(telechat_date=wga.telechat_date if wga.agenda else None) - - if request.method == 'POST': - if "delete" in request.POST: - wga.delete() - return HttpResponseRedirect(urlreverse('iesg_working_group_actions')) - - form = EditWGActionForm(request.POST, instance=wga, initial=initial) - if form.is_valid(): - form.save(commit=False) - wga.agenda = bool(form.cleaned_data['telechat_date']) - if wga.category in (11, 21): - wga.agenda = False - if wga.agenda: - wga.telechat_date = form.cleaned_data['telechat_date'] - wga.save() - return HttpResponseRedirect(urlreverse('iesg_working_group_actions')) - else: - form = EditWGActionForm(instance=wga, initial=initial) - - - return render_to_response("iesg/edit_working_group_action.html", - dict(wga=wga, - form=form), - context_instance=RequestContext(request)) diff --git a/ietf/secr/telechat/tests.py b/ietf/secr/telechat/tests.py index dd60a68ef..39be67267 100644 --- a/ietf/secr/telechat/tests.py +++ b/ietf/secr/telechat/tests.py @@ -1,7 +1,7 @@ from django.core.urlresolvers import reverse from django.test import TestCase -from ietf.iesg.models import TelechatDate, TelechatAgendaItem, WGAction +from ietf.iesg.models import TelechatDate, TelechatAgendaItem from ietf.person.models import Person from ietf.utils.test_data import make_test_data diff --git a/ietf/templates/base/left_menu.html b/ietf/templates/base/left_menu.html index 2ee2545ce..9b44d11ad 100644 --- a/ietf/templates/base/left_menu.html +++ b/ietf/templates/base/left_menu.html @@ -45,16 +45,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  • Next Telechat
  • Discusses
  • Milestones
  • - {# FIXME: this link should be removed when the old WG Actions are completely dead #} -
  • Working Groups
  • {% endif %} {% if user|has_role:"Secretariat" %}
  • Secretariat
  • Telechat Dates
  • Management Items
  • Milestones
  • - {# FIXME: this link should be removed when the old WG Actions are completely dead #} -
  • Working Groups
  • Sync discrepancies {% endif %} {% streams_menu %} diff --git a/ietf/templates/iesg/edit_working_group_action.html b/ietf/templates/iesg/edit_working_group_action.html deleted file mode 100644 index d126f631c..000000000 --- a/ietf/templates/iesg/edit_working_group_action.html +++ /dev/null @@ -1,30 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Edit Working Group Action {{ wga.group_acronym.name }}{% endblock %} - -{% block morecss %} -form table th { - vertical-align: top; - text-align: left; - font-weight: normal; - padding-top: 3px; -} -{% endblock %} - -{% block content %} -{% load ietf_filters %} - -

    {{ wga.group_acronym.name }} ({{ wga.group_acronym.acronym }})

    - -
    - - {{ form.as_table }} -
    - -
    - Back - -
    - -
    -{% endblock %} diff --git a/ietf/templates/iesg/working_group_actions.html b/ietf/templates/iesg/working_group_actions.html deleted file mode 100644 index 7ab3e7783..000000000 --- a/ietf/templates/iesg/working_group_actions.html +++ /dev/null @@ -1,68 +0,0 @@ -{% extends "base.html" %} - -{% block title %}Working Group Actions{% endblock %} - -{% block morecss %} -.working-group-action .name, -.working-group-action .edit { - padding-left: 10px; -} -.working-group-action form input { - margin-left: 10px; -} -{% endblock %} - -{% block content %} -{% load ietf_filters %} -

    Working Group Actions

    - -

    These are the submitted WG descriptions and milestones for all -Proposed Working Groups and recharter submissions, along with -whatever status information is available.

    - -

    NOTE: Explicit direction by the AD is required to add the group to -an IESG Telechat agenda.

    - -

    Current Items

    - - -{% for wga in current_items %} - - - - {% if user|in_group:"Secretariat" %} - - {% endif %} - -{% endfor %} -
    {{ wga.status_date|date:"Y, M d" }}{{ wga.group_acronym.name }} ({{ wga.group_acronym.acronym }}) -
    - Edit - -
    -
    - -

    Possible Items

    - - -{% for wga in possible_items %} - - - - {% if user|in_group:"Secretariat" %} - - {% endif %} - -{% endfor %} -
    {{ wga.status_date|date:"Y, M d" }}{{ wga.name }} ({{ wga.acronym }}) -
    - - - -
    -
    -{% endblock %} - -{% block content_end %} - -{% endblock %} diff --git a/ietf/utils/test_data.py b/ietf/utils/test_data.py index 1e9ffc83c..e1de97d4a 100644 --- a/ietf/utils/test_data.py +++ b/ietf/utils/test_data.py @@ -1,7 +1,7 @@ from django.conf import settings from django.contrib.auth.models import User -from ietf.iesg.models import TelechatDate, WGAction +from ietf.iesg.models import TelechatDate from ietf.ipr.models import IprDetail, IprDocAlias from ietf.meeting.models import Meeting from ietf.doc.models import * @@ -98,15 +98,6 @@ def make_test_data(): ) group.charter = charter group.save() - WGAction.objects.create( - pk=group.pk, - note="", - status_date=datetime.date.today(), - agenda=1, - token_name="Aread", - category=13, - telechat_date=date2 - ) # persons