python-bibtexparser icon indicating copy to clipboard operation
python-bibtexparser copied to clipboard

duplicates in display_order create duplicate entries

Open jakob-kellner opened this issue 5 years ago • 2 comments

bibtexparser 1.1.0.

Not a big problem, but confused me for a while:

If the list assigned to writer.display_order contains a key more than once, then the according line in the bibentry will also be created more than once. E.g.:

import bibtexparser
bib_dict = {'ID': 'a', 'ENTRYTYPE': 'misc', 'title': 'b', 'year': '1'}
my_db = bibtexparser.bibdatabase.BibDatabase()                               
my_db.entries = [bib_dict]
writer = bibtexparser.bwriter.BibTexWriter()                                           
writer.display_order = ['title', 'dummy', 'title'] 
print( bibtexparser.dumps(my_db, writer)) 

results in

@misc{a,
 title = {b},
 title = {b},
 year = {1}
}

I do not even claim that this is a bug, but maybe a short comment in the documentation could be added.

jakob-kellner avatar Feb 25 '20 20:02 jakob-kellner

Thanks for reporting. I would be inclined to convert the input into set in the function as it does not make sense to duplicate entries. Any other opinion @omangin ?

sciunto avatar Feb 27 '20 08:02 sciunto

@omangin I would not use sets directly, as those are by definition unordered (thus we would rely, AFAIK, on some undocumented implementation of set to preserve order).

This almost certainly shows a mistake by the user, and instead of silently attempting some fix, I suggest raising an exception if the display_order contains duplicates. Doing so requires a setter, thus display_order would have to be transferred into a property.

Is anyone volunteering to implement this?

MiWeiss avatar Jul 09 '22 13:07 MiWeiss