bibstruct tests + bug fixes
This commit is contained in:
parent
dbb17426d0
commit
0b1a351485
@ -25,9 +25,9 @@ def verify_bibdata(bibdata):
|
|||||||
raise ValueError('no entries in the bibdata.')
|
raise ValueError('no entries in the bibdata.')
|
||||||
if len(bibdata.entries) > 1:
|
if len(bibdata.entries) > 1:
|
||||||
raise ValueError('ambiguous: multiple entries in the bibdata.')
|
raise ValueError('ambiguous: multiple entries in the bibdata.')
|
||||||
|
|
||||||
def get_entry(bibdata):
|
def get_entry(bibdata):
|
||||||
verify_bibdata(bibdata)
|
verify_bibdata(bibdata)
|
||||||
return bibdata.entries.iteritems().next()
|
return bibdata.entries.iteritems().next()
|
||||||
|
|
||||||
def extract_citekey(bibdata):
|
def extract_citekey(bibdata):
|
||||||
@ -38,7 +38,7 @@ def extract_citekey(bibdata):
|
|||||||
def generate_citekey(bibdata):
|
def generate_citekey(bibdata):
|
||||||
""" Generate a citekey from bib_data.
|
""" Generate a citekey from bib_data.
|
||||||
|
|
||||||
:param generate: if False, return the citekey defined in the file,
|
:param generate: if False, return the citekey defined in the file,
|
||||||
does not generate a new one.
|
does not generate a new one.
|
||||||
:raise ValueError: if no author nor editor is defined.
|
:raise ValueError: if no author nor editor is defined.
|
||||||
"""
|
"""
|
||||||
@ -46,18 +46,18 @@ def generate_citekey(bibdata):
|
|||||||
|
|
||||||
author_key = 'author' if 'author' in entry.persons else 'editor'
|
author_key = 'author' if 'author' in entry.persons else 'editor'
|
||||||
try:
|
try:
|
||||||
first_author = self.bibentry.persons[author_key][0]
|
first_author = entry.persons[author_key][0]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
'No author or editor defined: cannot generate a citekey.')
|
'No author or editor defined: cannot generate a citekey.')
|
||||||
try:
|
try:
|
||||||
year = self.bibentry.fields['year']
|
year = entry.fields['year']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
year = ''
|
year = ''
|
||||||
citekey = u'{}{}'.format(u''.join(first_author.last()), year)
|
citekey = u'{}{}'.format(u''.join(first_author.last()), year)
|
||||||
|
|
||||||
return str2citekey(citekey)
|
return str2citekey(citekey)
|
||||||
|
|
||||||
def extract_docfile(bibdata, remove=False):
|
def extract_docfile(bibdata, remove=False):
|
||||||
""" Try extracting document file from bib data.
|
""" Try extracting document file from bib data.
|
||||||
Returns None if not found.
|
Returns None if not found.
|
||||||
|
@ -1,24 +1,47 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from pybtex.database import Person
|
from pybtex.database import Person
|
||||||
|
|
||||||
import testenv
|
import testenv
|
||||||
from pubs import endecoder
|
from pubs import endecoder
|
||||||
import str_fixtures
|
import str_fixtures
|
||||||
|
|
||||||
turing1950 = Paper()
|
|
||||||
turing1950.bibentry.fields['title'] = u'Computing machinery and intelligence.'
|
|
||||||
turing1950.bibentry.fields['year'] = u'1950'
|
|
||||||
turing1950.bibentry.persons['author'] = [Person(u'Alan Turing')]
|
|
||||||
turing1950.citekey = turing1950.generate_citekey()
|
|
||||||
turing1950.tags = ['computer', 'AI']
|
|
||||||
|
|
||||||
|
|
||||||
doe2013 = Paper()
|
|
||||||
doe2013.bibentry.fields['title'] = u'Nice title.'
|
|
||||||
doe2013.bibentry.fields['year'] = u'2013'
|
|
||||||
doe2013.bibentry.persons['author'] = [Person(u'John Doe')]
|
|
||||||
doe2013.citekey = doe2013.generate_citekey()
|
|
||||||
|
|
||||||
coder = endecoder.EnDecoder()
|
coder = endecoder.EnDecoder()
|
||||||
bibdata = coder.decode_bibdata(str_fixtures.bibtex_external0, fmt='bibtex')
|
|
||||||
page99 = Paper(bibdata)
|
|
||||||
|
|
||||||
|
franny_bib = """
|
||||||
|
@article{
|
||||||
|
Franny1961,
|
||||||
|
author = "Salinger, J. D.",
|
||||||
|
title = "Franny and Zooey",
|
||||||
|
year = "1961",
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
doe_bib = """
|
||||||
|
@article{
|
||||||
|
Doe2013,
|
||||||
|
author = "Doe, John",
|
||||||
|
title = "Nice Title",
|
||||||
|
year = "2013",
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
franny_bibdata = coder.decode_bibdata(franny_bib)
|
||||||
|
doe_bibdata = coder.decode_bibdata(doe_bib)
|
||||||
|
|
||||||
|
|
||||||
|
# bibdata = coder.decode_bibdata(str_fixtures.bibtex_external0, fmt='bibtex')
|
||||||
|
# page99 = Paper(bibdata)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# turing1950 = Paper()
|
||||||
|
# turing1950.bibentry.fields['title'] = u'Computing machinery and intelligence.'
|
||||||
|
# turing1950.bibentry.fields['year'] = u'1950'
|
||||||
|
# turing1950.bibentry.persons['author'] = [Person(u'Alan Turing')]
|
||||||
|
# turing1950.citekey = turing1950.generate_citekey()
|
||||||
|
# turing1950.tags = ['computer', 'AI']
|
||||||
|
29
tests/test_bibstruct.py
Normal file
29
tests/test_bibstruct.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
import os
|
||||||
|
import unittest
|
||||||
|
import copy
|
||||||
|
|
||||||
|
from pybtex.database import Person
|
||||||
|
|
||||||
|
import testenv
|
||||||
|
from pubs import bibstruct
|
||||||
|
|
||||||
|
import fixtures
|
||||||
|
|
||||||
|
|
||||||
|
class TestGenerateCitekey(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_escapes_chars(self):
|
||||||
|
doe_bibdata = copy.deepcopy(fixtures.doe_bibdata)
|
||||||
|
citekey, entry = bibstruct.get_entry(doe_bibdata)
|
||||||
|
entry.persons['author'] = [Person(string=u'Zôu\\@/ , John')]
|
||||||
|
key = bibstruct.generate_citekey(doe_bibdata)
|
||||||
|
|
||||||
|
def test_simple(self):
|
||||||
|
bibdata = copy.deepcopy(fixtures.doe_bibdata)
|
||||||
|
key = bibstruct.generate_citekey(bibdata)
|
||||||
|
self.assertEqual(key, 'Doe2013')
|
||||||
|
|
||||||
|
bibdata = copy.deepcopy(fixtures.franny_bibdata)
|
||||||
|
key = bibstruct.generate_citekey(bibdata)
|
||||||
|
self.assertEqual(key, 'Salinger1961')
|
Loading…
x
Reference in New Issue
Block a user