updated remove cmd

main
Fabien Benureau 11 years ago
parent da3e70649b
commit c6d7300ae3

@ -3,10 +3,10 @@ import add_cmd
import list_cmd
import open_cmd
import websearch_cmd
import remove_cmd
# import import_cmd
# import export_cmd
# import edit_cmd
# import remove_cmd
# import tag_cmd
# import attach_cmd
# import update_cmd

@ -2,14 +2,14 @@ from .. import repo
from .. import color
from ..configs import config
from ..uis import get_ui
from .helpers import add_references_argument, parse_references
def parser(subparsers):
parser = subparsers.add_parser('remove', help='removes a paper')
parser.add_argument('-f', '--force', action='store_true', default=None,
help="does not prompt for confirmation.")
add_references_argument(parser)
parser.add_argument('citekeys', nargs='*',
help="one or several citekeys")
return parser
@ -17,15 +17,13 @@ def command(args):
ui = get_ui()
force = args.force
references = args.references
rp = repo.Repository(config())
citekeys = parse_references(rp, references)
if force is None:
are_you_sure = ("Are you sure you want to delete paper(s) [%s]"
" (this will also delete associated documents)?"
% ', '.join([color.dye(c, color.citekey) for c in citekeys]))
are_you_sure = (("Are you sure you want to delete paper(s) [{}]"
" (this will also delete associated documents)?")
.format(', '.join([color.dye(c, color.citekey) for c in args.citekeys])))
sure = ui.input_yn(question=are_you_sure, default='n')
if force or sure:
for c in citekeys:
for c in args.citekeys:
rp.remove_paper(c)

@ -58,8 +58,8 @@ class DataBroker(object):
def copy_doc(self, citekey, source_path, overwrite=False):
return self.docbroker.copy_doc(citekey, source_path, overwrite=overwrite)
def remove_doc(self, docpath):
return self.docbroker.remove_doc(docpath)
def remove_doc(self, docpath, silent=True):
return self.docbroker.remove_doc(docpath, silent=silent)
def real_docpath(self, docpath):
return self.docbroker.real_docpath(docpath)

@ -68,8 +68,8 @@ class DataCache(object):
def copy_doc(self, citekey, source_path, overwrite=False):
return self.databroker.copy_doc(citekey, source_path, overwrite=overwrite)
def remove_doc(self, docpath):
return self.databroker.remove_doc(docpath)
def remove_doc(self, docpath, silent=True):
return self.databroker.remove_doc(docpath, silent=silent)
def real_docpath(self, docpath):
return self.databroker.real_docpath(docpath)

@ -118,7 +118,10 @@ class DocBroker(object):
os.mkdir(self.docdir)
def is_pubsdir_doc(self, docpath):
try:
parsed = urlparse.urlparse(docpath)
except Exception:
return False
if parsed.scheme == 'pubsdir':
assert parsed.netloc == 'doc'
assert parsed.path[0] == '/'
@ -143,14 +146,16 @@ class DocBroker(object):
return target_path
def remove_doc(self, docpath):
def remove_doc(self, docpath, silent=True):
""" Will remove only file hosted in pubsdir://doc/
:raise ValueError: for other paths.
:raise ValueError: for other paths, unless :param silent: is True
"""
if not self.is_pubsdir_doc(docpath):
if not silent:
raise ValueError(('the file to be removed {} is set as external. '
'you should remove it manually.').format(docpath))
return
filepath = self.real_docpath(docpath)
if check_file(filepath):
os.remove(filepath)

@ -18,10 +18,10 @@ CORE_CMDS = collections.OrderedDict([
('list', commands.list_cmd),
('open', commands.open_cmd),
('websearch', commands.websearch_cmd),
('remove', commands.remove_cmd),
# ('import', commands.import_cmd),
# ('export', commands.export_cmd),
# ('edit', commands.edit_cmd),
# ('remove', commands.remove_cmd),
# ('tag', commands.tag_cmd),
# ('attach', commands.attach_cmd),
# ('update', commands.update_cmd),

@ -79,12 +79,12 @@ class Repository(object):
""" Remove a paper. Is silent if nothing needs to be done."""
if event:
RemoveEvent(citekey).send()
events.RemoveEvent(citekey).send()
if remove_doc:
try:
metadata = self.databroker.pull_metadata(paper.citekey)
docpath = metadata.get('docfile', '')
self.databroker.remove_doc(docpath)
metadata = self.databroker.pull_metadata(citekey)
docpath = metadata.get('docfile')
self.databroker.remove_doc(docpath, silent=True)
except IOError:
pass # FXME: if IOError is about being unable to
# remove the file, we need to issue an error.I

Loading…
Cancel
Save