A proposal to change add_cmd -> see devadd_cmd. Bibfile becomes an option. If not define, open editor to fill one.
This commit is contained in:
parent
bacb97176e
commit
7b034b6d53
1
TODO
1
TODO
@ -11,3 +11,4 @@ TODO list
|
|||||||
- option to add tag on add
|
- option to add tag on add
|
||||||
- paths in metadata must be relative
|
- paths in metadata must be relative
|
||||||
- include package data in setup.py (see setup.py for more info)
|
- include package data in setup.py (see setup.py for more info)
|
||||||
|
- in the script papers, why do we use a dictionary and not a list? it may be confusing, the key is not the subparser name. The subparser name is defined in the cmd files
|
||||||
|
@ -8,3 +8,5 @@ import open_cmd
|
|||||||
import edit_cmd
|
import edit_cmd
|
||||||
import remove_cmd
|
import remove_cmd
|
||||||
import websearch_cmd
|
import websearch_cmd
|
||||||
|
|
||||||
|
import devadd_cmd
|
||||||
|
73
papers/commands/devadd_cmd.py
Normal file
73
papers/commands/devadd_cmd.py
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from .. import repo
|
||||||
|
from .. import files
|
||||||
|
from ..paper import Paper, NoDocumentFile
|
||||||
|
from .. import configs
|
||||||
|
|
||||||
|
TMP_BIB_FILE = '/tmp/ref.bib'
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
def extract_doc_path_from_bibdata(paper, ui):
|
||||||
|
try:
|
||||||
|
file_path = paper.get_document_file_from_bibdata(remove=True)
|
||||||
|
if files.check_file(file_path):
|
||||||
|
return file_path
|
||||||
|
else:
|
||||||
|
ui.warning("File does not exist for %s (%s)."
|
||||||
|
% (paper.citekey, file_path))
|
||||||
|
except NoDocumentFile:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def parser(subparsers, config):
|
||||||
|
parser = subparsers.add_parser('devadd', help='devadd a paper to the repository')
|
||||||
|
parser.add_argument('-b', '--bibfile', help='bibtex, bibtexml or bibyaml file', default=None)
|
||||||
|
parser.add_argument('-d', '--docfile', help='pdf or ps file', default=None)
|
||||||
|
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)")
|
||||||
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
def command(config, ui, bibfile, docfile, copy):
|
||||||
|
"""
|
||||||
|
: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)
|
||||||
|
if bibfile is None:
|
||||||
|
bibfile = fill_bib(config)
|
||||||
|
p = Paper.load(bibfile)
|
||||||
|
# Check if another doc file is specified in bibtex
|
||||||
|
docfile2 = extract_doc_path_from_bibdata(p, ui)
|
||||||
|
if docfile is None:
|
||||||
|
docfile = docfile2
|
||||||
|
elif docfile2 is not None:
|
||||||
|
ui.warning(
|
||||||
|
"Skipping document file from bib file: %s, using %s instead."
|
||||||
|
% (docfile2, docfile))
|
||||||
|
add_paper_with_docfile(rp, p, docfile=docfile, copy=copy)
|
||||||
|
|
||||||
|
def fill_bib(config):
|
||||||
|
if os.path.exists(TMP_BIB_FILE):
|
||||||
|
os.remove(TMP_BIB_FILE)
|
||||||
|
print "Fill the reference as a .bib and close the editor"
|
||||||
|
proc = subprocess.Popen([config.get(configs.MAIN_SECTION, 'edit-cmd'), TMP_BIB_FILE])
|
||||||
|
proc.wait()
|
||||||
|
return TMP_BIB_FILE
|
||||||
|
|
||||||
|
|
@ -22,6 +22,8 @@ cmds = collections.OrderedDict([
|
|||||||
('websearch', commands.websearch_cmd)
|
('websearch', commands.websearch_cmd)
|
||||||
])
|
])
|
||||||
|
|
||||||
|
cmds.update(collections.OrderedDict([('devadd', commands.devadd_cmd)]))
|
||||||
|
|
||||||
config = configs.read_config()
|
config = configs.read_config()
|
||||||
ui = UI(config)
|
ui = UI(config)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user