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 93d5d193e5
This commit is contained in:
Robert Sparks 2021-11-02 15:55:20 +00:00
commit 2eb2ced685
4 changed files with 53 additions and 31 deletions

View file

@ -0,0 +1,17 @@
# Copyright The IETF Trust 2014-2021, All Rights Reserved
# -*- coding: utf-8 -*-
from django.core.management.base import BaseCommand, CommandError
from ietf.ipr.utils import generate_draft_recursive_txt
class Command(BaseCommand):
help = ("Generate machine-readable list of IPR disclosures by draft name (recursive)")
def handle(self, *args, **options):
try:
generate_draft_recursive_txt()
except (ValueError, IOError) as e:
raise CommandError(e)

View file

@ -13,7 +13,7 @@ from django.urls import reverse as urlreverse
import debug # pyflakes:ignore
from ietf.doc.models import DocAlias
from ietf.doc.factories import DocumentFactory, WgDraftFactory, IndividualDraftFactory, WgRfcFactory
from ietf.doc.factories import DocumentFactory, WgDraftFactory, WgRfcFactory
from ietf.group.factories import RoleFactory
from ietf.ipr.factories import HolderIprDisclosureFactory, GenericIprDisclosureFactory, IprEventFactory
from ietf.ipr.mail import (process_response_email, get_reply_to, get_update_submitter_emails,
@ -129,16 +129,6 @@ class IprTests(TestCase):
self.assertContains(r, draft.name)
self.assertContains(r, str(ipr.pk))
def test_iprs_for_drafts_recursive(self):
draft = WgDraftFactory(relations=[('replaces', IndividualDraftFactory())])
ipr = HolderIprDisclosureFactory(docs=[draft,])
replaced = draft.all_related_that_doc('replaces')
r = self.client.get(urlreverse("ietf.ipr.views.by_draft_recursive_txt"))
self.assertContains(r, draft.name)
for alias in replaced:
self.assertContains(r, alias.name)
self.assertContains(r, str(ipr.pk))
def test_about(self):
r = self.client.get(urlreverse("ietf.ipr.views.about"))
self.assertContains(r, "File a disclosure")

View file

@ -1,6 +1,7 @@
# Copyright The IETF Trust 2014-2020, All Rights Reserved
# -*- coding: utf-8 -*-
from ietf.ipr.models import IprDocRel
import debug # pyflakes:ignore
@ -62,3 +63,29 @@ def related_docs(alias, relationship=('replaces', 'obs')):
return list(set(results))
def generate_draft_recursive_txt():
docipr = {}
for o in IprDocRel.objects.filter(disclosure__state='posted').select_related('document'):
alias = o.document
name = alias.name
for document in alias.docs.all():
related = set(document.docalias.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 = [ "# Machine-readable list of IPR disclosures by draft name" ]
for name, iprs in docipr.items():
lines.append(name + "\t" + "\t".join(str(ipr_id) for ipr_id in sorted(iprs)))
data = '\n'.join(lines)
filename = '/a/ietfdata/derived/ipr_draft_recursive.txt'
with open(filename, 'w') as f:
f.write(data)

View file

@ -459,26 +459,14 @@ def by_draft_txt(request):
return HttpResponse("\n".join(lines), content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
def by_draft_recursive_txt(request):
docipr = {}
"""Returns machine-readable list of IPR disclosures by draft name, recursive.
NOTE: this view is expensive and should be removed once tools.ietf.org is retired,
including util function and management commands that generate the content for
this view."""
for o in IprDocRel.objects.filter(disclosure__state='posted').select_related('document'):
alias = o.document
name = alias.name
for document in alias.docs.all():
related = set(document.docalias.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 = [ "# Machine-readable list of IPR disclosures by draft name" ]
for name, iprs in docipr.items():
lines.append(name + "\t" + "\t".join(str(ipr_id) for ipr_id in sorted(iprs)))
return HttpResponse("\n".join(lines), content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
with open('/a/ietfdata/derived/ipr_draft_recursive.txt') as f:
content = f.read()
return HttpResponse(content, content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET)
def new(request, type, updates=None):