Several bug fixes.

- edit command fails correctly on unknown citekey,
- init command and filebroker use content module to check paths,
- fix wrong docfile in testrepo,
- list command does not fail on None added date (unknown add dates are
  older than everything else). Also adds relevant test.
main
Olivier Mangin 11 years ago
parent ac1562f4ea
commit 91b3fc75bb

@ -22,7 +22,11 @@ def command(args):
citekey = args.citekey citekey = args.citekey
rp = repo.Repository(config()) rp = repo.Repository(config())
paper = rp.pull_paper(citekey) try:
paper = rp.pull_paper(citekey)
except repo.InvalidReference as v:
ui.error(v)
ui.exit(1)
coder = EnDecoder() coder = EnDecoder()
if meta: if meta:

@ -2,11 +2,11 @@
import os import os
from .. import databroker
from ..configs import config from ..configs import config
from ..uis import get_ui from ..uis import get_ui
from .. import color from .. import color
from ..repo import Repository from ..repo import Repository
from ..content import system_path, check_directory
def parser(subparsers): def parser(subparsers):
@ -30,9 +30,9 @@ def command(args):
if pubsdir is None: if pubsdir is None:
pubsdir = '~/.pubs' pubsdir = '~/.pubs'
pubsdir = os.path.normpath(os.path.abspath(os.path.expanduser(pubsdir))) pubsdir = system_path(pubsdir)
if os.path.exists(pubsdir) and len(os.listdir(pubsdir)) > 0: if check_directory(pubsdir, fail=False) and len(os.listdir(pubsdir)) > 0:
ui.error('directory {} is not empty.'.format( ui.error('directory {} is not empty.'.format(
color.dye(pubsdir, color.filepath))) color.dye(pubsdir, color.filepath)))
ui.exit() ui.exit()

@ -1,3 +1,5 @@
from datetime import datetime
from .. import repo from .. import repo
from .. import pretty from .. import pretty
from .. import bibstruct from .. import bibstruct
@ -25,7 +27,7 @@ def parser(subparsers):
def date_added(np): def date_added(np):
n, p = np n, p = np
return p.added return p.added or datetime(1, 1, 1)
def command(args): def command(args):
@ -34,9 +36,10 @@ def command(args):
papers = filter(lambda (n, p): papers = filter(lambda (n, p):
filter_paper(p, args.query, case_sensitive=args.case_sensitive), filter_paper(p, args.query, case_sensitive=args.case_sensitive),
enumerate(rp.all_papers())) enumerate(rp.all_papers()))
ui.print_('\n'.join( if len(papers) > 0:
pretty.paper_oneliner(p, n=n, citekey_only=args.citekeys) ui.print_('\n'.join(
for n, p in sorted(papers, key=date_added))) pretty.paper_oneliner(p, n=n, citekey_only=args.citekeys)
for n, p in sorted(papers, key=date_added)))
FIELD_ALIASES = { FIELD_ALIASES = {

@ -66,10 +66,10 @@ class FileBroker(object):
def remove(self, citekey): def remove(self, citekey):
metafilepath = os.path.join(self.metadir, citekey + '.yaml') metafilepath = os.path.join(self.metadir, citekey + '.yaml')
if check_file(metafilepath): if check_file(metafilepath):
os.remove(metafilepath) os.remove(system_path(metafilepath))
bibfilepath = os.path.join(self.bibdir, citekey + '.bib') bibfilepath = os.path.join(self.bibdir, citekey + '.bib')
if check_file(bibfilepath): if check_file(bibfilepath):
os.remove(bibfilepath) os.remove(system_path(bibfilepath))
def exists(self, citekey, both=True): def exists(self, citekey, both=True):
meta_exists = check_file(os.path.join(self.metadir, citekey + '.yaml'), fail=False) meta_exists = check_file(os.path.join(self.metadir, citekey + '.yaml'), fail=False)
@ -178,7 +178,7 @@ class DocBroker(object):
return return
filepath = self.real_docpath(docpath) filepath = self.real_docpath(docpath)
if check_file(filepath): if check_file(filepath):
os.remove(filepath) os.remove(system_path(filepath))
def rename_doc(self, docpath, new_citekey): def rename_doc(self, docpath, new_citekey):
""" Move a document inside the docsdir """ Move a document inside the docsdir

@ -10,9 +10,5 @@ setup(name='pubs',
description='research papers manager', description='research papers manager',
requires=['bibtexparser'], requires=['bibtexparser'],
packages=find_packages(), packages=find_packages(),
package_data={'': ['*.tex', '*.sty']},
scripts=['pubs/pubs'] scripts=['pubs/pubs']
) )
# TODO include proper package data from plugins (08/06/2013)
# should we use MANIFEST.in or package_data = ..., or both

@ -144,7 +144,32 @@ class TestList(DataCommandTestCase):
'pubs add /data/pagerank.bib -d /data/pagerank.pdf', 'pubs add /data/pagerank.bib -d /data/pagerank.pdf',
'pubs list', 'pubs list',
] ]
self.execute_cmds(cmds) outs = self.execute_cmds(cmds)
print outs[1].splitlines()
self.assertEquals(0, len(outs[1].splitlines()))
print outs[3].splitlines()
self.assertEquals(1, len(outs[3].splitlines()))
def test_list_several_no_date(self):
self.execute_cmds(['pubs init -p /testrepo'])
self.fs['shutil'].rmtree('testrepo')
testrepo = os.path.join(os.path.dirname(__file__), 'testrepo')
fake_env.copy_dir(self.fs, testrepo, 'testrepo')
cmds = ['pubs list',
'pubs remove -f Page99',
'pubs list',
'pubs add /data/pagerank.bib -d /data/pagerank.pdf',
'pubs list',
]
outs = self.execute_cmds(cmds)
print outs[0].splitlines()
self.assertEquals(4, len(outs[0].splitlines()))
print outs[2].splitlines()
self.assertEquals(3, len(outs[2].splitlines()))
print outs[4].splitlines()
self.assertEquals(4, len(outs[4].splitlines()))
# Last added should be last
self.assertEquals('[Page99]', outs[4].splitlines()[-1][:8])
def test_list_smart_case(self): def test_list_smart_case(self):
cmds = ['pubs init', cmds = ['pubs init',
@ -154,7 +179,7 @@ class TestList(DataCommandTestCase):
] ]
outs = self.execute_cmds(cmds) outs = self.execute_cmds(cmds)
print outs[-1] print outs[-1]
self.assertEquals(1, len(outs[-1].split('/n'))) self.assertEquals(1, len(outs[-1].splitlines()))
def test_list_ignore_case(self): def test_list_ignore_case(self):
cmds = ['pubs init', cmds = ['pubs init',
@ -163,7 +188,8 @@ class TestList(DataCommandTestCase):
'pubs list --ignore-case title:lAnguAge author:saunders', 'pubs list --ignore-case title:lAnguAge author:saunders',
] ]
outs = self.execute_cmds(cmds) outs = self.execute_cmds(cmds)
self.assertEquals(1, len(outs[-1].split('/n'))) print outs[-1]
self.assertEquals(1, len(outs[-1].splitlines()))
def test_list_force_case(self): def test_list_force_case(self):
cmds = ['pubs init', cmds = ['pubs init',
@ -172,7 +198,7 @@ class TestList(DataCommandTestCase):
'pubs list --force-case title:Language author:saunders', 'pubs list --force-case title:Language author:saunders',
] ]
outs = self.execute_cmds(cmds) outs = self.execute_cmds(cmds)
self.assertEquals(0 + 1, len(outs[-1].split('/n'))) self.assertEquals(0 + 1, len(outs[-1].split('\n')))
@ -222,6 +248,9 @@ class TestUsecase(DataCommandTestCase):
'pubs remove -f turing1950computing', 'pubs remove -f turing1950computing',
] ]
self.execute_cmds(cmds) self.execute_cmds(cmds)
docdir = self.fs['os'].path.expanduser('~/.pubs/doc/')
print self.fs['os'].listdir(docdir)
self.assertNotIn('turing-mind-1950.pdf', self.fs['os'].listdir(docdir))
def test_editor_abort(self): def test_editor_abort(self):
with self.assertRaises(SystemExit): with self.assertRaises(SystemExit):

@ -1,3 +1,3 @@
docfile: docsdir://doc/Page99.pdf docfile: docsdir://Page99.pdf
notes: [] notes: []
tags: [search, network] tags: [search, network]

Loading…
Cancel
Save