89 lines
4.6 KiB
Python
89 lines
4.6 KiB
Python
# Copyright The IETF Trust 2007, All Rights Reserved
|
|
|
|
# Create your views here.
|
|
from django.http import HttpResponsePermanentRedirect, Http404
|
|
from django.conf import settings
|
|
from django.template import RequestContext
|
|
from django.shortcuts import get_object_or_404, render_to_response
|
|
from django.views.generic.list_detail import object_detail, object_list
|
|
from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState, BallotInfo, DocumentComment
|
|
import re, datetime
|
|
|
|
def state_desc(request, state, is_substate=0):
|
|
if int(state) == 100:
|
|
object = {
|
|
'state': 'I-D Exists',
|
|
'description': """
|
|
Initial (default) state for all internet drafts. Such documents are
|
|
not being tracked by the IESG as no request has been made of the
|
|
IESG to do anything with the document.
|
|
"""
|
|
}
|
|
elif is_substate:
|
|
sub = get_object_or_404(IDSubState, pk=state)
|
|
object = { 'state': sub.sub_state, 'description': sub.description }
|
|
else:
|
|
object = get_object_or_404(IDState, pk=state)
|
|
return render_to_response('idtracker/state_desc.html', {'state': object},
|
|
context_instance=RequestContext(request))
|
|
|
|
def status(request):
|
|
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|
drafts = list(IDInternal.objects.filter(states__type="draft-iesg").exclude(states__type="draft-iesg", states__slug__in=('pub', 'dead', 'watching', 'rfcqueue')).distinct().order_by('states__order'))
|
|
drafts.sort(key=lambda d: (d.cur_state_id, d.status_date or datetime.date.min, d.b_sent_date or datetime.date.min))
|
|
# sadly we can't use the generic view because it only works with a queryset...
|
|
return render_to_response('idtracker/status_of_items.html', dict(object_list=drafts, title="IESG Status of Items"), context_instance=RequestContext(request))
|
|
|
|
queryset = IDInternal.objects.filter(primary_flag=1).exclude(cur_state__state__in=('RFC Ed Queue', 'RFC Published', 'AD is watching', 'Dead')).order_by('cur_state', 'status_date', 'ballot')
|
|
return object_list(request, template_name="idtracker/status_of_items.html", queryset=queryset, extra_context={'title': 'IESG Status of Items'})
|
|
|
|
def last_call(request):
|
|
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|
drafts = list(IDInternal.objects.filter(states__type="draft-iesg", states__slug__in=('lc', 'writeupw', 'goaheadw')).distinct().order_by('states__order'))
|
|
drafts.sort(key=lambda d: (d.cur_state_id, d.status_date or datetime.date.min, d.b_sent_date or datetime.date.min))
|
|
# sadly we can't use the generic view because it only works with a queryset...
|
|
return render_to_response('idtracker/status_of_items.html', dict(object_list=drafts, title="Documents in Last Call", lastcall=1), context_instance=RequestContext(request))
|
|
|
|
queryset = IDInternal.objects.filter(primary_flag=1).filter(cur_state__state__in=('In Last Call', 'Waiting for Writeup', 'Waiting for AD Go-Ahead')).order_by('cur_state', 'status_date', 'ballot')
|
|
return object_list(request, template_name="idtracker/status_of_items.html", queryset=queryset, extra_context={'title': 'Documents in Last Call', 'lastcall': 1})
|
|
|
|
def redirect_id(request, object_id):
|
|
'''Redirect from historical document ID to preferred filename url.'''
|
|
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|
raise Http404() # we don't store the numbers anymore
|
|
|
|
doc = get_object_or_404(InternetDraft, id_document_tag=object_id)
|
|
return HttpResponsePermanentRedirect("/doc/"+doc.filename+"/")
|
|
|
|
def redirect_rfc(request, rfc_number):
|
|
return HttpResponsePermanentRedirect("/doc/rfc"+rfc_number+"/")
|
|
|
|
def redirect_filename(request, filename):
|
|
return HttpResponsePermanentRedirect("/doc/"+filename+"/")
|
|
|
|
def redirect_ballot(request, object_id):
|
|
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|
raise Http404() # we don't store the numbers anymore
|
|
|
|
ballot = get_object_or_404(BallotInfo, pk=object_id)
|
|
ids = ballot.drafts.filter(primary_flag=1)
|
|
if len(ids) == 0:
|
|
raise Http404("Ballot does not correspond to any document")
|
|
id = ids[0]
|
|
if id.rfc_flag:
|
|
return HttpResponsePermanentRedirect("/doc/rfc"+str(id.draft_id)+"/#ballot")
|
|
else:
|
|
return HttpResponsePermanentRedirect("/doc/"+id.draft.filename+"/#ballot")
|
|
|
|
def redirect_comment(request, object_id):
|
|
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|
raise Http404() # we don't store the numbers anymore
|
|
|
|
comment = get_object_or_404(DocumentComment, pk=object_id)
|
|
id = comment.document
|
|
if id.rfc_flag:
|
|
return HttpResponsePermanentRedirect("/doc/rfc"+str(id.draft_id)+"/#history-"+str(object_id))
|
|
else:
|
|
return HttpResponsePermanentRedirect("/doc/"+id.draft.filename+"/#history-"+str(object_id))
|
|
|