Added support for bibxml3 entries using the traditional reference entry name (with 'reference.I-D....'), instead of just the plain draft name.

- Legacy-Id: 17106
This commit is contained in:
Henrik Levkowetz 2019-11-27 15:31:40 +00:00
parent 2bc5606986
commit 5cf2cac8d0
3 changed files with 24 additions and 15 deletions

View file

@ -976,20 +976,20 @@ class DocTestCase(TestCase):
self.assertNotIn('doi', entry)
def test_document_bibxml(self):
draft = IndividualDraftFactory.create()
docname = '%s-%s' % (draft.name, draft.rev)
url = urlreverse('ietf.doc.views_doc.document_bibxml', kwargs=dict(name=draft.name))
r = self.client.get(url)
entry = lxml.etree.fromstring(r.content)
self.assertEqual(entry.find('./front/title').text, draft.title)
date = entry.find('./front/date')
self.assertEqual(date.get('year'), str(draft.pub_date().year))
self.assertEqual(date.get('month'), draft.pub_date().strftime('%B'))
self.assertEqual(date.get('day'), str(draft.pub_date().day))
self.assertEqual(normalize_text(entry.find('./front/abstract/t').text), normalize_text(draft.abstract))
self.assertEqual(entry.find('./seriesInfo').get('value'), docname)
self.assertEqual(entry.find('./seriesInfo[@name="DOI"]'), None)
for viewname in [ 'ietf.doc.views_doc.document_bibxml', 'ietf.doc.views_doc.document_bibxml_ref' ]:
url = urlreverse(viewname, kwargs=dict(name=draft.name))
r = self.client.get(url)
entry = lxml.etree.fromstring(r.content)
self.assertEqual(entry.find('./front/title').text, draft.title)
date = entry.find('./front/date')
self.assertEqual(date.get('year'), str(draft.pub_date().year))
self.assertEqual(date.get('month'), draft.pub_date().strftime('%B'))
self.assertEqual(date.get('day'), str(draft.pub_date().day))
self.assertEqual(normalize_text(entry.find('./front/abstract/t').text), normalize_text(draft.abstract))
self.assertEqual(entry.find('./seriesInfo').get('value'), docname)
self.assertEqual(entry.find('./seriesInfo[@name="DOI"]'), None)
class AddCommentTestCase(TestCase):
def test_add_comment(self):

View file

@ -74,6 +74,7 @@ urlpatterns = [
url(r'^%(name)s(?:/%(rev)s)?/$' % settings.URL_REGEXPS, views_doc.document_main),
url(r'^%(name)s(?:/%(rev)s)?/bibtex/$' % settings.URL_REGEXPS, views_doc.document_bibtex),
url(r'^bibxml3/reference.I-D.%(name)s(?:-%(rev)s)?.xml$' % settings.URL_REGEXPS, views_doc.document_bibxml_ref),
url(r'^bibxml3/%(name)s(?:-%(rev)s)?.xml$' % settings.URL_REGEXPS, views_doc.document_bibxml),
url(r'^%(name)s/history/$' % settings.URL_REGEXPS, views_doc.document_history),
url(r'^%(name)s/writeup/$' % settings.URL_REGEXPS, views_doc.document_writeup),

View file

@ -827,16 +827,24 @@ def document_bibtex(request, name, rev=None):
content_type="text/plain; charset=utf-8",
)
def document_bibxml_ref(request, name, rev=None):
if re.search(r'^rfc\d+$', name):
raise Http404()
if not name.startswith('draft-'):
name = 'draft-'+name
return document_bibxml(request, name, rev=rev)
def document_bibxml(request, name, rev=None):
# This only deals with drafts, as bibxml entries for RFCs should come from
# the RFC-Editor.
doc = get_object_or_404(Document, docalias__name=name, name__startswith='draft-', type_id='draft')
if re.search(r'^rfc\d+$', name):
raise Http404()
doc = get_object_or_404(Document, name=name, type_id='draft')
latest_revision = doc.latest_event(NewRevisionDocEvent, type="new_revision")
latest_rev = latest_revision.rev if latest_revision else None
if rev != None and rev != doc.rev:
if rev != None:
# find the entry in the history
for h in doc.history_set.order_by("-time"):
if rev == h.rev: