import io
import bibtexparser
from bibtexparser.bparser import BibTexParser
from bibtexparser.customization import *
example = """
@Article{key,
doi = {0000},
}
"""
def customizations(record):
record = doi(record)
record = convert_to_unicode(record)
return record
parser = BibTexParser()
parser.customization = customizations
bib_data = bibtexparser.load(io.StringIO(example), parser=parser)
Traceback (most recent call last):
File "./bug.py", line 24, in <module>
bib_data = bibtexparser.load(io.StringIO(example), parser=parser)
File "/usr/local/lib/python3.7/site-packages/bibtexparser/__init__.py", line 71, in load
return parser.parse_file(bibtex_file)
File "/usr/local/lib/python3.7/site-packages/bibtexparser/bparser.py", line 177, in parse_file
return self.parse(file.read(), partial=partial)
File "/usr/local/lib/python3.7/site-packages/bibtexparser/bparser.py", line 155, in parse
self._expr.parseFile(bibtex_file_obj)
File "/usr/local/lib/python3.7/site-packages/bibtexparser/bibtexexpression.py", line 286, in parseFile
return self.main_expression.parseFile(file_obj, parseAll=True)
File "/usr/local/lib/python3.7/site-packages/pyparsing.py", line 2362, in parseFile
return self.parseString(file_contents, parseAll)
File "/usr/local/lib/python3.7/site-packages/pyparsing.py", line 1804, in parseString
loc, tokens = self._parse( instring, 0 )
File "/usr/local/lib/python3.7/site-packages/pyparsing.py", line 1548, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/local/lib/python3.7/site-packages/pyparsing.py", line 4361, in parseImpl
return super(ZeroOrMore, self).parseImpl(instring, loc, doActions)
File "/usr/local/lib/python3.7/site-packages/pyparsing.py", line 4291, in parseImpl
loc, tokens = self_expr_parse( instring, loc, doActions, callPreParse=False )
File "/usr/local/lib/python3.7/site-packages/pyparsing.py", line 1548, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/usr/local/lib/python3.7/site-packages/pyparsing.py", line 3871, in parseImpl
ret = e._parse( instring, loc, doActions )
File "/usr/local/lib/python3.7/site-packages/pyparsing.py", line 1581, in _parseNoCache
tokens = fn( instring, tokensStart, retTokens )
File "/usr/local/lib/python3.7/site-packages/pyparsing.py", line 1203, in wrapper
ret = func(*args[limit[0]:])
File "/usr/local/lib/python3.7/site-packages/bibtexparser/bparser.py", line 204, in <lambda>
t.get('EntryType'), t.get('Key'), t.get('Fields'))
File "/usr/local/lib/python3.7/site-packages/bibtexparser/bparser.py", line 299, in _add_entry
d = self.customization(d)
File "./bug.py", line 19, in customizations
record = convert_to_unicode(record)
File "/usr/local/lib/python3.7/site-packages/bibtexparser/customization.py", line 501, in convert_to_unicode
latex_to_unicode(x) for x in record[val]
File "/usr/local/lib/python3.7/site-packages/bibtexparser/customization.py", line 501, in <listcomp>
latex_to_unicode(x) for x in record[val]
File "/usr/local/lib/python3.7/site-packages/bibtexparser/latexenc.py", line 72, in latex_to_unicode
string = string.replace("{", "").replace("}", "")
AttributeError: 'dict' object has no attribute 'replace'
This does not happen if either of the customizations is removed.
It looks like a bug in the doi customization because printing the string passed into latex_to_unicode gives the dictionary {'url': '0000', 'anchor': 'doi'}.
I am running on OS X 10.14.3 with Python 3.7.2. Thanks!
I get a crash when I run the following code:
The error is:
This does not happen if either of the customizations is removed.
It looks like a bug in the doi customization because printing the string passed into latex_to_unicode gives the dictionary
{'url': '0000', 'anchor': 'doi'}.I am running on OS X 10.14.3 with Python 3.7.2. Thanks!