commands updated to new config, new repo

main
Fabien Benureau 12 years ago
parent 164816a910
commit e4f7017fdb

@ -1,11 +1,11 @@
from .. import repo from .. import repo
from .. import files from .. import files
from ..paper import Paper, NoDocumentFile, get_bibentry_from_string from ..paper import Paper, NoDocumentFile, get_bibentry_from_string
from .. import configs from ..configs import config
from .helpers import add_paper_with_docfile, extract_doc_path_from_bibdata from .helpers import add_paper_with_docfile, extract_doc_path_from_bibdata
def parser(subparsers, config): def parser(subparsers):
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('-b', '--bibfile', parser.add_argument('-b', '--bibfile',
help='bibtex, bibtexml or bibyaml file', default=None) help='bibtex, bibtexml or bibyaml file', default=None)
@ -19,14 +19,14 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, bibfile, docfile, tags, copy): def command(ui, bibfile, docfile, tags, copy):
""" """
:param bibfile: bibtex file (in .bib, .bibml or .yaml format. :param bibfile: bibtex file (in .bib, .bibml or .yaml format.
:param docfile: path (no url yet) to a pdf or ps file :param docfile: path (no url yet) to a pdf or ps file
""" """
if copy is None: if copy is None:
copy = config.get(configs.MAIN_SECTION, 'import-copy') copy = config().import_copy
rp = repo.Repository.from_directory(config) rp = repo.Repository(config())
if bibfile is None: if bibfile is None:
cont = True cont = True
bibstr = '' bibstr = ''

@ -1,18 +1,18 @@
from .. import repo from .. import repo
from ..paper import Paper from ..paper import Paper
from ..configs import config
def parser(subparsers):
def parser(subparsers, config):
parser = subparsers.add_parser('add_library', parser = subparsers.add_parser('add_library',
help='add a set of papers to the repository') help='add a set of papers to the repository')
parser.add_argument('bibfile', help='bibtex, bibtexml or bibyaml file') parser.add_argument('bibfile', help='bibtex, bibtexml or bibyaml file')
return parser return parser
def command(config, ui, bibfile): def command(ui, bibfile):
""" """
:param bibtex bibtex file (in .bib, .bibml or .yaml format. :param bibtex bibtex file (in .bib, .bibml or .yaml format.
""" """
rp = repo.Repository.from_directory(config) rp = repo.Repository.from_directory(config())
for p in Paper.many_from_bib(bibfile): for p in Paper.many_from_bib(bibfile):
rp.add_paper(p) rp.add_paper(p)

@ -1,10 +1,10 @@
from .. import repo from .. import repo
from .. import configs from ..configs import config
from .helpers import (add_references_argument, parse_reference, from .helpers import (add_references_argument, parse_reference,
add_docfile_to_paper) add_docfile_to_paper)
def parser(subparsers, config): def parser(subparsers):
parser = subparsers.add_parser('attach', parser = subparsers.add_parser('attach',
help='attach a document to an existing paper') help='attach a document to an existing paper')
parser.add_argument('-c', '--copy', action='store_true', default=None, parser.add_argument('-c', '--copy', action='store_true', default=None,
@ -16,14 +16,14 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, copy, reference, document): def command(ui, copy, reference, document):
""" """
:param bibfile: bibtex file (in .bib, .bibml or .yaml format. :param bibfile: bibtex file (in .bib, .bibml or .yaml format.
:param docfile: path (no url yet) to a pdf or ps file :param docfile: path (no url yet) to a pdf or ps file
""" """
if copy is None: if copy is None:
copy = config.get(configs.MAIN_SECTION, 'import-copy') copy = config().import_copy
rp = repo.Repository.from_directory(config) rp = repo.Repository(config())
key = parse_reference(ui, rp, reference) key = parse_reference(ui, rp, reference)
paper = rp.get_paper(key) paper = rp.get_paper(key)
try: try:

@ -2,9 +2,10 @@ from ..files import editor_input
from .. import repo from .. import repo
from ..paper import get_bibentry_from_string, get_safe_metadata_from_content from ..paper import get_bibentry_from_string, get_safe_metadata_from_content
from .helpers import add_references_argument, parse_reference from .helpers import add_references_argument, parse_reference
from ..configs import config
def parser(subparsers, config): def parser(subparsers):
parser = subparsers.add_parser('edit', parser = subparsers.add_parser('edit',
help='open the paper bibliographic file in an editor') help='open the paper bibliographic file in an editor')
parser.add_argument('-m', '--meta', action='store_true', default=False, parser.add_argument('-m', '--meta', action='store_true', default=False,
@ -13,8 +14,8 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, meta, reference): def command(ui, meta, reference):
rp = repo.Repository.from_directory(config) rp = repo.Repository.from_directory(config())
key = parse_reference(ui, rp, reference) key = parse_reference(ui, rp, reference)
paper = rp.get_paper(key) paper = rp.get_paper(key)
to_edit = 'bib' to_edit = 'bib'
@ -25,7 +26,7 @@ def command(config, ui, meta, reference):
content = f.read() content = f.read()
while True: while True:
# Get new content from user # Get new content from user
content = editor_input(config, content) content = editor_input(config().edit_cmd, content)
new_key = key new_key = key
bib = None bib = None
metadata = None metadata = None

@ -5,9 +5,9 @@ from pybtex.database import BibliographyData
from .. import repo from .. import repo
from .. import files from .. import files
from .helpers import parse_references, add_references_argument from .helpers import parse_references, add_references_argument
from ..configs import config
def parser(subparsers):
def parser(subparsers, config):
parser = subparsers.add_parser('export', parser = subparsers.add_parser('export',
help='export bibliography') help='export bibliography')
parser.add_argument('-f', '--bib-format', default='bibtex', parser.add_argument('-f', '--bib-format', default='bibtex',
@ -16,11 +16,11 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, bib_format, references): def command(ui, bib_format, references):
""" """
:param bib_format (in 'bibtex', 'yaml') :param bib_format (in 'bibtex', 'yaml')
""" """
rp = repo.Repository.from_directory(config) rp = repo.Repository.from_directory(config())
papers = [rp.get_paper(c) papers = [rp.get_paper(c)
for c in parse_references(ui, rp, references)] for c in parse_references(ui, rp, references)]
if len(papers) == 0: if len(papers) == 0:

@ -42,7 +42,7 @@ def extract_doc_path_from_bibdata(paper, ui):
def parse_reference(ui, rp, ref): def parse_reference(ui, rp, ref):
try: try:
return rp.citekey_from_ref(ref) return rp.ref2citekey(ref)
except InvalidReference: except InvalidReference:
ui.error("no paper with reference: %s." ui.error("no paper with reference: %s."
% color.dye(ref, color.citekey)) % color.dye(ref, color.citekey))

@ -1,10 +1,9 @@
from .. import repo from .. import repo
from ..paper import Paper from ..paper import Paper
from .helpers import add_paper_with_docfile, extract_doc_path_from_bibdata from .helpers import add_paper_with_docfile, extract_doc_path_from_bibdata
from .. import configs from ..configs import config
def parser(subparsers):
def parser(subparsers, config):
parser = subparsers.add_parser('import', parser = subparsers.add_parser('import',
help='import paper(s) to the repository') help='import paper(s) to the repository')
parser.add_argument('bibpath', parser.add_argument('bibpath',
@ -16,13 +15,13 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, bibpath, copy): def command(ui, bibpath, copy):
""" """
:param bibpath: path (no url yet) to a bibliography file :param bibpath: path (no url yet) to a bibliography file
""" """
if copy is None: if copy is None:
copy = config.get(configs.MAIN_SECTION, 'import-copy') copy = config().import_copy
rp = repo.Repository.from_directory(config) rp = repo.Repository.from_directory(config())
# 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:

@ -3,10 +3,11 @@
import os import os
from ..repo import Repository from ..repo import Repository
from .. import configs from ..configs import config
from .. import color from .. import color
from .. import files
def parser(subparsers, config): def parser(subparsers):
parser = subparsers.add_parser('init', parser = subparsers.add_parser('init',
help="initialize the papers directory") help="initialize the papers directory")
parser.add_argument('-p', '--path', default=None, parser.add_argument('-p', '--path', default=None,
@ -17,21 +18,19 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, path, doc_dir): def command(ui, path, doc_dir):
"""Create a .papers directory""" """Create a .papers directory"""
if path is None: if path is not None:
papersdir = config.get('papers', 'papers-directory') config().papers_dir = files.clean_path(os.getcwd(), path)
else: ppd = config().papers_dir
papersdir = os.path.join(os.getcwd(), path) if os.path.exists(ppd) and len(os.listdir(ppd)) > 0:
configs.add_and_write_option('papers', 'papers-directory', papersdir)
if os.path.exists(papersdir):
if len(os.listdir(papersdir)) > 0:
ui.error('directory {} is not empty.'.format( ui.error('directory {} is not empty.'.format(
color.dye(papersdir, color.filepath))) color.dye(ppd, color.filepath)))
ui.exit() ui.exit()
ui.print_('Initializing papers in {}.'.format( ui.print_('Initializing papers in {}.'.format(
color.dye(papersdir, color.filepath))) color.dye(ppd, color.filepath)))
repo = Repository()
repo.init(papersdir) # Creates directories repo = Repository(config(), load = False)
repo.save() # Saves empty repository description repo.save()
config().save()

@ -2,9 +2,10 @@ from .. import pretty
from .. import repo from .. import repo
from .. import color from .. import color
from . import helpers from . import helpers
from ..configs import config
def parser(subparsers, config): def parser(subparsers):
parser = subparsers.add_parser('list', help="list papers") parser = subparsers.add_parser('list', help="list papers")
parser.add_argument('-k', '--citekeys-only', action='store_true', parser.add_argument('-k', '--citekeys-only', action='store_true',
default=False, dest='citekeys', default=False, dest='citekeys',
@ -14,8 +15,8 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, citekeys, query): def command(ui, citekeys, query):
rp = repo.Repository.from_directory(config) rp = repo.Repository(config())
papers = [(n, p) for n, p in enumerate(rp.all_papers()) papers = [(n, p) for n, p in enumerate(rp.all_papers())
if test_paper(query, p)] if test_paper(query, p)]
ui.print_('\n'.join(helpers.paper_oneliner(p, n = n, citekey_only = citekeys) for n, p in papers)) ui.print_('\n'.join(helpers.paper_oneliner(p, n = n, citekey_only = citekeys) for n, p in papers))

@ -2,12 +2,12 @@ import subprocess
from .. import repo from .. import repo
from ..paper import NoDocumentFile from ..paper import NoDocumentFile
from .. import configs from ..configs import config
from .. import color from .. import color
from .helpers import add_references_argument, parse_reference from .helpers import add_references_argument, parse_reference
def parser(subparsers, config): def parser(subparsers):
parser = subparsers.add_parser('open', parser = subparsers.add_parser('open',
help='open the paper in a pdf viewer') help='open the paper in a pdf viewer')
parser.add_argument('-w', '--with', dest='with_command', default=None, parser.add_argument('-w', '--with', dest='with_command', default=None,
@ -16,12 +16,12 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, with_command, reference): def command(ui, with_command, reference):
rp = repo.Repository.from_directory(config) rp = repo.Repository.from_directory(config)
key = parse_reference(ui, rp, reference) key = parse_reference(ui, rp, reference)
paper = rp.get_paper(key) paper = rp.get_paper(key)
if with_command is None: if with_command is None:
with_command = config.get(configs.MAIN_SECTION, 'open-cmd') with_command = config().open_cmd
try: try:
filepath = paper.get_document_path() filepath = paper.get_document_path()
subprocess.Popen([with_command, filepath]) subprocess.Popen([with_command, filepath])

@ -1,12 +1,12 @@
from .. import repo from .. import repo
from .. import color from .. import color
from .. import configs from ..configs import config
from .helpers import add_references_argument, parse_references from .helpers import add_references_argument, parse_references
from ..events import RemoveEvent from ..events import RemoveEvent
def parser(subparsers, config): def parser(subparsers):
parser = subparsers.add_parser('remove', help='removes a paper') parser = subparsers.add_parser('remove', help='removes a paper')
parser.add_argument('-f', '--force', action='store_true', default=None, parser.add_argument('-f', '--force', action='store_true', default=None,
help="does not prompt for confirmation.") help="does not prompt for confirmation.")
@ -14,8 +14,8 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, force, references): def command(ui, force, references):
rp = repo.Repository.from_directory(config) rp = repo.Repository(config())
citekeys = parse_references(ui, rp, references) citekeys = parse_references(ui, rp, references)
if force is None: if force is None:
are_you_sure = ("Are you sure you want to delete paper(s) [%s]" are_you_sure = ("Are you sure you want to delete paper(s) [%s]"
@ -24,7 +24,7 @@ def command(config, ui, force, references):
sure = ui.input_yn(question=are_you_sure, default='n') sure = ui.input_yn(question=are_you_sure, default='n')
if force or sure: if force or sure:
for c in citekeys: for c in citekeys:
rmevent = RemoveEvent(config, ui, c) rmevent = RemoveEvent(ui, c)
rmevent.send() rmevent.send()
rp.remove(c) rp.remove_paper(c)

@ -19,8 +19,9 @@ The different use cases are :
from ..repo import Repository, InvalidReference from ..repo import Repository, InvalidReference
from . import helpers from . import helpers
from ..configs import config
def parser(subparsers, config): def parser(subparsers):
parser = subparsers.add_parser('tag', help="add, remove and show tags") parser = subparsers.add_parser('tag', help="add, remove and show tags")
parser.add_argument('referenceOrTag', nargs='?', default = None, parser.add_argument('referenceOrTag', nargs='?', default = None,
help='reference to the paper (citekey or number), or ' help='reference to the paper (citekey or number), or '
@ -43,12 +44,12 @@ def _parse_tags(s):
for m in re.finditer(r'[+-]', s): for m in re.finditer(r'[+-]', s):
if m.start() == last: if m.start() == last:
if last != 0: if last != 0:
raise ValueError, 'could not match tag expression' raise ValueError('could not match tag expression')
else: else:
tags.append(s[last:(m.start())]) tags.append(s[last:(m.start())])
last = m.start() last = m.start()
if last == len(s): if last == len(s):
raise ValueError, 'could not match tag expression' raise ValueError('could not match tag expression')
else: else:
tags.append(s[last:]) tags.append(s[last:])
return tags return tags
@ -63,16 +64,16 @@ def _tag_groups(tags):
minus_tags.append(tag[1:]) minus_tags.append(tag[1:])
return set(plus_tags), set(minus_tags) return set(plus_tags), set(minus_tags)
def command(config, ui, referenceOrTag, tags): def command(ui, referenceOrTag, tags):
"""Add, remove and show tags""" """Add, remove and show tags"""
rp = Repository.from_directory(config) rp = Repository(config())
if referenceOrTag is None: if referenceOrTag is None:
for tag in rp.get_tags(): for tag in rp.get_tags():
ui.print_(tag) ui.print_(tag)
else: else:
try: try:
citekey = rp.citekey_from_ref(referenceOrTag) citekey = rp.ref2citekey(referenceOrTag)
p = rp.get_paper(citekey) p = rp.get_paper(citekey)
if tags is None: if tags is None:
ui.print_(' '.join(p.tags)) ui.print_(' '.join(p.tags))

@ -1,12 +1,12 @@
from .. import repo from .. import repo
from .. import color from .. import color
def parser(subparsers, config): def parser(subparsers):
parser = subparsers.add_parser('update', help='update the repository to the lastest format') parser = subparsers.add_parser('update', help='update the repository to the lastest format')
return parser return parser
def command(config, ui): def command(ui):
rp = repo.Repository.from_directory(config) rp = repo.Repository.from_directory(config)
msg = ("You should backup the paper directory {} before continuing." msg = ("You should backup the paper directory {} before continuing."
"Continue ?").format(color.dye(rp.papersdir, color.filepath)) "Continue ?").format(color.dye(rp.papersdir, color.filepath))

@ -2,7 +2,7 @@ import webbrowser
import urllib import urllib
def parser(subparsers, config): def parser(subparsers):
parser = subparsers.add_parser('websearch', parser = subparsers.add_parser('websearch',
help="launch a search on Google Scholar") help="launch a search on Google Scholar")
parser.add_argument("search_string", nargs = '*', parser.add_argument("search_string", nargs = '*',
@ -10,7 +10,7 @@ def parser(subparsers, config):
return parser return parser
def command(config, ui, search_string): def command(ui, search_string):
print search_string print search_string
url = ("https://scholar.google.fr/scholar?q=%s&lr=" url = ("https://scholar.google.fr/scholar?q=%s&lr="
% (urllib.quote_plus(' '.join(search_string)))) % (urllib.quote_plus(' '.join(search_string))))

Loading…
Cancel
Save