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
This commit is contained in:
Henrik Levkowetz 2015-10-23 16:34:44 +00:00
parent bfa222b782
commit f1a08564d1
4 changed files with 62 additions and 5 deletions

View file

@ -5,6 +5,8 @@ from pyquery import PyQuery
from django.core.urlresolvers import reverse as urlreverse
import debug # pyflakes:ignore
from ietf.doc.models import DocAlias
from ietf.ipr.mail import (process_response_email, get_reply_to, get_update_submitter_emails,
get_pseudo_submitter, get_holders, get_update_cc_addrs)
@ -149,11 +151,22 @@ class IprTests(TestCase):
def test_iprs_for_drafts(self):
draft = make_test_data()
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
r = self.client.get(urlreverse("ietf.ipr.views.iprs_for_drafts_txt"))
r = self.client.get(urlreverse("ietf.ipr.views.by_draft_txt"))
self.assertEqual(r.status_code, 200)
self.assertTrue(draft.name in r.content)
self.assertTrue(str(ipr.pk) in r.content)
def test_iprs_for_drafts_recursive(self):
draft = make_test_data()
replaced = draft.all_related_that_doc(['replaces'])
ipr = IprDisclosureBase.objects.get(title='Statement regarding rights')
r = self.client.get(urlreverse("ietf.ipr.views.by_draft_recursive_txt"))
self.assertEqual(r.status_code, 200)
self.assertTrue(draft.name in r.content)
for alias in replaced:
self.assertTrue(alias.name in r.content)
self.assertTrue(str(ipr.pk) in r.content)
def test_about(self):
r = self.client.get(urlreverse("ietf.ipr.views.about"))
self.assertEqual(r.status_code, 200)

View file

@ -10,7 +10,8 @@ urlpatterns = patterns('ietf.ipr.views',
url(r'^admin/$', RedirectView.as_view(url=reverse_lazy('ipr_admin',kwargs={'state':'pending'})),name="ipr_admin_main"),
url(r'^admin/(?P<state>pending|removed|parked)/$', 'admin', name='ipr_admin'),
url(r'^ajax/search/$', 'ajax_search', name='ipr_ajax_search'),
(r'^by-draft/$', 'iprs_for_drafts_txt'),
url(r'^by-draft/$', 'by_draft_txt'),
url(r'^by-draft-recursive/$', 'by_draft_recursive_txt'),
url(r'^(?P<id>\d+)/$', 'show', name='ipr_show'),
url(r'^(?P<id>\d+)/addcomment/$', 'add_comment', name='ipr_add_comment'),
url(r'^(?P<id>\d+)/addemail/$', 'add_email', name='ipr_add_email'),

View file

@ -13,6 +13,8 @@ from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.shortcuts import render, get_object_or_404, redirect
from django.template.loader import render_to_string
import debug # pyflakes:ignore
from ietf.doc.models import DocAlias
from ietf.group.models import Role, Group
from ietf.ietfauth.utils import role_required, has_role
@ -404,7 +406,7 @@ def history(request, id):
'selected_tab_entry':'history'
})
def iprs_for_drafts_txt(request):
def by_draft_txt(request):
docipr = {}
for o in IprDocRel.objects.filter(disclosure__state='posted').select_related('document'):
@ -423,6 +425,29 @@ def iprs_for_drafts_txt(request):
return HttpResponse("\n".join(lines), content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
def by_draft_recursive_txt(request):
docipr = {}
for o in IprDocRel.objects.filter(disclosure__state='posted').select_related('document'):
alias = o.document
document = alias.document
name = alias.name
related = set(document.docalias_set.all()) | set(document.all_related_that_doc(['obs', 'replaces']))
for alias in related:
name = alias.name
if name.startswith("rfc"):
name = name.upper()
if not name in docipr:
docipr[name] = []
docipr[name].append(o.disclosure_id)
lines = [ u"# Machine-readable list of IPR disclosures by draft name" ]
for name, iprs in docipr.iteritems():
lines.append(name + "\t" + "\t".join(unicode(ipr_id) for ipr_id in sorted(iprs)))
return HttpResponse("\n".join(lines), content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
def new(request, type, updates=None):
"""Submit a new IPR Disclosure. If the updates field != None, this disclosure
updates one or more other disclosures."""

View file

@ -5,12 +5,12 @@ from django.contrib.auth.models import User
import debug # pyflakes:ignore
from ietf.doc.models import Document, DocAlias, State, DocumentAuthor, BallotType, DocEvent, BallotDocEvent
from ietf.doc.models import Document, DocAlias, State, DocumentAuthor, BallotType, DocEvent, BallotDocEvent, RelatedDocument
from ietf.group.models import Group, GroupHistory, Role, RoleHistory
from ietf.iesg.models import TelechatDate
from ietf.ipr.models import HolderIprDisclosure, IprDocRel, IprDisclosureStateName, IprLicenseTypeName
from ietf.meeting.models import Meeting
from ietf.name.models import StreamName
from ietf.name.models import StreamName, DocRelationshipName
from ietf.person.models import Person, Email
def create_person(group, role_name, name=None, username=None, email_address=None, password=None):
@ -183,6 +183,21 @@ def make_test_data():
ames_wg.role_set.get_or_create(name_id='ad',person=ad,email=ad.role_email('ad'))
ames_wg.save()
# old draft
old_draft = Document.objects.create(
name="draft-foo-mars-test",
time=datetime.datetime.now() - datetime.timedelta(days=settings.INTERNET_DRAFT_DAYS_TO_EXPIRE),
type_id="draft",
title="Optimizing Martian Network Topologies",
stream_id="ietf",
abstract="Techniques for achieving near-optimal Martian networks.",
rev="00",
pages=2,
expires=datetime.datetime.now(),
)
old_draft.set_state(State.objects.get(used=True, type="draft", slug="expired"))
old_alias = DocAlias.objects.create(document=old_draft, name=old_draft.name)
# draft
draft = Document.objects.create(
name="draft-ietf-mars-test",
@ -211,6 +226,9 @@ def make_test_data():
name=draft.name,
)
RelatedDocument.objects.create(source=draft, target=old_alias, relationship=DocRelationshipName.objects.get(slug='replaces'))
old_draft.set_state(State.objects.get(type='draft', slug='repl'))
DocumentAuthor.objects.create(
document=draft,
author=Email.objects.get(address="aread@ietf.org"),