Merged r840 from branch/2.00 to trunk, and updated version information in ietf/__init__.py
- Legacy-Id: 841
|
@ -1,9 +1,9 @@
|
||||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||||
|
|
||||||
__version__ = "2.01-dev"
|
__version__ = "2.xx-trunk"
|
||||||
|
|
||||||
__date__ = "$Date$"
|
__date__ = "$Date$"
|
||||||
|
|
||||||
__rev__ = "$Rev:$ (dev) Latest release: Rev. 726 "
|
__rev__ = "$Rev$ (dev) Latest release: Rev. 838 "
|
||||||
|
|
||||||
__id__ = "$Id$"
|
__id__ = "$Id$"
|
||||||
|
|
5
ietf/bin/pretty-xml-dump
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
python manage.py dumpdata --format=xml "$@" | sed -e 's/<\/*object/\
|
||||||
|
&/g' -e 's/<field/\
|
||||||
|
&/g' -e 's/<\/django-objects/\
|
||||||
|
&/g'
|
|
@ -1,19 +1,20 @@
|
||||||
200 /drafts/wg/1041/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg_id&id=1041
|
301,skipdiff /drafts/wgid/1041/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg_id&id=1041
|
||||||
200,skipredirect /drafts/wg/idr/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg_id&id=1041
|
200,skipredirect /drafts/wg/idr/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg_id&id=1041
|
||||||
200 /drafts/wg/I/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg&fl=I
|
200 /drafts/wg/I/ https://datatracker.ietf.org/public/idindex.cgi?command=show_wg&fl=I
|
||||||
200 /drafts/ind/F/ https://datatracker.ietf.org/public/idindex.cgi?command=show_ind_id&fl=F
|
200 /drafts/ind/F/ https://datatracker.ietf.org/public/idindex.cgi?command=show_ind_id&fl=F
|
||||||
200 /drafts/other/tools/ https://datatracker.ietf.org/public/idindex.cgi?command=show_other&cat=tools
|
200 /drafts/other/tools/ https://datatracker.ietf.org/public/idindex.cgi?command=show_other&cat=tools
|
||||||
200,sort /drafts/rfc/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=rfc
|
200,sort /drafts/rfc/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=rfc
|
||||||
200,sort /drafts/rfc/?sort=name https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=rfc&sort=name
|
#200,sort /drafts/rfc/?sort=name https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=rfc&sort=name
|
||||||
200,skipdiff /drafts/current/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=current
|
200,skipdiff /drafts/current/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=current
|
||||||
200,skipdiff /drafts/all/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=all
|
200,skipdiff /drafts/all/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=all
|
||||||
200,sort /drafts/dead/?sort=name https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=dead&sort=name
|
200,sort /drafts/dead/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=dead
|
||||||
200,skipdiff /drafts/9574/related/ https://datatracker.ietf.org/public/idindex.cgi?command=view_related_docs&id=9574
|
#200,sort /drafts/dead/?sort=name https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=dead&sort=name
|
||||||
|
301,skipdiff /drafts/9574/related/ https://datatracker.ietf.org/public/idindex.cgi?command=view_related_docs&id=9574
|
||||||
200 /drafts/draft-ietf-dnsext-dnssec-protocol/related/
|
200 /drafts/draft-ietf-dnsext-dnssec-protocol/related/
|
||||||
200 /drafts/9574/ https://datatracker.ietf.org/public/idindex.cgi?command=id_detail&id=9574
|
301,skipdiff /drafts/9574/ https://datatracker.ietf.org/public/idindex.cgi?command=id_detail&id=9574
|
||||||
200,skipredirect /drafts/draft-ietf-dnsext-dnssec-protocol/ https://datatracker.ietf.org/public/idindex.cgi?command=id_detail&id=9574
|
200,skipredirect /drafts/draft-ietf-dnsext-dnssec-protocol/ https://datatracker.ietf.org/public/idindex.cgi?command=id_detail&id=9574
|
||||||
200 /drafts/all_id_txt.html
|
200 /drafts/all_id_txt.html
|
||||||
200 /drafts/all_id.html
|
200 /drafts/all_id.html
|
||||||
200,skipdiff /drafts/ https://datatracker.ietf.org/public/idindex.cgi?command=search_id
|
200,skipdiff /drafts/ https://datatracker.ietf.org/public/idindex.cgi?command=search_id
|
||||||
200 /drafts/ https://datatracker.ietf.org/public/idindex.cgi
|
200 /drafts/ https://datatracker.ietf.org/public/idindex.cgi
|
||||||
404 /drafts/wg/11/
|
200 /drafts/wg/11/
|
||||||
|
|
|
@ -15,8 +15,8 @@ info_dict = {
|
||||||
}
|
}
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^wg/(?P<id>\d+)/$', views.wgdocs),
|
(r'^wgid/(?P<id>\d+)/$', views.wgdocs_redir),
|
||||||
(r'^wg/(?P<slug>[^/]+)/$', views.wgdocs),
|
(r'^wg/(?P<wg>[^/]+)/$', views.wgdocs),
|
||||||
(r'^ind/(?P<filter>[^/]+)/$', views.inddocs),
|
(r'^ind/(?P<filter>[^/]+)/$', views.inddocs),
|
||||||
(r'^other/(?P<cat>[^/]+)/$', views.otherdocs),
|
(r'^other/(?P<cat>[^/]+)/$', views.otherdocs),
|
||||||
# (?P<cat>(?:all|rfc|current|dead)) really confuses reverse()
|
# (?P<cat>(?:all|rfc|current|dead)) really confuses reverse()
|
||||||
|
@ -24,10 +24,10 @@ urlpatterns = patterns('',
|
||||||
(r'^(?P<cat>rfc)/$', views.showdocs),
|
(r'^(?P<cat>rfc)/$', views.showdocs),
|
||||||
(r'^(?P<cat>current)/$', views.showdocs),
|
(r'^(?P<cat>current)/$', views.showdocs),
|
||||||
(r'^(?P<cat>dead)/$', views.showdocs),
|
(r'^(?P<cat>dead)/$', views.showdocs),
|
||||||
(r'^(?P<id>\d+)/related/$', views.view_related_docs),
|
(r'^(?P<id>\d+)/related/$', views.redirect_related),
|
||||||
(r'^(?P<slug>[^/]+)/related/$', views.view_related_docs),
|
(r'^(?P<slug>[^/]+)/related/$', views.view_related_docs),
|
||||||
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
|
(r'^(?P<object_id>\d+)/$', views.redirect_id),
|
||||||
(r'^(?P<slug>[^/]+)/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, slug_field='filename')),
|
(r'^(?P<slug>[^/]+)/$', views.view_id, 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' }),
|
||||||
(r'^all_id.html$', views.all_id, { 'template_name': 'idindex/all_id.html' }),
|
(r'^all_id.html$', views.all_id, { 'template_name': 'idindex/all_id.html' }),
|
||||||
(r'^$', views.search),
|
(r'^$', views.search),
|
||||||
|
|
|
@ -1,38 +1,41 @@
|
||||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||||
|
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse, HttpResponsePermanentRedirect
|
||||||
from django.views.generic.list_detail import object_list
|
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, get_object_or_404
|
from django.shortcuts import render_to_response, get_object_or_404
|
||||||
|
from django.core.urlresolvers import reverse
|
||||||
|
from django.views.generic.list_detail import object_detail
|
||||||
from ietf.idtracker.models import Acronym, IETFWG, InternetDraft, Rfc
|
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, normalize_draftname
|
||||||
|
|
||||||
base_extra = { 'alphabet': alphabet, 'orgs': orgs }
|
base_extra = { 'alphabet': alphabet, 'orgs': orgs }
|
||||||
|
|
||||||
def wgdocs(request, **kwargs):
|
def wgdocs_redir(request, id):
|
||||||
if kwargs.has_key('id'):
|
group = get_object_or_404(Acronym, acronym_id=id)
|
||||||
queryset = InternetDraft.objects.filter(group=kwargs['id'])
|
return HttpResponsePermanentRedirect(reverse(wgdocs, args=[group.acronym]))
|
||||||
group = get_object_or_404(Acronym, acronym_id=kwargs['id'])
|
|
||||||
else:
|
def wgdocs(request, wg):
|
||||||
wg = kwargs['slug']
|
try:
|
||||||
try:
|
group = Acronym.objects.get(acronym=wg)
|
||||||
group = Acronym.objects.get(acronym=wg)
|
except Acronym.DoesNotExist: # try a search
|
||||||
except Acronym.DoesNotExist: # try a search
|
if wg == 'other':
|
||||||
if wg == 'other':
|
queryset = IETFWG.objects.filter(
|
||||||
queryset = IETFWG.objects.filter(
|
orl([Q(group_acronym__acronym__istartswith="%d" % i) for i in range(0,10)])
|
||||||
orl([Q(group_acronym__acronym__istartswith="%d" % i) for i in range(0,10)])
|
)
|
||||||
)
|
else:
|
||||||
else:
|
queryset = IETFWG.objects.filter(group_acronym__acronym__istartswith=wg)
|
||||||
queryset = IETFWG.objects.filter(group_acronym__acronym__istartswith=wg)
|
queryset = queryset.filter(group_type__type='WG').select_related().order_by('status_id', 'acronym.acronym')
|
||||||
queryset = queryset.filter(group_type__type='WG').select_related().order_by('status_id', 'acronym.acronym')
|
extra = base_extra.copy()
|
||||||
return object_list(request, queryset=queryset, template_name='idindex/wglist.html', allow_empty=True, extra_context=base_extra)
|
extra['search'] = wg
|
||||||
queryset = InternetDraft.objects.filter(group__acronym=wg)
|
return object_list(request, queryset=queryset, template_name='idindex/wglist.html', allow_empty=True, extra_context=extra)
|
||||||
|
queryset = InternetDraft.objects.filter(group__acronym=wg)
|
||||||
queryset = queryset.order_by('status_id', 'filename')
|
queryset = queryset.order_by('status_id', 'filename')
|
||||||
extra = base_extra
|
extra = base_extra.copy()
|
||||||
extra['group'] = group
|
extra['group'] = group
|
||||||
return object_list(request, queryset=queryset, template_name='idindex/wgdocs.html', allow_empty=True, extra_context=extra)
|
return object_list(request, queryset=queryset, template_name='idindex/wgdocs.html', allow_empty=True, extra_context=extra)
|
||||||
|
|
||||||
|
@ -47,7 +50,7 @@ def inddocs(request, filter=None):
|
||||||
else:
|
else:
|
||||||
queryset = InternetDraft.objects.filter(filename__istartswith='draft-' + filter)
|
queryset = InternetDraft.objects.filter(filename__istartswith='draft-' + filter)
|
||||||
queryset = queryset.exclude(ind_exception).filter(group__acronym='none').order_by('filename')
|
queryset = queryset.exclude(ind_exception).filter(group__acronym='none').order_by('filename')
|
||||||
extra = base_extra
|
extra = base_extra.copy()
|
||||||
extra['filter'] = filter
|
extra['filter'] = filter
|
||||||
return object_list(request, queryset=queryset, template_name='idindex/inddocs.html', allow_empty=True, extra_context=extra)
|
return object_list(request, queryset=queryset, template_name='idindex/inddocs.html', allow_empty=True, extra_context=extra)
|
||||||
|
|
||||||
|
@ -61,7 +64,7 @@ def otherdocs(request, cat=None):
|
||||||
Q(filename__istartswith="draft-ietf-%s-" % p)
|
Q(filename__istartswith="draft-ietf-%s-" % p)
|
||||||
for p in org.get('prefixes', [ org['key'] ])]))
|
for p in org.get('prefixes', [ org['key'] ])]))
|
||||||
queryset = queryset.order_by('status_id','filename')
|
queryset = queryset.order_by('status_id','filename')
|
||||||
extra = base_extra
|
extra = base_extra.copy()
|
||||||
extra['category'] = cat
|
extra['category'] = cat
|
||||||
return object_list(request, queryset=queryset, template_name='idindex/otherdocs.html', allow_empty=True, extra_context=extra)
|
return object_list(request, queryset=queryset, template_name='idindex/otherdocs.html', allow_empty=True, extra_context=extra)
|
||||||
|
|
||||||
|
@ -98,6 +101,9 @@ def showdocs(request, cat=None):
|
||||||
|
|
||||||
|
|
||||||
def search(request):
|
def search(request):
|
||||||
|
args = request.GET.copy()
|
||||||
|
if args.has_key('filename'):
|
||||||
|
args['filename'] = normalize_draftname(args['filename'])
|
||||||
form = IDIndexSearchForm()
|
form = IDIndexSearchForm()
|
||||||
t = loader.get_template('idindex/search.html')
|
t = loader.get_template('idindex/search.html')
|
||||||
# if there's a query, do the search and supply results to the template
|
# if there's a query, do the search and supply results to the template
|
||||||
|
@ -110,20 +116,20 @@ def search(request):
|
||||||
'first_name': 'authors__person__first_name__icontains',
|
'first_name': 'authors__person__first_name__icontains',
|
||||||
}
|
}
|
||||||
for key in qdict.keys() + ['other_group']:
|
for key in qdict.keys() + ['other_group']:
|
||||||
if key in request.REQUEST:
|
if key in args:
|
||||||
searching = True
|
searching = True
|
||||||
if searching:
|
if searching:
|
||||||
# '0' and '-1' are flag values for "any"
|
# '0' and '-1' are flag values for "any"
|
||||||
# in the original .cgi search page.
|
# in the original .cgi search page.
|
||||||
# They are compared as strings because the
|
# They are compared as strings because the
|
||||||
# query dict is always strings.
|
# query dict is always strings.
|
||||||
q_objs = [Q(**{qdict[k]: request.REQUEST[k]})
|
q_objs = [Q(**{qdict[k]: args[k]})
|
||||||
for k in qdict.keys()
|
for k in qdict.keys()
|
||||||
if request.REQUEST.get(k, '') != '' and
|
if args.get(k, '') != '' and
|
||||||
request.REQUEST[k] != '0' and
|
args[k] != '0' and
|
||||||
request.REQUEST[k] != '-1']
|
args[k] != '-1']
|
||||||
try:
|
try:
|
||||||
other = orgs_dict[request.REQUEST['other_group']]
|
other = orgs_dict[args['other_group']]
|
||||||
q_objs += [orl(
|
q_objs += [orl(
|
||||||
[Q(filename__istartswith="draft-%s-" % p)|
|
[Q(filename__istartswith="draft-%s-" % p)|
|
||||||
Q(filename__istartswith="draft-ietf-%s-" % p)
|
Q(filename__istartswith="draft-ietf-%s-" % p)
|
||||||
|
@ -212,13 +218,25 @@ def related_docs(startdoc):
|
||||||
process(startdoc, (0,0,0))
|
process(startdoc, (0,0,0))
|
||||||
return related
|
return related
|
||||||
|
|
||||||
def view_related_docs(request, **kwargs):
|
def redirect_related(request, id):
|
||||||
if kwargs.has_key('id'):
|
doc = get_object_or_404(InternetDraft, id_document_tag=id)
|
||||||
startdoc = get_object_or_404(InternetDraft, id_document_tag=kwargs['id'])
|
return HttpResponsePermanentRedirect(reverse(view_related_docs, args=[doc.filename]))
|
||||||
else:
|
|
||||||
startdoc = get_object_or_404(InternetDraft, filename=kwargs['slug'])
|
def view_related_docs(request, slug):
|
||||||
|
startdoc = get_object_or_404(InternetDraft, filename=slug)
|
||||||
related = related_docs(startdoc)
|
related = related_docs(startdoc)
|
||||||
context = {'related': related, 'numdocs': len(related)}
|
context = {'related': related, 'numdocs': len(related), 'startdoc': startdoc}
|
||||||
context.update(base_extra)
|
context.update(base_extra)
|
||||||
return render_to_response("idindex/view_related_docs.html", context,
|
return render_to_response("idindex/view_related_docs.html", context,
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def redirect_id(request, object_id):
|
||||||
|
'''Redirect from historical document ID to preferred filename url.'''
|
||||||
|
doc = get_object_or_404(InternetDraft, id_document_tag=object_id)
|
||||||
|
return HttpResponsePermanentRedirect(reverse(view_id, args=[doc.filename]))
|
||||||
|
|
||||||
|
# Wrapper around object_detail to give permalink a handle.
|
||||||
|
# The named-URLs feature in django 0.97 will eliminate the
|
||||||
|
# need for these.
|
||||||
|
def view_id(*args, **kwargs):
|
||||||
|
return object_detail(*args, **kwargs)
|
||||||
|
|
|
@ -1,29 +1,35 @@
|
||||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||||
|
|
||||||
from django.contrib.syndication.feeds import Feed
|
from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
|
||||||
from django.utils.feedgenerator import Atom1Feed
|
from django.utils.feedgenerator import Atom1Feed
|
||||||
from ietf.idtracker.models import InternetDraft, DocumentComment
|
from ietf.idtracker.models import IDInternal
|
||||||
import datetime
|
import datetime
|
||||||
|
import re
|
||||||
|
|
||||||
class DocumentComments(Feed):
|
class DocumentComments(Feed):
|
||||||
feed_type = Atom1Feed
|
feed_type = Atom1Feed
|
||||||
def get_object(self, bits):
|
def get_object(self, bits):
|
||||||
if len(bits) != 1:
|
if len(bits) != 1:
|
||||||
raise InternetDraft.DoesNotExist
|
raise IDInternal.DoesNotExist
|
||||||
return InternetDraft.objects.get(filename=bits[0])
|
rfc = re.match('rfc(\d+)', bits[0])
|
||||||
|
if rfc:
|
||||||
|
return IDInternal.objects.get(draft_id=int(rfc.group(1)), rfc_flag=1)
|
||||||
|
else:
|
||||||
|
return IDInternal.objects.get(draft__filename=bits[0], rfc_flag=0)
|
||||||
|
|
||||||
def title(self, obj):
|
def title(self, obj):
|
||||||
return "I-D Tracker comments for %s" % obj.filename
|
return "I-D Tracker comments for %s" % obj.document().filename
|
||||||
|
|
||||||
def link(self, obj):
|
def link(self, obj):
|
||||||
return "/idtracker/%s" % obj.filename
|
if obj is None:
|
||||||
# obj.get_absolute_url() ?
|
raise FeedDoesNotExist
|
||||||
|
return obj.get_absolute_url()
|
||||||
|
|
||||||
def description(self, obj):
|
def description(self, obj):
|
||||||
self.title(obj)
|
return self.title(obj)
|
||||||
|
|
||||||
def items(self, obj):
|
def items(self, obj):
|
||||||
return DocumentComment.objects.filter(document=obj.id_document_tag).order_by("-date")[:15]
|
return obj.public_comments().order_by("-date")[:15]
|
||||||
|
|
||||||
def item_pubdate(self, item):
|
def item_pubdate(self, item):
|
||||||
time = datetime.time(*[int(t) for t in item.time.split(":")])
|
time = datetime.time(*[int(t) for t in item.time.split(":")])
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<django-objects version="1.0">
|
|
||||||
<object pk="6" model="idtracker.role">
|
|
||||||
<field to="redirects.suffix" name="person" rel="ManyToOneRel">14966</field>
|
|
||||||
<field type="CharField" name="role_name">IAD</field>
|
|
||||||
</object>
|
|
||||||
</django-objects>
|
|
151
ietf/idtracker/fixtures/wgtest.xml
Normal file
|
@ -0,0 +1,151 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<django-objects version="1.0">
|
||||||
|
<object pk="4" model="idtracker.personororginfo">
|
||||||
|
<field type="CharField" name="record_type"></field>
|
||||||
|
<field type="CharField" name="name_prefix"></field>
|
||||||
|
<field type="CharField" name="first_name">Hermey</field>
|
||||||
|
<field type="CharField" name="first_name_key">HERMEY</field>
|
||||||
|
<field type="CharField" name="middle_initial"></field>
|
||||||
|
<field type="CharField" name="middle_initial_key"></field>
|
||||||
|
<field type="CharField" name="last_name">Elf</field>
|
||||||
|
<field type="CharField" name="last_name_key">ELF</field>
|
||||||
|
<field type="CharField" name="name_suffix"></field>
|
||||||
|
<field type="DateField" name="date_modified">2007-07-02</field>
|
||||||
|
<field type="CharField" name="modified_by"></field>
|
||||||
|
<field type="DateField" name="date_created">2007-07-02</field>
|
||||||
|
<field type="CharField" name="created_by"></field>
|
||||||
|
<field type="CharField" name="address_type"></field>
|
||||||
|
</object>
|
||||||
|
<object pk="1" model="idtracker.personororginfo">
|
||||||
|
<field type="CharField" name="record_type"></field>
|
||||||
|
<field type="CharField" name="name_prefix"></field>
|
||||||
|
<field type="CharField" name="first_name">Kris</field>
|
||||||
|
<field type="CharField" name="first_name_key">KRIS</field>
|
||||||
|
<field type="CharField" name="middle_initial"></field>
|
||||||
|
<field type="CharField" name="middle_initial_key"></field>
|
||||||
|
<field type="CharField" name="last_name">Kringle</field>
|
||||||
|
<field type="CharField" name="last_name_key">KRINGLE</field>
|
||||||
|
<field type="CharField" name="name_suffix"></field>
|
||||||
|
<field type="DateField" name="date_modified">2007-07-02</field>
|
||||||
|
<field type="CharField" name="modified_by"></field>
|
||||||
|
<field type="DateField" name="date_created">2007-07-02</field>
|
||||||
|
<field type="CharField" name="created_by"></field>
|
||||||
|
<field type="CharField" name="address_type"></field>
|
||||||
|
</object>
|
||||||
|
<object pk="2" model="idtracker.personororginfo">
|
||||||
|
<field type="CharField" name="record_type"></field>
|
||||||
|
<field type="CharField" name="name_prefix"></field>
|
||||||
|
<field type="CharField" name="first_name">Snow</field>
|
||||||
|
<field type="CharField" name="first_name_key">SNOW</field>
|
||||||
|
<field type="CharField" name="middle_initial"></field>
|
||||||
|
<field type="CharField" name="middle_initial_key"></field>
|
||||||
|
<field type="CharField" name="last_name">Miser</field>
|
||||||
|
<field type="CharField" name="last_name_key">MISER</field>
|
||||||
|
<field type="CharField" name="name_suffix"></field>
|
||||||
|
<field type="DateField" name="date_modified">2007-07-02</field>
|
||||||
|
<field type="CharField" name="modified_by"></field>
|
||||||
|
<field type="DateField" name="date_created">2007-07-02</field>
|
||||||
|
<field type="CharField" name="created_by"></field>
|
||||||
|
<field type="CharField" name="address_type"></field>
|
||||||
|
</object>
|
||||||
|
<object pk="3" model="idtracker.personororginfo">
|
||||||
|
<field type="CharField" name="record_type"></field>
|
||||||
|
<field type="CharField" name="name_prefix"></field>
|
||||||
|
<field type="CharField" name="first_name">Rudolph</field>
|
||||||
|
<field type="CharField" name="first_name_key">RUDOLPH</field>
|
||||||
|
<field type="CharField" name="middle_initial"></field>
|
||||||
|
<field type="CharField" name="middle_initial_key"></field>
|
||||||
|
<field type="CharField" name="last_name">Reindeer</field>
|
||||||
|
<field type="CharField" name="last_name_key">REINDEER</field>
|
||||||
|
<field type="CharField" name="name_suffix"></field>
|
||||||
|
<field type="DateField" name="date_modified">2007-07-02</field>
|
||||||
|
<field type="CharField" name="modified_by"></field>
|
||||||
|
<field type="DateField" name="date_created">2007-07-02</field>
|
||||||
|
<field type="CharField" name="created_by"></field>
|
||||||
|
<field type="CharField" name="address_type"></field>
|
||||||
|
</object>
|
||||||
|
<object pk="1" model="idtracker.wgchair">
|
||||||
|
<field to="idtracker.personororginfo" name="person" rel="ManyToOneRel">1</field>
|
||||||
|
<field to="idtracker.ietfwg" name="group_acronym" rel="ManyToOneRel">1</field>
|
||||||
|
</object>
|
||||||
|
<object pk="2" model="idtracker.wgchair">
|
||||||
|
<field to="idtracker.personororginfo" name="person" rel="ManyToOneRel">2</field>
|
||||||
|
<field to="idtracker.ietfwg" name="group_acronym" rel="ManyToOneRel">2</field>
|
||||||
|
</object>
|
||||||
|
<object pk="1" model="idtracker.ietfwg">
|
||||||
|
<field to="idtracker.wgtype" name="group_type" rel="ManyToOneRel">1</field>
|
||||||
|
<field type="DateField" name="proposed_date"><None></None></field>
|
||||||
|
<field type="DateField" name="start_date"><None></None></field>
|
||||||
|
<field type="DateField" name="dormant_date"><None></None></field>
|
||||||
|
<field type="DateField" name="concluded_date"><None></None></field>
|
||||||
|
<field to="idtracker.wgstatus" name="status" rel="ManyToOneRel">1</field>
|
||||||
|
<field to="idtracker.areadirector" name="area_director" rel="ManyToOneRel"><None></None></field>
|
||||||
|
<field type="CharField" name="meeting_scheduled"></field>
|
||||||
|
<field type="CharField" name="email_address"></field>
|
||||||
|
<field type="CharField" name="email_subscribe"></field>
|
||||||
|
<field type="CharField" name="email_keyword"></field>
|
||||||
|
<field type="CharField" name="email_archive"></field>
|
||||||
|
<field type="TextField" name="comments"></field>
|
||||||
|
<field type="DateField" name="last_modified_date">2007-07-02</field>
|
||||||
|
<field type="CharField" name="meeting_scheduled_old"></field>
|
||||||
|
</object>
|
||||||
|
<object pk="2" model="idtracker.ietfwg">
|
||||||
|
<field to="idtracker.wgtype" name="group_type" rel="ManyToOneRel">3</field>
|
||||||
|
<field type="DateField" name="proposed_date"><None></None></field>
|
||||||
|
<field type="DateField" name="start_date"><None></None></field>
|
||||||
|
<field type="DateField" name="dormant_date"><None></None></field>
|
||||||
|
<field type="DateField" name="concluded_date"><None></None></field>
|
||||||
|
<field to="idtracker.wgstatus" name="status" rel="ManyToOneRel">1</field>
|
||||||
|
<field to="idtracker.areadirector" name="area_director" rel="ManyToOneRel"><None></None></field>
|
||||||
|
<field type="CharField" name="meeting_scheduled"></field>
|
||||||
|
<field type="CharField" name="email_address"></field>
|
||||||
|
<field type="CharField" name="email_subscribe"></field>
|
||||||
|
<field type="CharField" name="email_keyword"></field>
|
||||||
|
<field type="CharField" name="email_archive"></field>
|
||||||
|
<field type="TextField" name="comments"></field>
|
||||||
|
<field type="DateField" name="last_modified_date">2007-07-02</field>
|
||||||
|
<field type="CharField" name="meeting_scheduled_old"></field>
|
||||||
|
</object>
|
||||||
|
<object pk="1" model="idtracker.acronym">
|
||||||
|
<field type="CharField" name="acronym">xmas</field>
|
||||||
|
<field type="CharField" name="name">Christmas</field>
|
||||||
|
<field type="CharField" name="name_key">CHRISTMAS</field>
|
||||||
|
</object>
|
||||||
|
<object pk="2" model="idtracker.acronym">
|
||||||
|
<field type="CharField" name="acronym">snow</field>
|
||||||
|
<field type="CharField" name="name">Silly New Operational Work</field>
|
||||||
|
<field type="CharField" name="name_key">SILLY NEW OPERATIONAL WORK</field>
|
||||||
|
</object>
|
||||||
|
<object pk="1" model="idtracker.wgtype">
|
||||||
|
<field type="CharField" name="type">WG</field>
|
||||||
|
</object>
|
||||||
|
<object pk="2" model="idtracker.wgtype">
|
||||||
|
<field type="CharField" name="type">PWG</field>
|
||||||
|
</object>
|
||||||
|
<object pk="3" model="idtracker.wgtype">
|
||||||
|
<field type="CharField" name="type">BOF</field>
|
||||||
|
</object>
|
||||||
|
<object pk="4" model="idtracker.wgtype">
|
||||||
|
<field type="CharField" name="type">AG</field>
|
||||||
|
</object>
|
||||||
|
<object pk="5" model="idtracker.wgtype">
|
||||||
|
<field type="CharField" name="type">TEAM</field>
|
||||||
|
</object>
|
||||||
|
<object pk="1" model="idtracker.wgstatus">
|
||||||
|
<field type="CharField" name="status">Active</field>
|
||||||
|
</object>
|
||||||
|
<object pk="2" model="idtracker.wgstatus">
|
||||||
|
<field type="CharField" name="status">Dormant</field>
|
||||||
|
</object>
|
||||||
|
<object pk="3" model="idtracker.wgstatus">
|
||||||
|
<field type="CharField" name="status">Concluded</field>
|
||||||
|
</object>
|
||||||
|
<object pk="1" model="idtracker.wgtechadvisor">
|
||||||
|
<field to="idtracker.ietfwg" name="group_acronym" rel="ManyToOneRel">1</field>
|
||||||
|
<field to="idtracker.personororginfo" name="person" rel="ManyToOneRel">3</field>
|
||||||
|
</object>
|
||||||
|
<object pk="1" model="idtracker.wgsecretary">
|
||||||
|
<field to="idtracker.ietfwg" name="group_acronym" rel="ManyToOneRel">1</field>
|
||||||
|
<field to="idtracker.personororginfo" name="person" rel="ManyToOneRel">4</field>
|
||||||
|
</object>
|
||||||
|
</django-objects>
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from ietf.utils import FKAsOneToOne
|
from ietf.utils import FKAsOneToOne
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
class Acronym(models.Model):
|
class Acronym(models.Model):
|
||||||
acronym_id = models.AutoField(primary_key=True)
|
acronym_id = models.AutoField(primary_key=True)
|
||||||
|
@ -760,7 +761,7 @@ class WGChair(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s (%s)" % ( self.person, self.role() )
|
return "%s (%s)" % ( self.person, self.role() )
|
||||||
def role(self):
|
def role(self):
|
||||||
return "%s %s Chair" % ( self.group_acronym.acronym, self.group_acronym.group_type )
|
return "%s %s Chair" % ( self.group_acronym, self.group_acronym.group_type )
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'g_chairs'
|
db_table = 'g_chairs'
|
||||||
verbose_name = "WG Chair"
|
verbose_name = "WG Chair"
|
||||||
|
@ -781,7 +782,7 @@ class WGSecretary(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s (%s)" % ( self.person, self.role() )
|
return "%s (%s)" % ( self.person, self.role() )
|
||||||
def role(self):
|
def role(self):
|
||||||
return "%s %s Secretary" % ( self.group_acronym.acronym, self.group_acronym.group_type )
|
return "%s %s Secretary" % ( self.group_acronym, self.group_acronym.group_type )
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'g_secretaries'
|
db_table = 'g_secretaries'
|
||||||
verbose_name = "WG Secretary"
|
verbose_name = "WG Secretary"
|
||||||
|
@ -793,7 +794,7 @@ class WGTechAdvisor(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "%s (%s)" % ( self.person, self.role() )
|
return "%s (%s)" % ( self.person, self.role() )
|
||||||
def role(self):
|
def role(self):
|
||||||
return "%s Technical Advisor" % self.group_acronym.acronym
|
return "%s Technical Advisor" % self.group_acronym
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'g_tech_advisors'
|
db_table = 'g_tech_advisors'
|
||||||
verbose_name = "WG Technical Advisor"
|
verbose_name = "WG Technical Advisor"
|
||||||
|
@ -833,6 +834,19 @@ class GoalMilestone(models.Model):
|
||||||
list_filter = ['done']
|
list_filter = ['done']
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class WGRoleTest(TestCase):
|
||||||
|
fixtures = ['wgtest']
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.xmas = IETFWG.objects.get(group_acronym__acronym='xmas')
|
||||||
|
self.snow = IETFWG.objects.get(group_acronym__acronym='snow')
|
||||||
|
|
||||||
|
def test_roles(self):
|
||||||
|
self.assertEquals(self.xmas.wgchair_set.all()[0].role(), 'xmas WG Chair')
|
||||||
|
self.assertEquals(self.snow.wgchair_set.all()[0].role(), 'snow BOF Chair')
|
||||||
|
self.assertEquals(self.xmas.wgsecretary_set.all()[0].role(), 'xmas WG Secretary')
|
||||||
|
self.assertEquals(self.xmas.wgtechadvisor_set.all()[0].role(), 'xmas Technical Advisor')
|
||||||
|
|
||||||
#### end wg stuff
|
#### end wg stuff
|
||||||
|
|
||||||
class Role(models.Model):
|
class Role(models.Model):
|
||||||
|
@ -905,3 +919,4 @@ class DocumentWrapper(object):
|
||||||
primary_flag = 1
|
primary_flag = 1
|
||||||
def __init__(self, document):
|
def __init__(self, document):
|
||||||
self.document = document
|
self.document = document
|
||||||
|
|
||||||
|
|
|
@ -25,24 +25,62 @@ def expand_comma(value):
|
||||||
def parse_email_list(value):
|
def parse_email_list(value):
|
||||||
"""
|
"""
|
||||||
Parse a list of comma-seperated email addresses into
|
Parse a list of comma-seperated email addresses into
|
||||||
a list of mailto: links."""
|
a list of mailto: links.
|
||||||
addrs = re.split(", ?", value)
|
|
||||||
ret = []
|
|
||||||
for addr in addrs:
|
|
||||||
(name, email) = emailutils.parseaddr(addr)
|
|
||||||
if not(name):
|
|
||||||
name = email
|
|
||||||
ret.append('<a href="mailto:%s">%s</a>' % ( fix_ampersands(email), escape(name) ))
|
|
||||||
return ", ".join(ret)
|
|
||||||
|
|
||||||
|
Splitting a string of email addresses should return a list:
|
||||||
|
|
||||||
|
>>> parse_email_list('joe@example.org, fred@example.com')
|
||||||
|
'<a href="mailto:joe@example.org">joe@example.org</a>, <a href="mailto:fred@example.com">fred@example.com</a>'
|
||||||
|
|
||||||
|
Parsing a non-string should return the input value, rather than fail:
|
||||||
|
|
||||||
|
>>> parse_email_list(['joe@example.org', 'fred@example.com'])
|
||||||
|
['joe@example.org', 'fred@example.com']
|
||||||
|
|
||||||
|
Null input values should pass through silently:
|
||||||
|
|
||||||
|
>>> parse_email_list('')
|
||||||
|
''
|
||||||
|
|
||||||
|
>>> parse_email_list(None)
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
if value and type(value) == type(""): # testing for 'value' being true isn't necessary; it's a fast-out route
|
||||||
|
addrs = re.split(", ?", value)
|
||||||
|
ret = []
|
||||||
|
for addr in addrs:
|
||||||
|
(name, email) = emailutils.parseaddr(addr)
|
||||||
|
if not(name):
|
||||||
|
name = email
|
||||||
|
ret.append('<a href="mailto:%s">%s</a>' % ( fix_ampersands(email), escape(name) ))
|
||||||
|
return ", ".join(ret)
|
||||||
|
else:
|
||||||
|
return value
|
||||||
|
|
||||||
# there's an "ahref -> a href" in GEN_UTIL
|
# there's an "ahref -> a href" in GEN_UTIL
|
||||||
# but let's wait until we understand what that's for.
|
# but let's wait until we understand what that's for.
|
||||||
@register.filter(name='make_one_per_line')
|
@register.filter(name='make_one_per_line')
|
||||||
def make_one_per_line(value):
|
def make_one_per_line(value):
|
||||||
"""
|
"""
|
||||||
Turn a comma-separated list into a carraige-return-seperated list."""
|
Turn a comma-separated list into a carraige-return-seperated list.
|
||||||
return re.sub(", ?", "\n", value)
|
|
||||||
|
|
||||||
|
>>> make_one_per_line("a, b, c")
|
||||||
|
'a\\nb\\nc'
|
||||||
|
|
||||||
|
Pass through non-strings:
|
||||||
|
|
||||||
|
>>> make_one_per_line([1, 2])
|
||||||
|
[1, 2]
|
||||||
|
|
||||||
|
>>> make_one_per_line(None)
|
||||||
|
|
||||||
|
"""
|
||||||
|
if value and type(value) == type(""):
|
||||||
|
return re.sub(", ?", "\n", value)
|
||||||
|
else:
|
||||||
|
return value
|
||||||
|
|
||||||
@register.filter(name='link_if_url')
|
@register.filter(name='link_if_url')
|
||||||
def link_if_url(value):
|
def link_if_url(value):
|
||||||
"""
|
"""
|
||||||
|
@ -174,3 +212,10 @@ def inpast(date):
|
||||||
if date:
|
if date:
|
||||||
return date < datetime.datetime.now()
|
return date < datetime.datetime.now()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def _test():
|
||||||
|
import doctest
|
||||||
|
doctest.testmod()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
_test()
|
||||||
|
|
29
ietf/idtracker/templatetags/versiontags.py
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||||
|
|
||||||
|
from django import template
|
||||||
|
from ietf import __date__, __rev__, __version__, __id__
|
||||||
|
|
||||||
|
|
||||||
|
register = template.Library()
|
||||||
|
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def revision_time():
|
||||||
|
return __date__[7:32]
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def revision_date():
|
||||||
|
return __date__[34:-3]
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def revision_num():
|
||||||
|
return __rev__[6:-2]
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def revision_id():
|
||||||
|
return __id__[5:-2]
|
||||||
|
|
||||||
|
@register.simple_tag
|
||||||
|
def version_num():
|
||||||
|
return __version__
|
||||||
|
|
12
ietf/idtracker/tests.py
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#import doctest
|
||||||
|
#import templatetags.ietf_filters
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
class IDTrackerTest(TestCase):
|
||||||
|
def testDoctest(self):
|
||||||
|
# doctests in models.py will be automatically tested when running
|
||||||
|
# django's 'test' command, but for other modules we need to make a
|
||||||
|
# bit of extra effort to have doctests run.
|
||||||
|
|
||||||
|
#doctest.testmod(templatetags.ietf_filters)
|
||||||
|
pass
|
|
@ -8,7 +8,7 @@
|
||||||
200 /idtracker/status/
|
200 /idtracker/status/
|
||||||
skipdiff,200 /idtracker/status/last-call/ https://datatracker.ietf.org/public/lastcall.cgi
|
skipdiff,200 /idtracker/status/last-call/ https://datatracker.ietf.org/public/lastcall.cgi
|
||||||
200 /idtracker/rfc3847/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=3847&rfc_flag=1
|
200 /idtracker/rfc3847/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=3847&rfc_flag=1
|
||||||
200 /idtracker/12689/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12689&rfc_flag=0
|
301,skipdiff /idtracker/12689/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12689&rfc_flag=0
|
||||||
skipredirect,200 /idtracker/draft-ietf-isis-link-attr/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12689&rfc_flag=0
|
skipredirect,200 /idtracker/draft-ietf-isis-link-attr/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12689&rfc_flag=0
|
||||||
skipredirect,200 /idtracker/draft-ietf-isis-link-attr/comment/65232/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_comment&id=65232
|
skipredirect,200 /idtracker/draft-ietf-isis-link-attr/comment/65232/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_comment&id=65232
|
||||||
200 /idtracker/comment/65232/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_comment&id=65232
|
200 /idtracker/comment/65232/ https://datatracker.ietf.org/public/pidtracker.cgi?command=view_comment&id=65232
|
||||||
|
|
|
@ -30,9 +30,9 @@ urlpatterns += patterns('',
|
||||||
)
|
)
|
||||||
urlpatterns += patterns('django.views.generic.list_detail',
|
urlpatterns += patterns('django.views.generic.list_detail',
|
||||||
(r'^rfc(?P<object_id>\d+)/$', 'object_detail', rfc_dict),
|
(r'^rfc(?P<object_id>\d+)/$', 'object_detail', rfc_dict),
|
||||||
(r'^(?P<object_id>\d+)/$', 'object_detail', id_dict),
|
|
||||||
)
|
)
|
||||||
urlpatterns += patterns('',
|
urlpatterns += patterns('',
|
||||||
|
(r'^(?P<object_id>\d+)/$', views.redirect_id),
|
||||||
(r'^(?P<slug>[^/]+)/$', views.view_id, dict(id_dict, slug_field='draft__filename')),
|
(r'^(?P<slug>[^/]+)/$', views.view_id, dict(id_dict, slug_field='draft__filename')),
|
||||||
(r'^comment/(?P<object_id>\d+)/$', views.view_comment, comment_dict),
|
(r'^comment/(?P<object_id>\d+)/$', views.view_comment, comment_dict),
|
||||||
(r'^ballot/(?P<object_id>\d+)/$', views.view_ballot, ballot_dict),
|
(r'^ballot/(?P<object_id>\d+)/$', views.view_ballot, ballot_dict),
|
||||||
|
|
|
@ -1,15 +1,17 @@
|
||||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
|
||||||
from django import newforms as forms
|
from django import newforms as forms
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.shortcuts import get_object_or_404, render_to_response
|
from django.shortcuts import get_object_or_404, render_to_response
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
from django.core.urlresolvers import reverse
|
||||||
from django.views.generic.list_detail import object_detail, object_list
|
from django.views.generic.list_detail import object_detail, object_list
|
||||||
from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState, Rfc, DocumentWrapper
|
from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState, Rfc, DocumentWrapper
|
||||||
from ietf.idtracker.forms import IDSearch, EmailFeedback
|
from ietf.idtracker.forms import IDSearch, EmailFeedback
|
||||||
from ietf.utils.mail import send_mail_text
|
from ietf.utils.mail import send_mail_text
|
||||||
|
from ietf.utils import normalize_draftname
|
||||||
import re
|
import re
|
||||||
|
|
||||||
# Override default form field mappings
|
# Override default form field mappings
|
||||||
|
@ -33,6 +35,8 @@ def search(request):
|
||||||
# "job_owner" of "0" means "All/Any"
|
# "job_owner" of "0" means "All/Any"
|
||||||
if args.get('search_job_owner', '') == '0':
|
if args.get('search_job_owner', '') == '0':
|
||||||
args['search_job_owner'] = ''
|
args['search_job_owner'] = ''
|
||||||
|
if args.has_key('search_filename'):
|
||||||
|
args['search_filename'] = normalize_draftname(args['search_filename'])
|
||||||
form = IDSearch(args)
|
form = IDSearch(args)
|
||||||
# if there's a post, do the search and supply results to the template
|
# if there's a post, do the search and supply results to the template
|
||||||
searching = False
|
searching = False
|
||||||
|
@ -187,6 +191,11 @@ def last_call(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_id')
|
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_id')
|
||||||
return object_list(request, template_name="idtracker/status_of_items.html", queryset=queryset, extra_context={'title': 'Documents in Last Call'})
|
return object_list(request, template_name="idtracker/status_of_items.html", queryset=queryset, extra_context={'title': 'Documents in Last Call'})
|
||||||
|
|
||||||
|
def redirect_id(request, object_id):
|
||||||
|
'''Redirect from historical document ID to preferred filename url.'''
|
||||||
|
doc = get_object_or_404(InternetDraft, id_document_tag=object_id)
|
||||||
|
return HttpResponsePermanentRedirect(reverse(view_id, args=[doc.filename]))
|
||||||
|
|
||||||
# Wrappers around object_detail to give permalink a handle.
|
# Wrappers around object_detail to give permalink a handle.
|
||||||
# The named-URLs feature in django 0.97 will eliminate the
|
# The named-URLs feature in django 0.97 will eliminate the
|
||||||
# need for these.
|
# need for these.
|
||||||
|
|
|
@ -15,7 +15,7 @@ class IESGMinutes(Feed):
|
||||||
return TelechatMinutes.objects.order_by('-telechat_date')[:10]
|
return TelechatMinutes.objects.order_by('-telechat_date')[:10]
|
||||||
|
|
||||||
def item_link(self, item):
|
def item_link(self, item):
|
||||||
return "/iesg/telechat/detail/%d/" % (item.id)
|
return "/iesg/telechat/%d/" % (item.id)
|
||||||
|
|
||||||
# The approval date isn't stored, so let's just say they're
|
# The approval date isn't stored, so let's just say they're
|
||||||
# published on the date of the telechat.
|
# published on the date of the telechat.
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
200 /iesg/telechat/354/ https://datatracker.ietf.org/public/view_telechat_minute.cgi?command=view_minute&id=354
|
200 /iesg/telechat/354/ https://datatracker.ietf.org/public/view_telechat_minute.cgi?command=view_minute&id=354
|
||||||
200,sort /iesg/ann/ind/ https://datatracker.ietf.org/public/rfc_editor_announcement.cgi
|
200,sort /iesg/ann/ind/ https://datatracker.ietf.org/public/rfc_editor_announcement.cgi
|
||||||
200,sort,ignore:1 /iesg/ann/new/ https://datatracker.ietf.org/public/recent_announcement.cgi
|
200,sort,ignore:1 /iesg/ann/new/ https://datatracker.ietf.org/public/recent_announcement.cgi
|
||||||
200,sort /iesg/ann/prev/ https://datatracker.ietf.org/public/previous_announcement.cgi
|
# This takes ~ 300s:
|
||||||
|
#200,sort /iesg/ann/prev/ https://datatracker.ietf.org/public/previous_announcement.cgi
|
||||||
200 /iesg/ann/2422/ https://datatracker.ietf.org/public/recent_announcement.cgi?command=show_detail&ballot_id=2422
|
200 /iesg/ann/2422/ https://datatracker.ietf.org/public/recent_announcement.cgi?command=show_detail&ballot_id=2422
|
||||||
200 /iesg/ann/1563/ https://datatracker.ietf.org/public/previous_announcement.cgi?command=show_detail&ballot_id=1563
|
200 /iesg/ann/1563/ https://datatracker.ietf.org/public/previous_announcement.cgi?command=show_detail&ballot_id=1563
|
||||||
404 /iesg/ann/567/
|
404 /iesg/ann/567/
|
||||||
|
|
|
@ -6,7 +6,7 @@ import ietf.utils
|
||||||
import django.newforms as forms
|
import django.newforms as forms
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from django.shortcuts import render_to_response as render
|
from django.shortcuts import render_to_response as render, get_object_or_404
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from ietf.utils import log
|
from ietf.utils import log
|
||||||
|
@ -313,6 +313,14 @@ def new(request, type, update=None, submitter=None):
|
||||||
|
|
||||||
def update(request, ipr_id=None):
|
def update(request, ipr_id=None):
|
||||||
"""Update a specific IPR disclosure"""
|
"""Update a specific IPR disclosure"""
|
||||||
|
ipr = get_object_or_404(models.IprDetail, ipr_id=ipr_id)
|
||||||
|
if not ipr.status in [1,3]:
|
||||||
|
raise Http404
|
||||||
|
type = "specific"
|
||||||
|
if ipr.generic:
|
||||||
|
type = "generic"
|
||||||
|
if ipr.third_party:
|
||||||
|
type = "third-party"
|
||||||
# We're either asking for initial permission or we're in
|
# We're either asking for initial permission or we're in
|
||||||
# the general ipr form. If the POST argument has the first
|
# the general ipr form. If the POST argument has the first
|
||||||
# field of the ipr form, then we must be dealing with that,
|
# field of the ipr form, then we must be dealing with that,
|
||||||
|
@ -332,18 +340,10 @@ def update(request, ipr_id=None):
|
||||||
if not(form.is_valid()):
|
if not(form.is_valid()):
|
||||||
for error in form.errors:
|
for error in form.errors:
|
||||||
log("Form error for field: %s: %s"%(error, form.errors[error]))
|
log("Form error for field: %s: %s"%(error, form.errors[error]))
|
||||||
return render("ipr/update.html", {"form": form}, context_instance=RequestContext(request))
|
return render("ipr/update.html", {"form": form, "ipr": ipr, "type": type}, context_instance=RequestContext(request))
|
||||||
else:
|
else:
|
||||||
submitter = form.clean_data
|
submitter = form.clean_data
|
||||||
|
|
||||||
ipr = models.IprDetail.objects.get(ipr_id=ipr_id)
|
|
||||||
if not ipr.status in [1,3]:
|
|
||||||
raise Http404
|
|
||||||
type = "specific"
|
|
||||||
if ipr.generic:
|
|
||||||
type = "generic"
|
|
||||||
if ipr.third_party:
|
|
||||||
type = "third-party"
|
|
||||||
return new(request, type, ipr, submitter)
|
return new(request, type, ipr, submitter)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ from django.conf import settings
|
||||||
from ietf.idtracker.models import IETFWG, InternetDraft, Rfc
|
from ietf.idtracker.models import IETFWG, InternetDraft, Rfc
|
||||||
from ietf.ipr.models import IprRfc, IprDraft, IprDetail
|
from ietf.ipr.models import IprRfc, IprDraft, IprDetail
|
||||||
from ietf.ipr.related import related_docs
|
from ietf.ipr.related import related_docs
|
||||||
from ietf.utils import log
|
from ietf.utils import log, normalize_draftname
|
||||||
|
|
||||||
|
|
||||||
def mark_last_doc(iprs):
|
def mark_last_doc(iprs):
|
||||||
|
@ -80,8 +80,10 @@ def search(request, type="", q="", id=""):
|
||||||
# Search by RFC number or draft-identifier
|
# Search by RFC number or draft-identifier
|
||||||
# Document list with IPRs
|
# Document list with IPRs
|
||||||
if type in ["document_search", "rfc_search"]:
|
if type in ["document_search", "rfc_search"]:
|
||||||
|
doc = q
|
||||||
if type == "document_search":
|
if type == "document_search":
|
||||||
if q:
|
if q:
|
||||||
|
q = normalize_draftname(q)
|
||||||
start = InternetDraft.objects.filter(filename__contains=q)
|
start = InternetDraft.objects.filter(filename__contains=q)
|
||||||
if id:
|
if id:
|
||||||
start = InternetDraft.objects.filter(id_document_tag=id)
|
start = InternetDraft.objects.filter(id_document_tag=id)
|
||||||
|
@ -90,18 +92,20 @@ def search(request, type="", q="", id=""):
|
||||||
start = Rfc.objects.filter(rfc_number=q)
|
start = Rfc.objects.filter(rfc_number=q)
|
||||||
if start.count() == 1:
|
if start.count() == 1:
|
||||||
first = start[0]
|
first = start[0]
|
||||||
|
doc = str(first)
|
||||||
# get all related drafts, then search for IPRs on all
|
# get all related drafts, then search for IPRs on all
|
||||||
|
|
||||||
docs = related_docs(first, [])
|
docs = related_docs(first, [])
|
||||||
#docs = get_doclist.get_doclist(first)
|
#docs = get_doclist.get_doclist(first)
|
||||||
iprs, docs = iprs_from_docs(docs)
|
iprs, docs = iprs_from_docs(docs)
|
||||||
return render("ipr/search_doc_result.html", {"q": q, "first": first, "iprs": iprs, "docs": docs},
|
return render("ipr/search_doc_result.html", {"q": q, "first": first, "iprs": iprs, "docs": docs, "doc": doc },
|
||||||
context_instance=RequestContext(request) )
|
context_instance=RequestContext(request) )
|
||||||
elif start.count():
|
elif start.count():
|
||||||
return render("ipr/search_doc_list.html", {"q": q, "docs": start },
|
return render("ipr/search_doc_list.html", {"q": q, "docs": start },
|
||||||
context_instance=RequestContext(request) )
|
context_instance=RequestContext(request) )
|
||||||
else:
|
else:
|
||||||
raise ValueError("Missing or malformed search parameters, or internal error")
|
return render("ipr/search_doc_result.html", {"q": q, "first": {}, "iprs": {}, "docs": {}, "doc": doc },
|
||||||
|
context_instance=RequestContext(request) )
|
||||||
|
|
||||||
# Search by legal name
|
# Search by legal name
|
||||||
# IPR list with documents
|
# IPR list with documents
|
||||||
|
|
|
@ -1,26 +1,32 @@
|
||||||
# -*- conf-mode -*-
|
# -*- conf-mode -*-
|
||||||
200 /ipr/ https://datatracker.ietf.org/public/ipr_list.cgi
|
200 /ipr/ https://datatracker.ietf.org/public/ipr_list.cgi
|
||||||
200 /ipr/ipr-657/ https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=657 # Generic disclosure
|
200 /ipr/657/ https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=657 # Generic disclosure
|
||||||
200 /ipr/ipr-834/ https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=834 # Specific disclosure
|
200 /ipr/834/ https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=834 # Specific disclosure
|
||||||
200 /ipr/ipr-795/ https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=795 # Third-party disclosure
|
200 /ipr/795/ https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=795 # Third-party disclosure
|
||||||
200 /ipr/new-generic/ https://datatracker.ietf.org/public/ipr_generic.cgi
|
200 /ipr/new-generic/ https://datatracker.ietf.org/public/ipr_generic.cgi
|
||||||
200 /ipr/new-specific/ https://datatracker.ietf.org/public/ipr.cgi
|
200 /ipr/new-specific/ https://datatracker.ietf.org/public/ipr.cgi
|
||||||
200 /ipr/new-third-party/ https://datatracker.ietf.org/public/ipr_notify.cgi
|
200 /ipr/new-third-party/ https://datatracker.ietf.org/public/ipr_notify.cgi
|
||||||
200 /ipr/update/ https://datatracker.ietf.org/public/ipr_update_list.cgi
|
200 /ipr/update/ https://datatracker.ietf.org/public/ipr_update_list.cgi
|
||||||
|
|
||||||
200 /ipr/update/657/ https://datatracker.ietf.org/public/ipr_generic.cgi?command=update_ipr&ipr_id=657
|
200 /ipr/update/657/ https://datatracker.ietf.org/public/ipr_generic.cgi?command=update_ipr&ipr_id=657
|
||||||
|
200 /ipr/update/820/ https://datatracker.ietf.org/public/ipr_notify.cgi?command=update_ipr&ipr_id=820
|
||||||
|
200 /ipr/update/844/ https://datatracker.ietf.org/public/ipr.cgi?command=update_ipr&ipr_id=844
|
||||||
|
|
||||||
200 /ipr/search/ https://datatracker.ietf.org/public/ipr_search.cgi
|
200 /ipr/search/ https://datatracker.ietf.org/public/ipr_search.cgi
|
||||||
302 /ipr/search/?option=document_search # incomplete argument set gives redirect
|
302 /ipr/search/?option=document_search # incomplete argument set gives redirect
|
||||||
|
|
||||||
200 /ipr/search/?document_search=mod&option=document_search https://datatracker.ietf.org/public/ipr_search.cgi?option=document_search&document_search=mod
|
200 /ipr/search/?document_search=mod&option=document_search https://datatracker.ietf.org/public/ipr_search.cgi?option=document_search&document_search=mod
|
||||||
200,sort /ipr/search/?id_document_tag=2220&option=document_search https://datatracker.ietf.org/public/ipr_search.cgi?option=document_search&id_document_tag=2220
|
200,sort /ipr/search/?id_document_tag=2220&option=document_search https://datatracker.ietf.org/public/ipr_search.cgi?option=document_search&id_document_tag=2220
|
||||||
|
200,skipredirect /ipr/search/?option=document_search&document_search=draft-housley-tls-authz-extns-05 https://datatracker.ietf.org/ipr/search/?option=document_search&document_search=draft-housley-tls-authz-extns
|
||||||
|
200,skipredirect /ipr/search/?option=document_search&document_search=draft-housley-tls-authz-extns-05.txt https://datatracker.ietf.org/ipr/search/?option=document_search&document_search=draft-housley-tls-authz-extns
|
||||||
|
|
||||||
200,sort /ipr/search/?rfc_search=1034&option=rfc_search https://datatracker.ietf.org/public/ipr_search.cgi?option=rfc_search&rfc_search=1034 # Loong result, RFC search
|
# This takes ~ 300s:
|
||||||
200 /ipr/search/?rfc_search=4444&option=rfc_search https://datatracker.ietf.org/public/ipr_search.cgi?option=rfc_search&rfc_search=4444 # Empty result, RFC search
|
#200,sort /ipr/search/?rfc_search=1034&option=rfc_search https://datatracker.ietf.org/public/ipr_search.cgi?option=rfc_search&rfc_search=1034 # Loong result, RFC search
|
||||||
|
200,sort /ipr/search/?rfc_search=1032&option=rfc_search https://datatracker.ietf.org/public/ipr_search.cgi?option=rfc_search&rfc_search=1032 # Loong result, RFC search
|
||||||
|
200 /ipr/search/?rfc_search=4444&option=rfc_search https://datatracker.ietf.org/public/ipr_search.cgi?option=rfc_search&rfc_search=4444 # Empty result, RFC search
|
||||||
|
|
||||||
200 /ipr/search/?patent_search=nortel&option=patent_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_search&patent_search=nortel
|
200 /ipr/search/?patent_search=nortel&option=patent_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_search&patent_search=nortel
|
||||||
200 /ipr/search/?patent_search=nortelxz&option=patent_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_search&patent_search=nortelxz # Empty result
|
200 /ipr/search/?patent_search=nortelxz&option=patent_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_search&patent_search=nortelxz # Empty result
|
||||||
|
|
||||||
200,sort,ignore:quote /ipr/search/?wg_search=dnsext&option=wg_search https://datatracker.ietf.org/public/ipr_search.cgi?option=wg_search&wg_search=dnsext
|
200,sort,ignore:quote /ipr/search/?wg_search=dnsext&option=wg_search https://datatracker.ietf.org/public/ipr_search.cgi?option=wg_search&wg_search=dnsext
|
||||||
#200,sort,ignore:quote /ipr/search/?wg_search=aaa&option=wg_search https://datatracker.ietf.org/public/ipr_search.cgi?option=wg_search&wg_search=aaa # FIXME This fails, needs revisiting
|
#200,sort,ignore:quote /ipr/search/?wg_search=aaa&option=wg_search https://datatracker.ietf.org/public/ipr_search.cgi?option=wg_search&wg_search=aaa # FIXME This fails, needs revisiting
|
||||||
|
@ -29,17 +35,17 @@
|
||||||
200,sort,ignore:quote /ipr/search/?option=title_search&title_search=AAA https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAA
|
200,sort,ignore:quote /ipr/search/?option=title_search&title_search=AAA https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAA
|
||||||
200,sort,ignore:quote /ipr/search/?option=title_search&title_search=AAAxz https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAAxz # Empty result
|
200,sort,ignore:quote /ipr/search/?option=title_search&title_search=AAAxz https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAAxz # Empty result
|
||||||
|
|
||||||
200,sort /ipr/search/?patent_info_search=123&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=123
|
200,sort /ipr/search/?patent_info_search=123&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=123
|
||||||
200,sort /ipr/search/?patent_info_search=31415&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=31415 # Empty result
|
200,sort /ipr/search/?patent_info_search=31415&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=31415 # Empty result
|
||||||
|
|
||||||
200 /ipr/search/?patent_info_search=12&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=12 # Error: at least 3 characters
|
200 /ipr/search/?patent_info_search=12&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=12 # Error: at least 3 characters
|
||||||
200 /ipr/search/?patent_info_search=abc&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=abc # Error: at least 1 digit
|
200 /ipr/search/?patent_info_search=abc&option=patent_info_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_info_search&patent_info_search=abc # Error: at least 1 digit
|
||||||
|
|
||||||
200 /ipr/search/?option=ipr_title_search&ipr_title_search=nortel https://datatracker.ietf.org/public/ipr_search.cgi?option=ipr_title_search&ipr_title_search=nortel
|
200 /ipr/search/?option=ipr_title_search&ipr_title_search=nortel https://datatracker.ietf.org/public/ipr_search.cgi?option=ipr_title_search&ipr_title_search=nortel
|
||||||
200 /ipr/search/?option=ipr_title_search&ipr_title_search=nortelxz https://datatracker.ietf.org/public/ipr_search.cgi?option=ipr_title_search&ipr_title_search=nortelxz # Empty result
|
200 /ipr/search/?option=ipr_title_search&ipr_title_search=nortelxz https://datatracker.ietf.org/public/ipr_search.cgi?option=ipr_title_search&ipr_title_search=nortelxz # Empty result
|
||||||
|
|
||||||
|
|
||||||
200 /ipr/about/ https://datatracker.ietf.org/public/ipr_disclosure.cgi
|
200 /ipr/about/ https://datatracker.ietf.org/public/ipr_disclosure.cgi
|
||||||
200 /ipr/2006/
|
200 /ipr/y/2006/
|
||||||
200 /ipr/2006/feb/
|
200 /ipr/y/2006/feb/
|
||||||
200 /ipr/by-date/
|
200 /ipr/by-date/
|
||||||
|
|
|
@ -6,7 +6,7 @@ from ietf.ipr import models, views, new, search
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
(r'^$', views.showlist),
|
(r'^$', views.showlist),
|
||||||
(r'^about/$', views.default),
|
(r'^about/$', views.default),
|
||||||
(r'^ipr-(?P<ipr_id>\d+)/$', views.show),
|
(r'^(?P<ipr_id>\d+)/$', views.show),
|
||||||
(r'^update/$', views.updatelist),
|
(r'^update/$', views.updatelist),
|
||||||
(r'^update/(?P<ipr_id>\d+)/$', new.update),
|
(r'^update/(?P<ipr_id>\d+)/$', new.update),
|
||||||
(r'^new-(?P<type>specific)/$', new.new),
|
(r'^new-(?P<type>specific)/$', new.new),
|
||||||
|
@ -20,8 +20,8 @@ archive = {'queryset':queryset, 'date_field': 'submitted_date', 'allow_empty':Tr
|
||||||
|
|
||||||
urlpatterns += patterns('django.views.generic.date_based',
|
urlpatterns += patterns('django.views.generic.date_based',
|
||||||
(r'^by-date/$', 'archive_index', archive),
|
(r'^by-date/$', 'archive_index', archive),
|
||||||
(r'^(?P<year>\d{4})/$', 'archive_year', archive),
|
(r'^y/(?P<year>\d{4})/$', 'archive_year', archive),
|
||||||
(r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$', 'archive_month', archive),
|
(r'^y/(?P<year>\d{4})/(?P<month>[a-z]{3})/$', 'archive_month', archive),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||||
|
|
||||||
import django.utils.html
|
import django.utils.html
|
||||||
from django.shortcuts import render_to_response as render
|
from django.shortcuts import render_to_response as render, get_object_or_404
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
|
@ -47,7 +47,7 @@ def list_all(request, template):
|
||||||
def show(request, ipr_id=None):
|
def show(request, ipr_id=None):
|
||||||
"""Show a specific IPR disclosure"""
|
"""Show a specific IPR disclosure"""
|
||||||
assert ipr_id != None
|
assert ipr_id != None
|
||||||
ipr = IprDetail.objects.get(ipr_id=ipr_id)
|
ipr = get_object_or_404(IprDetail, ipr_id=ipr_id)
|
||||||
if not ipr.status == 1:
|
if not ipr.status == 1:
|
||||||
raise Http404
|
raise Http404
|
||||||
section_list = get_section_list(ipr)
|
section_list = get_section_list(ipr)
|
||||||
|
|
|
@ -5,3 +5,6 @@
|
||||||
200 /liaison/help/from_ietf/ https://datatracker.ietf.org/public/liaison_guide_from_ietf.cgi
|
200 /liaison/help/from_ietf/ https://datatracker.ietf.org/public/liaison_guide_from_ietf.cgi
|
||||||
200 /liaison/help/fields/ https://datatracker.ietf.org/public/liaison_field_help.cgi
|
200 /liaison/help/fields/ https://datatracker.ietf.org/public/liaison_field_help.cgi
|
||||||
200 /liaison/help/
|
200 /liaison/help/
|
||||||
|
|
||||||
|
# Test case for ticket #182:
|
||||||
|
200 /liaison/337/
|
||||||
|
|
|
@ -99,7 +99,7 @@
|
||||||
<object pk="17" model="redirects.redirect">
|
<object pk="17" model="redirects.redirect">
|
||||||
<field type="CharField" name="cgi">public/ipr_detail_show.cgi</field>
|
<field type="CharField" name="cgi">public/ipr_detail_show.cgi</field>
|
||||||
<field type="CharField" name="url">ipr</field>
|
<field type="CharField" name="url">ipr</field>
|
||||||
<field type="CharField" name="rest">ipr-%(ipr_id)s</field>
|
<field type="CharField" name="rest">%(ipr_id)s</field>
|
||||||
<field type="CharField" name="remove"></field>
|
<field type="CharField" name="remove"></field>
|
||||||
</object>
|
</object>
|
||||||
<object pk="18" model="redirects.redirect">
|
<object pk="18" model="redirects.redirect">
|
||||||
|
@ -116,20 +116,20 @@
|
||||||
</object>
|
</object>
|
||||||
<object pk="20" model="redirects.redirect">
|
<object pk="20" model="redirects.redirect">
|
||||||
<field type="CharField" name="cgi">public/ipr_generic.cgi</field>
|
<field type="CharField" name="cgi">public/ipr_generic.cgi</field>
|
||||||
<field type="CharField" name="url">ipr/new-generic</field>
|
<field type="CharField" name="url">ipr</field>
|
||||||
<field type="CharField" name="rest"></field>
|
<field type="CharField" name="rest">new-generic</field>
|
||||||
<field type="CharField" name="remove"></field>
|
<field type="CharField" name="remove"></field>
|
||||||
</object>
|
</object>
|
||||||
<object pk="21" model="redirects.redirect">
|
<object pk="21" model="redirects.redirect">
|
||||||
<field type="CharField" name="cgi">public/ipr_notify.cgi</field>
|
<field type="CharField" name="cgi">public/ipr_notify.cgi</field>
|
||||||
<field type="CharField" name="url">ipr/new-third-party</field>
|
<field type="CharField" name="url">ipr</field>
|
||||||
<field type="CharField" name="rest"></field>
|
<field type="CharField" name="rest">new-third-party</field>
|
||||||
<field type="CharField" name="remove"></field>
|
<field type="CharField" name="remove"></field>
|
||||||
</object>
|
</object>
|
||||||
<object pk="22" model="redirects.redirect">
|
<object pk="22" model="redirects.redirect">
|
||||||
<field type="CharField" name="cgi">public/ipr.cgi</field>
|
<field type="CharField" name="cgi">public/ipr.cgi</field>
|
||||||
<field type="CharField" name="url">ipr/new-specific</field>
|
<field type="CharField" name="url">ipr</field>
|
||||||
<field type="CharField" name="rest"></field>
|
<field type="CharField" name="rest">new-specific</field>
|
||||||
<field type="CharField" name="remove"></field>
|
<field type="CharField" name="remove"></field>
|
||||||
</object>
|
</object>
|
||||||
<object pk="23" model="redirects.redirect">
|
<object pk="23" model="redirects.redirect">
|
||||||
|
@ -272,7 +272,7 @@
|
||||||
</object>
|
</object>
|
||||||
<object pk="13" model="redirects.command">
|
<object pk="13" model="redirects.command">
|
||||||
<field type="CharField" name="command">show_wg_id</field>
|
<field type="CharField" name="command">show_wg_id</field>
|
||||||
<field type="CharField" name="url">wg</field>
|
<field type="CharField" name="url">wgid</field>
|
||||||
<field to="redirects.redirect" name="script" rel="ManyToOneRel">7</field>
|
<field to="redirects.redirect" name="script" rel="ManyToOneRel">7</field>
|
||||||
<field to="redirects.suffix" name="suffix" rel="ManyToOneRel">4</field>
|
<field to="redirects.suffix" name="suffix" rel="ManyToOneRel">4</field>
|
||||||
</object>
|
</object>
|
||||||
|
@ -318,6 +318,24 @@
|
||||||
<field to="redirects.redirect" name="script" rel="ManyToOneRel">7</field>
|
<field to="redirects.redirect" name="script" rel="ManyToOneRel">7</field>
|
||||||
<field to="redirects.suffix" name="suffix" rel="ManyToOneRel">8</field>
|
<field to="redirects.suffix" name="suffix" rel="ManyToOneRel">8</field>
|
||||||
</object>
|
</object>
|
||||||
|
<object pk="21" model="redirects.command">
|
||||||
|
<field type="CharField" name="command">update_ipr</field>
|
||||||
|
<field type="CharField" name="url">update</field>
|
||||||
|
<field to="redirects.redirect" name="script" rel="ManyToOneRel">20</field>
|
||||||
|
<field to="redirects.suffix" name="suffix" rel="ManyToOneRel">9</field>
|
||||||
|
</object>
|
||||||
|
<object pk="22" model="redirects.command">
|
||||||
|
<field type="CharField" name="command">update_ipr</field>
|
||||||
|
<field type="CharField" name="url">update</field>
|
||||||
|
<field to="redirects.redirect" name="script" rel="ManyToOneRel">22</field>
|
||||||
|
<field to="redirects.suffix" name="suffix" rel="ManyToOneRel">9</field>
|
||||||
|
</object>
|
||||||
|
<object pk="23" model="redirects.command">
|
||||||
|
<field type="CharField" name="command">update_ipr</field>
|
||||||
|
<field type="CharField" name="url">update</field>
|
||||||
|
<field to="redirects.redirect" name="script" rel="ManyToOneRel">21</field>
|
||||||
|
<field to="redirects.suffix" name="suffix" rel="ManyToOneRel">9</field>
|
||||||
|
</object>
|
||||||
<object pk="2" model="redirects.suffix">
|
<object pk="2" model="redirects.suffix">
|
||||||
<field type="CharField" name="rest">%(fl)s</field>
|
<field type="CharField" name="rest">%(fl)s</field>
|
||||||
<field type="CharField" name="remove"></field>
|
<field type="CharField" name="remove"></field>
|
||||||
|
@ -342,4 +360,8 @@
|
||||||
<field type="CharField" name="rest">%(id)s/related</field>
|
<field type="CharField" name="rest">%(id)s/related</field>
|
||||||
<field type="CharField" name="remove"></field>
|
<field type="CharField" name="remove"></field>
|
||||||
</object>
|
</object>
|
||||||
|
<object pk="9" model="redirects.suffix">
|
||||||
|
<field type="CharField" name="rest">%(ipr_id)s</field>
|
||||||
|
<field type="CharField" name="remove"></field>
|
||||||
|
</object>
|
||||||
</django-objects>
|
</django-objects>
|
||||||
|
|
|
@ -15,7 +15,7 @@ class Redirect(models.Model):
|
||||||
searched for in the Command table to see if there
|
searched for in the Command table to see if there
|
||||||
is a different value of rest= and remove=.
|
is a different value of rest= and remove=.
|
||||||
"""
|
"""
|
||||||
cgi = models.CharField(maxlength=50, unique=True)
|
cgi = models.CharField(maxlength=50, unique=True, blank=True)
|
||||||
url = models.CharField(maxlength=255)
|
url = models.CharField(maxlength=255)
|
||||||
rest = models.CharField(maxlength=100, blank=True)
|
rest = models.CharField(maxlength=100, blank=True)
|
||||||
remove = models.CharField(maxlength=50, blank=True)
|
remove = models.CharField(maxlength=50, blank=True)
|
||||||
|
|
|
@ -26,7 +26,8 @@ def redirect(request, path="", script=""):
|
||||||
continue
|
continue
|
||||||
if request.REQUEST.has_key(fc[0]):
|
if request.REQUEST.has_key(fc[0]):
|
||||||
remove_args.append(fc[0])
|
remove_args.append(fc[0])
|
||||||
if int(request.REQUEST[fc[0]]):
|
num = re.match('(\d+)', request.REQUEST[fc[0]])
|
||||||
|
if num and int(num.group(1)):
|
||||||
cmd = flag
|
cmd = flag
|
||||||
break
|
break
|
||||||
#
|
#
|
||||||
|
@ -39,6 +40,10 @@ def redirect(request, path="", script=""):
|
||||||
pass # it's ok, there's no more-specific request.
|
pass # it's ok, there's no more-specific request.
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass # it's ok, request didn't have 'command'.
|
pass # it's ok, request didn't have 'command'.
|
||||||
|
except:
|
||||||
|
pass # strange exception like the one described in
|
||||||
|
# http://merlot.tools.ietf.org/tools/ietfdb/ticket/179 ?
|
||||||
|
# just ignore the command string.
|
||||||
if cmd is not None:
|
if cmd is not None:
|
||||||
remove_args.append('command')
|
remove_args.append('command')
|
||||||
if cmd.url:
|
if cmd.url:
|
||||||
|
|
|
@ -51,7 +51,7 @@ SITE_ID = 1
|
||||||
|
|
||||||
# If you set this to False, Django will make some optimizations so as not
|
# If you set this to False, Django will make some optimizations so as not
|
||||||
# to load the internationalization machinery.
|
# to load the internationalization machinery.
|
||||||
USE_I18N = True
|
USE_I18N = False
|
||||||
|
|
||||||
# Absolute path to the directory that holds media.
|
# Absolute path to the directory that holds media.
|
||||||
# Example: "/home/media/media.lawrence.com/"
|
# Example: "/home/media/media.lawrence.com/"
|
||||||
|
@ -157,6 +157,8 @@ TEST_RUNNER = 'ietf.tests.run_tests'
|
||||||
|
|
||||||
IPR_DOCUMENT_PATH = '/home/master-site/ftp/data/ietf/IPR'
|
IPR_DOCUMENT_PATH = '/home/master-site/ftp/data/ietf/IPR'
|
||||||
|
|
||||||
|
TEST_REFERENCE_URL_PREFIX = 'http://compost.research.att.com/old/'
|
||||||
|
|
||||||
# Put SECRET_KEY in here, or any other sensitive or site-specific
|
# Put SECRET_KEY in here, or any other sensitive or site-specific
|
||||||
# changes. DO NOT commit settings_local.py to svn.
|
# changes. DO NOT commit settings_local.py to svn.
|
||||||
from settings_local import *
|
from settings_local import *
|
||||||
|
|
|
@ -1,36 +1,47 @@
|
||||||
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
{% load versiontags %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<center>
|
<center>
|
||||||
<img src="http://www.ietf.org/images/ietflogo2e.gif" height="160" width="280">
|
<img src="/images/ietflogo2e.gif" height="80" width="140">
|
||||||
<br clear=all>
|
<br clear=all>
|
||||||
|
|
||||||
<center><h1>The Internet Engineering Task Force</h1></center>
|
<h2>The Internet Engineering Task Force</h2>
|
||||||
<table border=0 cellspacing=5 cellpadding=5>
|
<table border=0 cellspacing=5 cellpadding=5>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<font size = 3>
|
<center><img alt="" src="/images/blue-line.jpg"></center>
|
||||||
<center><img alt="" src="http://www.ietf.org/images/blue-line.jpg"></center>
|
|
||||||
<br clear=all>
|
<br clear=all>
|
||||||
<h3>The page you are looking for cannot be found.</h3><br>
|
<h2>The page you were looking for couldn't be found.</h2>
|
||||||
If it is an Internet-Draft, the version may have expired.<br>
|
<div style="width:50%">
|
||||||
Please visit <A HREF="http://search.ietf.org"> search.ietf.org</A> and enter in keywords or the name of the draft without the version numbers.
|
The requested URL was not found on this server. If you entered the URL
|
||||||
|
manually please check your spelling and try again.
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
If you think this is a server error, please contact <a
|
||||||
|
href="mailto:webtools@ietf.org">webtools@ietf.org</a>.
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
For other Web page issues, please contact <a href="mailto:webmaster@ietf.org">webmaster@ietf.org</a>. <br>
|
<!--
|
||||||
<br>
|
<center><img alt="Blue Line" src="/images/blue-line.jpg"></center>
|
||||||
<font size = 3>
|
|
||||||
<center><img alt="Blue Line" src="http://www.ietf.org/images/blue-line.jpg"></center>
|
|
||||||
<br clear=all>
|
<br clear=all>
|
||||||
The IETF is an organized activity of the <a href="http://www.isoc.org"><img alt="ISOC" src="http://www.ietf.org/images/isoc-small.gif" hspace="3" border="0"></A>
|
The IETF is an organized activity of the <a href="http://www.isoc.org"><img alt="ISOC" src="/images/isoc-small.gif" hspace="3" border="0"></A>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<i>The <A HREF="/secretariat.html">IETF Secretariat</A> is hosted by the NeuStar Secretariat Services, a wholly owned subsidiary of <a href="http://www.neustar.biz/"><img src="http://www.ietf.org/images/NS_logo_100px.gif" alt="NeuStar Logo" border="0">
|
<i>The <A HREF="/secretariat.html">IETF Secretariat</A> is hosted by the NeuStar Secretariat Services, a wholly owned subsidiary of <a href="http://www.neustar.biz/"><img src="/images/NS_logo_100px.gif" alt="NeuStar Logo" border="0"/></a></i>
|
||||||
|
-->
|
||||||
</i>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block footer %}
|
||||||
|
<hr/>
|
||||||
|
<div style="width: 100%; height: 1em; font-size: 9pt; font-style: italic;">
|
||||||
|
<span style="float: left;">Made with <a href="http://www.djangoproject.com/">django</a></span>
|
||||||
|
<span style="float: right;">v{% version_num %}, {% revision_date %} - <a href="mailto:webtools@ietf.org">webtools@ietf.org</a></span>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,34 +1,45 @@
|
||||||
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
{% load versiontags %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<center>
|
<center>
|
||||||
<img src="http://www.ietf.org/images/ietflogo2e.gif" height="160" width="280">
|
<img src="/images/ietflogo2e.gif" height="80" width="140">
|
||||||
<br clear=all>
|
<br clear=all>
|
||||||
|
|
||||||
<center><h1>The Internet Engineering Task Force</h1></center>
|
<h2>The Internet Engineering Task Force</h2>
|
||||||
<table border=0 cellspacing=5 cellpadding=5>
|
<table border=0 cellspacing=5 cellpadding=5>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<font size = 3>
|
<center><img alt="" src="/images/blue-line.jpg"></center>
|
||||||
<center><img alt="" src="http://www.ietf.org/images/blue-line.jpg"></center>
|
|
||||||
<br clear=all>
|
<br clear=all>
|
||||||
<h1>Error 500</h1>
|
<h2>Internal Server Error.</h2>
|
||||||
<h2>Internal Server Error</h2>
|
<div style="width:50%">
|
||||||
|
The server encountered an internal error and was
|
||||||
|
unable to complete your request. Either the server is
|
||||||
|
overloaded or there was an error in a script used to
|
||||||
|
generate the requested page.
|
||||||
|
</div>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
Please contact <a href="mailto:webmaster@ietf.org">webmaster@ietf.org</a>. <br>
|
Please contact <a href="mailto:webtools@ietf.org">webtools@ietf.org</a>. <br>
|
||||||
<br>
|
<br>
|
||||||
<font size = 3>
|
<!--
|
||||||
<center><img alt="Blue Line" src="http://www.ietf.org/images/blue-line.jpg"></center>
|
<center><img alt="Blue Line" src="/images/blue-line.jpg"></center>
|
||||||
<br clear=all>
|
<br clear=all>
|
||||||
The IETF is an organized activity of the <a href="http://www.isoc.org"><img alt="ISOC" src="http://www.ietf.org/images/isoc-small.gif" hspace="3" border="0"></A>
|
The IETF is an organized activity of the <a href="http://www.isoc.org"><img alt="ISOC" src="/images/isoc-small.gif" hspace="3" border="0"></A>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
<i>The <A HREF="/secretariat.html">IETF Secretariat</A> is hosted by the NeuStar Secretariat Services, a wholly owned subsidiary of <a href="http://www.neustar.biz/"><img src="http://www.ietf.org/images/NS_logo_100px.gif" alt="NeuStar Logo" border="0">
|
<i>The <A HREF="/secretariat.html">IETF Secretariat</A> is hosted by the NeuStar Secretariat Services, a wholly owned subsidiary of <a href="http://www.neustar.biz/"><img src="/images/NS_logo_100px.gif" alt="NeuStar Logo" border="0"/></a></i>
|
||||||
|
-->
|
||||||
</i>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block footer %}
|
||||||
|
<hr/>
|
||||||
|
<div style="width: 100%; height: 1em; font-size: 9pt; font-style: italic;">
|
||||||
|
<span style="float: left;">Made with <a href="http://www.djangoproject.com/">django</a></span>
|
||||||
|
<span style="float: right;">v{% version_num %}, {% revision_date %} - <a href="mailto:webtools@ietf.org">webtools@ietf.org</a></span>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
<div id="leftmenu">
|
<div id="leftmenu">
|
||||||
<div class="menulogo">
|
<div class="menulogo">
|
||||||
<img class="menulogo" src="http://www1.tools.ietf.org/images/ietflogo2i.png" alt="IETF logo" />
|
<img class="menulogo" src="/images/ietflogo2i.png" alt="IETF logo" />
|
||||||
</div>
|
</div>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a title="About the Internet Engineering Task Force">About the IETF</a>
|
<li><a title="About the Internet Engineering Task Force">About the IETF</a>
|
||||||
|
@ -104,11 +104,7 @@
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
|
|
||||||
The IETF is an organized activity of the <a href="http://www.isoc.org">Internet Society</a>
|
The IETF is an organized activity of the <a href="http://www.isoc.org">Internet Society</a>
|
||||||
<!-- <img src="http://tools.ietf.org/demo/www.ietf.org/images/isoc-small.gif" alt="Internet Society"> -->
|
{% include "footer.html" %}
|
||||||
<br>Please send problem reports to <a href="mailto:ietf-web@ietf.org">ietf-web@ietf.org</a>.
|
|
||||||
<br>
|
|
||||||
<a href="http://www.djangoproject.com/"><img src="http://media.djangoproject.com/img/badges/djangomade124x25.gif" border="0" alt="Made with Django." title="Made with Django." /></a>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,18 +24,18 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
<center>
|
<center>
|
||||||
<table border=0 cellpadding=0 cellspacing=0>
|
<table border=0 cellpadding=0 cellspacing=0>
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href="http://www.ietf.org/home.html"><img src="https://www1.ietf.org/images/header/ietflogo_sm.gif" border="0" /></a></td>
|
<td><a href="http://www.ietf.org/home.html"><img src="/images/header/ietflogo_sm.gif" border="0" /></a></td>
|
||||||
<td><a href="http://www.ietf.org/home.html"><img src="https://www1.ietf.org/images/header/home11.gif" border="0" /></a></td>
|
<td><a href="http://www.ietf.org/home.html"><img src="/images/header/home11.gif" border="0" /></a></td>
|
||||||
<td><img src="https://www1.ietf.org/images/header/separator.gif" border="0" /></td>
|
<td><img src="/images/header/separator.gif" border="0" /></td>
|
||||||
<td><a href="http://www.ietf.org/html.charters/wg-dir.html"><img src="https://www1.ietf.org/images/header/wg11.gif" border="0" /></a></td>
|
<td><a href="http://www.ietf.org/html.charters/wg-dir.html"><img src="/images/header/wg11.gif" border="0" /></a></td>
|
||||||
<td><img src="https://www1.ietf.org/images/header/separator.gif" border="0" /></td>
|
<td><img src="/images/header/separator.gif" border="0" /></td>
|
||||||
<td><a href="http://www.ietf.org/meetings/meetings.html"><img src="https://www1.ietf.org/images/header/meetings11.gif" border="0" /></a></td>
|
<td><a href="http://www.ietf.org/meetings/meetings.html"><img src="/images/header/meetings11.gif" border="0" /></a></td>
|
||||||
<td><img src="https://www1.ietf.org/images/header/separator.gif" border="0" /></td>
|
<td><img src="/images/header/separator.gif" border="0" /></td>
|
||||||
<td><a href="http://www.ietf.org/proceedings_directory.html"><img src="https://www1.ietf.org/images/header/proceed11.gif" border="0" /></a></td>
|
<td><a href="http://www.ietf.org/proceedings_directory.html"><img src="/images/header/proceed11.gif" border="0" /></a></td>
|
||||||
<td><img src="https://www1.ietf.org/images/header/separator.gif" border="0" /></td>
|
<td><img src="/images/header/separator.gif" border="0" /></td>
|
||||||
<td><a href="{% url ietf.idindex.views.search %}"><img src="https://www1.ietf.org/images/header/id-index11.gif" border="0" /></a></td>
|
<td><a href="{% url ietf.idindex.views.search %}"><img src="/images/header/id-index11.gif" border="0" /></a></td>
|
||||||
<td><img src="https://www1.ietf.org/images/header/separator.gif" border="0" /></td>
|
<td><img src="/images/header/separator.gif" border="0" /></td>
|
||||||
<td><a href="http://www.ietf.org/rfc.html"><img src="https://www1.ietf.org/images/header/rfc11.gif" border="0" /></a></td>
|
<td><a href="http://www.ietf.org/rfc.html"><img src="/images/header/rfc11.gif" border="0" /></a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</center>
|
</center>
|
||||||
|
@ -50,7 +50,7 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
{% block content %}{% endblock %}
|
{% block content %}{% endblock %}
|
||||||
{% block main_content %}{% endblock %}
|
{% block main_content %}{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
{% include "footer.html" %}
|
{% block footer %}{% include "footer.html" %}{% endblock %}
|
||||||
{% include "debug.html" %}
|
{% include "debug.html" %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
17
ietf/templates/googlea30ad1dacffb5e5b.html
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% load versiontags %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<h3>This is a verification page for the <a href="https://www.google.com/webmasters/tools/siteoverview">Google Webmaster Tools</a>.</h3>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block footer %}
|
||||||
|
<hr/>
|
||||||
|
<div style="width: 100%; height: 1em; font-size: 9pt; font-style: italic;">
|
||||||
|
<span style="float: left;">Made with <a href="http://www.djangoproject.com/">django</a></span>
|
||||||
|
<span style="float: right;">v{% version_num %}, {% revision_date %} - <a href="mailto:webtools@ietf.org">webtools@ietf.org</a></span>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -4,6 +4,7 @@
|
||||||
{% block title %}Internet Draft Database Index - Search{% endblock %}
|
{% block title %}Internet Draft Database Index - Search{% endblock %}
|
||||||
|
|
||||||
{% block iddbcontent %}
|
{% block iddbcontent %}
|
||||||
|
<hr>
|
||||||
{% if didsearch %}
|
{% if didsearch %}
|
||||||
{# existing page just displays header and no results. #}
|
{# existing page just displays header and no results. #}
|
||||||
{% if object_list %}
|
{% if object_list %}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
{# Copyright The IETF Trust 2007, All Rights Reserved #}
|
||||||
{% extends "idindex/base.html" %}
|
{% extends "idindex/base.html" %}
|
||||||
|
|
||||||
|
{% block title %}Internet Draft Database Index - documents related to {{ startdoc.filename }}{% endblock %}
|
||||||
|
|
||||||
{% block iddbcontent %}
|
{% block iddbcontent %}
|
||||||
<hr>
|
<hr>
|
||||||
<table>
|
<table>
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
{% block iddbcontent %}
|
{% block iddbcontent %}
|
||||||
<hr>
|
<hr>
|
||||||
<h3>Please select a Working Group from the list below</h3>
|
<h3>Please select a Working Group from the list below</h3>
|
||||||
|
{% if object_list %}
|
||||||
<blockquote>
|
<blockquote>
|
||||||
{% regroup object_list by status as grouped %}
|
{% regroup object_list by status as grouped %}
|
||||||
{% for status in grouped %}
|
{% for status in grouped %}
|
||||||
|
@ -19,5 +20,8 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<p>No working groups found beginning with "{{ search }}".</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
{% extends "idtracker/base.html" %}
|
{% extends "idtracker/base.html" %}
|
||||||
{% load ietf_filters %}
|
{% load ietf_filters %}
|
||||||
|
|
||||||
{% block title %}IESG Announcement{% endblock %}
|
{% block title %}-- Ballot for {{ object.drafts.all.0.document.filename }}{% endblock %}
|
||||||
|
|
||||||
{% block idcontent %}
|
{% block idcontent %}
|
||||||
<pre>
|
<pre>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<html>
|
<html>
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<!-- Project Revision {{ revision_num }}, {{ revision_time }} -->
|
<!-- Project Revision {{ revision_num }}, {{ revision_time }} -->
|
||||||
<title>{% block title %}IETF Data{% endblock %}{% ifnotequal server_mode "production" %} - {{ server_mode|upper }} MODE{% endifnotequal %}</title>
|
<title>IETF I-D Tracker {% block title %}{% endblock %}{% ifnotequal server_mode "production" %} - {{ server_mode|upper }} MODE{% endifnotequal %}</title>
|
||||||
{% ifnotequal server_mode "production" %}
|
{% ifnotequal server_mode "production" %}
|
||||||
<link rel="icon" href="/images/ietf-dev-icon.bmp" />
|
<link rel="icon" href="/images/ietf-dev-icon.bmp" />
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
{% load ietf_filters %}
|
{% load ietf_filters %}
|
||||||
|
|
||||||
|
{% block title %}-- comment on {{ object.document.document.filename }}{% endblock %}
|
||||||
|
|
||||||
{% block idcontent %}
|
{% block idcontent %}
|
||||||
|
|
||||||
{% if object.ballot %}
|
{% if object.ballot %}
|
||||||
|
@ -11,15 +13,16 @@
|
||||||
<table cellpadding="1" cellspacing="1" border="0">
|
<table cellpadding="1" cellspacing="1" border="0">
|
||||||
|
|
||||||
<tr><td><b>Date and Time:</td><td>{{ object.date }}, {{ object.time }}</td></tr>
|
<tr><td><b>Date and Time:</td><td>{{ object.date }}, {{ object.time }}</td></tr>
|
||||||
|
<tr><td><b>Document:</td><td>{{ object.document.document.filename }}</td></tr>
|
||||||
<tr><td><b>Version:</td><td>{{ object.version }}</td></tr>
|
<tr><td><b>Version:</td><td>{{ object.version }}</td></tr>
|
||||||
<tr><td><b>Commented by:</td><td>{{ object.created_by.first_name }} {{ object.created_by.last_name }}</td></tr>
|
<tr><td><b>Commented by:</td><td>{{ object.get_author }}</td></tr>
|
||||||
{% if object.origin_state %}
|
{% if object.origin_state %}
|
||||||
<tr><td><b>State before Comment:</td><td>{{ object.origin_state }}</td></tr>
|
<tr><td><b>State before Comment:</td><td>{{ object.origin_state }}</td></tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if object.result_state %}
|
{% if object.result_state %}
|
||||||
<tr><td><b>State after Comment:</td><td>{{ object.result_state }}</td></tr>
|
<tr><td><b>State after Comment:</td><td>{{ object.result_state }}</td></tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<Tr><td><b>Comment:</td><td>{{ object.comment_text|format_textarea }}</td></tr>
|
<tr><td><b>Comment:</td><td>{{ object.comment_text|format_textarea }}</td></tr>
|
||||||
</table>
|
</table>
|
||||||
<center><form>
|
<center><form>
|
||||||
<input type="button" value="close" onClick="history.go(-1);return true">
|
<input type="button" value="close" onClick="history.go(-1);return true">
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
{% load ietf_filters %}
|
{% load ietf_filters %}
|
||||||
|
|
||||||
|
{% block title %}-- {{ object.document.filename }}{% endblock %}
|
||||||
|
|
||||||
{% block idcontent %}
|
{% block idcontent %}
|
||||||
<table width="90%" cellpading="1" cellspacing="0">
|
<table width="90%" cellpading="1" cellspacing="0">
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -282,19 +284,5 @@
|
||||||
<input type="button" name="back_button" value="BACK"
|
<input type="button" name="back_button" value="BACK"
|
||||||
onclick="history.go(-1);return true">
|
onclick="history.go(-1);return true">
|
||||||
</form>
|
</form>
|
||||||
<!-- begin new footer -->
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
<p>Did you find a bug? <a href=
|
|
||||||
"pidtracker.cgi?command=send_email&cat=bugs">Let us
|
|
||||||
know</a>.</p>
|
|
||||||
|
|
||||||
<p><a href=
|
|
||||||
"pidtracker.cgi?command=send_email&cat=discuss">Any
|
|
||||||
question or suggestion</a>?</p>
|
|
||||||
|
|
||||||
<p><i>This page produced by the <a href=
|
|
||||||
"mailto:iesg-secretary@ietf.org">IETF Secretariat</a> for
|
|
||||||
the <a href="mailto:iesg@ietf.org">IESG</a></i></p>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<center>
|
<center>
|
||||||
{% if searching %}
|
{% if searching %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<img src="https://www.ietf.org/images/ietflogo2e.gif" border=0><br>
|
<img src="/images/ietflogo2e.gif" border=0><br>
|
||||||
<h1>IETF I-D TRACKER</h1>
|
<h1>IETF I-D TRACKER</h1>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
@ -74,8 +74,8 @@ Document States: <a href="/images/state_diagram.gif">State Diagram</a> and
|
||||||
|
|
||||||
</center>
|
</center>
|
||||||
|
|
||||||
<hr>
|
|
||||||
{% if matches %}
|
{% if matches %}
|
||||||
|
<hr>
|
||||||
<b>Search Result</b><br>
|
<b>Search Result</b><br>
|
||||||
{% regroup matches by docstate as grouped %}
|
{% regroup matches by docstate as grouped %}
|
||||||
{% include "idtracker/search_result_table.html" %}
|
{% include "idtracker/search_result_table.html" %}
|
||||||
|
|
|
@ -108,15 +108,15 @@
|
||||||
There are 3 different IPR disclosures that can be made:
|
There are 3 different IPR disclosures that can be made:
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0" />
|
<img src="/images/blue.gif" hspace="3" border="0" />
|
||||||
"Specific": <a href="{% url ietf.ipr.views.new_specific %}">A disclosure about your IPR related to a specific IETF contribution</a>
|
"Specific": <a href="{% url ietf.ipr.views.new_specific %}">A disclosure about your IPR related to a specific IETF contribution</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0" />
|
<img src="/images/blue.gif" hspace="3" border="0" />
|
||||||
"Generic": <a href="{% url ietf.ipr.views.new_generic %}">An IPR disclosure about your IPR that is not related to a specific IETF contribution</a>
|
"Generic": <a href="{% url ietf.ipr.views.new_generic %}">An IPR disclosure about your IPR that is not related to a specific IETF contribution</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0" />
|
<img src="/images/blue.gif" hspace="3" border="0" />
|
||||||
"Third-Party": <a href="{% url ietf.ipr.views.new_thirdpty %}">Notify the IETF of IPR other than your own which you believe may be related to a specific IETF contribution</a>
|
"Third-Party": <a href="{% url ietf.ipr.views.new_thirdpty %}">Notify the IETF of IPR other than your own which you believe may be related to a specific IETF contribution</a>
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -564,8 +564,8 @@
|
||||||
</form>
|
</form>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<hr>
|
<hr>
|
||||||
<img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0"><a href="./ipr_disclosure.cgi">IPR Disclosure Page</a><br>
|
<img src="/images/blue.gif" hspace="3" border="0"><a href="{% url ietf.ipr.views.default %}">IPR Disclosure Page</a><br>
|
||||||
<img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0"><a href="./ipr_list.cgi">View IPR Disclosures</a><br><br>
|
<img src="/images/blue.gif" hspace="3" border="0"><a href="{% url ietf.ipr.views.showlist %}">View IPR Disclosures</a><br><br>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
{% block title %}IPR Disclosure Page{% endblock %}
|
{% block title %}IPR Disclosure Page{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<center>
|
<center>
|
||||||
<img src="http://www.ietf.org/images/ietflogo2e.gif" height="160" width="280">
|
<img src="/images/ietflogo2e.gif" height="160" width="280">
|
||||||
</center>
|
</center>
|
||||||
<div>
|
<div>
|
||||||
<center>
|
<center>
|
||||||
<img src="http://www.ietf.org/images/ipr_header.gif" >
|
<img src="/images/ipr_header.gif" >
|
||||||
</center>
|
</center>
|
||||||
<p>
|
<p>
|
||||||
This page provides a mechanism for filing Disclosures about intellectual property rights
|
This page provides a mechanism for filing Disclosures about intellectual property rights
|
||||||
|
@ -25,17 +25,17 @@
|
||||||
<p />
|
<p />
|
||||||
<hr>
|
<hr>
|
||||||
<p>
|
<p>
|
||||||
<a href="{% url ietf.ipr.new.new "specific" %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">File a disclosure about your IPR related to a specific IETF contribution</a>
|
<a href="{% url ietf.ipr.new.new "specific" %}"><img src="/images/blue.gif" hspace="3" border="0">File a disclosure about your IPR related to a specific IETF contribution</a>
|
||||||
</p>
|
</p>
|
||||||
<p><a href="{% url ietf.ipr.new.new "generic" %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">File an IPR disclosure that is not related to a specific IETF contribution</a>
|
<p><a href="{% url ietf.ipr.new.new "generic" %}"><img src="/images/blue.gif" hspace="3" border="0">File an IPR disclosure that is not related to a specific IETF contribution</a>
|
||||||
</p>
|
</p>
|
||||||
<p><a href="{% url ietf.ipr.new.new "third-party" %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Notify the IETF of IPR other than your own</a>
|
<p><a href="{% url ietf.ipr.new.new "third-party" %}"><img src="/images/blue.gif" hspace="3" border="0">Notify the IETF of IPR other than your own</a>
|
||||||
</p>
|
</p>
|
||||||
<p><a href="{% url ietf.ipr.views.updatelist %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Update an existing IPR disclosure</a>
|
<p><a href="{% url ietf.ipr.views.updatelist %}"><img src="/images/blue.gif" hspace="3" border="0">Update an existing IPR disclosure</a>
|
||||||
</p>
|
</p>
|
||||||
<p><a href="{% url ietf.ipr.search.search %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Search the IPR disclosures</a>
|
<p><a href="{% url ietf.ipr.search.search %}"><img src="/images/blue.gif" hspace="3" border="0">Search the IPR disclosures</a>
|
||||||
</p>
|
</p>
|
||||||
<p><a href="{% url ietf.ipr.views.showlist %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">List of IPR disclosures</a><p>
|
<p><a href="{% url ietf.ipr.views.showlist %}"><img src="/images/blue.gif" hspace="3" border="0">List of IPR disclosures</a><p>
|
||||||
</p>
|
</p>
|
||||||
<hr>
|
<hr>
|
||||||
<p>To remove an IPR disclosure from the list, please contact the IETF Secretariat at <a href="mailto:ietf-ipr@ietf.org">ietf-ipr@ietf.org</a>.
|
<p>To remove an IPR disclosure from the list, please contact the IETF Secretariat at <a href="mailto:ietf-ipr@ietf.org">ietf-ipr@ietf.org</a>.
|
||||||
|
@ -65,8 +65,5 @@ A participant in any IETF activity acknowledges that written, audio and video re
|
||||||
An Internet-Draft intended by the Contributor to be submitted to the
|
An Internet-Draft intended by the Contributor to be submitted to the
|
||||||
RFC Editor for publication as an Informational or Experimental RFC but not intended to be part of the IETF Standards Process.<br>
|
RFC Editor for publication as an Informational or Experimental RFC but not intended to be part of the IETF Standards Process.<br>
|
||||||
</p>
|
</p>
|
||||||
<hr>
|
|
||||||
<p>Please report any problems to <a href="mailto:ietf-action@ietf.org">ietf-action@ietf.org</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<h3>Archives by Year</h3>
|
<h3>Archives by Year</h3>
|
||||||
<ul>
|
<ul>
|
||||||
{% for year in date_list %}
|
{% for year in date_list %}
|
||||||
<li><a href="/ipr/{{ year|date:"Y" }}/">{{ year|date:"Y" }}</a>
|
<li><a href="/ipr/y/{{ year|date:"Y" }}/">{{ year|date:"Y" }}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>IPR Declarations - {{ year }}</h2>
|
<h2>IPR Declarations - {{ year }}</h2>
|
||||||
|
|
||||||
<a href="../">All dates</a>
|
<a href="../../">All dates</a>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for month in date_list %}
|
{% for month in date_list %}
|
||||||
|
|
|
@ -17,10 +17,10 @@ which any license under such rights might or might not be available; nor does it
|
||||||
<a href="{% url ietf.ipr.views.default %}">Click here to submit an IPR disclosure</a>
|
<a href="{% url ietf.ipr.views.default %}">Click here to submit an IPR disclosure</a>
|
||||||
|
|
||||||
<hr><p>
|
<hr><p>
|
||||||
<P><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0"><a href="{% url ietf.ipr.search.search %}">Search the IPR Disclosures</a><p>
|
<P><img src="/images/blue.gif" hspace="3" border="0"><a href="{% url ietf.ipr.search.search %}">Search the IPR Disclosures</a><p>
|
||||||
<P><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0"><a href="#generic">Generic IPR Disclosures</a><p>
|
<P><img src="/images/blue.gif" hspace="3" border="0"><a href="#generic">Generic IPR Disclosures</a><p>
|
||||||
<P><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0"><a href="#specific">Specific IPR Disclosures</a><p>
|
<P><img src="/images/blue.gif" hspace="3" border="0"><a href="#specific">Specific IPR Disclosures</a><p>
|
||||||
<P><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0"><a href="#notify">Specific Third Party IPR Disclosures</a><p>
|
<P><img src="/images/blue.gif" hspace="3" border="0"><a href="#notify">Specific Third Party IPR Disclosures</a><p>
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ which any license under such rights might or might not be available; nor does it
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<P><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0"><a href="#top">Back to Top</a><p>
|
<P><img src="/images/blue.gif" hspace="3" border="0"><a href="#top">Back to Top</a><p>
|
||||||
<a name="specific"></a>
|
<a name="specific"></a>
|
||||||
<h2>Specific IPR Disclosures</h2><br>
|
<h2>Specific IPR Disclosures</h2><br>
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ which any license under such rights might or might not be available; nor does it
|
||||||
</table>
|
</table>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
<P><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0"><a href="#top">Back to Top</a><p>
|
<P><img src="/images/blue.gif" hspace="3" border="0"><a href="#top">Back to Top</a><p>
|
||||||
<a name="notify"></a>
|
<a name="notify"></a>
|
||||||
<h2>Specific Third Party IPR Disclosures</h2><br>
|
<h2>Specific Third Party IPR Disclosures</h2><br>
|
||||||
<table border="1" cellpadding="2" cellspacing="2" width="820">
|
<table border="1" cellpadding="2" cellspacing="2" width="820">
|
||||||
|
@ -58,11 +58,6 @@ which any license under such rights might or might not be available; nor does it
|
||||||
{% include "ipr/list_item.html" %}
|
{% include "ipr/list_item.html" %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<hr>
|
|
||||||
<p>Please report any problems to <a href="mailto:ietf-action@ietf.org">ietf-act
|
|
||||||
ion@ietf.org</a>
|
|
||||||
<br><br><br><br>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -109,6 +109,6 @@
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
<hr width="600"><br><br>
|
<hr width="600"><br><br>
|
||||||
<center><a href="{% url ietf.ipr.views.showlist %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">IPR Disclosure Page</a>
|
<center><a href="{% url ietf.ipr.views.showlist %}"><img src="/images/blue.gif" hspace="3" border="0">IPR Disclosure Page</a>
|
||||||
</center>
|
</center>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -2,42 +2,42 @@
|
||||||
{% extends "ipr/search_result.html" %}
|
{% extends "ipr/search_result.html" %}
|
||||||
{% load ietf_filters %}
|
{% load ietf_filters %}
|
||||||
{% block search_result %}
|
{% block search_result %}
|
||||||
<table cellpadding="1" cellspacing="0" border="0">
|
<table cellpadding="1" cellspacing="0" border="0">
|
||||||
|
|
||||||
<tr><td colspan="3">Total number of IPR disclosures found: {{ iprs|length }} </td></tr>
|
<tr><td colspan="3">Total number of IPR disclosures found: {{ iprs|length }} </td></tr>
|
||||||
{% for ipr in iprs|dictsort:"submitted_date" %}
|
{% for ipr in iprs|dictsort:"submitted_date" %}
|
||||||
<tr valign="top" bgcolor="#dadada">
|
<tr valign="top" bgcolor="#dadada">
|
||||||
<td width="100">{{ ipr.submitted_date }}</td>
|
<td width="100">{{ ipr.submitted_date }}</td>
|
||||||
<td width="90"><li>ID # {{ ipr.ipr_id }}</li></td>
|
<td width="90"><li>ID # {{ ipr.ipr_id }}</li></td>
|
||||||
<td><a href="{% url ietf.ipr.views.show ipr_id=ipr.ipr_id %}">"{{ ipr.title }}"</a></td>
|
<td><a href="{% url ietf.ipr.views.show ipr_id=ipr.ipr_id %}">"{{ ipr.title }}"</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
<tr><td colspan="3"><hr>Total number of documents searched: {{ docs|length}}</td></tr>
|
<tr><td colspan="3"><hr>Total number of documents searched: {{ docs|length}}</td></tr>
|
||||||
{% for doc in docs %}
|
{% for doc in docs %}
|
||||||
<tbody bgcolor="#{% cycle dadada,eaeaea as bgcolor %}">
|
<tbody bgcolor="#{% cycle dadada,eaeaea as bgcolor %}">
|
||||||
<tr >
|
<tr >
|
||||||
<td colspan="3">
|
<td colspan="3">
|
||||||
Search result on {{ doc|rfcspace|lstrip:"0"|rfcnospace }}, "{{ doc.title }}"{% ifnotequal doc first %}{% if doc.related %}, {{ doc.relation }} {{ doc.related|rfcspace|lstrip:"0"|rfcnospace }}, "{{ doc.related.title }}"{% endif %}
|
Search result on {{ doc|rfcspace|lstrip:"0"|rfcnospace }}, "{{ doc.title }}"{% ifnotequal doc first %}{% if doc.related %}, {{ doc.relation }} {{ doc.related|rfcspace|lstrip:"0"|rfcnospace }}, "{{ doc.related.title }}"{% endif %}
|
||||||
{% endifnotequal %}
|
{% endifnotequal %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% if doc.iprs %}
|
{% if doc.iprs %}
|
||||||
{% for ipr in doc.iprs %}
|
{% for ipr in doc.iprs %}
|
||||||
<tr valign="top">
|
<tr valign="top">
|
||||||
<td width="100">{{ ipr.submitted_date }}</td>
|
<td width="100">{{ ipr.submitted_date }}</td>
|
||||||
<td width="90"><li>ID # {{ ipr.ipr_id }}</li></td>
|
<td width="90"><li>ID # {{ ipr.ipr_id }}</li></td>
|
||||||
<td><a href="{% url ietf.ipr.views.show %}{{ ipr.ipr_id }}">"{{ ipr.title }}"</a></td>
|
<td><a href="{% url ietf.ipr.views.show %}{{ ipr.ipr_id }}">"{{ ipr.title }}"</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<tr>
|
<tr>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td colspan="2"><b>No IPR disclosures related to <i>{{ doc|rfcspace|lstrip:"0" }}</i> have been submitted</b></td>
|
<td colspan="2"><b>No IPR disclosures related to <i>{{ doc|rfcspace|lstrip:"0" }}</i> have been submitted</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tbody>
|
</tbody>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -29,18 +29,12 @@
|
||||||
<td width="100">{{ ipr.submitted_date }}</td>
|
<td width="100">{{ ipr.submitted_date }}</td>
|
||||||
<td width="90"><li>ID # {{ ipr.ipr_id }}</li></td>
|
<td width="90"><li>ID # {{ ipr.ipr_id }}</li></td>
|
||||||
<td>
|
<td>
|
||||||
<!--
|
|
||||||
{% for item in ipr.updates.all %}
|
|
||||||
{% ifequal item.updated.status 1 %}
|
|
||||||
IPR disclosure ID# {{ item.updated.ipr_id }}, "<a href="{% url ietf.ipr.views.show item.updated.ipr_id %}">{{ item.updated.title }}</a>" Updated by
|
|
||||||
{% endifequal %}
|
|
||||||
{% endfor %}-->
|
|
||||||
{% for item in ipr.updated_by.all %}
|
{% for item in ipr.updated_by.all %}
|
||||||
{% ifequal item.processed 1 %}
|
{% ifequal item.processed 1 %}
|
||||||
IPR disclosure ID# {{ item.ipr.ipr_id }} "<a href="{% url ietf.ipr.views.show item.ipr.ipr_id %}">{{ item.ipr.title }}</a>" Updates
|
IPR disclosure ID# {{ item.ipr.ipr_id }} "<a href="{% url ietf.ipr.views.show item.ipr.ipr_id %}">{{ item.ipr.title }}</a>" Updates
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<a href="{% url ietf.ipr.views.show %}{{ ipr.ipr_id }}">"{{ ipr.title }}"</a>
|
<a href="{% url ietf.ipr.views.show ipr.ipr_id %}">"{{ ipr.title }}"</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -64,8 +64,8 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
<hr><br>
|
<hr><br>
|
||||||
|
|
||||||
<a href="{% url ietf.ipr.search.search %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">IPR Search Main Page</a><br>
|
<a href="{% url ietf.ipr.search.search %}"><img src="/images/blue.gif" hspace="3" border="0">IPR Search Main Page</a><br>
|
||||||
<a href="{% url ietf.ipr.views.showlist %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">IPR Disclosure Page</a>
|
<a href="{% url ietf.ipr.views.showlist %}"><img src="/images/blue.gif" hspace="3" border="0">IPR Disclosure Page</a>
|
||||||
<br>
|
<br>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -35,12 +35,7 @@
|
||||||
IPR disclosure ID# {{ item.updated.ipr_id }}, "<a href="{% url ietf.ipr.views.show item.updated.ipr_id %}">{{ item.updated.title }}</a>" Updated by
|
IPR disclosure ID# {{ item.updated.ipr_id }}, "<a href="{% url ietf.ipr.views.show item.updated.ipr_id %}">{{ item.updated.title }}</a>" Updated by
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<a href="{% url ietf.ipr.views.show %}{{ ipr.ipr_id }}">"{{ ipr.title }}"</a>
|
<a href="{% url ietf.ipr.views.show ipr.ipr_id %}">"{{ ipr.title }}"</a>
|
||||||
<!--{% for item in ipr.updated_by.all %}
|
|
||||||
{% ifequal item.processed 1 %}
|
|
||||||
Updated by "<a href="{% url ietf.ipr.views.show item.ipr.ipr_id %}">{{ item.ipr.title }}</a>"<br>
|
|
||||||
{% endifequal %}
|
|
||||||
{% endfor %}-->
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
|
|
||||||
{% include "ipr/style.html" %}
|
{% include "ipr/style.html" %}
|
||||||
|
|
||||||
|
<h4><font color="#000055"><center>Updating {{ type|title }} IPR Disclosures <br><i>{{ ipr.title|escape }}</i></center></font></h4>
|
||||||
|
|
||||||
<form name="form1" method="post">
|
<form name="form1" method="post">
|
||||||
{% if form.errors %}
|
{% if form.errors %}
|
||||||
<p class="errorlist">
|
<p class="errorlist">
|
||||||
|
|
|
@ -7,11 +7,11 @@
|
||||||
<a href="{% url ietf.ipr.views.default %}">Click here to submit an IPR disclosure</a>
|
<a href="{% url ietf.ipr.views.default %}">Click here to submit an IPR disclosure</a>
|
||||||
|
|
||||||
<hr><p>
|
<hr><p>
|
||||||
<P><a href="{% url ietf.ipr.search.search %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Search the IPR Disclosures</a><p>
|
<P><a href="{% url ietf.ipr.search.search %}"><img src="/images/blue.gif" hspace="3" border="0">Search the IPR Disclosures</a><p>
|
||||||
<P><a href="#generic"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Generic IPR Disclosures</a><p>
|
<P><a href="#generic"><img src="/images/blue.gif" hspace="3" border="0">Generic IPR Disclosures</a><p>
|
||||||
|
|
||||||
<P><a href="#specific"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Specific IPR Disclosures</a><p>
|
<P><a href="#specific"><img src="/images/blue.gif" hspace="3" border="0">Specific IPR Disclosures</a><p>
|
||||||
<P><a href="#notify"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Specific Third Party IPR Disclosures</a><p>
|
<P><a href="#notify"><img src="/images/blue.gif" hspace="3" border="0">Specific Third Party IPR Disclosures</a><p>
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<a name="generic"></a>
|
<a name="generic"></a>
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<P><a href="#top"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Back to Top</a><p>
|
<P><a href="#top"><img src="/images/blue.gif" hspace="3" border="0">Back to Top</a><p>
|
||||||
<a name="specific"></a>
|
<a name="specific"></a>
|
||||||
<h3>Specific IPR Disclosures</h3>
|
<h3>Specific IPR Disclosures</h3>
|
||||||
<b><font size = +1>Please select the IPR disclosure that you wish to update.</font><br>
|
<b><font size = +1>Please select the IPR disclosure that you wish to update.</font><br>
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
<br>
|
<br>
|
||||||
<P><a href="#top"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Back to Top</a><p>
|
<P><a href="#top"><img src="/images/blue.gif" hspace="3" border="0">Back to Top</a><p>
|
||||||
<a name="notify"></a>
|
<a name="notify"></a>
|
||||||
<h3>Specific Third Party IPR Disclosures</h3>
|
<h3>Specific Third Party IPR Disclosures</h3>
|
||||||
<b><font size = +1>Please select the IPR disclosure that you wish to update.</font><br>
|
<b><font size = +1>Please select the IPR disclosure that you wish to update.</font><br>
|
||||||
|
|
|
@ -52,9 +52,4 @@ clean_forms: {{ clean_forms|escape }}
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<i>Please send problem reports to</i> <A HREF="mailto:ietf-action@ietf.org">ietf-action@ietf.org</A>.
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -17,7 +17,7 @@ Updated as of {% now "F j, Y, H:i:s (T)" %}
|
||||||
{% for wgs in areas %}
|
{% for wgs in areas %}
|
||||||
<table cellpadding="0" cellspacing="0" border="2" width="80%">
|
<table cellpadding="0" cellspacing="0" border="2" width="80%">
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=2 bgcolor="#0911DC" valign="center"><font color="#FFFFFF"><center><br><h3><img src="https://www.ietf.org/images/ib2.gif" width="100%" height=21><br>{{ wgs.grouper }}</h3></center></font>
|
<td colspan=2 bgcolor="#0911DC" valign="center"><font color="#FFFFFF"><center><br><h3><img src="/images/ib2.gif" width="100%" height=21><br>{{ wgs.grouper }}</h3></center></font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
@ -63,7 +63,7 @@ Updated as of {% now "F j, Y, H:i:s (T)" %}
|
||||||
{% if training_list %}
|
{% if training_list %}
|
||||||
<table cellpadding="0" cellspacing="0" border="2" width="80%">
|
<table cellpadding="0" cellspacing="0" border="2" width="80%">
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=2 bgcolor="#0911DC" valign="center"><font color="#FFFFFF"><center><br><h3><img src="https://www.ietf.org/images/ib2.gif" width="100%" height=21><br>Training</h3></center></font>
|
<td colspan=2 bgcolor="#0911DC" valign="center"><font color="#FFFFFF"><center><br><h3><img src="/images/ib2.gif" width="100%" height=21><br>Training</h3></center></font>
|
||||||
</td> </tr> </table>
|
</td> </tr> </table>
|
||||||
{% for wg in training_list|dictsort:"acronym" %}
|
{% for wg in training_list|dictsort:"acronym" %}
|
||||||
<table cellpadding="0" cellspacing="0" border="2" width="80%"> <tr><a name="wg-{{ wg.acronym }}"></a>
|
<table cellpadding="0" cellspacing="0" border="2" width="80%"> <tr><a name="wg-{{ wg.acronym }}"></a>
|
||||||
|
@ -84,7 +84,7 @@ Updated as of {% now "F j, Y, H:i:s (T)" %}
|
||||||
{% if irtf_list %}
|
{% if irtf_list %}
|
||||||
<table cellpadding="0" cellspacing="0" border="2" width="80%">
|
<table cellpadding="0" cellspacing="0" border="2" width="80%">
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=2 bgcolor="#0911DC" valign="center"><font color="#FFFFFF"><center><br><h3><img src="https://www.ietf.org/images/ib2.gif" width="100%" height=21><br>IRTF</h3></center></font>
|
<td colspan=2 bgcolor="#0911DC" valign="center"><font color="#FFFFFF"><center><br><h3><img src="/images/ib2.gif" width="100%" height=21><br>IRTF</h3></center></font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
@ -110,7 +110,7 @@ Updated as of {% now "F j, Y, H:i:s (T)" %}
|
||||||
{% if interim_list %}
|
{% if interim_list %}
|
||||||
<table cellpadding="0" cellspacing="0" border="2" width="80%">
|
<table cellpadding="0" cellspacing="0" border="2" width="80%">
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=2 bgcolor="#0911DC" valign="center"><font color="#FFFFFF"><center><br><h3><img src="https://www.ietf.org/images/ib2.gif" width="100%" height=21><br>Interim Meetings</h3></center></font>
|
<td colspan=2 bgcolor="#0911DC" valign="center"><font color="#FFFFFF"><center><br><h3><img src="/images/ib2.gif" width="100%" height=21><br>Interim Meetings</h3></center></font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
|
@ -19,11 +19,11 @@ from ietf.utils import log
|
||||||
|
|
||||||
startup_database = settings.DATABASE_NAME # The startup database name, before changing to test_...
|
startup_database = settings.DATABASE_NAME # The startup database name, before changing to test_...
|
||||||
|
|
||||||
def run_tests(module_list, verbosity=1, extra_tests=[]):
|
def run_tests(module_list, verbosity=0, extra_tests=[]):
|
||||||
module_list.append(ietf.urls)
|
module_list.append(ietf.urls)
|
||||||
# If we append 'ietf.tests', we get it twice, first as itself, then
|
# If we append 'ietf.tests', we get it twice, first as itself, then
|
||||||
# during the search for a 'tests' module ...
|
# during the search for a 'tests' module ...
|
||||||
return django.test.simple.run_tests(module_list, verbosity, extra_tests)
|
return django.test.simple.run_tests(module_list, 0, extra_tests)
|
||||||
|
|
||||||
def reduce_text(html, pre=False, fill=True):
|
def reduce_text(html, pre=False, fill=True):
|
||||||
if html.count("<li>") > 5*html.count("</li>"):
|
if html.count("<li>") > 5*html.count("</li>"):
|
||||||
|
@ -90,6 +90,10 @@ def read_testurls(filename):
|
||||||
goodurl = None
|
goodurl = None
|
||||||
elif len(urlspec) == 3:
|
elif len(urlspec) == 3:
|
||||||
codes, testurl, goodurl = urlspec
|
codes, testurl, goodurl = urlspec
|
||||||
|
# strip protocol and host -- we're making that configurable
|
||||||
|
goodurl = re.sub("^https?://[a-z0-9.]+", "", goodurl)
|
||||||
|
if not goodurl.startswith("/"):
|
||||||
|
goodurl = "/" + goodurl
|
||||||
else:
|
else:
|
||||||
raise ValueError("Expected 'HTTP_CODE TESTURL [GOODURL]' in %s line, found '%s'." % (filename, line))
|
raise ValueError("Expected 'HTTP_CODE TESTURL [GOODURL]' in %s line, found '%s'." % (filename, line))
|
||||||
|
|
||||||
|
@ -289,6 +293,11 @@ class UrlTestCase(TestCase):
|
||||||
note("Exception for URL '%s'" % url)
|
note("Exception for URL '%s'" % url)
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
if master and not "skipdiff" in codes:
|
if master and not "skipdiff" in codes:
|
||||||
|
hostprefix = settings.TEST_REFERENCE_URL_PREFIX
|
||||||
|
if hostprefix.endswith("/"):
|
||||||
|
hostprefix = hostprefix[:-1]
|
||||||
|
master = hostprefix + master
|
||||||
|
goodhtml = None
|
||||||
try:
|
try:
|
||||||
#print "Fetching", master, "...",
|
#print "Fetching", master, "...",
|
||||||
mfile = urllib.urlopen(master)
|
mfile = urllib.urlopen(master)
|
||||||
|
@ -296,8 +305,9 @@ class UrlTestCase(TestCase):
|
||||||
mfile.close()
|
mfile.close()
|
||||||
note(" 200 %s" % (master))
|
note(" 200 %s" % (master))
|
||||||
except urllib.URLError, e:
|
except urllib.URLError, e:
|
||||||
note(" Error retrieving %s: %s" % (e.url, e))
|
note(" Error retrieving %s: %s" % (master, e))
|
||||||
goodhtml = None
|
except urllib.BadStatusLine, e:
|
||||||
|
note(" Error retrieving %s: %s" % (master, e))
|
||||||
try:
|
try:
|
||||||
if goodhtml and response.content:
|
if goodhtml and response.content:
|
||||||
if "sort" in codes:
|
if "sort" in codes:
|
||||||
|
@ -335,7 +345,7 @@ class UrlTestCase(TestCase):
|
||||||
else:
|
else:
|
||||||
contextlines = 0
|
contextlines = 0
|
||||||
difflist = list(unified_diff(goodtext, testtext, master, url, "", "", contextlines, lineterm=""))
|
difflist = list(unified_diff(goodtext, testtext, master, url, "", "", contextlines, lineterm=""))
|
||||||
diff = "\n".join(difflist)
|
diff = "\n".join(difflist[2:])
|
||||||
log("Checking diff: %s" % diff[:96])
|
log("Checking diff: %s" % diff[:96])
|
||||||
keys = module.diffchunks.keys()
|
keys = module.diffchunks.keys()
|
||||||
keys.sort
|
keys.sort
|
||||||
|
@ -352,7 +362,7 @@ class UrlTestCase(TestCase):
|
||||||
# discard them too
|
# discard them too
|
||||||
diff = ""
|
diff = ""
|
||||||
if diff:
|
if diff:
|
||||||
dfile = "%s/../test/diff/%s" % (settings.BASE_DIR, url.replace("/", "_").replace("?", "_"))
|
dfile = "%s/../test/diff/%s" % (settings.BASE_DIR, re.sub("[/?&=]", "_", url) )
|
||||||
if os.path.exists(dfile):
|
if os.path.exists(dfile):
|
||||||
dfile = open(dfile)
|
dfile = open(dfile)
|
||||||
#print "Reading OK diff file:", dfile.name
|
#print "Reading OK diff file:", dfile.name
|
||||||
|
@ -367,9 +377,9 @@ class UrlTestCase(TestCase):
|
||||||
note("Failed diff: %s" % (url))
|
note("Failed diff: %s" % (url))
|
||||||
else:
|
else:
|
||||||
note("Diff: %s" % (url))
|
note("Diff: %s" % (url))
|
||||||
print "\n".join(diff.split("\n")[:120])
|
print "\n".join(diff.split("\n")[:100])
|
||||||
if len(diff.split("\n")) > 120:
|
if len(diff.split("\n")) > 100:
|
||||||
print "... (skipping %s lines of diff)" % (len(difflist)-120)
|
print "... (skipping %s lines of diff)" % (len(difflist)-100)
|
||||||
else:
|
else:
|
||||||
note("OK cmp %s" % (url))
|
note("OK cmp %s" % (url))
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
# Top-level test URL list. Should probably be empty; all test URls should be
|
# Top-level test URL list. Should probably be empty; all test URls should be
|
||||||
# specified in the application level testurl.list
|
# specified in the application level testurl.list
|
||||||
|
|
||||||
200 / # Top level url. Has no comparable page today.
|
301 / # Top level url. Has no comparable page today.
|
||||||
skip /images/ietf-icon.bmp
|
skip /images/ietf-icon.bmp
|
||||||
skip /css/base.css
|
skip /css/base.css
|
||||||
skip /js/
|
skip /js/
|
||||||
|
|
||||||
|
200 /googlea30ad1dacffb5e5b.html # Google webmaster tool verification page
|
||||||
|
|
|
@ -5,8 +5,6 @@ from django.conf.urls.defaults import patterns, include, handler404, handler500
|
||||||
from ietf.iesg.feeds import IESGMinutes
|
from ietf.iesg.feeds import IESGMinutes
|
||||||
from ietf.idtracker.feeds import DocumentComments
|
from ietf.idtracker.feeds import DocumentComments
|
||||||
from ietf.ipr.feeds import LatestIprDisclosures
|
from ietf.ipr.feeds import LatestIprDisclosures
|
||||||
import ietf.utils.views
|
|
||||||
import ietf.views
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
@ -31,7 +29,7 @@ urlpatterns = patterns('',
|
||||||
(r'^meeting/', include('ietf.meeting.urls')),
|
(r'^meeting/', include('ietf.meeting.urls')),
|
||||||
(r'^accounts/', include('ietf.ietfauth.urls')),
|
(r'^accounts/', include('ietf.ietfauth.urls')),
|
||||||
|
|
||||||
(r'^$', ietf.views.apps),
|
(r'^$', 'ietf.redirects.views.redirect'),
|
||||||
|
|
||||||
# Uncomment this for admin:
|
# Uncomment this for admin:
|
||||||
(r'^admin/', include('django.contrib.admin.urls')),
|
(r'^admin/', include('django.contrib.admin.urls')),
|
||||||
|
@ -42,6 +40,9 @@ urlpatterns = patterns('',
|
||||||
(r'^review/(?P<page>[0-9a-f]+)/$', 'ietf.utils.views.review'),
|
(r'^review/(?P<page>[0-9a-f]+)/$', 'ietf.utils.views.review'),
|
||||||
(r'^review/top/(?P<page>[0-9a-f]+)/$', 'ietf.utils.views.top'),
|
(r'^review/top/(?P<page>[0-9a-f]+)/$', 'ietf.utils.views.top'),
|
||||||
|
|
||||||
|
# Google webmaster tools verification url
|
||||||
|
(r'googlea30ad1dacffb5e5b.html', 'django.views.generic.simple.direct_to_template', { 'template': 'googlea30ad1dacffb5e5b.html' })
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if settings.SERVER_MODE in ('development', 'test'):
|
if settings.SERVER_MODE in ('development', 'test'):
|
||||||
|
|
|
@ -5,6 +5,7 @@ from log import log
|
||||||
from cache_foreign_key import FKAsOneToOne
|
from cache_foreign_key import FKAsOneToOne
|
||||||
from templated_form import makeTemplatedForm
|
from templated_form import makeTemplatedForm
|
||||||
from soup2text import TextSoup, soup2text
|
from soup2text import TextSoup, soup2text
|
||||||
|
from draft_search import normalize_draftname
|
||||||
|
|
||||||
makeFormattingForm = makeTemplatedForm
|
makeFormattingForm = makeTemplatedForm
|
||||||
|
|
||||||
|
|
8
ietf/utils/draft_search.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||||
|
import re
|
||||||
|
|
||||||
|
def normalize_draftname(string):
|
||||||
|
string = string.strip()
|
||||||
|
string = re.sub("\.txt$","",string)
|
||||||
|
string = re.sub("-\d\d$","",string)
|
||||||
|
return string
|
BIN
static/images/NS_logo_100px.gif
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
static/images/blue-line.jpg
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
static/images/header/home11.gif
Normal file
After Width: | Height: | Size: 300 B |
BIN
static/images/header/id-index11.gif
Normal file
After Width: | Height: | Size: 371 B |
BIN
static/images/header/ietflogo_sm.gif
Normal file
After Width: | Height: | Size: 977 B |
BIN
static/images/header/meetings11.gif
Normal file
After Width: | Height: | Size: 388 B |
BIN
static/images/header/proceed11.gif
Normal file
After Width: | Height: | Size: 492 B |
BIN
static/images/header/rfc11.gif
Normal file
After Width: | Height: | Size: 289 B |
BIN
static/images/header/separator.gif
Normal file
After Width: | Height: | Size: 81 B |
BIN
static/images/header/wg11.gif
Normal file
After Width: | Height: | Size: 554 B |
BIN
static/images/ib2.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
static/images/ietflogo2e.gif
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
static/images/ietflogo2i.png
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
static/images/ipr_header.gif
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
static/images/isoc-small.gif
Normal file
After Width: | Height: | Size: 2.3 KiB |
|
@ -1,7 +1,8 @@
|
||||||
--- https://datatracker.ietf.org/public/show_nomcom_message.cgi?id=1230
|
|
||||||
+++ /ann/nomcom/1230/
|
|
||||||
@@ -3,2 +3,2 @@
|
@@ -3,2 +3,2 @@
|
||||||
-IETF Announcement Date: June 3, 2007 Subject: IETF Nomcom Appointment
|
-IETF Announcement Date: June 3, 2007 Subject: IETF Nomcom Appointment
|
||||||
-- 2007-2008
|
-- 2007-2008
|
||||||
+IETF Announcement list Date: June 3, 2007 Subject: IETF Nomcom
|
+IETF Announcement list Date: June 3, 2007 Subject: IETF Nomcom
|
||||||
+Appointment - 2007-2008
|
+Appointment - 2007-2008
|
||||||
|
@@ -10,1 +10,1 @@
|
||||||
|
-at .
|
||||||
|
+at <ldondeti at qualcomm.com>.
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/idindex.cgi
|
|
||||||
+++ /drafts/
|
|
||||||
@@ -16,1 +16,0 @@
|
@@ -16,1 +16,0 @@
|
||||||
-I-D Exists
|
-I-D Exists
|
||||||
@@ -546,2 +545,2 @@
|
@@ -546,2 +545,2 @@
|
||||||
|
|
18
test/diff/_drafts_dead_
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
@@ -4,1 +4,1 @@
|
||||||
|
-Expired/Withdrawn/Replaced I-Ds sorted by UNKNOWN
|
||||||
|
+Expired/Withdrawn/Replaced I-Ds sorted by Filename
|
||||||
|
@@ -3214,1 +3214,1 @@
|
||||||
|
-draft-iab-char-rep-01 2004-02-18 Expired Dead
|
||||||
|
+draft-iab-char-rep-01 2004-02-18 Expired Dead: : Revised I-D Needed
|
||||||
|
@@ -4225,1 +4225,1 @@
|
||||||
|
-draft-ietf-ldapext-ldap-java-api-19 2004-06-07 Expired Dead
|
||||||
|
+draft-ietf-ldapext-ldap-java-api-19 2004-06-07 Expired Dead: : Revised I-D Needed
|
||||||
|
@@ -4331,1 +4331,1 @@
|
||||||
|
-draft-ietf-mboned-rfc3171bis-02 2004-03-15 Expired Dead
|
||||||
|
+draft-ietf-mboned-rfc3171bis-02 2004-03-15 Expired Dead: : Revised I-D Needed
|
||||||
|
@@ -4470,1 +4470,1 @@
|
||||||
|
-draft-ietf-msec-tesla-spec-00 2002-10-30 Expired Dead
|
||||||
|
+draft-ietf-msec-tesla-spec-00 2002-10-30 Expired Dead: : Revised I-D Needed
|
||||||
|
@@ -4798,1 +4798,1 @@
|
||||||
|
-draft-ietf-ppvpn-vr-mib-05 Replaced I-D Exists
|
||||||
|
+draft-ietf-ppvpn-vr-mib-05 None Replaced I-D Exists
|
17
test/diff/_drafts_dead__sort_name
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
@@ -1018,1 +1018,0 @@
|
||||||
|
-draft-cain-post-inch-phishingextns-00 2006-10-17 Expired I-D Exists
|
||||||
|
@@ -3215,1 +3214,1 @@
|
||||||
|
-draft-iab-char-rep-01 2004-02-18 Expired Dead
|
||||||
|
+draft-iab-char-rep-01 2004-02-18 Expired Dead: : Revised I-D Needed
|
||||||
|
@@ -4226,1 +4225,1 @@
|
||||||
|
-draft-ietf-ldapext-ldap-java-api-19 2004-06-07 Expired Dead
|
||||||
|
+draft-ietf-ldapext-ldap-java-api-19 2004-06-07 Expired Dead: : Revised I-D Needed
|
||||||
|
@@ -4332,1 +4331,1 @@
|
||||||
|
-draft-ietf-mboned-rfc3171bis-02 2004-03-15 Expired Dead
|
||||||
|
+draft-ietf-mboned-rfc3171bis-02 2004-03-15 Expired Dead: : Revised I-D Needed
|
||||||
|
@@ -4472,1 +4471,1 @@
|
||||||
|
-draft-ietf-msec-tesla-spec-00 2002-10-30 Expired Dead
|
||||||
|
+draft-ietf-msec-tesla-spec-00 2002-10-30 Expired Dead: : Revised I-D Needed
|
||||||
|
@@ -4799,1 +4798,1 @@
|
||||||
|
-draft-ietf-ppvpn-vr-mib-05 Replaced I-D Exists
|
||||||
|
+draft-ietf-ppvpn-vr-mib-05 None Replaced I-D Exists
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=rfc
|
|
||||||
+++ /drafts/rfc/
|
|
||||||
@@ -12,1 +12,1 @@
|
@@ -12,1 +12,1 @@
|
||||||
-Published I-Ds sorted by UNKNOWN
|
-Published I-Ds sorted by UNKNOWN
|
||||||
+Published I-Ds sorted by Filename
|
+Published I-Ds sorted by Filename
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=rfc&sort=name
|
|
||||||
+++ /drafts/rfc/?sort=name
|
|
||||||
@@ -1123,0 +1123,1 @@
|
@@ -1123,0 +1123,1 @@
|
||||||
+draft-ietf-hubmib-etherif-MIB-06 1998-08-06 RFC 2358 I-D Exists
|
+draft-ietf-hubmib-etherif-MIB-06 1998-08-06 RFC 2358 I-D Exists
|
||||||
@@ -1124,1 +1125,0 @@
|
@@ -1124,1 +1125,0 @@
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/pidtracker.cgi
|
|
||||||
+++ /idtracker/
|
|
||||||
@@ -68,0 +68,1 @@
|
@@ -68,0 +68,1 @@
|
||||||
+--All Substates
|
+--All Substates
|
||||||
@@ -73,1 +74,0 @@
|
@@ -73,1 +74,0 @@
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12689&rfc_flag=0
|
|
||||||
+++ /idtracker/12689/
|
|
||||||
@@ -40,2 +40,3 @@
|
@@ -40,2 +40,3 @@
|
||||||
-This draft is basically ready for publication, but has nits and more
|
-This draft is basically ready for publication, but has nits and more
|
||||||
-...
|
-...
|
||||||
|
@ -51,3 +49,7 @@
|
||||||
+> Definition of an IS-IS Link Attribute sub-TLV > > draft-ietf-isis-
|
+> Definition of an IS-IS Link Attribute sub-TLV > > draft-ietf-isis-
|
||||||
+link-attr-01.txt > > Abstract > > This document defines a sub-TLV
|
+link-attr-01.txt > > Abstract > > This document defines a sub-TLV
|
||||||
+called "Link-attributes" carried > within the ...
|
+called "Link-attributes" carried > within the ...
|
||||||
|
@@ -140,3 +142,0 @@
|
||||||
|
-Did you find a bug? Let us know.
|
||||||
|
-Any question or suggestion?
|
||||||
|
-This page produced by the IETF Secretariat for the IESG
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/pidtracker.cgi?command=search_list&search_job_owner=0&search_group_acronym=&search_status_id=&search_cur_state=&sub_state_id=6&search_filename=bgp-m&search_rfcnumber=&search_area_acronym=&search_button=SEARCH
|
|
||||||
+++ /idtracker/?search_group_acronym=&search_job_owner=0&search_rfcnumber=&search_status_id=&sub_state_id=6&search_cur_state=&search_button=SEARCH&search_filename=bgp-m&search_area_acronym=
|
|
||||||
@@ -67,0 +67,1 @@
|
@@ -67,0 +67,1 @@
|
||||||
+--All Substates
|
+--All Substates
|
||||||
@@ -72,1 +73,0 @@
|
@@ -72,1 +73,0 @@
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/pidtracker.cgi?command=print_ballot&ballot_id=1760&filename=draft-ietf-isis-link-attr
|
|
||||||
+++ /idtracker/ballot/1760/
|
|
||||||
@@ -7,1 +7,1 @@
|
@@ -7,1 +7,1 @@
|
||||||
-https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12689&rfc_flag=0
|
-https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12689&rfc_flag=0
|
||||||
+https://datatracker.ietf.org/idtracker/ballot/1760/
|
+https://datatracker.ietf.org/idtracker/ballot/1760/
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--- https://datatracker.ietf.org/public/pidtracker.cgi?command=view_comment&id=65232
|
@@ -3,0 +3,1 @@
|
||||||
+++ /idtracker/comment/65232/
|
+Document: draft-ietf-isis-link-attr
|
||||||
@@ -5,2 +5,0 @@
|
@@ -5,2 +6,0 @@
|
||||||
-State before Comment: 0
|
-State before Comment: 0
|
||||||
-State after Comment: 0
|
-State after Comment: 0
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12689&rfc_flag=0
|
|
||||||
+++ /idtracker/draft-ietf-isis-link-attr/
|
|
||||||
@@ -40,2 +40,3 @@
|
@@ -40,2 +40,3 @@
|
||||||
-This draft is basically ready for publication, but has nits and more
|
-This draft is basically ready for publication, but has nits and more
|
||||||
-...
|
-...
|
||||||
|
@ -51,3 +49,7 @@
|
||||||
+> Definition of an IS-IS Link Attribute sub-TLV > > draft-ietf-isis-
|
+> Definition of an IS-IS Link Attribute sub-TLV > > draft-ietf-isis-
|
||||||
+link-attr-01.txt > > Abstract > > This document defines a sub-TLV
|
+link-attr-01.txt > > Abstract > > This document defines a sub-TLV
|
||||||
+called "Link-attributes" carried > within the ...
|
+called "Link-attributes" carried > within the ...
|
||||||
|
@@ -140,3 +142,0 @@
|
||||||
|
-Did you find a bug? Let us know.
|
||||||
|
-Any question or suggestion?
|
||||||
|
-This page produced by the IETF Secretariat for the IESG
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
--- https://datatracker.ietf.org/public/pidtracker.cgi?command=view_comment&id=65232
|
@@ -3,0 +3,1 @@
|
||||||
+++ /idtracker/draft-ietf-isis-link-attr/comment/65232/
|
+Document: draft-ietf-isis-link-attr
|
||||||
@@ -5,2 +5,0 @@
|
@@ -5,2 +6,0 @@
|
||||||
-State before Comment: 0
|
-State before Comment: 0
|
||||||
-State after Comment: 0
|
-State after Comment: 0
|
||||||
|
|
4
test/diff/_idtracker_rfc3847_
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
@@ -30,3 +30,0 @@
|
||||||
|
-Did you find a bug? Let us know.
|
||||||
|
-Any question or suggestion?
|
||||||
|
-This page produced by the IETF Secretariat for the IESG
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/previous_announcement.cgi?command=show_detail&ballot_id=1563
|
|
||||||
+++ /iesg/ann/1563/
|
|
||||||
@@ -1,0 +1,7 @@
|
@@ -1,0 +1,7 @@
|
||||||
+IESG Announcement
|
+IESG Announcement
|
||||||
+This page contains an IESG Protocol, Document, or Working Group Action
|
+This page contains an IESG Protocol, Document, or Working Group Action
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/recent_announcement.cgi?command=show_detail&ballot_id=2422
|
|
||||||
+++ /iesg/ann/2422/
|
|
||||||
@@ -1,0 +1,6 @@
|
@@ -1,0 +1,6 @@
|
||||||
+IESG Announcement
|
+IESG Announcement
|
||||||
+This page contains an IESG Protocol, Document, or Working Group Action
|
+This page contains an IESG Protocol, Document, or Working Group Action
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/previous_announcement.cgi
|
|
||||||
+++ /iesg/ann/prev/
|
|
||||||
@@ -314,0 +314,1 @@
|
@@ -314,0 +314,1 @@
|
||||||
+Date Sent: April 4, 2002
|
+Date Sent: April 4, 2002
|
||||||
@@ -468,1 +469,0 @@
|
@@ -468,1 +469,0 @@
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
--- https://datatracker.ietf.org/public/ipr_list.cgi
|
@@ -22,0 +22,1 @@
|
||||||
+++ /ipr/
|
+2007-06-26 859 QUALCOMM Incorporated's General License Statement
|
||||||
@@ -63,0 +63,1 @@
|
@@ -1362,1 +1363,0 @@
|
||||||
+2000-09-15 170 i-DNS.net International general License statement
|
-Please report any problems to ietf-act ion@ietf.org
|
||||||
@@ -66,1 +67,0 @@
|
|
||||||
-0000-09-15 170 i-DNS.net International general License statement
|
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=657
|
|
||||||
+++ /ipr/ipr-657/
|
|
||||||
@@ -43,3 +43,4 @@
|
@@ -43,3 +43,4 @@
|
||||||
-Licensing information, comments, notes, or URL for further information
|
-Licensing information, comments, notes, or URL for further information
|
||||||
-:
|
-:
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=795
|
|
||||||
+++ /ipr/ipr-795/
|
|
||||||
@@ -23,4 +23,2 @@
|
@@ -23,4 +23,2 @@
|
||||||
-Relates
|
-Relates
|
||||||
-Title:
|
-Title:
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=834
|
|
||||||
+++ /ipr/ipr-834/
|
|
||||||
@@ -30,4 +30,2 @@
|
@@ -30,4 +30,2 @@
|
||||||
-Relates
|
-Relates
|
||||||
-Title:
|
-Title:
|
|
@ -1,7 +1,6 @@
|
||||||
--- https://datatracker.ietf.org/public/ipr_disclosure.cgi
|
@@ -5,1 +5,2 @@
|
||||||
+++ /ipr/about/
|
-Technology".
|
||||||
@@ -5,2 +5,2 @@
|
|
||||||
-Technology" (updated by RFC4879, "Clarification of the Thrid Party
|
|
||||||
-Disclosure Procedure in RFC3979".)
|
|
||||||
+Technology" (updated by RFC4879, "Clarification of the Third Party
|
+Technology" (updated by RFC4879, "Clarification of the Third Party
|
||||||
+Disclosure Procedure in RFC3979").
|
+Disclosure Procedure in RFC3979").
|
||||||
|
@@ -50,1 +51,0 @@
|
||||||
|
-Please report any problems to ietf-action@ietf.org
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/ipr_generic.cgi
|
|
||||||
+++ /ipr/new-generic/
|
|
||||||
@@ -9,1 +9,1 @@
|
@@ -9,1 +9,1 @@
|
||||||
-Note: According to Section 6.4.3 ofRFC3979, "Intellectual Property
|
-Note: According to Section 6.4.3 ofRFC3979, "Intellectual Property
|
||||||
+Note: According to Section 6.4.3 of RFC3979, "Intellectual Property
|
+Note: According to Section 6.4.3 of RFC3979, "Intellectual Property
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/ipr.cgi
|
|
||||||
+++ /ipr/new-specific/
|
|
||||||
@@ -16,0 +16,1 @@
|
@@ -16,0 +16,1 @@
|
||||||
+Fields marked with * are required.
|
+Fields marked with * are required.
|
||||||
@@ -17,2 +18,2 @@
|
@@ -17,2 +18,2 @@
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
--- https://datatracker.ietf.org/public/ipr_notify.cgi
|
|
||||||
+++ /ipr/new-third-party/
|
|
||||||
@@ -10,1 +10,1 @@
|
@@ -10,1 +10,1 @@
|
||||||
-it to ietf-ipr@ietf.org.Submissions made by e-mail that do not comply
|
-it to ietf-ipr@ietf.org.Submissions made by e-mail that do not comply
|
||||||
+it to ietf-ipr@ietf.org. Submissions made by e-mail that do not comply
|
+it to ietf-ipr@ietf.org. Submissions made by e-mail that do not comply
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
--- https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAAxz
|
|
||||||
+++ /ipr/search/?option=title_search&title_search=AAAxz
|
|
||||||
@@ -1,0 +1,1 @@
|
|
||||||
+IPR Disclosure Page
|
|
||||||
@@ -2,0 +3,1 @@
|
|
||||||
+IPR Search Main Page
|
|