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:
parent
bfa222b782
commit
f1a08564d1
|
@ -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)
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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"),
|
||||
|
|
Loading…
Reference in a new issue