diff --git a/papers/commands/__init__.py b/papers/commands/__init__.py index 0076b49..bde2380 100644 --- a/papers/commands/__init__.py +++ b/papers/commands/__init__.py @@ -9,3 +9,4 @@ import edit_cmd import remove_cmd import websearch_cmd import tags_cmd +import attach_cmd diff --git a/papers/commands/attach_cmd.py b/papers/commands/attach_cmd.py new file mode 100644 index 0000000..b0d8eb3 --- /dev/null +++ b/papers/commands/attach_cmd.py @@ -0,0 +1,34 @@ +from .. import repo +from .. import configs +from .helpers import (add_references_argument, parse_reference, + add_docfile_to_paper) + + +def parser(subparsers, config): + parser = subparsers.add_parser('attach', + help='attach a document to an existing paper') + parser.add_argument('-c', '--copy', action='store_true', default=None, + help="copy document files into library directory (default)") + parser.add_argument('-C', '--nocopy', action='store_false', dest='copy', + help="don't copy document files (opposite of -c)") + add_references_argument(parser, single=True) + parser.add_argument('document', help='pdf or ps file') + return parser + + +def command(config, ui, copy, reference, document): + """ + :param bibfile: bibtex file (in .bib, .bibml or .yaml format. + :param docfile: path (no url yet) to a pdf or ps file + """ + if copy is None: + copy = config.get(configs.MAIN_SECTION, 'import-copy') + rp = repo.Repository.from_directory(config) + key = parse_reference(ui, rp, reference) + paper = rp.get_paper(key) + try: + add_docfile_to_paper(rp, paper, docfile=document, copy=copy) + except ValueError, v: + ui.error(v.message) + ui.exit(1) +# TODO handle case where citekey exists diff --git a/papers/commands/helpers.py b/papers/commands/helpers.py index 586f64d..c857fd3 100644 --- a/papers/commands/helpers.py +++ b/papers/commands/helpers.py @@ -1,6 +1,7 @@ from .. import files from .. import color from ..repo import InvalidReference +from ..paper import NoDocumentFile def add_references_argument(parser, single=False): @@ -12,14 +13,18 @@ def add_references_argument(parser, single=False): help="one or several reference to export (citekeysor numbers)") +def add_docfile_to_paper(repo, paper, docfile, copy=False): + if copy: + repo.import_document(paper.citekey, docfile) + else: + paper.set_external_document(docfile) + repo.add_or_update(paper) + + def add_paper_with_docfile(repo, paper, docfile=None, copy=False): repo.add_paper(paper) if docfile is not None: - if copy: - repo.import_document(paper.citekey, docfile) - else: - paper.set_external_document(docfile) - repo.add_or_update(paper) + add_docfile_to_paper(repo, paper, docfile, copy=copy) def extract_doc_path_from_bibdata(paper, ui): diff --git a/papers/commands/list_cmd.py b/papers/commands/list_cmd.py index 03d2953..02cd9a5 100644 --- a/papers/commands/list_cmd.py +++ b/papers/commands/list_cmd.py @@ -6,7 +6,7 @@ from .. import color def parser(subparsers, config): parser = subparsers.add_parser('list', help="list papers") parser.add_argument('-k', '--citekeys-only', action='store_true', - default=False, + default=False, dest='citekeys', help='Only returns citekeys of matching papers.') parser.add_argument('query', nargs='*', help='Paper query (e.g. "year: 2000" or "labels: math")') diff --git a/papers/papers b/papers/papers index 1851170..55281b8 100755 --- a/papers/papers +++ b/papers/papers @@ -21,6 +21,7 @@ cmds = collections.OrderedDict([ ('open', commands.open_cmd), ('websearch', commands.websearch_cmd), ('tags', commands.tags_cmd), + ('attach', commands.attach_cmd), ]) config = configs.read_config()