Add milestone support in charter diffs by outputting them on a special
.txt generating page that looks up the milestones available at the time the charter was submitted (actually just before the next one was submitted) - Legacy-Id: 4578
This commit is contained in:
parent
b68bf9b0b8
commit
bcf6ef0230
|
@ -170,29 +170,31 @@ def document_history(request, name):
|
|||
doc = get_object_or_404(Document, docalias__name=name)
|
||||
top = render_document_top(request, doc, "history", name)
|
||||
|
||||
diff_documents = [ doc ]
|
||||
diff_documents.extend(Document.objects.filter(docalias__relateddocument__source=doc, docalias__relateddocument__relationship="replaces"))
|
||||
|
||||
# pick up revisions from events
|
||||
diff_revisions = []
|
||||
seen = set()
|
||||
|
||||
diffable = name.startswith("draft") or name.startswith("charter")
|
||||
|
||||
if diffable:
|
||||
diff_documents = [ doc ]
|
||||
diff_documents.extend(Document.objects.filter(docalias__relateddocument__source=doc, docalias__relateddocument__relationship="replaces"))
|
||||
|
||||
seen = set()
|
||||
for e in NewRevisionDocEvent.objects.filter(type="new_revision", doc__in=diff_documents).select_related('doc').order_by("-time", "-id"):
|
||||
if not (e.doc.name, e.rev) in seen:
|
||||
seen.add((e.doc.name, e.rev))
|
||||
if (e.doc.name, e.rev) in seen:
|
||||
continue
|
||||
|
||||
url = ""
|
||||
if name.startswith("charter"):
|
||||
h = find_history_active_at(e.doc, e.time)
|
||||
url = settings.CHARTER_TXT_URL + ("%s-%s.txt" % ((h or doc).canonical_name(), e.rev))
|
||||
elif name.startswith("draft"):
|
||||
# rfcdiff tool has special support for IDs
|
||||
url = e.doc.name + "-" + e.rev
|
||||
seen.add((e.doc.name, e.rev))
|
||||
|
||||
diff_revisions.append((e.doc.name, e.rev, e.time, url))
|
||||
url = ""
|
||||
if name.startswith("charter"):
|
||||
#h = find_history_active_at(e.doc, e.time)
|
||||
#url = settings.CHARTER_TXT_URL + ("%s-%s.txt" % ((h or doc).canonical_name(), e.rev))
|
||||
url = request.build_absolute_uri(urlreverse("charter_with_milestones_txt", kwargs=dict(name=e.doc.name, rev=e.rev)))
|
||||
elif name.startswith("draft"):
|
||||
# rfcdiff tool has special support for IDs
|
||||
url = e.doc.name + "-" + e.rev
|
||||
|
||||
diff_revisions.append((e.doc.name, e.rev, e.time, url))
|
||||
|
||||
# grab event history
|
||||
events = doc.docevent_set.all().order_by("-time", "-id").select_related("by")
|
||||
|
|
8
ietf/templates/wgcharter/charter_with_milestones.txt
Normal file
8
ietf/templates/wgcharter/charter_with_milestones.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
{% load ietf_filters %}{% autoescape off %}{% filter wrap_long_lines %}{{ charter_text }}{% endfilter %}
|
||||
|
||||
Milestones
|
||||
|
||||
{% for milestone in milestones %}{% if milestone.resolved %}{{ milestone.resolved|ljust:8 }}{% else %}{{ milestone.due|date:"M Y" }}{% endif %} - {{ milestone.desc_filled }}{% for d in milestone.docs.all %}
|
||||
o {{ d.name }}{% endfor %}
|
||||
|
||||
{% endfor %}{% endautoescape %}
|
|
@ -9,7 +9,6 @@ from django.core.urlresolvers import reverse as urlreverse
|
|||
from django.utils.html import strip_tags
|
||||
from django.utils.text import truncate_words
|
||||
|
||||
from ietf.utils.history import find_history_active_at
|
||||
from ietf.group.models import Group, GroupEvent
|
||||
from ietf.doc.models import DocEvent
|
||||
|
||||
|
|
|
@ -11,5 +11,6 @@ urlpatterns = patterns('',
|
|||
url(r'^ballotwriteupnotes/$', "ietf.wgcharter.views.ballot_writeupnotes"),
|
||||
url(r'^approve/$', "ietf.wgcharter.views.approve", name='charter_approve'),
|
||||
url(r'^submit/$', "ietf.wgcharter.views.submit", name='charter_submit'),
|
||||
url(r'^submit/(?P<option>initcharter|recharter)/$', "ietf.wgcharter.views.submit", name='charter_submit'),
|
||||
url(r'^submit/(?P<option>initcharter|recharter)/$', "ietf.wgcharter.views.submit", name='charter_submit'), # shouldn't be here
|
||||
url(r'^withmilestones-(?P<rev>[0-9-]+).txt$', "ietf.wgcharter.views.charter_with_milestones_txt", name='charter_with_milestones_txt'),
|
||||
)
|
||||
|
|
|
@ -4,7 +4,6 @@ from django.conf import settings
|
|||
|
||||
from ietf.group.models import GroupEvent, ChangeStateGroupEvent
|
||||
from ietf.doc.models import Document, DocAlias, DocHistory, RelatedDocument, DocumentAuthor, DocEvent
|
||||
from ietf.utils.history import find_history_active_at
|
||||
|
||||
def log_state_changed(request, doc, by, prev_state):
|
||||
e = DocEvent(doc=doc, by=by)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import re, os, string, datetime, shutil
|
||||
import re, os, string, datetime, shutil, textwrap
|
||||
|
||||
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
||||
from django.http import HttpResponse, HttpResponseRedirect, HttpResponseNotFound, Http404
|
||||
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
||||
from django.template.loader import render_to_string
|
||||
from django.core.urlresolvers import reverse as urlreverse
|
||||
|
@ -15,6 +15,7 @@ from django.conf import settings
|
|||
|
||||
from ietf.utils.mail import send_mail_text, send_mail_preformatted
|
||||
from ietf.utils.textupload import get_cleaned_text_file_content
|
||||
from ietf.utils.history import find_history_active_at
|
||||
from ietf.ietfauth.decorators import has_role, role_required
|
||||
from ietf.iesg.models import TelechatDate
|
||||
from ietf.doc.models import *
|
||||
|
@ -626,3 +627,58 @@ def approve(request, name):
|
|||
announcement=announcement),
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
def charter_with_milestones_txt(request, name, rev):
|
||||
charter = get_object_or_404(Document, type="charter", docalias__name=name)
|
||||
|
||||
revision_event = charter.latest_event(NewRevisionDocEvent, type="new_revision", rev=rev)
|
||||
if not revision_event:
|
||||
return HttpResponseNotFound("Revision %s not found in database" % rev)
|
||||
|
||||
# read charter text
|
||||
c = find_history_active_at(charter, revision_event.time) or charter
|
||||
filename = '%s-%s.txt' % (c.canonical_name(), rev)
|
||||
|
||||
charter_text = ""
|
||||
|
||||
try:
|
||||
with open(os.path.join(settings.CHARTER_PATH, filename), 'r') as f:
|
||||
charter_text = f.read()
|
||||
except IOError:
|
||||
charter_text = "Error reading charter text %s" % filename
|
||||
|
||||
|
||||
# find milestones
|
||||
|
||||
chartering = "-" in rev
|
||||
if chartering:
|
||||
need_state = "charter"
|
||||
else:
|
||||
need_state = "active"
|
||||
|
||||
# slight complication - we can assign milestones to a revision up
|
||||
# until the point where the next superseding revision is
|
||||
# published, so that time shall be our limit
|
||||
e = charter.docevent_set.filter(time__gt=revision_event.time, type="new_revision").order_by("time")
|
||||
if not chartering:
|
||||
e = e.exclude(newrevisiondocevent__rev__contains="-")
|
||||
|
||||
if e:
|
||||
# subtract a margen of error
|
||||
just_before_next_rev = e[0].time - datetime.timedelta(seconds=5)
|
||||
else:
|
||||
just_before_next_rev = datetime.datetime.now()
|
||||
|
||||
wrapper = textwrap.TextWrapper(initial_indent="", subsequent_indent=" " * 11, width=80, break_long_words=False)
|
||||
|
||||
milestones = []
|
||||
for m in charter.chartered_group.groupmilestone_set.all():
|
||||
mh = find_history_active_at(m, just_before_next_rev)
|
||||
if mh and mh.state_id == need_state:
|
||||
mh.desc_filled = wrapper.fill(mh.desc)
|
||||
milestones.append(mh)
|
||||
|
||||
return render_to_response('wgcharter/charter_with_milestones.txt',
|
||||
dict(charter_text=charter_text,
|
||||
milestones=milestones),
|
||||
context_instance=RequestContext(request),
|
||||
mimetype="text/plain")
|
||||
|
|
Loading…
Reference in a new issue