Some further cleanup.
- Legacy-Id: 4292
This commit is contained in:
parent
d166ef284b
commit
0970082178
3
ietf/templates/feeds/group_description.html
Normal file
3
ietf/templates/feeds/group_description.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
{# Copyright The IETF Trust 2011, All Rights Reserved #}
|
||||
{% load ietf_filters %}
|
||||
<p>{{ obj.desc|safe|linebreaksbr }}</p>
|
|
@ -1,35 +0,0 @@
|
|||
{# Copyright The IETF Trust 2011, All Rights Reserved #}
|
||||
{% load ietf_filters %}
|
||||
<p>{{ obj.info.text|safe|linebreaksbr }}</p>
|
||||
|
||||
{% with obj.group as wg %}
|
||||
<p>
|
||||
WG name: {{ wg.name }}<br/>
|
||||
WG acronym: {{ wg.acronym }}<br/>
|
||||
IETF area: {{ wg.parent|default:"-" }}<br/>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
WG chairs: {% for n in obj.chairs %}{{ n }}{% if not forloop.last %}, {% endif %}{% endfor %}<br/>
|
||||
WG secretaries: {% for n in obj.secr %}{{ n }}{% if not forloop.last %}, {% endif %}{% endfor %}<br/>
|
||||
WG technical advisors: {% for n in obj.techadv %}{{ n }}{% if not forloop.last %}, {% endif %}{% endfor %}<br/>
|
||||
Assigned AD: {{ wg.ad }}<br/>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Mailing list: {{ wg.list_email }}<br/>
|
||||
Mailing list subscribe {{ wg.list_subscribe }}<br/>
|
||||
Mailing list archive: {{ wg.list_archive }}<br/>
|
||||
Other web sites: {% for a in wg.groupurl_set.all %}{{ a.url }} {% if a.name %}({{ a.name }}){% endif %}{% if not forloop.last %}, {% endif %}{% endfor %}<br/>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
WG State: {{ wg.state|safe }}<br/>
|
||||
Charter State: {% if wg.charter %}{{ wg.charter.get_state|safe }}{% endif %}<br/>
|
||||
</p>
|
||||
{% if obj.rev %}
|
||||
{{ obj.charter|safe }}
|
||||
{% else %}
|
||||
The WG does not yet have a charter
|
||||
{% endif %}
|
||||
{% endwith %}
|
|
@ -1 +0,0 @@
|
|||
{% load ietf_filters %}WG Charter for {{obj.group.name}} ({{ obj.group.acronym|safe }})
|
|
@ -9,7 +9,7 @@ from ietf.idtracker.feeds import DocumentComments, InLastCall
|
|||
from ietf.ipr.feeds import LatestIprDisclosures
|
||||
from ietf.proceedings.feeds import LatestWgProceedingsActivity
|
||||
from ietf.liaisons.feeds import Liaisons
|
||||
from ietf.wgcharter.feeds import GroupEvents
|
||||
from ietf.wgcharter.feeds import GroupChanges
|
||||
|
||||
from ietf.idtracker.sitemaps import IDTrackerMap, DraftMap
|
||||
from ietf.liaisons.sitemaps import LiaisonMap
|
||||
|
@ -25,7 +25,7 @@ feeds = {
|
|||
'iesg-agenda': IESGAgenda,
|
||||
'last-call': InLastCall,
|
||||
'comments': DocumentComments,
|
||||
'wgchanges': GroupEvents,
|
||||
'group-changes': GroupChanges,
|
||||
'ipr': LatestIprDisclosures,
|
||||
'liaison': Liaisons,
|
||||
'wg-proceedings' : LatestWgProceedingsActivity
|
||||
|
|
|
@ -5,72 +5,24 @@ import datetime, re, os
|
|||
from django.conf import settings
|
||||
from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
|
||||
from django.utils.feedgenerator import Atom1Feed
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.core.urlresolvers import reverse as urlreverse
|
||||
from django.template.defaultfilters import truncatewords_html
|
||||
from django.utils.html import strip_tags
|
||||
from django.utils.text import truncate_words
|
||||
|
||||
from ietf.idtracker.templatetags.ietf_filters import format_textarea, fill
|
||||
from ietf.wgcharter.utils import *
|
||||
from ietf.utils.history import find_history_active_at
|
||||
from ietf.group.models import Group
|
||||
from ietf.idrfc.views_doc import _get_html
|
||||
from ietf.group.models import Group, GroupEvent
|
||||
from ietf.doc.models import DocEvent
|
||||
|
||||
def _get_history(wg, versions=None):
|
||||
results = []
|
||||
for e in wg.charter.docevent_set.all().order_by('-time'):
|
||||
info = {}
|
||||
charter_history = find_history_active_at(wg.charter, e.time)
|
||||
info['version'] = charter_history.rev if charter_history else wg.charter.rev
|
||||
info['text'] = e.desc
|
||||
info['by'] = e.by.plain_name()
|
||||
info['textSnippet'] = truncatewords_html(format_textarea(fill(info['text'], 80)), 25)
|
||||
info['snipped'] = info['textSnippet'][-3:] == "..."
|
||||
if e.type == "new_revision":
|
||||
if charter_history:
|
||||
charter = get_charter_for_revision(wg.charter, charter_history.rev)
|
||||
group = get_group_for_revision(wg, charter_history.rev)
|
||||
else:
|
||||
charter = get_charter_for_revision(wg.charter, wg.charter.rev)
|
||||
group = get_group_for_revision(wg, wg.charter.rev)
|
||||
|
||||
if versions:
|
||||
vl = [x['rev'] for x in versions]
|
||||
if vl:
|
||||
prev_charter = get_charter_for_revision(wg.charter, vl[vl.index(charter.rev) - 1])
|
||||
else:
|
||||
prev_charter = get_charter_for_revision(wg.charter, prev_revision(charter.rev))
|
||||
prev_group = get_group_for_revision(wg, prev_revision(charter.rev))
|
||||
results.append({'comment':e, 'info':info, 'date':e.time, 'group': group,
|
||||
'charter': charter, 'prev_charter': prev_charter,
|
||||
'prev_group': prev_group,
|
||||
'txt_url': settings.CHARTER_TXT_URL,
|
||||
'is_rev':True})
|
||||
else:
|
||||
results.append({'comment':e, 'info':info, 'date':e.time, 'group': wg, 'is_com':True})
|
||||
|
||||
# convert plain dates to datetimes (required for sorting)
|
||||
for x in results:
|
||||
if not isinstance(x['date'], datetime.datetime):
|
||||
if x['date']:
|
||||
x['date'] = datetime.datetime.combine(x['date'], datetime.time(0,0,0))
|
||||
else:
|
||||
x['date'] = datetime.datetime(1970,1,1)
|
||||
|
||||
results.sort(key=lambda x: x['date'])
|
||||
results.reverse()
|
||||
return results
|
||||
|
||||
class GroupEvents(Feed):
|
||||
class GroupChanges(Feed):
|
||||
feed_type = Atom1Feed
|
||||
title_template = "feeds/wg_charter_title.html"
|
||||
description_template = "feeds/wg_charter_description.html"
|
||||
description_template = "feeds/group_description.html"
|
||||
def get_object(self, bits):
|
||||
if len(bits) != 1:
|
||||
raise Group.DoesNotExist
|
||||
return Group.objects.get(acronym=bits[0])
|
||||
|
||||
def title(self, obj):
|
||||
return "WG changes for %s" % obj.acronym
|
||||
return u"Changes for %s %s" % (obj.acronym, obj.type)
|
||||
|
||||
def link(self, obj):
|
||||
if not obj:
|
||||
|
@ -81,34 +33,26 @@ class GroupEvents(Feed):
|
|||
return self.title(obj)
|
||||
|
||||
def items(self, obj):
|
||||
history = _get_history(obj)
|
||||
for h in history:
|
||||
gh = find_history_active_at(obj, h['date'])
|
||||
if gh:
|
||||
h['chairs'] = [x.person.plain_name() for x in gh.rolehistory_set.filter(name__slug="chair")]
|
||||
h['secr'] = [x.person.plain_name() for x in gh.rolehistory_set.filter(name__slug="secr")]
|
||||
h['techadv'] = [x.person.plain_name() for x in gh.rolehistory_set.filter(name__slug="techadv")]
|
||||
else:
|
||||
h['chairs'] = [x.person.plain_name() for x in obj.role_set.filter(name__slug="chair")]
|
||||
h['secr'] = [x.person.plain_name() for x in obj.role_set.filter(name__slug="secr")]
|
||||
h['techadv'] = [x.person.plain_name() for x in obj.role_set.filter(name__slug="techadv")]
|
||||
dh = find_history_active_at(obj.charter, h['date'])
|
||||
if dh:
|
||||
h['rev'] = dh.rev
|
||||
h['charter'] = _get_html(
|
||||
str(dh.name)+"-"+str(dh.rev)+",html",
|
||||
os.path.join(dh.get_file_path(), dh.name+"-"+dh.rev+".txt"), False)
|
||||
else:
|
||||
h['rev'] = obj.charter.rev
|
||||
h['charter'] = _get_html(
|
||||
"charter-ietf-"+str(obj.acronym)+"-"+str(obj.charter.rev)+",html",
|
||||
os.path.join(obj.charter.get_file_path(), "charter-ietf-"+obj.acronym+"-"+obj.charter.rev+".txt"), False)
|
||||
return history
|
||||
events = list(obj.groupevent_set.all().select_related("group"))
|
||||
if obj.charter:
|
||||
events += list(obj.charter.docevent_set.all())
|
||||
|
||||
events.sort(key=lambda e: (e.time, e.id), reverse=True)
|
||||
|
||||
return events
|
||||
|
||||
def item_link(self, obj):
|
||||
return urlreverse('wg_charter', kwargs={'acronym': obj['group'].acronym})
|
||||
if isinstance(obj, DocEvent):
|
||||
return urlreverse("doc_view", kwargs={'name': obj.doc_id })
|
||||
elif isinstance(obj, GroupEvent):
|
||||
return urlreverse('wg_charter', kwargs={'acronym': obj.group.acronym })
|
||||
|
||||
def item_pubdate(self, obj):
|
||||
return obj['date']
|
||||
return obj.time
|
||||
|
||||
def item_title(self, obj):
|
||||
title = u"%s - %s" % (truncate_words(strip_tags(obj.desc), 10), obj.by)
|
||||
if isinstance(obj, DocEvent):
|
||||
title = u"Chartering: %s" % title
|
||||
|
||||
return title
|
||||
|
|
|
@ -15,49 +15,6 @@ def log_state_changed(request, doc, by, prev_state):
|
|||
e.save()
|
||||
return e
|
||||
|
||||
def get_charter_for_revision(charter, r):
|
||||
if r == None:
|
||||
return None
|
||||
|
||||
l = charter.history_set.filter(rev=r).order_by('-time')
|
||||
if l:
|
||||
return l[0]
|
||||
|
||||
# Get the lastest history entry
|
||||
l = charter.history_set.all().order_by('-time')
|
||||
if not l:
|
||||
# no history, just return charter
|
||||
return charter
|
||||
|
||||
class FakeHistory(object):
|
||||
def __init__(self, name, rev, time):
|
||||
self.name = name
|
||||
self.rev = rev
|
||||
self.time = time
|
||||
|
||||
return FakeHistory(l[0].name, charter.rev, charter.time)
|
||||
|
||||
def get_group_for_revision(wg, r):
|
||||
if r == None:
|
||||
return None
|
||||
else:
|
||||
l = list(wg.charter.history_set.filter(rev=r).order_by('-time'))
|
||||
if l != []:
|
||||
o = list(wg.history_set.filter(time__lte=l[0].time).order_by('-time'))
|
||||
if o != []:
|
||||
return o[0]
|
||||
else:
|
||||
return wg
|
||||
else:
|
||||
return wg
|
||||
|
||||
def prev_revision(rev):
|
||||
m = re.match(r"(?P<major>[0-9][0-9])(-(?P<minor>[0-9][0-9]))?", rev)
|
||||
if m.group('minor') and m.group('minor') != "00":
|
||||
return "%s-%#02d" % (m.group('major'), int(m.group('minor')) - 1)
|
||||
else:
|
||||
return None
|
||||
|
||||
def next_revision(rev):
|
||||
if rev == "":
|
||||
return "00-00"
|
||||
|
|
Loading…
Reference in a new issue