summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Gallo <aamsgallo@gmail.com>2018-03-17 15:18:58 +0100
committerAlejandro Gallo <aamsgallo@gmail.com>2018-03-17 15:18:58 +0100
commit4bbd900091fe60adcfb33ac58be7c44ff7359e18 (patch)
tree32e53846a1844e92765629af3c652a9ec78235fb
parent619dcd2025d71aa510578406135cd5dc9ac6b513 (diff)
Refactor rename
-rw-r--r--papis/commands/mv.py4
-rw-r--r--papis/commands/rename.py60
-rw-r--r--papis/tests/test_rename.py26
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()))