Initial implementation of view_related. The related_docs() function
is still a work in progress. I've been using draft-ietf-dnsext-dnssec-protocol as a test case; related_docs() returns the same 137 documents as the cgi code but some of the relationships are different. Right now, the skip argument is ignored. - Legacy-Id: 246
This commit is contained in:
parent
f5027059b3
commit
7fec55b633
|
@ -19,6 +19,8 @@ urlpatterns = patterns('',
|
||||||
(r'^inddocs/(?P<filter>[^/]+)/$', views.inddocs),
|
(r'^inddocs/(?P<filter>[^/]+)/$', views.inddocs),
|
||||||
(r'^otherdocs/(?P<cat>[^/]+)/$', views.otherdocs),
|
(r'^otherdocs/(?P<cat>[^/]+)/$', views.otherdocs),
|
||||||
(r'^showdocs/(?P<cat>[^/]+)/((?P<sortby>[^/]+)/)?$', views.showdocs),
|
(r'^showdocs/(?P<cat>[^/]+)/((?P<sortby>[^/]+)/)?$', views.showdocs),
|
||||||
|
(r'^(?P<id>\d+)/view_related_docs/$', views.view_related_docs),
|
||||||
|
(r'^(?P<slug>[^/]+)/view_related_docs/$', views.view_related_docs),
|
||||||
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
|
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
|
||||||
(r'^(?P<slug>[^/]+)/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, slug_field='filename')),
|
(r'^(?P<slug>[^/]+)/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, slug_field='filename')),
|
||||||
(r'^all_id_txt.html$', views.all_id, { 'template_name': 'idindex/all_id_txt.html' }),
|
(r'^all_id_txt.html$', views.all_id, { 'template_name': 'idindex/all_id_txt.html' }),
|
||||||
|
|
|
@ -3,8 +3,8 @@ from django.views.generic.list_detail import object_list
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.template import RequestContext, loader
|
from django.template import RequestContext, loader
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response, get_object_or_404
|
||||||
from ietf.idtracker.models import Acronym, IETFWG, InternetDraft
|
from ietf.idtracker.models import Acronym, IETFWG, InternetDraft, Rfc
|
||||||
from ietf.idindex.forms import IDIndexSearchForm
|
from ietf.idindex.forms import IDIndexSearchForm
|
||||||
from ietf.idindex.models import alphabet, orgs, orgs_dict
|
from ietf.idindex.models import alphabet, orgs, orgs_dict
|
||||||
from ietf.utils import orl, flattenl
|
from ietf.utils import orl, flattenl
|
||||||
|
@ -150,3 +150,61 @@ def all_id(request, template_name):
|
||||||
object_list.append({'tracker': False, 'id': o})
|
object_list.append({'tracker': False, 'id': o})
|
||||||
return render_to_response(template_name, {'object_list': object_list},
|
return render_to_response(template_name, {'object_list': object_list},
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def related_docs(startdoc):
|
||||||
|
related = []
|
||||||
|
processed = []
|
||||||
|
|
||||||
|
def handle(otherdoc,status,doc,skip=(0,0,0)):
|
||||||
|
new = (otherdoc, status, doc)
|
||||||
|
if otherdoc in processed:
|
||||||
|
print "skipping (%s,%s,%s) because otherdoc has been processed" % (new)
|
||||||
|
return
|
||||||
|
#if new not in related:
|
||||||
|
if True: #otherdoc not in processed:
|
||||||
|
related.append(new)
|
||||||
|
if otherdoc not in processed: # now simply redundant
|
||||||
|
process(otherdoc,skip)
|
||||||
|
|
||||||
|
def process(doc, skip=(0,0,0)):
|
||||||
|
#XXX
|
||||||
|
skip = (0,0,0)
|
||||||
|
print "doc = %s skip = %s" % (doc,skip)
|
||||||
|
processed.append(doc)
|
||||||
|
if type(doc) == InternetDraft:
|
||||||
|
if doc.replaced_by_id != 0 and not(skip[0]):
|
||||||
|
handle(doc.replaced_by, "that replaces", doc, (0,1,0))
|
||||||
|
if not(skip[1]):
|
||||||
|
for replaces in doc.replaces_set.all():
|
||||||
|
handle(replaces, "that was replaced by", doc, (1,0,0))
|
||||||
|
if doc.rfc_number != 0 and not(skip[0]):
|
||||||
|
# should rfc be an FK in the model?
|
||||||
|
handle(Rfc.objects.get(rfc_number=doc.rfc_number), "which came from", doc, (1,0,0))
|
||||||
|
if type(doc) == Rfc:
|
||||||
|
if not(skip[0]):
|
||||||
|
try:
|
||||||
|
draft = InternetDraft.objects.get(rfc_number=doc.rfc_number)
|
||||||
|
#handle(doc, "which came from", draft, backwards=True)
|
||||||
|
handle(draft, "that was published as", doc, (0,0,1))
|
||||||
|
except InternetDraft.DoesNotExist:
|
||||||
|
pass
|
||||||
|
if not(skip[1]):
|
||||||
|
for obsoleted_by in doc.updated_or_obsoleted_by.all():
|
||||||
|
handle(obsoleted_by.rfc, "that %s" % obsoleted_by.action.lower(), doc, (0,0,1))
|
||||||
|
if not(skip[2]):
|
||||||
|
for obsoletes in doc.updates_or_obsoletes.all():
|
||||||
|
handle(obsoletes.rfc_acted_on, "that was %s by" % obsoletes.action.lower().replace("tes", "ted"), doc, (0,1,0))
|
||||||
|
|
||||||
|
process(startdoc, (0,0,0))
|
||||||
|
return related
|
||||||
|
|
||||||
|
def view_related_docs(request, **kwargs):
|
||||||
|
if kwargs.has_key('id'):
|
||||||
|
startdoc = get_object_or_404(InternetDraft, id_document_tag=kwargs['id'])
|
||||||
|
else:
|
||||||
|
startdoc = get_object_or_404(InternetDraft, filename=kwargs['slug'])
|
||||||
|
related = related_docs(startdoc)
|
||||||
|
context = {'related': related, 'numdocs': len(related)}
|
||||||
|
context.update(base_extra)
|
||||||
|
return render_to_response("idindex/view_related_docs.html", context,
|
||||||
|
context_instance=RequestContext(request))
|
||||||
|
|
14
ietf/templates/idindex/view_related_docs.html
Normal file
14
ietf/templates/idindex/view_related_docs.html
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{% extends "idindex/base.html" %}
|
||||||
|
|
||||||
|
{% block iddbcontent %}
|
||||||
|
<table>
|
||||||
|
<tr><td colspan="3"><h3>Total number of related documents found: {{ numdocs }}</h3></td></tr>
|
||||||
|
{% for doc in related %}
|
||||||
|
<tr bgcolor="#{% cycle efefff,dfdfff %}"><td colspan="3">{{ doc.0.filename }}, "{{ doc.0.title }}{% if doc.1 %},{% endif %}"
|
||||||
|
{% if doc.1 %}
|
||||||
|
{{ doc.1 }} {{ doc.2.filename }}, "{{ doc.2.title }}"
|
||||||
|
{% endif %}
|
||||||
|
</td></tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endblock %}
|
Loading…
Reference in a new issue