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
__version__ = "2.01-dev"
__version__ = "2.xx-trunk"
__date__ = "$Date$"
__rev__ = "$Rev:$ (dev) Latest release: Rev. 726 "
__rev__ = "$Rev$ (dev) Latest release: Rev. 838 "
__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 /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/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/?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/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,skipdiff /drafts/9574/related/ https://datatracker.ietf.org/public/idindex.cgi?command=view_related_docs&id=9574
200,sort /drafts/dead/ https://datatracker.ietf.org/public/idindex.cgi?command=show_list&cat=dead
#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/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 /drafts/all_id_txt.html
200 /drafts/all_id.html
200,skipdiff /drafts/ https://datatracker.ietf.org/public/idindex.cgi?command=search_id
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('',
(r'^wg/(?P<id>\d+)/$', views.wgdocs),
(r'^wg/(?P<slug>[^/]+)/$', views.wgdocs),
(r'^wgid/(?P<id>\d+)/$', views.wgdocs_redir),
(r'^wg/(?P<wg>[^/]+)/$', views.wgdocs),
(r'^ind/(?P<filter>[^/]+)/$', views.inddocs),
(r'^other/(?P<cat>[^/]+)/$', views.otherdocs),
# (?P<cat>(?:all|rfc|current|dead)) really confuses reverse()
@ -24,10 +24,10 @@ urlpatterns = patterns('',
(r'^(?P<cat>rfc)/$', views.showdocs),
(r'^(?P<cat>current)/$', 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<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
(r'^(?P<slug>[^/]+)/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, slug_field='filename')),
(r'^(?P<object_id>\d+)/$', views.redirect_id),
(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.html$', views.all_id, { 'template_name': 'idindex/all_id.html' }),
(r'^$', views.search),

View file

@ -1,38 +1,41 @@
# 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.db.models import Q
from django.http import Http404
from django.template import RequestContext, loader
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.idindex.forms import IDIndexSearchForm
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 }
def wgdocs(request, **kwargs):
if kwargs.has_key('id'):
queryset = InternetDraft.objects.filter(group=kwargs['id'])
group = get_object_or_404(Acronym, acronym_id=kwargs['id'])
else:
wg = kwargs['slug']
try:
group = Acronym.objects.get(acronym=wg)
except Acronym.DoesNotExist: # try a search
if wg == 'other':
queryset = IETFWG.objects.filter(
orl([Q(group_acronym__acronym__istartswith="%d" % i) for i in range(0,10)])
)
else:
queryset = IETFWG.objects.filter(group_acronym__acronym__istartswith=wg)
queryset = queryset.filter(group_type__type='WG').select_related().order_by('status_id', 'acronym.acronym')
return object_list(request, queryset=queryset, template_name='idindex/wglist.html', allow_empty=True, extra_context=base_extra)
queryset = InternetDraft.objects.filter(group__acronym=wg)
def wgdocs_redir(request, id):
group = get_object_or_404(Acronym, acronym_id=id)
return HttpResponsePermanentRedirect(reverse(wgdocs, args=[group.acronym]))
def wgdocs(request, wg):
try:
group = Acronym.objects.get(acronym=wg)
except Acronym.DoesNotExist: # try a search
if wg == 'other':
queryset = IETFWG.objects.filter(
orl([Q(group_acronym__acronym__istartswith="%d" % i) for i in range(0,10)])
)
else:
queryset = IETFWG.objects.filter(group_acronym__acronym__istartswith=wg)
queryset = queryset.filter(group_type__type='WG').select_related().order_by('status_id', 'acronym.acronym')
extra = base_extra.copy()
extra['search'] = 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')
extra = base_extra
extra = base_extra.copy()
extra['group'] = group
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:
queryset = InternetDraft.objects.filter(filename__istartswith='draft-' + filter)
queryset = queryset.exclude(ind_exception).filter(group__acronym='none').order_by('filename')
extra = base_extra
extra = base_extra.copy()
extra['filter'] = filter
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)
for p in org.get('prefixes', [ org['key'] ])]))
queryset = queryset.order_by('status_id','filename')
extra = base_extra
extra = base_extra.copy()
extra['category'] = cat
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):
args = request.GET.copy()
if args.has_key('filename'):
args['filename'] = normalize_draftname(args['filename'])
form = IDIndexSearchForm()
t = loader.get_template('idindex/search.html')
# 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',
}
for key in qdict.keys() + ['other_group']:
if key in request.REQUEST:
if key in args:
searching = True
if searching:
# '0' and '-1' are flag values for "any"
# in the original .cgi search page.
# They are compared as strings because the
# 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()
if request.REQUEST.get(k, '') != '' and
request.REQUEST[k] != '0' and
request.REQUEST[k] != '-1']
if args.get(k, '') != '' and
args[k] != '0' and
args[k] != '-1']
try:
other = orgs_dict[request.REQUEST['other_group']]
other = orgs_dict[args['other_group']]
q_objs += [orl(
[Q(filename__istartswith="draft-%s-" % p)|
Q(filename__istartswith="draft-ietf-%s-" % p)
@ -212,13 +218,25 @@ def related_docs(startdoc):
process(startdoc, (0,0,0))
return related
def view_related_docs(request, **kwargs):
if kwargs.has_key('id'):
startdoc = get_object_or_404(InternetDraft, id_document_tag=kwargs['id'])
else:
startdoc = get_object_or_404(InternetDraft, filename=kwargs['slug'])
def redirect_related(request, id):
doc = get_object_or_404(InternetDraft, id_document_tag=id)
return HttpResponsePermanentRedirect(reverse(view_related_docs, args=[doc.filename]))
def view_related_docs(request, slug):
startdoc = get_object_or_404(InternetDraft, filename=slug)
related = related_docs(startdoc)
context = {'related': related, 'numdocs': len(related)}
context = {'related': related, 'numdocs': len(related), 'startdoc': startdoc}
context.update(base_extra)
return render_to_response("idindex/view_related_docs.html", context,
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
from django.contrib.syndication.feeds import Feed
from django.contrib.syndication.feeds import Feed, FeedDoesNotExist
from django.utils.feedgenerator import Atom1Feed
from ietf.idtracker.models import InternetDraft, DocumentComment
from ietf.idtracker.models import IDInternal
import datetime
import re
class DocumentComments(Feed):
feed_type = Atom1Feed
def get_object(self, bits):
if len(bits) != 1:
raise InternetDraft.DoesNotExist
return InternetDraft.objects.get(filename=bits[0])
raise IDInternal.DoesNotExist
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):
return "I-D Tracker comments for %s" % obj.filename
return "I-D Tracker comments for %s" % obj.document().filename
def link(self, obj):
return "/idtracker/%s" % obj.filename
# obj.get_absolute_url() ?
if obj is None:
raise FeedDoesNotExist
return obj.get_absolute_url()
def description(self, obj):
self.title(obj)
return self.title(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):
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 ietf.utils import FKAsOneToOne
from django.test import TestCase
class Acronym(models.Model):
acronym_id = models.AutoField(primary_key=True)
@ -760,7 +761,7 @@ class WGChair(models.Model):
def __str__(self):
return "%s (%s)" % ( self.person, self.role() )
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:
db_table = 'g_chairs'
verbose_name = "WG Chair"
@ -781,7 +782,7 @@ class WGSecretary(models.Model):
def __str__(self):
return "%s (%s)" % ( self.person, self.role() )
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:
db_table = 'g_secretaries'
verbose_name = "WG Secretary"
@ -793,7 +794,7 @@ class WGTechAdvisor(models.Model):
def __str__(self):
return "%s (%s)" % ( self.person, self.role() )
def role(self):
return "%s Technical Advisor" % self.group_acronym.acronym
return "%s Technical Advisor" % self.group_acronym
class Meta:
db_table = 'g_tech_advisors'
verbose_name = "WG Technical Advisor"
@ -833,6 +834,19 @@ class GoalMilestone(models.Model):
list_filter = ['done']
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
class Role(models.Model):
@ -905,3 +919,4 @@ class DocumentWrapper(object):
primary_flag = 1
def __init__(self, document):
self.document = document

View file

@ -25,24 +25,62 @@ def expand_comma(value):
def parse_email_list(value):
"""
Parse a list of comma-seperated email addresses into
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)
a list of mailto: links.
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
# but let's wait until we understand what that's for.
@register.filter(name='make_one_per_line')
def make_one_per_line(value):
"""
Turn a comma-separated list into a carraige-return-seperated list."""
return re.sub(", ?", "\n", value)
Turn a comma-separated list into a carraige-return-seperated list.
>>> 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')
def link_if_url(value):
"""
@ -174,3 +212,10 @@ def inpast(date):
if date:
return date < datetime.datetime.now()
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/
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/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/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',
(r'^rfc(?P<object_id>\d+)/$', 'object_detail', rfc_dict),
(r'^(?P<object_id>\d+)/$', 'object_detail', id_dict),
)
urlpatterns += patterns('',
(r'^(?P<object_id>\d+)/$', views.redirect_id),
(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'^ballot/(?P<object_id>\d+)/$', views.view_ballot, ballot_dict),

View file

@ -1,15 +1,17 @@
# Copyright The IETF Trust 2007, All Rights Reserved
# Create your views here.
from django.http import HttpResponseRedirect
from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
from django import newforms as forms
from django.template import RequestContext
from django.shortcuts import get_object_or_404, render_to_response
from django.db.models import Q
from django.core.urlresolvers import reverse
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.forms import IDSearch, EmailFeedback
from ietf.utils.mail import send_mail_text
from ietf.utils import normalize_draftname
import re
# Override default form field mappings
@ -33,6 +35,8 @@ def search(request):
# "job_owner" of "0" means "All/Any"
if args.get('search_job_owner', '') == '0':
args['search_job_owner'] = ''
if args.has_key('search_filename'):
args['search_filename'] = normalize_draftname(args['search_filename'])
form = IDSearch(args)
# if there's a post, do the search and supply results to the template
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')
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.
# The named-URLs feature in django 0.97 will eliminate the
# need for these.

View file

@ -15,7 +15,7 @@ class IESGMinutes(Feed):
return TelechatMinutes.objects.order_by('-telechat_date')[:10]
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
# 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,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 /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/1563/ https://datatracker.ietf.org/public/previous_announcement.cgi?command=show_detail&ballot_id=1563
404 /iesg/ann/567/

View file

@ -6,7 +6,7 @@ import ietf.utils
import django.newforms as forms
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.http import Http404
from ietf.utils import log
@ -313,6 +313,14 @@ def new(request, type, update=None, submitter=None):
def update(request, ipr_id=None):
"""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
# the general ipr form. If the POST argument has the first
# 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()):
for error in form.errors:
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:
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)

View file

@ -9,7 +9,7 @@ from django.conf import settings
from ietf.idtracker.models import IETFWG, InternetDraft, Rfc
from ietf.ipr.models import IprRfc, IprDraft, IprDetail
from ietf.ipr.related import related_docs
from ietf.utils import log
from ietf.utils import log, normalize_draftname
def mark_last_doc(iprs):
@ -80,8 +80,10 @@ def search(request, type="", q="", id=""):
# Search by RFC number or draft-identifier
# Document list with IPRs
if type in ["document_search", "rfc_search"]:
doc = q
if type == "document_search":
if q:
q = normalize_draftname(q)
start = InternetDraft.objects.filter(filename__contains=q)
if 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)
if start.count() == 1:
first = start[0]
doc = str(first)
# get all related drafts, then search for IPRs on all
docs = related_docs(first, [])
#docs = get_doclist.get_doclist(first)
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) )
elif start.count():
return render("ipr/search_doc_list.html", {"q": q, "docs": start },
context_instance=RequestContext(request) )
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
# IPR list with documents

View file

@ -1,26 +1,32 @@
# -*- conf-mode -*-
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/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/new-generic/ https://datatracker.ietf.org/public/ipr_generic.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/update/ https://datatracker.ietf.org/public/ipr_update_list.cgi
200 /ipr/ https://datatracker.ietf.org/public/ipr_list.cgi
200 /ipr/657/ https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=657 # Generic disclosure
200 /ipr/834/ https://datatracker.ietf.org/public/ipr_detail_show.cgi?&ipr_id=834 # Specific 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-specific/ https://datatracker.ietf.org/public/ipr.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/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
302 /ipr/search/?option=document_search # incomplete argument set gives redirect
200 /ipr/search/ https://datatracker.ietf.org/public/ipr_search.cgi
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,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
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
# This takes ~ 300s:
#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=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=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,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
@ -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=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=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=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 /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=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/?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=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/about/ https://datatracker.ietf.org/public/ipr_disclosure.cgi
200 /ipr/2006/
200 /ipr/2006/feb/
200 /ipr/by-date/
200 /ipr/about/ https://datatracker.ietf.org/public/ipr_disclosure.cgi
200 /ipr/y/2006/
200 /ipr/y/2006/feb/
200 /ipr/by-date/

View file

@ -6,7 +6,7 @@ from ietf.ipr import models, views, new, search
urlpatterns = patterns('',
(r'^$', views.showlist),
(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/(?P<ipr_id>\d+)/$', new.update),
(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',
(r'^by-date/$', 'archive_index', archive),
(r'^(?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})/$', 'archive_year', 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
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.utils.html import escape
from django.http import Http404
@ -47,7 +47,7 @@ def list_all(request, template):
def show(request, ipr_id=None):
"""Show a specific IPR disclosure"""
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:
raise Http404
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/fields/ https://datatracker.ietf.org/public/liaison_field_help.cgi
200 /liaison/help/
# Test case for ticket #182:
200 /liaison/337/

View file

@ -99,7 +99,7 @@
<object pk="17" model="redirects.redirect">
<field type="CharField" name="cgi">public/ipr_detail_show.cgi</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>
</object>
<object pk="18" model="redirects.redirect">
@ -116,20 +116,20 @@
</object>
<object pk="20" model="redirects.redirect">
<field type="CharField" name="cgi">public/ipr_generic.cgi</field>
<field type="CharField" name="url">ipr/new-generic</field>
<field type="CharField" name="rest"></field>
<field type="CharField" name="url">ipr</field>
<field type="CharField" name="rest">new-generic</field>
<field type="CharField" name="remove"></field>
</object>
<object pk="21" model="redirects.redirect">
<field type="CharField" name="cgi">public/ipr_notify.cgi</field>
<field type="CharField" name="url">ipr/new-third-party</field>
<field type="CharField" name="rest"></field>
<field type="CharField" name="url">ipr</field>
<field type="CharField" name="rest">new-third-party</field>
<field type="CharField" name="remove"></field>
</object>
<object pk="22" model="redirects.redirect">
<field type="CharField" name="cgi">public/ipr.cgi</field>
<field type="CharField" name="url">ipr/new-specific</field>
<field type="CharField" name="rest"></field>
<field type="CharField" name="url">ipr</field>
<field type="CharField" name="rest">new-specific</field>
<field type="CharField" name="remove"></field>
</object>
<object pk="23" model="redirects.redirect">
@ -272,7 +272,7 @@
</object>
<object pk="13" model="redirects.command">
<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.suffix" name="suffix" rel="ManyToOneRel">4</field>
</object>
@ -318,6 +318,24 @@
<field to="redirects.redirect" name="script" rel="ManyToOneRel">7</field>
<field to="redirects.suffix" name="suffix" rel="ManyToOneRel">8</field>
</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">
<field type="CharField" name="rest">%(fl)s</field>
<field type="CharField" name="remove"></field>
@ -342,4 +360,8 @@
<field type="CharField" name="rest">%(id)s/related</field>
<field type="CharField" name="remove"></field>
</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>

View file

@ -15,7 +15,7 @@ class Redirect(models.Model):
searched for in the Command table to see if there
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)
rest = models.CharField(maxlength=100, blank=True)
remove = models.CharField(maxlength=50, blank=True)

View file

@ -26,7 +26,8 @@ def redirect(request, path="", script=""):
continue
if request.REQUEST.has_key(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
break
#
@ -39,6 +40,10 @@ def redirect(request, path="", script=""):
pass # it's ok, there's no more-specific request.
except KeyError:
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:
remove_args.append('command')
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
# to load the internationalization machinery.
USE_I18N = True
USE_I18N = False
# Absolute path to the directory that holds media.
# 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'
TEST_REFERENCE_URL_PREFIX = 'http://compost.research.att.com/old/'
# Put SECRET_KEY in here, or any other sensitive or site-specific
# changes. DO NOT commit settings_local.py to svn.
from settings_local import *

View file

@ -1,36 +1,47 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "base.html" %}
{% load versiontags %}
{% block content %}
<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>
<center><h1>The Internet Engineering Task Force</h1></center>
<h2>The Internet Engineering Task Force</h2>
<table border=0 cellspacing=5 cellpadding=5>
<br>
<font size = 3>
<center><img alt="" src="http://www.ietf.org/images/blue-line.jpg"></center>
<center><img alt="" src="/images/blue-line.jpg"></center>
<br clear=all>
<h3>The page you are looking for cannot be found.</h3><br>
If it is an Internet-Draft, the version may have expired.<br>
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.
<h2>The page you were looking for couldn't be found.</h2>
<div style="width:50%">
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>
For other Web page issues, please contact <a href="mailto:webmaster@ietf.org">webmaster@ietf.org</a>. <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>
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>
<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>
<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>
-->
{% 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

@ -1,34 +1,45 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "base.html" %}
{% load versiontags %}
{% block content %}
<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>
<center><h1>The Internet Engineering Task Force</h1></center>
<h2>The Internet Engineering Task Force</h2>
<table border=0 cellspacing=5 cellpadding=5>
<br>
<font size = 3>
<center><img alt="" src="http://www.ietf.org/images/blue-line.jpg"></center>
<center><img alt="" src="/images/blue-line.jpg"></center>
<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>
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>
<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>
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>
<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>
<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>
-->
{% 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

@ -14,7 +14,7 @@
<div id="leftmenu">
<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>
<ul>
<li><a title="About the Internet Engineering Task Force">About the IETF</a>
@ -104,11 +104,7 @@
<div id="footer">
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"> -->
<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>
{% include "footer.html" %}
</div>

View file

@ -24,18 +24,18 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
<center>
<table border=0 cellpadding=0 cellspacing=0>
<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="https://www1.ietf.org/images/header/home11.gif" border="0" /></a></td>
<td><img src="https://www1.ietf.org/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><img src="https://www1.ietf.org/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><img src="https://www1.ietf.org/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><img src="https://www1.ietf.org/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><img src="https://www1.ietf.org/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/home.html"><img src="/images/header/ietflogo_sm.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="/images/header/separator.gif" border="0" /></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="/images/header/separator.gif" border="0" /></td>
<td><a href="http://www.ietf.org/meetings/meetings.html"><img src="/images/header/meetings11.gif" border="0" /></a></td>
<td><img src="/images/header/separator.gif" border="0" /></td>
<td><a href="http://www.ietf.org/proceedings_directory.html"><img src="/images/header/proceed11.gif" border="0" /></a></td>
<td><img src="/images/header/separator.gif" border="0" /></td>
<td><a href="{% url ietf.idindex.views.search %}"><img src="/images/header/id-index11.gif" border="0" /></a></td>
<td><img src="/images/header/separator.gif" border="0" /></td>
<td><a href="http://www.ietf.org/rfc.html"><img src="/images/header/rfc11.gif" border="0" /></a></td>
</tr>
</table>
</center>
@ -50,7 +50,7 @@ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
{% block content %}{% endblock %}
{% block main_content %}{% endblock %}
</div>
{% include "footer.html" %}
{% block footer %}{% include "footer.html" %}{% endblock %}
{% include "debug.html" %}
</body>
</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 iddbcontent %}
<hr>
{% if didsearch %}
{# existing page just displays header and no results. #}
{% if object_list %}

View file

@ -1,6 +1,8 @@
{# Copyright The IETF Trust 2007, All Rights Reserved #}
{% extends "idindex/base.html" %}
{% block title %}Internet Draft Database Index - documents related to {{ startdoc.filename }}{% endblock %}
{% block iddbcontent %}
<hr>
<table>

View file

@ -4,6 +4,7 @@
{% block iddbcontent %}
<hr>
<h3>Please select a Working Group from the list below</h3>
{% if object_list %}
<blockquote>
{% regroup object_list by status as grouped %}
{% for status in grouped %}
@ -19,5 +20,8 @@
{% endfor %}
</ul>
{% endfor %}
{% else %}
<p>No working groups found beginning with "{{ search }}".</p>
{% endif %}
{% endblock %}

View file

@ -2,7 +2,7 @@
{% extends "idtracker/base.html" %}
{% load ietf_filters %}
{% block title %}IESG Announcement{% endblock %}
{% block title %}-- Ballot for {{ object.drafts.all.0.document.filename }}{% endblock %}
{% block idcontent %}
<pre>

View file

@ -2,7 +2,7 @@
<html>
<HEAD>
<!-- 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" %}
<link rel="icon" href="/images/ietf-dev-icon.bmp" />
{% else %}

View file

@ -3,6 +3,8 @@
{% load ietf_filters %}
{% block title %}-- comment on {{ object.document.document.filename }}{% endblock %}
{% block idcontent %}
{% if object.ballot %}
@ -11,15 +13,16 @@
<table cellpadding="1" cellspacing="1" border="0">
<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>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 %}
<tr><td><b>State before Comment:</td><td>{{ object.origin_state }}</td></tr>
{% endif %}
{% if object.result_state %}
<tr><td><b>State after Comment:</td><td>{{ object.result_state }}</td></tr>
{% 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>
<center><form>
<input type="button" value="close" onClick="history.go(-1);return true">

View file

@ -3,6 +3,8 @@
{% load ietf_filters %}
{% block title %}-- {{ object.document.filename }}{% endblock %}
{% block idcontent %}
<table width="90%" cellpading="1" cellspacing="0">
<tr>
@ -282,19 +284,5 @@
<input type="button" name="back_button" value="BACK"
onclick="history.go(-1);return true">
</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 %}

View file

@ -25,7 +25,7 @@
<center>
{% if searching %}
{% 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>
{% endif %}
@ -74,8 +74,8 @@ Document States: <a href="/images/state_diagram.gif">State Diagram</a> and
</center>
<hr>
{% if matches %}
<hr>
<b>Search Result</b><br>
{% regroup matches by docstate as grouped %}
{% include "idtracker/search_result_table.html" %}

View file

@ -108,15 +108,15 @@
There are 3 different IPR disclosures that can be made:
</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>
</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>
</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>
</p>
{% endif %}
@ -564,8 +564,8 @@
</form>
<blockquote>
<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="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.default %}">IPR Disclosure Page</a><br>
<img src="/images/blue.gif" hspace="3" border="0"><a href="{% url ietf.ipr.views.showlist %}">View IPR Disclosures</a><br><br>
</blockquote>
{% endif %}

View file

@ -3,11 +3,11 @@
{% block title %}IPR Disclosure Page{% endblock %}
{% block content %}
<center>
<img src="http://www.ietf.org/images/ietflogo2e.gif" height="160" width="280">
<img src="/images/ietflogo2e.gif" height="160" width="280">
</center>
<div>
<center>
<img src="http://www.ietf.org/images/ipr_header.gif" >
<img src="/images/ipr_header.gif" >
</center>
<p>
This page provides a mechanism for filing Disclosures about intellectual property rights
@ -25,17 +25,17 @@
<p />
<hr>
<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><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><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><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><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><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>
<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>.
@ -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
RFC Editor for publication as an Informational or Experimental RFC but not intended to be part of the IETF Standards Process.<br>
</p>
<hr>
<p>Please report any problems to <a href="mailto:ietf-action@ietf.org">ietf-action@ietf.org</a>
</p>
{% endblock %}

View file

@ -22,7 +22,7 @@
<h3>Archives by Year</h3>
<ul>
{% 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 %}
</ul>

View file

@ -6,7 +6,7 @@
{% block content %}
<h2>IPR Declarations - {{ year }}</h2>
<a href="../">All dates</a>
<a href="../../">All dates</a>
<ul>
{% 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>
<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="http://www.ietf.org/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="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="{% url ietf.ipr.search.search %}">Search the 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="/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="#notify">Specific Third Party IPR Disclosures</a><p>
<hr>
@ -37,7 +37,7 @@ which any license under such rights might or might not be available; nor does it
{% endfor %}
</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>
<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>
<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>
<h2>Specific Third Party IPR Disclosures</h2><br>
<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" %}
{% endfor %}
</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 %}

View file

@ -109,6 +109,6 @@
</table>
<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>
{% endblock %}

View file

@ -2,42 +2,42 @@
{% extends "ipr/search_result.html" %}
{% load ietf_filters %}
{% 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>
{% for ipr in iprs|dictsort:"submitted_date" %}
<tr valign="top" bgcolor="#dadada">
<td width="100">{{ ipr.submitted_date }}</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>
</tr>
{% endfor %}
<tr><td colspan="3">Total number of IPR disclosures found: {{ iprs|length }} </td></tr>
{% for ipr in iprs|dictsort:"submitted_date" %}
<tr valign="top" bgcolor="#dadada">
<td width="100">{{ ipr.submitted_date }}</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>
</tr>
{% endfor %}
<tr><td colspan="3"><hr>Total number of documents searched: {{ docs|length}}</td></tr>
{% for doc in docs %}
<tbody bgcolor="#{% cycle dadada,eaeaea as bgcolor %}">
<tr >
<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 %}
{% endifnotequal %}
</td>
</tr>
{% if doc.iprs %}
{% for ipr in doc.iprs %}
<tr valign="top">
<td width="100">{{ ipr.submitted_date }}</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>
</tr>
{% endfor %}
{% else %}
<tr>
<td></td>
<td colspan="2"><b>No IPR disclosures related to <i>{{ doc|rfcspace|lstrip:"0" }}</i> have been submitted</b></td>
</tr>
{% endif %}
</tbody>
{% endfor %}
<tr><td colspan="3"><hr>Total number of documents searched: {{ docs|length}}</td></tr>
{% for doc in docs %}
<tbody bgcolor="#{% cycle dadada,eaeaea as bgcolor %}">
<tr >
<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 %}
{% endifnotequal %}
</td>
</tr>
{% if doc.iprs %}
{% for ipr in doc.iprs %}
<tr valign="top">
<td width="100">{{ ipr.submitted_date }}</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>
</tr>
{% endfor %}
{% else %}
<tr>
<td></td>
<td colspan="2"><b>No IPR disclosures related to <i>{{ doc|rfcspace|lstrip:"0" }}</i> have been submitted</b></td>
</tr>
{% endif %}
</tbody>
{% endfor %}
</table>
</table>
{% endblock %}

View file

@ -29,18 +29,12 @@
<td width="100">{{ ipr.submitted_date }}</td>
<td width="90"><li>ID # {{ ipr.ipr_id }}</li></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 %}
{% 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
{% endifequal %}
{% 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>
</tr>
{% endfor %}

View file

@ -64,8 +64,8 @@
{% endblock %}
<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.views.showlist %}"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">IPR Disclosure Page</a>
<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="/images/blue.gif" hspace="3" border="0">IPR Disclosure Page</a>
<br>
</blockquote>
{% 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
{% endifequal %}
{% endfor %}
<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 %}-->
<a href="{% url ietf.ipr.views.show ipr.ipr_id %}">"{{ ipr.title }}"</a>
</td>
</tr>
{% endfor %}

View file

@ -5,6 +5,8 @@
{% 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">
{% if form.errors %}
<p class="errorlist">

View file

@ -7,11 +7,11 @@
<a href="{% url ietf.ipr.views.default %}">Click here to submit an IPR disclosure</a>
<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="#generic"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Generic 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="/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="#notify"><img src="http://www.ietf.org/images/blue.gif" hspace="3" border="0">Specific Third Party 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="/images/blue.gif" hspace="3" border="0">Specific Third Party IPR Disclosures</a><p>
<hr>
<a name="generic"></a>
@ -30,7 +30,7 @@
{% endfor %}
</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>
<h3>Specific IPR Disclosures</h3>
<b><font size = +1>Please select the IPR disclosure that you wish to update.</font><br>
@ -47,7 +47,7 @@
{% endfor %}
</table>
<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>
<h3>Specific Third Party IPR Disclosures</h3>
<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>
</table>
<hr>
<i>Please send problem reports to</i> <A HREF="mailto:ietf-action@ietf.org">ietf-action@ietf.org</A>.
{% endblock %}

View file

@ -17,7 +17,7 @@ Updated as of {% now "F j, Y, H:i:s (T)" %}
{% for wgs in areas %}
<table cellpadding="0" cellspacing="0" border="2" width="80%">
<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>
</tr>
</table>
@ -63,7 +63,7 @@ Updated as of {% now "F j, Y, H:i:s (T)" %}
{% if training_list %}
<table cellpadding="0" cellspacing="0" border="2" width="80%">
<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>
{% for wg in training_list|dictsort:"acronym" %}
<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 %}
<table cellpadding="0" cellspacing="0" border="2" width="80%">
<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>
</tr>
</table>
@ -110,7 +110,7 @@ Updated as of {% now "F j, Y, H:i:s (T)" %}
{% if interim_list %}
<table cellpadding="0" cellspacing="0" border="2" width="80%">
<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>
</tr>
</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_...
def run_tests(module_list, verbosity=1, extra_tests=[]):
def run_tests(module_list, verbosity=0, extra_tests=[]):
module_list.append(ietf.urls)
# If we append 'ietf.tests', we get it twice, first as itself, then
# 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):
if html.count("<li>") > 5*html.count("</li>"):
@ -90,6 +90,10 @@ def read_testurls(filename):
goodurl = None
elif len(urlspec) == 3:
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:
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)
traceback.print_exc()
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:
#print "Fetching", master, "...",
mfile = urllib.urlopen(master)
@ -296,8 +305,9 @@ class UrlTestCase(TestCase):
mfile.close()
note(" 200 %s" % (master))
except urllib.URLError, e:
note(" Error retrieving %s: %s" % (e.url, e))
goodhtml = None
note(" Error retrieving %s: %s" % (master, e))
except urllib.BadStatusLine, e:
note(" Error retrieving %s: %s" % (master, e))
try:
if goodhtml and response.content:
if "sort" in codes:
@ -335,7 +345,7 @@ class UrlTestCase(TestCase):
else:
contextlines = 0
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])
keys = module.diffchunks.keys()
keys.sort
@ -352,7 +362,7 @@ class UrlTestCase(TestCase):
# discard them too
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):
dfile = open(dfile)
#print "Reading OK diff file:", dfile.name
@ -367,9 +377,9 @@ class UrlTestCase(TestCase):
note("Failed diff: %s" % (url))
else:
note("Diff: %s" % (url))
print "\n".join(diff.split("\n")[:120])
if len(diff.split("\n")) > 120:
print "... (skipping %s lines of diff)" % (len(difflist)-120)
print "\n".join(diff.split("\n")[:100])
if len(diff.split("\n")) > 100:
print "... (skipping %s lines of diff)" % (len(difflist)-100)
else:
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
# 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 /css/base.css
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.idtracker.feeds import DocumentComments
from ietf.ipr.feeds import LatestIprDisclosures
import ietf.utils.views
import ietf.views
from django.conf import settings
@ -31,7 +29,7 @@ urlpatterns = patterns('',
(r'^meeting/', include('ietf.meeting.urls')),
(r'^accounts/', include('ietf.ietfauth.urls')),
(r'^$', ietf.views.apps),
(r'^$', 'ietf.redirects.views.redirect'),
# Uncomment this for admin:
(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/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'):

View file

@ -5,6 +5,7 @@ from log import log
from cache_foreign_key import FKAsOneToOne
from templated_form import makeTemplatedForm
from soup2text import TextSoup, soup2text
from draft_search import normalize_draftname
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 @@
-IETF Announcement Date: June 3, 2007 Subject: IETF Nomcom Appointment
-- 2007-2008
+IETF Announcement list Date: June 3, 2007 Subject: IETF Nomcom
+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 @@
-I-D Exists
@@ -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 @@
-Published I-Ds sorted by UNKNOWN
+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 @@
+draft-ietf-hubmib-etherif-MIB-06 1998-08-06 RFC 2358 I-D Exists
@@ -1124,1 +1125,0 @@

View file

@ -1,5 +1,3 @@
--- https://datatracker.ietf.org/public/pidtracker.cgi
+++ /idtracker/
@@ -68,0 +68,1 @@
+--All Substates
@@ -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 @@
-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-
+link-attr-01.txt > > Abstract > > This document defines a sub-TLV
+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 @@
+--All Substates
@@ -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 @@
-https://datatracker.ietf.org/public/pidtracker.cgi?command=view_id&dTag=12689&rfc_flag=0
+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
+++ /idtracker/comment/65232/
@@ -5,2 +5,0 @@
@@ -3,0 +3,1 @@
+Document: draft-ietf-isis-link-attr
@@ -5,2 +6,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 @@
-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-
+link-attr-01.txt > > Abstract > > This document defines a sub-TLV
+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
+++ /idtracker/draft-ietf-isis-link-attr/comment/65232/
@@ -5,2 +5,0 @@
@@ -3,0 +3,1 @@
+Document: draft-ietf-isis-link-attr
@@ -5,2 +6,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 @@
+IESG Announcement
+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 @@
+IESG Announcement
+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 @@
+Date Sent: April 4, 2002
@@ -468,1 +469,0 @@

View file

@ -1,6 +1,4 @@
--- https://datatracker.ietf.org/public/ipr_list.cgi
+++ /ipr/
@@ -63,0 +63,1 @@
+2000-09-15 170 i-DNS.net International general License statement
@@ -66,1 +67,0 @@
-0000-09-15 170 i-DNS.net International general License statement
@@ -22,0 +22,1 @@
+2007-06-26 859 QUALCOMM Incorporated's General License Statement
@@ -1362,1 +1363,0 @@
-Please report any problems to ietf-act ion@ietf.org

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

View file

@ -1,7 +1,6 @@
--- https://datatracker.ietf.org/public/ipr_disclosure.cgi
+++ /ipr/about/
@@ -5,2 +5,2 @@
-Technology" (updated by RFC4879, "Clarification of the Thrid Party
-Disclosure Procedure in RFC3979".)
@@ -5,1 +5,2 @@
-Technology".
+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 @@
-Note: According to Section 6.4.3 ofRFC3979, "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 @@
+Fields marked with * are required.
@@ -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 @@
-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