MCPcopy Create free account
hub / github.com/Keeper-Security/Commander / execute

Method execute

keepercommander/commands/folder.py:668–756  ·  view source on GitHub ↗
(self, params, **kwargs)

Source from the content-addressed store, hash-verified

666 return rmdir_parser
667
668 def execute(self, params, **kwargs):
669 from ..enforcement import MasterPasswordReentryEnforcer
670 if not MasterPasswordReentryEnforcer.check_and_enforce(params, "record_level"):
671 raise CommandError('rmdir', 'Operation cancelled: Re-authentication failed')
672
673 folder = params.folder_cache.get(params.current_folder, params.root_folder)
674 folders = []
675 pattern_list = kwargs.get('pattern', [])
676 for pattern in pattern_list:
677 rs = try_resolve_path(params, pattern)
678 if rs is None:
679 regex_pattern = pattern
680 else:
681 folder, regex_pattern = rs
682 if regex_pattern == '':
683 folders.append(folder)
684 continue
685
686 regex = re.compile(fnmatch.translate(regex_pattern)).match
687 subfolders = []
688 for uid in folder.subfolders:
689 f = params.folder_cache[uid]
690 if any(filter(lambda x: regex(x) is not None, FolderListCommand.folder_match_strings(f))):
691 subfolders.append(f)
692 if len(subfolders) == 0:
693 logging.warning(f'Folder "{pattern}" was not found.')
694 else:
695 folders.extend(subfolders)
696
697 if len(folders) == 0:
698 raise CommandError('rmdir', 'Enter name of an existing folder.')
699
700 force = kwargs['force'] if 'force' in kwargs else None
701 quiet = kwargs['quiet'] if 'quiet' in kwargs else None
702 user_folder_objects = OrderedDict()
703 search_user_folder_ids = set()
704 shared_subfolder_delete_rq_added = False
705 for folder in folders:
706 if folder.uid not in user_folder_objects:
707 shared_subfolder_delete_rq_added = get_shared_subfolder_delete_rq(
708 params, folder, search_user_folder_ids
709 )
710 del_obj = {
711 'delete_resolution': 'unlink',
712 'object_uid': folder.uid,
713 'object_type': folder.type
714 }
715 parent = params.folder_cache.get(folder.parent_uid)
716 if parent is None:
717 del_obj['from_type'] = 'user_folder'
718 else:
719 del_obj['from_uid'] = parent.uid
720 del_obj['from_type'] = parent.type
721 if parent.type == BaseFolderNode.SharedFolderType:
722 del_obj['from_type'] = 'shared_folder_folder'
723
724 user_folder_objects[folder.uid] = del_obj
725

Callers 3

test_delete_foldersMethod · 0.95
wipe_out_dataMethod · 0.95

Calls 9

try_resolve_pathFunction · 0.85
user_choiceFunction · 0.85
check_and_enforceMethod · 0.80
getMethod · 0.80
folder_match_stringsMethod · 0.80
warningMethod · 0.80
CommandErrorClass · 0.70
get_folder_pathFunction · 0.70

Tested by 3

test_delete_foldersMethod · 0.76
wipe_out_dataMethod · 0.76