From c363e13cbf55ac930cc28d9c95dedcc2b8d4ae8b Mon Sep 17 00:00:00 2001 From: Olivier Mangin Date: Sun, 17 Jan 2021 14:38:04 -0800 Subject: [PATCH] Fix collision of entry type key with valid field name 'type'. Fixes #252. --- pubs/bibstruct.py | 2 +- tests/test_endecoder.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/pubs/bibstruct.py b/pubs/bibstruct.py index a8312b0..d3e6614 100644 --- a/pubs/bibstruct.py +++ b/pubs/bibstruct.py @@ -7,7 +7,7 @@ from .p3 import ustr, uchr # Citekey stuff -TYPE_KEY = 'type' +TYPE_KEY = 'ENTRYTYPE' CONTROL_CHARS = ''.join(map(uchr, list(range(0, 32)) + list(range(127, 160)))) CITEKEY_FORBIDDEN_CHARS = '@\'\\,#}{~%/ ' # '/' is OK for bibtex but forbidden diff --git a/tests/test_endecoder.py b/tests/test_endecoder.py index d9ade7f..eaa95e4 100644 --- a/tests/test_endecoder.py +++ b/tests/test_endecoder.py @@ -57,6 +57,12 @@ class TestEnDecode(unittest.TestCase): self.assertEqual(bibraw1, bibraw2) + def test_decode_bibtex_preserves_type_field(self): + """Test that multiple encode/decode step preserve data""" + decoder = endecoder.EnDecoder() + entry = decoder.decode_bibdata(bibtex_raw0) + self.assertEqual(entry['Page99']['type'], "technical report") + def test_endecode_bibtex_BOM(self): """Test that bibtexparser if fine with BOM-prefixed data""" decoder = endecoder.EnDecoder() @@ -179,6 +185,14 @@ class TestEnDecode(unittest.TestCase): with self.assertRaises(decoder.BibDecodingError): decoder.decode_bibdata("@misc{I am not a correct bibtex{{}") + def test_endecode_preserves_type(self): + decoder = endecoder.EnDecoder() + entry = decoder.decode_bibdata(bibtex_raw0) + + bibraw1 = decoder.encode_bibdata( + entry, ignore_fields=['title', 'note', 'abstract', 'journal']) + + if __name__ == '__main__': unittest.main()