def test_oneliner_no_year(self): decoder = endecoder.EnDecoder() bibdata = decoder.decode_bibdata(bibtex_raw0) bibdata['Page99'].pop('year') line = 'Page, Lawrence et al. "The PageRank Citation Ranking: Bringing Order to the Web."' self.assertEqual(color.undye(pretty.bib_oneliner(bibdata['Page99'])), line)
def test_endecode_bibtex_converts_month_string(self): """Test if `month=dec` is correctly recognized and transformed into `month={December}`""" decoder = endecoder.EnDecoder() entry = decoder.decode_bibdata(bibtex_month)['Goyal2017'] self.assertEqual(entry['month'], 'December')
def test_existing_data(self): ende = endecoder.EnDecoder() page99_bibentry = ende.decode_bibdata(str_fixtures.bibtex_raw0) for db_class in [databroker.DataBroker, datacache.DataCache]: self.reset_fs() self.fs.add_real_directory(os.path.join(self.rootpath, 'testrepo'), read_only=False) db = db_class('testrepo', 'testrepo/doc', create=False) self.assertEqual(db.pull_bibentry('Page99'), page99_bibentry) for citekey in [ '10.1371_journal.pone.0038236', '10.1371journal.pone.0063400', 'journal0063400' ]: db.pull_bibentry(citekey) db.pull_metadata(citekey) with self.assertRaises(IOError): db.pull_bibentry('citekey') with self.assertRaises(IOError): db.pull_metadata('citekey') db.add_doc('Larry99', 'docsdir://Page99.pdf') self.assertTrue( content.check_file('testrepo/doc/Page99.pdf', fail=False)) self.assertTrue( content.check_file('testrepo/doc/Larry99.pdf', fail=False)) db.remove_doc('docsdir://Page99.pdf')
def test_export(self): cmds = ['pubs init', ('pubs add', [str_fixtures.bibtex_external0]), 'pubs export Page99', ] outs = self.execute_cmds(cmds) self.assertEqual(endecoder.EnDecoder().decode_bibdata(outs[2]), fixtures.page_bibentry)
def test_decode_metadata(self): decoder = endecoder.EnDecoder() entry = decoder.decode_metadata(metadata_raw0) expected = {'docfile': 'docsdir://Page99.pdf', 'tags': ['search', 'network'], 'added': '2013-11-14 13:14:20', } self.assertEqual(entry, expected)
def test_export_ignore_field(self): cmds = ['pubs init', ('pubs add', [str_fixtures.bibtex_external0]), 'pubs export --ignore-fields author,title Page99', ] outs = self.execute_cmds(cmds) expected = endecoder.EnDecoder().encode_bibdata( fixtures.page_bibentry, ignore_fields=['author', 'title']) self.assertEqual(outs[2], expected + os.linesep)
def test_endecode_keyword(self): decoder = endecoder.EnDecoder() entry = decoder.decode_bibdata(turing_bib) keywords = ['artificial intelligence', 'Turing test'] entry['turing1950computing']['keyword'] = keywords bibraw = decoder.encode_bibdata(entry) entry1 = decoder.decode_bibdata(bibraw) self.assertIn('keyword', entry1['turing1950computing']) self.assertEqual(set(keywords), set(entry1['turing1950computing']['keyword']))
def test_endecode_link_as_url(self): decoder = endecoder.EnDecoder() if 'url = ' not in bibtex_raw0: raise NotImplementedError( 'The fixture bibraw0 has been changed; test needs an update.') raw_with_link = bibtex_raw0.replace('url = ', 'link = ') entry = decoder.decode_bibdata(raw_with_link) lines = decoder.encode_bibdata(entry).splitlines() self.assertEqual(lines[8].split('=')[0].strip(), 'url') self.assertEqual(lines[8].split('=')[1].strip(), '{http://ilpubs.stanford.edu:8090/422/},')
def test_endecode_bibtex_BOM(self): """Test that bibtexparser if fine with BOM-prefixed data""" decoder = endecoder.EnDecoder() bom_str = '\ufeff' entry_1 = decoder.decode_bibdata(bibtex_raw0) bibraw_1 = decoder.encode_bibdata(entry_1) entry_2 = decoder.decode_bibdata(bom_str + bibraw_1) bibraw_2 = decoder.encode_bibdata(entry_2) self.assertEqual(bibraw_1, bibraw_2)
def test_endecode_keyword_as_keywords(self): decoder = endecoder.EnDecoder() keywords = ['artificial intelligence', 'Turing test'] # Add keywords to bibraw keyword_str = 'keywords = {artificial intelligence, Turing test},\n' biblines = turing_bib.splitlines() biblines.insert(-3, keyword_str) bibsrc = '\n'.join(biblines) entry = decoder.decode_bibdata(bibsrc)['turing1950computing'] self.assertNotIn('keywords', entry) self.assertIn('keyword', entry) self.assertEqual(set(keywords), set(entry['keyword']))
def test_endecode_bibtex_ignores_fields(self): decoder = endecoder.EnDecoder() entry = decoder.decode_bibdata(bibtex_raw0) bibraw1 = decoder.encode_bibdata( entry, ignore_fields=['title', 'note', 'abstract', 'journal']) entry1 = list(decoder.decode_bibdata(bibraw1).values())[0] self.assertNotIn('title', entry1) self.assertNotIn('note', entry1) self.assertNotIn('abtract', entry1) self.assertIn('author', entry1) self.assertIn('institution', entry1)
def test_endecode_bibtex_field_order(self): decoder = endecoder.EnDecoder() entry = decoder.decode_bibdata(bibtex_raw0) lines = decoder.encode_bibdata(entry).splitlines() self.assertEqual(lines[1].split('=')[0].strip(), 'author') self.assertEqual(lines[2].split('=')[0].strip(), 'title') self.assertEqual(lines[3].split('=')[0].strip(), 'institution') self.assertEqual(lines[4].split('=')[0].strip(), 'publisher') self.assertEqual(lines[5].split('=')[0].strip(), 'year') self.assertEqual(lines[6].split('=')[0].strip(), 'month') self.assertEqual(lines[7].split('=')[0].strip(), 'number') self.assertEqual(lines[8].split('=')[0].strip(), 'url') self.assertEqual(lines[9].split('=')[0].strip(), 'note') self.assertEqual(lines[10].split('=')[0].strip(), 'abstract')
def test_endecode_bibtex_editor(self): decoder = endecoder.EnDecoder() entry = decoder.decode_bibdata(turing_bib) bibraw1 = decoder.encode_bibdata(entry) entry1 = decoder.decode_bibdata(bibraw1) bibraw2 = decoder.encode_bibdata(entry1) entry2 = decoder.decode_bibdata(bibraw2) for citekey in entry1.keys(): bibentry1 = entry1[citekey] bibentry2 = entry2[citekey] for key, value in bibentry1.items(): self.assertEqual(bibentry1[key], bibentry2[key]) self.assertEqual(bibraw1, bibraw2)
def test_oneliner_max_authors(self): decoder = endecoder.EnDecoder() bibdata = decoder.decode_bibdata(bibtex_raw0) for max_authors in [1, 2, 3]: line = 'Page, Lawrence et al. "The PageRank Citation Ranking: Bringing Order to the Web." (1999)' self.assertEqual( color.undye( pretty.bib_oneliner(bibdata['Page99'], max_authors=max_authors)), line) for max_authors in [-1, 0, 4, 5, 10]: line = 'Page, Lawrence and Brin, Sergey and Motwani, Rajeev and Winograd, Terry "The PageRank Citation Ranking: Bringing Order to the Web." (1999)' self.assertEqual( color.undye( pretty.bib_oneliner(bibdata['Page99'], max_authors=max_authors)), line)
def test_endecode_bibtex(self): """Test that multiple encode/decode step preserve data""" decoder = endecoder.EnDecoder() entry = decoder.decode_bibdata(bibtex_raw0) bibraw1 = decoder.encode_bibdata(entry) entry1 = decoder.decode_bibdata(bibraw1) bibraw2 = decoder.encode_bibdata(entry1) entry2 = decoder.decode_bibdata(bibraw2) for citekey in entry1.keys(): bibentry1 = entry1[citekey] bibentry2 = entry2[citekey] for key, value in bibentry1.items(): self.assertEqual(bibentry1[key], bibentry2[key]) self.assertEqual(bibraw1, bibraw2)
def test_databroker(self): ende = endecoder.EnDecoder() page99_metadata = ende.decode_metadata(str_fixtures.metadata_raw0) page99_bibentry = ende.decode_bibdata(str_fixtures.bibtex_raw0) for db_class in [databroker.DataBroker, datacache.DataCache]: self.reset_fs() db = db_class('tmp', 'tmp/doc', create=True) db.push_metadata('citekey1', page99_metadata) self.assertFalse(db.exists('citekey1', meta_check=True)) self.assertFalse(db.exists('citekey1', meta_check=False)) db.push_bibentry('citekey1', page99_bibentry) self.assertTrue(db.exists('citekey1', meta_check=False)) self.assertTrue(db.exists('citekey1', meta_check=True)) self.assertEqual(db.pull_metadata('citekey1'), page99_metadata) pulled = db.pull_bibentry('citekey1')['Page99'] for key, value in pulled.items(): self.assertEqual(pulled[key], page99_bibentry['Page99'][key]) self.assertEqual(db.pull_bibentry('citekey1'), page99_bibentry)
def send_mail(self): """Send the reference per E-mail""" repo = self._repo key = self._key local_path = expanduser(repo.pull_docpath(key)) bib_file = repo.databroker.pull_bibentry(key) # content = pprint.pformat(bib_file[key]) exporter = endecoder.EnDecoder() content = exporter.encode_bibdata(bib_file, []) # List of reserved characters in RFC 2396 reserved = { " ": "%20", "&": "%26", ";": "%3B", "@": "%40", "/": "%2F", "?": "%3F", ":": "%3A", "=": "%3D", "+": "%2B", "$": "%24", ",": "%2C", } for k, v in reserved.items(): content = content.replace(k, v) subprocess.run([ "evolution", (f"mailto:?subject=Reference for {key}&body=" + content + "&attach=" + local_path), "--name='Send Pubs reference'", ])
def test_endecodes_raises_exception(self): decoder = endecoder.EnDecoder() with self.assertRaises(decoder.BibDecodingError): decoder.decode_bibdata("@misc{I am not a correct bibtex{{}")
def test_endecode_metadata(self): decoder = endecoder.EnDecoder() entry = decoder.decode_metadata(metadata_raw0) metadata_output0 = decoder.encode_metadata(entry) self.assertEqual(set(metadata_raw0.split('\n')), set(metadata_output0.split('\n')))
def test_endecode_metadata(self): decoder = endecoder.EnDecoder() entry = decoder.decode_metadata(metadata_raw0) metadata_output0 = decoder.encode_metadata(entry) entry_from_encode = decoder.decode_metadata(metadata_output0) self.assertEqual(entry, entry_from_encode)
def test_encode_bibtex_is_unicode(self): decoder = endecoder.EnDecoder() entry = decoder.decode_bibdata(bibtex_raw0) bibraw = decoder.encode_bibdata(entry) self.assertIsInstance(bibraw, ustr)
def test_encode_metadat_is_unicode(self): decoder = endecoder.EnDecoder() data = decoder.encode_metadata(dummy_metadata) self.assertIsInstance(data, ustr)
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_decode_emptystring(self): decoder = endecoder.EnDecoder() with self.assertRaises(decoder.BibDecodingError): decoder.decode_bibdata('')
# -*- coding: utf-8 -*- from __future__ import unicode_literals import dotdot from pubs import endecoder import str_fixtures coder = endecoder.EnDecoder() 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", } """ dummy_metadata = {'docfile': 'docsdir://hop.la', 'tags': set(['a', 'b'])} franny_bibentry = coder.decode_bibdata(franny_bib) franny_bibdata = franny_bibentry['Franny1961'] doe_bibentry = coder.decode_bibdata(doe_bib)