Skip to content

Commit 2eb2ced

Browse files
committed
Merged in [19488] from rcross@amsl.com:
Change view /ipr/by-draft-recursive to use static content - Legacy-Id: 19524 Note: SVN reference [19488] has been migrated to Git commit 93d5d19
2 parents 6271c05 + 93d5d19 commit 2eb2ced

File tree

4 files changed

+54
-32
lines changed

4 files changed

+54
-32
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Copyright The IETF Trust 2014-2021, All Rights Reserved
2+
# -*- coding: utf-8 -*-
3+
4+
5+
from django.core.management.base import BaseCommand, CommandError
6+
7+
from ietf.ipr.utils import generate_draft_recursive_txt
8+
9+
10+
class Command(BaseCommand):
11+
help = ("Generate machine-readable list of IPR disclosures by draft name (recursive)")
12+
13+
def handle(self, *args, **options):
14+
try:
15+
generate_draft_recursive_txt()
16+
except (ValueError, IOError) as e:
17+
raise CommandError(e)

ietf/ipr/tests.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import debug # pyflakes:ignore
1414

1515
from ietf.doc.models import DocAlias
16-
from ietf.doc.factories import DocumentFactory, WgDraftFactory, IndividualDraftFactory, WgRfcFactory
16+
from ietf.doc.factories import DocumentFactory, WgDraftFactory, WgRfcFactory
1717
from ietf.group.factories import RoleFactory
1818
from ietf.ipr.factories import HolderIprDisclosureFactory, GenericIprDisclosureFactory, IprEventFactory
1919
from ietf.ipr.mail import (process_response_email, get_reply_to, get_update_submitter_emails,
@@ -129,16 +129,6 @@ def test_iprs_for_drafts(self):
129129
self.assertContains(r, draft.name)
130130
self.assertContains(r, str(ipr.pk))
131131

132-
def test_iprs_for_drafts_recursive(self):
133-
draft = WgDraftFactory(relations=[('replaces', IndividualDraftFactory())])
134-
ipr = HolderIprDisclosureFactory(docs=[draft,])
135-
replaced = draft.all_related_that_doc('replaces')
136-
r = self.client.get(urlreverse("ietf.ipr.views.by_draft_recursive_txt"))
137-
self.assertContains(r, draft.name)
138-
for alias in replaced:
139-
self.assertContains(r, alias.name)
140-
self.assertContains(r, str(ipr.pk))
141-
142132
def test_about(self):
143133
r = self.client.get(urlreverse("ietf.ipr.views.about"))
144134
self.assertContains(r, "File a disclosure")
@@ -723,4 +713,4 @@ def test_docevent_creation(self):
723713
removed_docevent = doc.docevent_set.filter(type='removed_related_ipr').first()
724714
self.assertIn(ipr.title, removed_docevent.desc,
725715
'IprDisclosure title does not appear in DocEvent desc when removed')
726-
716+

ietf/ipr/utils.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright The IETF Trust 2014-2020, All Rights Reserved
22
# -*- coding: utf-8 -*-
33

4+
from ietf.ipr.models import IprDocRel
45

56
import debug # pyflakes:ignore
67

@@ -61,4 +62,30 @@ def related_docs(alias, relationship=('replaces', 'obs')):
6162

6263
return list(set(results))
6364

65+
66+
def generate_draft_recursive_txt():
67+
docipr = {}
68+
69+
for o in IprDocRel.objects.filter(disclosure__state='posted').select_related('document'):
70+
alias = o.document
71+
name = alias.name
72+
for document in alias.docs.all():
73+
related = set(document.docalias.all()) | set(document.all_related_that_doc(('obs', 'replaces')))
74+
for alias in related:
75+
name = alias.name
76+
if name.startswith("rfc"):
77+
name = name.upper()
78+
if not name in docipr:
79+
docipr[name] = []
80+
docipr[name].append(o.disclosure_id)
81+
82+
lines = [ "# Machine-readable list of IPR disclosures by draft name" ]
83+
for name, iprs in docipr.items():
84+
lines.append(name + "\t" + "\t".join(str(ipr_id) for ipr_id in sorted(iprs)))
85+
86+
data = '\n'.join(lines)
87+
filename = '/a/ietfdata/derived/ipr_draft_recursive.txt'
88+
with open(filename, 'w') as f:
89+
f.write(data)
90+
6491

ietf/ipr/views.py

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -459,26 +459,14 @@ def by_draft_txt(request):
459459
return HttpResponse("\n".join(lines), content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
460460

461461
def by_draft_recursive_txt(request):
462-
docipr = {}
463-
464-
for o in IprDocRel.objects.filter(disclosure__state='posted').select_related('document'):
465-
alias = o.document
466-
name = alias.name
467-
for document in alias.docs.all():
468-
related = set(document.docalias.all()) | set(document.all_related_that_doc(('obs', 'replaces')))
469-
for alias in related:
470-
name = alias.name
471-
if name.startswith("rfc"):
472-
name = name.upper()
473-
if not name in docipr:
474-
docipr[name] = []
475-
docipr[name].append(o.disclosure_id)
476-
477-
lines = [ "# Machine-readable list of IPR disclosures by draft name" ]
478-
for name, iprs in docipr.items():
479-
lines.append(name + "\t" + "\t".join(str(ipr_id) for ipr_id in sorted(iprs)))
480-
481-
return HttpResponse("\n".join(lines), content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
462+
"""Returns machine-readable list of IPR disclosures by draft name, recursive.
463+
NOTE: this view is expensive and should be removed once tools.ietf.org is retired,
464+
including util function and management commands that generate the content for
465+
this view."""
466+
467+
with open('/a/ietfdata/derived/ipr_draft_recursive.txt') as f:
468+
content = f.read()
469+
return HttpResponse(content, content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
482470

483471

484472
def new(request, type, updates=None):

0 commit comments

Comments
 (0)