Merged in [19833] from jennifer@painless-security.com:

Point to RFC editor info page in document_bibtex view. Fixes #3484.
 - Legacy-Id: 19846
Note: SVN reference [19833] has been migrated to Git commit efa42e1558
This commit is contained in:
Robert Sparks 2022-01-14 18:35:40 +00:00
commit 4a89bab81d
3 changed files with 19 additions and 4 deletions

View file

@ -219,6 +219,11 @@ def rfclink(string):
string = str(string); string = str(string);
return "https://datatracker.ietf.org/doc/html/rfc" + string; return "https://datatracker.ietf.org/doc/html/rfc" + string;
@register.filter
def rfceditor_info_url(rfcnum : str):
"""Link to the RFC editor info page for an RFC"""
return urljoin(settings.RFC_EDITOR_INFO_BASE_URL, f'rfc{rfcnum}')
@register.filter(name='urlize_ietf_docs', is_safe=True, needs_autoescape=True) @register.filter(name='urlize_ietf_docs', is_safe=True, needs_autoescape=True)
def urlize_ietf_docs(string, autoescape=None): def urlize_ietf_docs(string, autoescape=None):
""" """

View file

@ -22,6 +22,7 @@ from django.urls import reverse as urlreverse
from django.conf import settings from django.conf import settings
from django.forms import Form from django.forms import Form
from django.utils.html import escape from django.utils.html import escape
from django.test import override_settings
from django.utils.text import slugify from django.utils.text import slugify
from tastypie.test import ResourceTestCaseMixin from tastypie.test import ResourceTestCaseMixin
@ -1773,6 +1774,12 @@ class DocTestCase(TestCase):
self.assertEqual(r.status_code, 200) self.assertEqual(r.status_code, 200)
self.assertNotContains(r, "Request publication") self.assertNotContains(r, "Request publication")
def _parse_bibtex_response(self, response) -> dict:
parser = bibtexparser.bparser.BibTexParser()
parser.homogenise_fields = False # do not modify field names (e.g., turns "url" into "link" by default)
return bibtexparser.loads(response.content.decode(), parser=parser).get_entry_dict()
@override_settings(RFC_EDITOR_INFO_BASE_URL='https://www.rfc-editor.ietf.org/info/')
def test_document_bibtex(self): def test_document_bibtex(self):
rfc = WgRfcFactory.create( rfc = WgRfcFactory.create(
#other_aliases = ['rfc6020',], #other_aliases = ['rfc6020',],
@ -1785,12 +1792,13 @@ class DocTestCase(TestCase):
# #
url = urlreverse('ietf.doc.views_doc.document_bibtex', kwargs=dict(name=rfc.name)) url = urlreverse('ietf.doc.views_doc.document_bibtex', kwargs=dict(name=rfc.name))
r = self.client.get(url) r = self.client.get(url)
entry = bibtexparser.loads(unicontent(r)).get_entry_dict()["rfc%s"%num] entry = self._parse_bibtex_response(r)["rfc%s"%num]
self.assertEqual(entry['series'], 'Request for Comments') self.assertEqual(entry['series'], 'Request for Comments')
self.assertEqual(entry['number'], num) self.assertEqual(entry['number'], num)
self.assertEqual(entry['doi'], '10.17487/RFC%s'%num) self.assertEqual(entry['doi'], '10.17487/RFC%s'%num)
self.assertEqual(entry['year'], '2010') self.assertEqual(entry['year'], '2010')
self.assertEqual(entry['month'], 'oct') self.assertEqual(entry['month'], 'oct')
self.assertEqual(entry['url'], f'https://www.rfc-editor.ietf.org/info/rfc{num}')
# #
self.assertNotIn('day', entry) self.assertNotIn('day', entry)
@ -1806,25 +1814,27 @@ class DocTestCase(TestCase):
url = urlreverse('ietf.doc.views_doc.document_bibtex', kwargs=dict(name=april1.name)) url = urlreverse('ietf.doc.views_doc.document_bibtex', kwargs=dict(name=april1.name))
r = self.client.get(url) r = self.client.get(url)
self.assertEqual(r.get('Content-Type'), 'text/plain; charset=utf-8') self.assertEqual(r.get('Content-Type'), 'text/plain; charset=utf-8')
entry = bibtexparser.loads(unicontent(r)).get_entry_dict()['rfc%s'%num] entry = self._parse_bibtex_response(r)["rfc%s"%num]
self.assertEqual(entry['series'], 'Request for Comments') self.assertEqual(entry['series'], 'Request for Comments')
self.assertEqual(entry['number'], num) self.assertEqual(entry['number'], num)
self.assertEqual(entry['doi'], '10.17487/RFC%s'%num) self.assertEqual(entry['doi'], '10.17487/RFC%s'%num)
self.assertEqual(entry['year'], '1990') self.assertEqual(entry['year'], '1990')
self.assertEqual(entry['month'], 'apr') self.assertEqual(entry['month'], 'apr')
self.assertEqual(entry['day'], '1') self.assertEqual(entry['day'], '1')
self.assertEqual(entry['url'], f'https://www.rfc-editor.ietf.org/info/rfc{num}')
draft = IndividualDraftFactory.create() draft = IndividualDraftFactory.create()
docname = '%s-%s' % (draft.name, draft.rev) docname = '%s-%s' % (draft.name, draft.rev)
bibname = docname[6:] # drop the 'draft-' prefix bibname = docname[6:] # drop the 'draft-' prefix
url = urlreverse('ietf.doc.views_doc.document_bibtex', kwargs=dict(name=draft.name)) url = urlreverse('ietf.doc.views_doc.document_bibtex', kwargs=dict(name=draft.name))
r = self.client.get(url) r = self.client.get(url)
entry = bibtexparser.loads(unicontent(r)).get_entry_dict()[bibname] entry = self._parse_bibtex_response(r)[bibname]
self.assertEqual(entry['note'], 'Work in Progress') self.assertEqual(entry['note'], 'Work in Progress')
self.assertEqual(entry['number'], docname) self.assertEqual(entry['number'], docname)
self.assertEqual(entry['year'], str(draft.pub_date().year)) self.assertEqual(entry['year'], str(draft.pub_date().year))
self.assertEqual(entry['month'], draft.pub_date().strftime('%b').lower()) self.assertEqual(entry['month'], draft.pub_date().strftime('%b').lower())
self.assertEqual(entry['day'], str(draft.pub_date().day)) self.assertEqual(entry['day'], str(draft.pub_date().day))
self.assertEqual(entry['url'], f'https://datatracker.ietf.org/doc/html/{docname}')
# #
self.assertNotIn('doi', entry) self.assertNotIn('doi', entry)

View file

@ -15,7 +15,7 @@
howpublished = {% templatetag openbrace %}RFC {{ doc.rfc_number }}{% if doc.doc.intended_std_level %} ({{ doc.intended_std_level }}){% endif %}{% templatetag closebrace %}, howpublished = {% templatetag openbrace %}RFC {{ doc.rfc_number }}{% if doc.doc.intended_std_level %} ({{ doc.intended_std_level }}){% endif %}{% templatetag closebrace %},
publisher = {RFC Editor}, publisher = {RFC Editor},
doi = {% templatetag openbrace %}{{ doi }}{% templatetag closebrace %}, doi = {% templatetag openbrace %}{{ doi }}{% templatetag closebrace %},
url = {https://rfc-editor.org/rfc/rfc{{ doc.rfc_number }}.txt},{% else %} url = {% templatetag openbrace %}{{ doc.rfc_number|rfceditor_info_url }}{% templatetag closebrace %},{% else %}
{% if published %}%% You should probably cite rfc{{ latest_revision.doc.rfc_number }} instead of this I-D.{% else %}{% if replaced_by %}%% You should probably cite {{replaced_by|join:" or "}} instead of this I-D.{% else %} {% if published %}%% You should probably cite rfc{{ latest_revision.doc.rfc_number }} instead of this I-D.{% else %}{% if replaced_by %}%% You should probably cite {{replaced_by|join:" or "}} instead of this I-D.{% else %}
{% if doc.rev != latest_revision.rev %}%% You should probably cite {{latest_revision.doc.name}}-{{latest_revision.rev}} instead of this revision.{%endif%}{% endif %}{% endif %} {% if doc.rev != latest_revision.rev %}%% You should probably cite {{latest_revision.doc.name}}-{{latest_revision.rev}} instead of this revision.{%endif%}{% endif %}{% endif %}
@techreport{% templatetag openbrace %}{{doc.name|slice:"6:"}}-{{doc.rev}}, @techreport{% templatetag openbrace %}{{doc.name|slice:"6:"}}-{{doc.rev}},