diff options
author | Alejandro Gallo <aamsgallo@gmail.com> | 2018-03-17 15:18:58 +0100 |
---|---|---|
committer | Alejandro Gallo <aamsgallo@gmail.com> | 2018-03-17 15:18:58 +0100 |
commit | 4bbd900091fe60adcfb33ac58be7c44ff7359e18 (patch) | |
tree | 32e53846a1844e92765629af3c652a9ec78235fb | |
parent | 619dcd2025d71aa510578406135cd5dc9ac6b513 (diff) |
Refactor rename
-rw-r--r-- | papis/commands/mv.py | 4 | ||||
-rw-r--r-- | papis/commands/rename.py | 60 | ||||
-rw-r--r-- | papis/tests/test_rename.py | 26 |
3 files changed, 62 insertions, 28 deletions
diff --git a/papis/commands/mv.py b/papis/commands/mv.py index b2ae4ab3..8a309aef 100644 --- a/papis/commands/mv.py +++ b/papis/commands/mv.py @@ -24,8 +24,8 @@ def get_dirs(main): def run(document, new_folder_path, git=False): logger = logging.getLogger('mv:run') folder = document.get_main_folder() - cmd = (['git', '-C', folder] if git else []) + \ - ['mv', folder, new_folder_path] + cmd = ['git', '-C', folder] if git else [] + cmd += ['mv', folder, new_folder_path] db = papis.database.get() logger.debug(cmd) subprocess.call(cmd) diff --git a/papis/commands/rename.py b/papis/commands/rename.py index eee3ae0b..19668355 100644 --- a/papis/commands/rename.py +++ b/papis/commands/rename.py @@ -3,6 +3,35 @@ import os import papis.api import papis.utils import subprocess +import logging + + +def run(document, new_name, git=False): + db = papis.database.get() + logger = logging.getLogger('rename:run') + folder = document.get_main_folder() + subfolder = os.path.dirname(folder) + + new_folder_path = os.path.join(subfolder, new_name) + + if os.path.exists(new_folder_path): + logger.warning("Path %s already exists" % new_folder_path) + return 1 + + cmd = ['git', '-C', folder] if git else [] + cmd += ['mv', folder, new_folder_path] + + logger.debug(cmd) + subprocess.call(cmd) + + if git: + papis.utils.git_commit(message="Rename %s" % folder) + + db.delete(document) + logger.debug("New document folder: {}".format(new_folder_path)) + document.set_folder(new_folder_path) + db.add(document) + return 0 class Command(papis.commands.Command): @@ -24,30 +53,9 @@ class Command(papis.commands.Command): if not document: return 0 - folder = document.get_main_folder() - subfolder = os.path.dirname(folder) - - new_folder = os.path.join( - subfolder, - papis.utils.clean_document_name( - papis.utils.input( - "Enter new folder name:\n" - ">", - default=document.get_main_folder_name() - ) - ) + new_name = papis.utils.input( + "Enter new folder name:\n" + ">", + default=document.get_main_folder_name() ) - - self.logger.debug(new_folder) - - if os.path.exists(new_folder): - self.logger.warning("Path %s already exists" % new_folder) - return 1 - - cmd = (['git', '-C', folder] if self.args.git else []) + \ - ['mv', folder, new_folder] - self.logger.debug(cmd) - subprocess.call(cmd) - papis.utils.git_commit(message="Rename %s" % folder) - # TODO: update the moving - self.get_db().update(documents) + return run(document, new_name, git=self.args.git) diff --git a/papis/tests/test_rename.py b/papis/tests/test_rename.py new file mode 100644 index 00000000..d4a4e67d --- /dev/null +++ b/papis/tests/test_rename.py @@ -0,0 +1,26 @@ +import os +import unittest +import papis.tests +from papis.commands.rename import run + + +class Test(unittest.TestCase): + + @classmethod + def setUpClass(self): + papis.tests.setup_test_library() + + def get_docs(self): + db = papis.database.get() + return db.get_all_documents() + + def test_simple_update(self): + docs = self.get_docs() + document = docs[0] + title = document['title'] + new_name = 'Some title with spaces too' + run(document, new_name) + docs = papis.database.get().query_dict(dict(title=title)) + self.assertTrue(len(docs) == 1) + self.assertEqual(docs[0].get_main_folder_name(), new_name) + self.assertTrue(os.path.exists(docs[0].get_main_folder())) |