Skip to content

Commit fa77ac3

Browse files
committed
Merged r840 from branch/2.00 to trunk, and updated version information in ietf/__init__.py
- Legacy-Id: 841
1 parent 0a7b45a commit fa77ac3

137 files changed

Lines changed: 965 additions & 607 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ietf/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# Copyright The IETF Trust 2007, All Rights Reserved
22

3-
__version__ = "2.01-dev"
3+
__version__ = "2.xx-trunk"
44

55
__date__ = "$Date$"
66

7-
__rev__ = "$Rev:$ (dev) Latest release: Rev. 726 "
7+
__rev__ = "$Rev$ (dev) Latest release: Rev. 838 "
88

99
__id__ = "$Id$"

ietf/bin/pretty-xml-dump

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/sh
2+
python manage.py dumpdata --format=xml "$@" | sed -e 's/<\/*object/\
3+
&/g' -e 's/<field/\
4+
&/g' -e 's/<\/django-objects/\
5+
&/g'

ietf/idindex/testurl.list

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1-
200 /drafts/wg/1041/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg_id&id=1041
1+
301,skipdiff /drafts/wgid/1041/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg_id&id=1041
22
200,skipredirect /drafts/wg/idr/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg_id&id=1041
33
200 /drafts/wg/I/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg&fl=I
44
200 /drafts/ind/F/ https://datatracker.ietf.org/public/idindex.cgi?command=show_ind_id&fl=F
55
200 /drafts/other/tools/ https://datatracker.ietf.org/public/idindex.cgi?command=show_other&cat=tools
66
200,sort /drafts/rfc/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=rfc
7-
200,sort /drafts/rfc/?sort=name https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=rfc&sort=name
7+
#200,sort /drafts/rfc/?sort=name https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=rfc&sort=name
88
200,skipdiff /drafts/current/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=current
99
200,skipdiff /drafts/all/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=all
10-
200,sort /drafts/dead/?sort=name https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=dead&sort=name
11-
200,skipdiff /drafts/9574/related/ https://datatracker.ietf.org/public/idindex.cgi?command=view_related_docs&id=9574
10+
200,sort /drafts/dead/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=dead
11+
#200,sort /drafts/dead/?sort=name https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=dead&sort=name
12+
301,skipdiff /drafts/9574/related/ https://datatracker.ietf.org/public/idindex.cgi?command=view_related_docs&id=9574
1213
200 /drafts/draft-ietf-dnsext-dnssec-protocol/related/
13-
200 /drafts/9574/ https://datatracker.ietf.org/public/idindex.cgi?command=id_detail&id=9574
14+
301,skipdiff /drafts/9574/ https://datatracker.ietf.org/public/idindex.cgi?command=id_detail&id=9574
1415
200,skipredirect /drafts/draft-ietf-dnsext-dnssec-protocol/ https://datatracker.ietf.org/public/idindex.cgi?command=id_detail&id=9574
1516
200 /drafts/all_id_txt.html
1617
200 /drafts/all_id.html
1718
200,skipdiff /drafts/ https://datatracker.ietf.org/public/idindex.cgi?command=search_id
1819
200 /drafts/ https://datatracker.ietf.org/public/idindex.cgi
19-
404 /drafts/wg/11/
20+
200 /drafts/wg/11/

ietf/idindex/urls.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@
1515
}
1616

1717
urlpatterns = patterns('',
18-
(r'^wg/(?P<id>\d+)/$', views.wgdocs),
19-
(r'^wg/(?P<slug>[^/]+)/$', views.wgdocs),
18+
(r'^wgid/(?P<id>\d+)/$', views.wgdocs_redir),
19+
(r'^wg/(?P<wg>[^/]+)/$', views.wgdocs),
2020
(r'^ind/(?P<filter>[^/]+)/$', views.inddocs),
2121
(r'^other/(?P<cat>[^/]+)/$', views.otherdocs),
2222
# (?P<cat>(?:all|rfc|current|dead)) really confuses reverse()
2323
(r'^(?P<cat>all)/$', views.showdocs),
2424
(r'^(?P<cat>rfc)/$', views.showdocs),
2525
(r'^(?P<cat>current)/$', views.showdocs),
2626
(r'^(?P<cat>dead)/$', views.showdocs),
27-
(r'^(?P<id>\d+)/related/$', views.view_related_docs),
27+
(r'^(?P<id>\d+)/related/$', views.redirect_related),
2828
(r'^(?P<slug>[^/]+)/related/$', views.view_related_docs),
29-
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
30-
(r'^(?P<slug>[^/]+)/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, slug_field='filename')),
29+
(r'^(?P<object_id>\d+)/$', views.redirect_id),
30+
(r'^(?P<slug>[^/]+)/$', views.view_id, dict(info_dict, slug_field='filename')),
3131
(r'^all_id_txt.html$', views.all_id, { 'template_name': 'idindex/all_id_txt.html' }),
3232
(r'^all_id.html$', views.all_id, { 'template_name': 'idindex/all_id.html' }),
3333
(r'^$', views.search),

ietf/idindex/views.py

Lines changed: 53 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,41 @@
11
# Copyright The IETF Trust 2007, All Rights Reserved
22

3-
from django.http import HttpResponse
3+
from django.http import HttpResponse, HttpResponsePermanentRedirect
44
from django.views.generic.list_detail import object_list
55
from django.db.models import Q
66
from django.http import Http404
77
from django.template import RequestContext, loader
88
from django.shortcuts import render_to_response, get_object_or_404
9+
from django.core.urlresolvers import reverse
10+
from django.views.generic.list_detail import object_detail
911
from ietf.idtracker.models import Acronym, IETFWG, InternetDraft, Rfc
1012
from ietf.idindex.forms import IDIndexSearchForm
1113
from ietf.idindex.models import alphabet, orgs, orgs_dict
12-
from ietf.utils import orl, flattenl
14+
from ietf.utils import orl, flattenl, normalize_draftname
1315

1416
base_extra = { 'alphabet': alphabet, 'orgs': orgs }
1517

16-
def wgdocs(request, **kwargs):
17-
if kwargs.has_key('id'):
18-
queryset = InternetDraft.objects.filter(group=kwargs['id'])
19-
group = get_object_or_404(Acronym, acronym_id=kwargs['id'])
20-
else:
21-
wg = kwargs['slug']
22-
try:
23-
group = Acronym.objects.get(acronym=wg)
24-
except Acronym.DoesNotExist: # try a search
25-
if wg == 'other':
26-
queryset = IETFWG.objects.filter(
27-
orl([Q(group_acronym__acronym__istartswith="%d" % i) for i in range(0,10)])
28-
)
29-
else:
30-
queryset = IETFWG.objects.filter(group_acronym__acronym__istartswith=wg)
31-
queryset = queryset.filter(group_type__type='WG').select_related().order_by('status_id', 'acronym.acronym')
32-
return object_list(request, queryset=queryset, template_name='idindex/wglist.html', allow_empty=True, extra_context=base_extra)
33-
queryset = InternetDraft.objects.filter(group__acronym=wg)
18+
def wgdocs_redir(request, id):
19+
group = get_object_or_404(Acronym, acronym_id=id)
20+
return HttpResponsePermanentRedirect(reverse(wgdocs, args=[group.acronym]))
21+
22+
def wgdocs(request, wg):
23+
try:
24+
group = Acronym.objects.get(acronym=wg)
25+
except Acronym.DoesNotExist: # try a search
26+
if wg == 'other':
27+
queryset = IETFWG.objects.filter(
28+
orl([Q(group_acronym__acronym__istartswith="%d" % i) for i in range(0,10)])
29+
)
30+
else:
31+
queryset = IETFWG.objects.filter(group_acronym__acronym__istartswith=wg)
32+
queryset = queryset.filter(group_type__type='WG').select_related().order_by('status_id', 'acronym.acronym')
33+
extra = base_extra.copy()
34+
extra['search'] = wg
35+
return object_list(request, queryset=queryset, template_name='idindex/wglist.html', allow_empty=True, extra_context=extra)
36+
queryset = InternetDraft.objects.filter(group__acronym=wg)
3437
queryset = queryset.order_by('status_id', 'filename')
35-
extra = base_extra
38+
extra = base_extra.copy()
3639
extra['group'] = group
3740
return object_list(request, queryset=queryset, template_name='idindex/wgdocs.html', allow_empty=True, extra_context=extra)
3841

@@ -47,7 +50,7 @@ def inddocs(request, filter=None):
4750
else:
4851
queryset = InternetDraft.objects.filter(filename__istartswith='draft-' + filter)
4952
queryset = queryset.exclude(ind_exception).filter(group__acronym='none').order_by('filename')
50-
extra = base_extra
53+
extra = base_extra.copy()
5154
extra['filter'] = filter
5255
return object_list(request, queryset=queryset, template_name='idindex/inddocs.html', allow_empty=True, extra_context=extra)
5356

@@ -61,7 +64,7 @@ def otherdocs(request, cat=None):
6164
Q(filename__istartswith="draft-ietf-%s-" % p)
6265
for p in org.get('prefixes', [ org['key'] ])]))
6366
queryset = queryset.order_by('status_id','filename')
64-
extra = base_extra
67+
extra = base_extra.copy()
6568
extra['category'] = cat
6669
return object_list(request, queryset=queryset, template_name='idindex/otherdocs.html', allow_empty=True, extra_context=extra)
6770

@@ -98,6 +101,9 @@ def showdocs(request, cat=None):
98101

99102

100103
def search(request):
104+
args = request.GET.copy()
105+
if args.has_key('filename'):
106+
args['filename'] = normalize_draftname(args['filename'])
101107
form = IDIndexSearchForm()
102108
t = loader.get_template('idindex/search.html')
103109
# if there's a query, do the search and supply results to the template
@@ -110,20 +116,20 @@ def search(request):
110116
'first_name': 'authors__person__first_name__icontains',
111117
}
112118
for key in qdict.keys() + ['other_group']:
113-
if key in request.REQUEST:
119+
if key in args:
114120
searching = True
115121
if searching:
116122
# '0' and '-1' are flag values for "any"
117123
# in the original .cgi search page.
118124
# They are compared as strings because the
119125
# query dict is always strings.
120-
q_objs = [Q(**{qdict[k]: request.REQUEST[k]})
126+
q_objs = [Q(**{qdict[k]: args[k]})
121127
for k in qdict.keys()
122-
if request.REQUEST.get(k, '') != '' and
123-
request.REQUEST[k] != '0' and
124-
request.REQUEST[k] != '-1']
128+
if args.get(k, '') != '' and
129+
args[k] != '0' and
130+
args[k] != '-1']
125131
try:
126-
other = orgs_dict[request.REQUEST['other_group']]
132+
other = orgs_dict[args['other_group']]
127133
q_objs += [orl(
128134
[Q(filename__istartswith="draft-%s-" % p)|
129135
Q(filename__istartswith="draft-ietf-%s-" % p)
@@ -212,13 +218,25 @@ def process(doc, skip=(0,0,0)):
212218
process(startdoc, (0,0,0))
213219
return related
214220

215-
def view_related_docs(request, **kwargs):
216-
if kwargs.has_key('id'):
217-
startdoc = get_object_or_404(InternetDraft, id_document_tag=kwargs['id'])
218-
else:
219-
startdoc = get_object_or_404(InternetDraft, filename=kwargs['slug'])
221+
def redirect_related(request, id):
222+
doc = get_object_or_404(InternetDraft, id_document_tag=id)
223+
return HttpResponsePermanentRedirect(reverse(view_related_docs, args=[doc.filename]))
224+
225+
def view_related_docs(request, slug):
226+
startdoc = get_object_or_404(InternetDraft, filename=slug)
220227
related = related_docs(startdoc)
221-
context = {'related': related, 'numdocs': len(related)}
228+
context = {'related': related, 'numdocs': len(related), 'startdoc': startdoc}
222229
context.update(base_extra)
223230
return render_to_response("idindex/view_related_docs.html", context,
224231
context_instance=RequestContext(request))
232+
233+
def redirect_id(request, object_id):
234+
'''Redirect from historical document ID to preferred filename url.'''
235+
doc = get_object_or_404(InternetDraft, id_document_tag=object_id)
236+
return HttpResponsePermanentRedirect(reverse(view_id, args=[doc.filename]))
237+
238+
# Wrapper around object_detail to give permalink a handle.
239+
# The named-URLs feature in django 0.97 will eliminate the
240+
# need for these.
241+
def view_id(*args, **kwargs):
242+
return object_detail(*args, **kwargs)

ietf/idtracker/feeds.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,35 @@
11
# Copyright The IETF Trust 2007, All Rights Reserved
22

3-
from django.contrib.syndication.feeds import Feed
3+
from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
44
from django.utils.feedgenerator import Atom1Feed
5-
from ietf.idtracker.models import InternetDraft, DocumentComment
5+
from ietf.idtracker.models import IDInternal
66
import datetime
7+
import re
78

89
class DocumentComments(Feed):
910
feed_type = Atom1Feed
1011
def get_object(self, bits):
1112
if len(bits) != 1:
12-
raise InternetDraft.DoesNotExist
13-
return InternetDraft.objects.get(filename=bits[0])
13+
raise IDInternal.DoesNotExist
14+
rfc = re.match('rfc(\d+)', bits[0])
15+
if rfc:
16+
return IDInternal.objects.get(draft_id=int(rfc.group(1)), rfc_flag=1)
17+
else:
18+
return IDInternal.objects.get(draft__filename=bits[0], rfc_flag=0)
1419

1520
def title(self, obj):
16-
return "I-D Tracker comments for %s" % obj.filename
21+
return "I-D Tracker comments for %s" % obj.document().filename
1722

1823
def link(self, obj):
19-
return "/idtracker/%s" % obj.filename
20-
# obj.get_absolute_url() ?
24+
if obj is None:
25+
raise FeedDoesNotExist
26+
return obj.get_absolute_url()
2127

2228
def description(self, obj):
23-
self.title(obj)
29+
return self.title(obj)
2430

2531
def items(self, obj):
26-
return DocumentComment.objects.filter(document=obj.id_document_tag).order_by("-date")[:15]
32+
return obj.public_comments().order_by("-date")[:15]
2733

2834
def item_pubdate(self, item):
2935
time = datetime.time(*[int(t) for t in item.time.split(":")])

ietf/idtracker/fixtures/initial_data.xml

Lines changed: 0 additions & 7 deletions
This file was deleted.

0 commit comments

Comments
 (0)