Skip to content

Commit f1a0856

Browse files
committed
Added a new machine-readable list of IPR declarations per draft, which also searches through related documents. Extended make_test_data() with a replaced document for the test draft.
- Legacy-Id: 10272
1 parent bfa222b commit f1a0856

4 files changed

Lines changed: 62 additions & 5 deletions

File tree

ietf/ipr/tests.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
from django.core.urlresolvers import reverse as urlreverse
77

8+
import debug # pyflakes:ignore
9+
810
from ietf.doc.models import DocAlias
911
from ietf.ipr.mail import (process_response_email, get_reply_to, get_update_submitter_emails,
1012
get_pseudo_submitter, get_holders, get_update_cc_addrs)
@@ -149,9 +151,20 @@ def test_show_removed(self):
149151
def test_iprs_for_drafts(self):
150152
draft = make_test_data()
151153
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
152-
r = self.client.get(urlreverse("ietf.ipr.views.iprs_for_drafts_txt"))
154+
r = self.client.get(urlreverse("ietf.ipr.views.by_draft_txt"))
155+
self.assertEqual(r.status_code, 200)
156+
self.assertTrue(draft.name in r.content)
157+
self.assertTrue(str(ipr.pk) in r.content)
158+
159+
def test_iprs_for_drafts_recursive(self):
160+
draft = make_test_data()
161+
replaced = draft.all_related_that_doc(['replaces'])
162+
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
163+
r = self.client.get(urlreverse("ietf.ipr.views.by_draft_recursive_txt"))
153164
self.assertEqual(r.status_code, 200)
154165
self.assertTrue(draft.name in r.content)
166+
for alias in replaced:
167+
self.assertTrue(alias.name in r.content)
155168
self.assertTrue(str(ipr.pk) in r.content)
156169

157170
def test_about(self):

ietf/ipr/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
url(r'^admin/$', RedirectView.as_view(url=reverse_lazy('ipr_admin',kwargs={'state':'pending'})),name="ipr_admin_main"),
1111
url(r'^admin/(?P<state>pending|removed|parked)/$', 'admin', name='ipr_admin'),
1212
url(r'^ajax/search/$', 'ajax_search', name='ipr_ajax_search'),
13-
(r'^by-draft/$', 'iprs_for_drafts_txt'),
13+
url(r'^by-draft/$', 'by_draft_txt'),
14+
url(r'^by-draft-recursive/$', 'by_draft_recursive_txt'),
1415
url(r'^(?P<id>\d+)/$', 'show', name='ipr_show'),
1516
url(r'^(?P<id>\d+)/addcomment/$', 'add_comment', name='ipr_add_comment'),
1617
url(r'^(?P<id>\d+)/addemail/$', 'add_email', name='ipr_add_email'),

ietf/ipr/views.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
from django.shortcuts import render, get_object_or_404, redirect
1414
from django.template.loader import render_to_string
1515

16+
import debug # pyflakes:ignore
17+
1618
from ietf.doc.models import DocAlias
1719
from ietf.group.models import Role, Group
1820
from ietf.ietfauth.utils import role_required, has_role
@@ -404,7 +406,7 @@ def history(request, id):
404406
'selected_tab_entry':'history'
405407
})
406408

407-
def iprs_for_drafts_txt(request):
409+
def by_draft_txt(request):
408410
docipr = {}
409411

410412
for o in IprDocRel.objects.filter(disclosure__state='posted').select_related('document'):
@@ -423,6 +425,29 @@ def iprs_for_drafts_txt(request):
423425

424426
return HttpResponse("\n".join(lines), content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
425427

428+
def by_draft_recursive_txt(request):
429+
docipr = {}
430+
431+
for o in IprDocRel.objects.filter(disclosure__state='posted').select_related('document'):
432+
alias = o.document
433+
document = alias.document
434+
name = alias.name
435+
related = set(document.docalias_set.all()) | set(document.all_related_that_doc(['obs', 'replaces']))
436+
for alias in related:
437+
name = alias.name
438+
if name.startswith("rfc"):
439+
name = name.upper()
440+
if not name in docipr:
441+
docipr[name] = []
442+
docipr[name].append(o.disclosure_id)
443+
444+
lines = [ u"# Machine-readable list of IPR disclosures by draft name" ]
445+
for name, iprs in docipr.iteritems():
446+
lines.append(name + "\t" + "\t".join(unicode(ipr_id) for ipr_id in sorted(iprs)))
447+
448+
return HttpResponse("\n".join(lines), content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
449+
450+
426451
def new(request, type, updates=None):
427452
"""Submit a new IPR Disclosure. If the updates field != None, this disclosure
428453
updates one or more other disclosures."""

ietf/utils/test_data.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55

66
import debug # pyflakes:ignore
77

8-
from ietf.doc.models import Document, DocAlias, State, DocumentAuthor, BallotType, DocEvent, BallotDocEvent
8+
from ietf.doc.models import Document, DocAlias, State, DocumentAuthor, BallotType, DocEvent, BallotDocEvent, RelatedDocument
99
from ietf.group.models import Group, GroupHistory, Role, RoleHistory
1010
from ietf.iesg.models import TelechatDate
1111
from ietf.ipr.models import HolderIprDisclosure, IprDocRel, IprDisclosureStateName, IprLicenseTypeName
1212
from ietf.meeting.models import Meeting
13-
from ietf.name.models import StreamName
13+
from ietf.name.models import StreamName, DocRelationshipName
1414
from ietf.person.models import Person, Email
1515

1616
def create_person(group, role_name, name=None, username=None, email_address=None, password=None):
@@ -183,6 +183,21 @@ def make_test_data():
183183
ames_wg.role_set.get_or_create(name_id='ad',person=ad,email=ad.role_email('ad'))
184184
ames_wg.save()
185185

186+
# old draft
187+
old_draft = Document.objects.create(
188+
name="draft-foo-mars-test",
189+
time=datetime.datetime.now() - datetime.timedelta(days=settings.INTERNET_DRAFT_DAYS_TO_EXPIRE),
190+
type_id="draft",
191+
title="Optimizing Martian Network Topologies",
192+
stream_id="ietf",
193+
abstract="Techniques for achieving near-optimal Martian networks.",
194+
rev="00",
195+
pages=2,
196+
expires=datetime.datetime.now(),
197+
)
198+
old_draft.set_state(State.objects.get(used=True, type="draft", slug="expired"))
199+
old_alias = DocAlias.objects.create(document=old_draft, name=old_draft.name)
200+
186201
# draft
187202
draft = Document.objects.create(
188203
name="draft-ietf-mars-test",
@@ -211,6 +226,9 @@ def make_test_data():
211226
name=draft.name,
212227
)
213228

229+
RelatedDocument.objects.create(source=draft, target=old_alias, relationship=DocRelationshipName.objects.get(slug='replaces'))
230+
old_draft.set_state(State.objects.get(type='draft', slug='repl'))
231+
214232
DocumentAuthor.objects.create(
215233
document=draft,
216234
author=Email.objects.get(address="aread@ietf.org"),

0 commit comments

Comments
 (0)