Merged r840 from branch/2.00 to trunk, and updated version information in ietf/__init__.py

- Legacy-Id: 841
This commit is contained in:
Henrik Levkowetz 2007-07-04 21:17:57 +00:00
parent 0a7b45a9f4
commit fa77ac30d5
137 changed files with 964 additions and 606 deletions

View file

@ -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
View 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'

View file

@ -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/

View file

@ -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),

View file

@ -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)

View file

@ -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(":")])

View file

@ -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>

View 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>

View file

@ -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

View file

@ -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()

View 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
View 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

View file

@ -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

View file

@ -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),

View file

@ -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.

View file

@ -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.

View file

@ -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/

View file

@ -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)

View file

@ -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

View file

@ -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/

View file

@ -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),
) )

View file

@ -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)

View file

@ -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/

View file

@ -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>

View file

@ -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)

View file

@ -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:

View file

@ -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 *

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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>

View file

@ -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>

View 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 %}

View file

@ -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 %}

View file

@ -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>

View file

@ -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 %}

View file

@ -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>

View file

@ -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 %}

View file

@ -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">

View file

@ -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&amp;cat=bugs">Let us
know</a>.</p>
<p><a href=
"pidtracker.cgi?command=send_email&amp;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 %}

View file

@ -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" %}

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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>

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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 %}

View file

@ -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">

View file

@ -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>

View file

@ -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 %}

View file

@ -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>

View file

@ -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))

View file

@ -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

View file

@ -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'):

View file

@ -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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/images/blue-line.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 977 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

BIN
static/images/ib2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -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>.

View file

@ -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
View 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

View 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

View file

@ -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

View file

@ -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 @@

View file

@ -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 @@

View file

@ -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

View file

@ -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 @@

View file

@ -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/

View file

@ -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

View file

@ -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

View file

@ -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

View 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

View file

@ -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

View file

@ -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

View file

@ -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 @@

View file

@ -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

View file

@ -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
-: -:

View file

@ -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:

View file

@ -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:

View file

@ -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

View file

@ -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

View file

@ -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 @@

View file

@ -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

View file

@ -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

Some files were not shown because too many files have changed in this diff Show more