Esempio n. 1
0
 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)
Esempio n. 2
0
    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')
Esempio n. 3
0
    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')
Esempio n. 4
0
 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)
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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']))
Esempio n. 8
0
 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/},')
Esempio n. 9
0
    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)
Esempio n. 10
0
 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']))
Esempio n. 11
0
    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)
Esempio n. 12
0
 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')
Esempio n. 13
0
    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)
Esempio n. 14
0
 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)
Esempio n. 15
0
    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)
Esempio n. 16
0
    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)
Esempio n. 17
0
    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'",
        ])
Esempio n. 18
0
 def test_endecodes_raises_exception(self):
     decoder = endecoder.EnDecoder()
     with self.assertRaises(decoder.BibDecodingError):
         decoder.decode_bibdata("@misc{I am not a correct bibtex{{}")
Esempio n. 19
0
 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')))
Esempio n. 20
0
 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)
Esempio n. 21
0
 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)
Esempio n. 22
0
 def test_encode_metadat_is_unicode(self):
     decoder = endecoder.EnDecoder()
     data = decoder.encode_metadata(dummy_metadata)
     self.assertIsInstance(data, ustr)
Esempio n. 23
0
 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")
Esempio n. 24
0
 def test_decode_emptystring(self):
     decoder = endecoder.EnDecoder()
     with self.assertRaises(decoder.BibDecodingError):
         decoder.decode_bibdata('')
Esempio n. 25
0
# -*- 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)