Source code for bibpy.doi
# -*- coding: utf-8 -*-
"""Tools for downloading bibtex files from digital object identifiers."""
import bibpy
from urllib.request import Request, urlopen
[docs]def retrieve(doi, source='https://doi.org/{0}', raw=False, **options):
"""Download a bibtex file specified by a digital object identifier.
The source is a URL containing a single positional format specifier which
is where the requested doi should appear.
By default, the data from the doi is parsed by bibpy. If raw is True, the
raw string is returned instead.
The options kwargs correspond to the arguments normally passed to
:py:func:`bibpy.read_string`.
"""
req = Request(source.format(doi))
req.add_header('accept', 'application/x-bibtex')
handle = None
try:
handle = urlopen(req)
contents = handle.read()
if raw:
return contents
else:
return bibpy.read_string(
contents.decode('utf-8'),
**options
).entries[0]
finally:
if handle:
handle.close()