Uniformizes add and import commands. Still to be further tested.

main
Olivier Mangin 12 years ago
parent a45051815d
commit f8e370f288

@ -1,17 +1,56 @@
from .. import repo from .. import repo
from .. import files
from ..paper import Paper, NoDocumentFile
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): def parser(subparsers, config):
parser = subparsers.add_parser('add', help='add a paper to the repository') parser = subparsers.add_parser('add', help='add a paper to the repository')
parser.add_argument('pdffile', help='pdf or ps file')
parser.add_argument('bibfile', help='bibtex, bibtexml or bibyaml file') parser.add_argument('bibfile', help='bibtex, bibtexml or bibyaml file')
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 return parser
def command(config, ui, pdffile, bibfile): def command(config, ui, bibfile, docfile, copy):
""" """
:param pdffilepath path (no url yet) to a pdf or ps file :param bibfile: bibtex file (in .bib, .bibml or .yaml format.
:param bibtex 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('papers', 'import-copy')
rp = repo.Repository.from_directory() rp = repo.Repository.from_directory()
rp.add_paper_from_paths(pdffile, bibfile) 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)

@ -1,6 +1,6 @@
from .. import repo from .. import repo
from ..paper import Paper, NoDocumentFile from ..paper import Paper
from .. import files from add_cmd import add_paper_with_docfile, extract_doc_path_from_bibdata
def parser(subparsers, config): def parser(subparsers, config):
@ -25,20 +25,7 @@ def command(config, ui, bibpath, copy):
# Extract papers from bib # Extract papers from bib
papers = Paper.many_from_path(bibpath, fatal=False) papers = Paper.many_from_path(bibpath, fatal=False)
for p in papers: for p in papers:
doc_file = None doc_file = extract_doc_path_from_bibdata(p, ui)
try: if doc_file is None:
file_path = p.get_document_file_from_bibdata(remove=True) ui.warning("No file for %s." % p.citekey)
if files.check_file(file_path): add_paper_with_docfile(rp, p, docfile=doc_file, copy=copy)
doc_file = file_path
else:
print("File does not exist for %s (%s)."
% (p.citekey, file_path))
except NoDocumentFile:
print "No file for %s." % p.citekey
rp.add_paper(p)
if doc_file:
if copy:
rp.import_document(p.citekey, doc_file)
else:
p.set_external_document(doc_file)
rp.add_or_update(p)

@ -77,7 +77,9 @@ def get_safe_metadata_from_content(content):
def get_safe_metadata_from_path(metapath): def get_safe_metadata_from_path(metapath):
if metapath is not None: if metapath is None:
content = None
else:
content = files.read_yamlfile(metapath) content = files.read_yamlfile(metapath)
return get_safe_metadata(content) return get_safe_metadata(content)

@ -3,7 +3,7 @@ import shutil
import glob import glob
import files import files
from paper import Paper, PaperInRepo, NoDocumentFile from paper import PaperInRepo, NoDocumentFile
from color import colored from color import colored
import configs import configs
@ -60,13 +60,6 @@ class Repository(object):
# creating new papers # creating new papers
# Deprecated
# TODO merge
def add_paper_from_paths(self, docpath, bibpath):
p = Paper.load(bibpath)
p.set_external_document(docpath)
self.add_paper(p)
def add_paper(self, p): def add_paper(self, p):
if p.citekey is None: # TODO also test if citekey is valid if p.citekey is None: # TODO also test if citekey is valid
raise(ValueError("Invalid citekey: %s." % p.citekey)) raise(ValueError("Invalid citekey: %s." % p.citekey))

@ -66,3 +66,6 @@ class UI:
def error(self, message): def error(self, message):
self.print_("%s: %s" % (colored('error', 'red'), message)) self.print_("%s: %s" % (colored('error', 'red'), message))
def warning(self, message):
self.print_("%s: %s" % (colored('warning', 'yellow'), message))

Loading…
Cancel
Save