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

Method execute

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

Source from the content-addressed store, hash-verified

692 return rmdir_parser
693
694 def execute(self, params, **kwargs):
695 from ..enforcement import MasterPasswordReentryEnforcer
696 if not MasterPasswordReentryEnforcer.check_and_enforce(params, "record_level"):
697 raise CommandError('rmdir', 'Operation cancelled: Re-authentication failed')
698
699 folder = params.folder_cache.get(params.current_folder, params.root_folder)
700 folders = []
701 pattern_list = kwargs.get('pattern', [])
702 for pattern in pattern_list:
703 rs = try_resolve_path(params, pattern)
704 if rs is None:
705 regex_pattern = pattern
706 else:
707 folder, regex_pattern = rs
708 if regex_pattern == '':
709 folders.append(folder)
710 continue
711
712 regex = re.compile(fnmatch.translate(regex_pattern)).match
713 subfolders = []
714 for uid in folder.subfolders:
715 f = params.folder_cache[uid]
716 if any(filter(lambda x: regex(x) is not None, FolderListCommand.folder_match_strings(f))):
717 subfolders.append(f)
718 if len(subfolders) == 0:
719 logging.warning(f'Folder "{pattern}" was not found.')
720 else:
721 folders.extend(subfolders)
722
723 if len(folders) == 0:
724 raise CommandError('rmdir', 'Enter name of an existing folder.')
725
726 force = kwargs['force'] if 'force' in kwargs else None
727 quiet = kwargs['quiet'] if 'quiet' in kwargs else None
728 user_folder_objects = OrderedDict()
729 search_user_folder_ids = set()
730 shared_subfolder_delete_rq_added = False
731 for folder in folders:
732 if folder.uid not in user_folder_objects:
733 shared_subfolder_delete_rq_added = get_shared_subfolder_delete_rq(
734 params, folder, search_user_folder_ids
735 )
736 del_obj = {
737 'delete_resolution': 'unlink',
738 'object_uid': folder.uid,
739 'object_type': folder.type
740 }
741 parent = params.folder_cache.get(folder.parent_uid)
742 if parent is None:
743 del_obj['from_type'] = 'user_folder'
744 else:
745 del_obj['from_uid'] = parent.uid
746 del_obj['from_type'] = parent.type
747 if parent.type == BaseFolderNode.SharedFolderType:
748 del_obj['from_type'] = 'shared_folder_folder'
749
750 user_folder_objects[folder.uid] = del_obj
751

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