From e2724780767094fbc184faa55ca90e3a084dfb06 Mon Sep 17 00:00:00 2001 From: Samuel Smoker Date: Wed, 1 Mar 2017 13:03:10 -0800 Subject: Added folder modification commands --- syncthingmanager/__init__.py | 44 +++++++++++++++++++++++++++++++++++- syncthingmanager/tests/test_stman.py | 35 ++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/syncthingmanager/__init__.py b/syncthingmanager/__init__.py index 0973446..8c5a10c 100644 --- a/syncthingmanager/__init__.py +++ b/syncthingmanager/__init__.py @@ -321,6 +321,27 @@ class SyncthingManager(Syncthing): raise SyncthingManagerError(devicestr + " is not associated with " + folderstr) + def folder_edit(self, folderstr, prop, value): + config = self.system.config() + info = self.folder_info(folderstr) + if info['index'] == None: + raise SyncthingManagerError("Folder not configured: " + folderstr) + else: + config['folders'][info['index']][prop] = value + self.system.set_config(config) + + def folder_set_label(self, folderstr, label): + self.folder_edit(folderstr, 'label', label) + + def folder_set_rescan(self, folderstr, rescan): + self.folder_edit(folderstr, 'rescanIntervalS', rescan) + + def folder_set_minfree(self, folderstr, minfree): + self.folder_edit(folderstr, 'minDiskFreePct', minfree) + + def folder_set_type(self, folderstr, folder_type): + self.folder_edit(folderstr, 'type', folder_type) + def _device_list(self): """Prints out a formatted list of devices and their state from the active configuration.""" @@ -456,7 +477,19 @@ def arguments(): unshare_folder_parser = folder_subparsers.add_parser('unshare', help='Stop sharing folder with device') unshare_folder_parser.add_argument('folder', metavar='FOLDER', help='the folder ID or label') - unshare_folder_parser.add_argument('device', metavar='DEVICE', help='the device ID or label') + unshare_folder_parser.add_argument('device', metavar='DEVICE', help='the device ID or name') + + edit_folder_parser = folder_subparsers.add_parser('edit', + help="modify a configured folder") + edit_folder_parser.add_argument('folder', metavar='FOLDER', help='the folder ID or label') + edit_folder_parser.add_argument('--label', '-n', metavar='LABEL', + help='the label to be set') + edit_folder_parser.add_argument('--rescan', '-r', metavar='INTERVAL', + help="the time (in seconds) between scanning for changes") + edit_folder_parser.add_argument('--minfree', '-m', metavar='PERCENT', + help='percentage of space that should be available on the disk this folder resides') + edit_folder_parser.add_argument('--type', '-t', metavar='TYPE', dest='folder_type', + help='readonly or readwrite') list_folder_parser = folder_subparsers.add_parser('list', help='prints a list of configured folders') @@ -543,6 +576,15 @@ def main(): st.share_folder(args.folder, args.device) elif args.folderparser_name == 'unshare': st.unshare_folder(args.folder, args.device) + elif args.folderparser_name == 'edit': + if args.label: + st.folder_set_label(args.folder, args.label) + if args.rescan: + st.folder_set_rescan(args.folder, args.rescan) + if args.minfree: + st.folder_set_minfree(args.folder, args.minfree) + if args.folder_type: + st.folder_set_type(args.folder, args.folder_type) elif args.folderparser_name == 'list': st._folder_list() except SyncthingError as err: diff --git a/syncthingmanager/tests/test_stman.py b/syncthingmanager/tests/test_stman.py index b4f5216..1b7403e 100644 --- a/syncthingmanager/tests/test_stman.py +++ b/syncthingmanager/tests/test_stman.py @@ -100,3 +100,38 @@ def test_share_folder(s): b = folder1_info(s) assert len(next(a)['devices']) == 1 assert len(next(b)['devices']) == 2 + +def test_folder_edit(s): + a = next(folder1_info(s)) + s.folder_edit('stmantest1', 'label', 'SyncthingManagerTestFolder2') + b = next(folder1_info(s)) + assert a['label'] == 'SyncthingManagerTestFolder1' + assert b['label'] == 'SyncthingManagerTestFolder2' + +def test_folder_set_label(s): + a = next(folder1_info(s)) + s.folder_set_label('stmantest1', 'SyncthingManagerTestFolder2') + b = next(folder1_info(s)) + assert a['label'] == 'SyncthingManagerTestFolder1' + assert b['label'] == 'SyncthingManagerTestFolder2' + +def test_folder_set_rescan(s): + a = next(folder1_info(s)) + s.folder_set_rescan('stmantest1', 40) + b = next(folder1_info(s)) + assert a['rescanIntervalS'] == 60 + assert b['rescanIntervalS'] == 40 + +def test_folder_set_minfree(s): + a = next(folder1_info(s)) + s.folder_set_minfree('stmantest1', 5) + b = next(folder1_info(s)) + assert a['minDiskFreePct'] == 0 + assert b['minDiskFreePct'] == 5 + +def test_folder_set_type(s): + a = next(folder1_info(s)) + s.folder_set_type('stmantest1', 'readonly') + b = next(folder1_info(s)) + assert a['type'] == 'readwrite' + assert b['type'] == 'readonly' -- cgit v1.2.1