diff --git a/.gitignore b/.gitignore index b92d662..4918585 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ build/ *.pyc +tests/.papers \ No newline at end of file diff --git a/.pit/pit-52bc4daefb7ab51f b/.pit/pit-52bc4daefb7ab51f new file mode 100644 index 0000000..e568d68 --- /dev/null +++ b/.pit/pit-52bc4daefb7ab51f @@ -0,0 +1,15 @@ +[header] +title = search inside pdfs over a playlist +id = 52bc4daefb7ab51f88974325dd202aaa37f9c60d +status = open +type = feature +author = Fabien Benureau +mail = fabien.benureau+git@gmail.com +date = 2012-10-07 at 20:10 UCT + +[eventlog] +opened[0] = opened the 2012-10-07 at 20:10 UCT by Fabien Benureau + +[discussion] +desc = # enter your description here + diff --git a/papers/commands/add_cmd.py b/papers/commands/add_cmd.py index 64cf355..d870d3a 100644 --- a/papers/commands/add_cmd.py +++ b/papers/commands/add_cmd.py @@ -15,7 +15,6 @@ def parser(subparsers, config): parser.add_argument('bibfile', help='bibtex, bibtexml or bibyaml file') return parser - def command(config, pdffile, bibfile): """ :param pdffilepath path (no url yet) to a pdf or ps file @@ -49,10 +48,13 @@ def command(config, pdffile, bibfile): print(pretty.bib_desc(bib_data)) files.write_bibdata(bib_data, filename) - papers = files.read_papers() + papers = files.load_papers() count = papers.get('header', 'count') papers.set('header', 'count', int(count) + 1) - papers.set('papers', 'p' + count, filename) + + citekey = pretty.create_citekey(bib_data) + papers.set('papers', citekey, filename) + papers.set('citekeys', 'ck' + count, citekey) files.write_papers(papers) files.write_meta(meta, filename) diff --git a/papers/commands/init_cmd.py b/papers/commands/init_cmd.py index fb9b9d5..136c7bb 100644 --- a/papers/commands/init_cmd.py +++ b/papers/commands/init_cmd.py @@ -30,6 +30,7 @@ def command(config): papers.add_section('header') papers.set('header', 'count', 0) papers.add_section('papers') + papers.add_section('citekeys') files.write_papers(papers) else: diff --git a/papers/commands/list_cmd.py b/papers/commands/list_cmd.py index 7a132ac..f3e0dfe 100644 --- a/papers/commands/list_cmd.py +++ b/papers/commands/list_cmd.py @@ -1,5 +1,6 @@ from .. import files from .. import pretty +from .. import color import subprocess import tempfile @@ -9,15 +10,16 @@ def parser(subparsers, config): return parser def command(config): - papers = files.read_papers() + papers = files.load_papers() articles = [] - for p in papers.options('papers'): - filename = papers.get('papers', p) - number = p[1:] + for p in papers.options('citekeys'): + number = p[2:] + citekey = papers.get('citekeys', p) + filename = papers.get('papers', citekey) bibdata = files.load_bibdata(filename + '.bibyaml') bibdesc = pretty.bib_oneliner(bibdata) - articles.append('{:3d} {}'.format(int(number), bibdesc)) + articles.append('{:3d} {}{}{}{} {}'.format(int(number), color.purple, citekey, color.end, (8-len(citekey))*' ', bibdesc)) with tempfile.NamedTemporaryFile(suffix=".tmp", delete=True) as tmpf: tmpf.write('\n'.join(articles)) diff --git a/papers/commands/open_cmd.py b/papers/commands/open_cmd.py index d01f376..983da8a 100644 --- a/papers/commands/open_cmd.py +++ b/papers/commands/open_cmd.py @@ -13,13 +13,17 @@ def parser(subparsers, config): return parser def command(config, citekey): - papers = files.read_papers() + papers = files.load_papers() try: - filename = papers.get('papers', 'p' + str(citekey)) + filename = papers.get('papers', str(citekey)) except configparser.NoOptionError: - print('{}error{}: paper with citekey {}{}{} not found{}'.format( + try: + ck = papers.get('citekeys', 'ck'+str(citekey)) + filename = papers.get('papers', str(ck)) + except configparser.NoOptionError: + print('{}error{}: paper with citekey or number {}{}{} not found{}'.format( color.red, color.grey, color.cyan, citekey, color.grey, color.end)) - exit(-1) + exit(-1) meta_data = files.load_meta(filename) filepath = meta_data.get('metadata', 'path') p = subprocess.Popen(['open', filepath]) diff --git a/papers/files.py b/papers/files.py index 1f4a5f9..bbe2ef4 100644 --- a/papers/files.py +++ b/papers/files.py @@ -106,7 +106,7 @@ def load_externalbibfile(fullbibpath): def write_papers(config): write_configfile(config, find_papersdir() + os.sep + 'papers') -def read_papers(): +def load_papers(): return read_configfile(find_papersdir() + os.sep + 'papers') def load_bibdata(filename): diff --git a/papers/pretty.py b/papers/pretty.py index a855a15..9b48790 100644 --- a/papers/pretty.py +++ b/papers/pretty.py @@ -16,8 +16,8 @@ def bib_oneliner(bib_data): year = article.fields['year'] journal = article.fields['journal'] return '{}{}{} \"{}{}{}\" {}{}{} {}({}{}{}){}'.format( - color.green, authors, color.grey, color.bcyan, title, color.grey, - color.yellow, journal, color.end, color.grey, color.end, year, + color.green, authors, color.grey, color.bcyan, title, color.grey, + color.yellow, journal, color.end, color.grey, color.end, year, color.grey, color.end) def bib_desc(bib_data): @@ -25,4 +25,34 @@ def bib_desc(bib_data): s = '\n'.join('author: {}'.format(person_repr(p)) for p in article.persons['author']) s += '\n' s += '\n'.join('{}: {}'.format(k, v) for k, v in article.fields.items()) - return s \ No newline at end of file + return s + +alphabet = 'abcdefghijklmopqrstuvwxyz' + +try: + import ConfigParser as configparser +except ImportError: + import configparser +import files + +def create_citekey(bib_data): + """Create a cite key unique to the paper""" + article = bib_data.entries[list(bib_data.entries.keys())[0]] + first_author = article.persons['author'][0] + year = article.fields['year'] + prefix = '{}{}'.format(first_author.last()[0][:6], year[2:]) + + papers = files.load_papers() + letter = 0, False + citekey = None + + citekey = prefix + while not letter[1]: + try: + papers.get('papers', citekey) + citekey = prefix + alphabet[letter[0]] + letter = letter[0]+1, False + except configparser.NoOptionError: + letter = letter[0], True + + return citekey diff --git a/tests/data/pagerank.bib b/tests/data/pagerank.bib index f4e7806..ed70be0 100644 --- a/tests/data/pagerank.bib +++ b/tests/data/pagerank.bib @@ -7,7 +7,7 @@ type = {Technical Report}, publisher = {Stanford InfoLab}, year = {1999}, - institution = {Stanford InfoLab}, + journal = {Stanford InfoLab}, url = {http://ilpubs.stanford.edu:8090/422/}, abstract = {The importance of a Web page is an inherently subjective matter, which depends on the readers interests, knowledge and attitudes. But there is still much that can be said objectively about the relative importance of Web pages. This paper describes PageRank, a mathod for rating Web pages objectively and mechanically, effectively measuring the human interest and attention devoted to them. We compare PageRank to an idealized random Web surfer. We show how to efficiently compute PageRank for large numbers of pages. And, we show how to apply PageRank to search and to user navigation.} } diff --git a/tests/data/pagerank.bib.bak b/tests/data/pagerank.bib.bak new file mode 100644 index 0000000..f4e7806 --- /dev/null +++ b/tests/data/pagerank.bib.bak @@ -0,0 +1,14 @@ +@techreport{ilprints422, + number = {1999-66}, + month = {November}, + author = {Lawrence Page and Sergey Brin and Rajeev Motwani and Terry Winograd}, + note = {Previous number = SIDL-WP-1999-0120}, + title = {The PageRank Citation Ranking: Bringing Order to the Web.}, + type = {Technical Report}, + publisher = {Stanford InfoLab}, + year = {1999}, + institution = {Stanford InfoLab}, + url = {http://ilpubs.stanford.edu:8090/422/}, + abstract = {The importance of a Web page is an inherently subjective matter, which depends on the readers interests, knowledge and attitudes. But there is still much that can be said objectively about the relative importance of Web pages. This paper describes PageRank, a mathod for rating Web pages objectively and mechanically, effectively measuring the human interest and attention devoted to them. We compare PageRank to an idealized random Web surfer. We show how to efficiently compute PageRank for large numbers of pages. And, we show how to apply PageRank to search and to user navigation.} +} + diff --git a/tests/test.sh b/tests/test.sh index 86d53cb..ae188bd 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash +rm -Rf .papers; papers init; papers list; papers add data/pagerank.pdf data/pagerank.bib; papers list; papers open 0; -rm -Rf .papers; \ No newline at end of file +papers open Page99;