diff --git a/papers/commands/__init__.py b/papers/commands/__init__.py index 179e7ca..3e533a7 100644 --- a/papers/commands/__init__.py +++ b/papers/commands/__init__.py @@ -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 diff --git a/papers/commands/remove_cmd.py b/papers/commands/remove_cmd.py index 76e7e6e..5351c8f 100644 --- a/papers/commands/remove_cmd.py +++ b/papers/commands/remove_cmd.py @@ -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) + help="does not prompt for confirmation.") + 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) diff --git a/papers/databroker.py b/papers/databroker.py index fed7307..a69f988 100644 --- a/papers/databroker.py +++ b/papers/databroker.py @@ -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) \ No newline at end of file diff --git a/papers/datacache.py b/papers/datacache.py index bb0b97c..9859699 100644 --- a/papers/datacache.py +++ b/papers/datacache.py @@ -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) diff --git a/papers/filebroker.py b/papers/filebroker.py index 18a7452..aa43e74 100644 --- a/papers/filebroker.py +++ b/papers/filebroker.py @@ -118,7 +118,10 @@ class DocBroker(object): os.mkdir(self.docdir) def is_pubsdir_doc(self, docpath): - parsed = urlparse.urlparse(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): - raise ValueError(('the file to be removed {} is set as external. ' - 'you should remove it manually.').format(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) diff --git a/papers/papers_cmd.py b/papers/papers_cmd.py index 58e0f6c..7ab156b 100644 --- a/papers/papers_cmd.py +++ b/papers/papers_cmd.py @@ -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), diff --git a/papers/repo.py b/papers/repo.py index ef7fe18..cb60e6f 100644 --- a/papers/repo.py +++ b/papers/repo.py @@ -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