From efa42e1558ef93f5d2f776aa53ab0cef6a794f9d Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Tue, 11 Jan 2022 18:39:47 +0000 Subject: [PATCH] Point to RFC editor info page in document_bibtex view. Fixes #3484. Commit ready for merge. - Legacy-Id: 19833 --- ietf/doc/templatetags/ietf_filters.py | 5 +++++ ietf/doc/tests.py | 16 +++++++++++++--- ietf/templates/doc/document_bibtex.bib | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ietf/doc/templatetags/ietf_filters.py b/ietf/doc/templatetags/ietf_filters.py index d5b541fb7..488f24289 100644 --- a/ietf/doc/templatetags/ietf_filters.py +++ b/ietf/doc/templatetags/ietf_filters.py @@ -219,6 +219,11 @@ def rfclink(string): string = str(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) def urlize_ietf_docs(string, autoescape=None): """ diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index a21c5507e..8b4043dbe 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -22,6 +22,7 @@ from django.urls import reverse as urlreverse from django.conf import settings from django.forms import Form from django.utils.html import escape +from django.test import override_settings from django.utils.text import slugify from tastypie.test import ResourceTestCaseMixin @@ -1773,6 +1774,12 @@ class DocTestCase(TestCase): self.assertEqual(r.status_code, 200) 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): rfc = WgRfcFactory.create( #other_aliases = ['rfc6020',], @@ -1785,12 +1792,13 @@ class DocTestCase(TestCase): # url = urlreverse('ietf.doc.views_doc.document_bibtex', kwargs=dict(name=rfc.name)) 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['number'], num) self.assertEqual(entry['doi'], '10.17487/RFC%s'%num) self.assertEqual(entry['year'], '2010') self.assertEqual(entry['month'], 'oct') + self.assertEqual(entry['url'], f'https://www.rfc-editor.ietf.org/info/rfc{num}') # self.assertNotIn('day', entry) @@ -1806,25 +1814,27 @@ class DocTestCase(TestCase): url = urlreverse('ietf.doc.views_doc.document_bibtex', kwargs=dict(name=april1.name)) r = self.client.get(url) 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['number'], num) self.assertEqual(entry['doi'], '10.17487/RFC%s'%num) self.assertEqual(entry['year'], '1990') self.assertEqual(entry['month'], 'apr') self.assertEqual(entry['day'], '1') + self.assertEqual(entry['url'], f'https://www.rfc-editor.ietf.org/info/rfc{num}') draft = IndividualDraftFactory.create() docname = '%s-%s' % (draft.name, draft.rev) bibname = docname[6:] # drop the 'draft-' prefix url = urlreverse('ietf.doc.views_doc.document_bibtex', kwargs=dict(name=draft.name)) 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['number'], docname) self.assertEqual(entry['year'], str(draft.pub_date().year)) self.assertEqual(entry['month'], draft.pub_date().strftime('%b').lower()) 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) diff --git a/ietf/templates/doc/document_bibtex.bib b/ietf/templates/doc/document_bibtex.bib index 19d3bfebf..9b511f838 100644 --- a/ietf/templates/doc/document_bibtex.bib +++ b/ietf/templates/doc/document_bibtex.bib @@ -15,7 +15,7 @@ howpublished = {% templatetag openbrace %}RFC {{ doc.rfc_number }}{% if doc.doc.intended_std_level %} ({{ doc.intended_std_level }}){% endif %}{% templatetag closebrace %}, publisher = {RFC Editor}, 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 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}},