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

Method execute

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

Source from the content-addressed store, hash-verified

242 return ls_parser
243
244 def execute(self, params, **kwargs):
245 show_folders = kwargs.get('folders_only') is True
246 show_records = kwargs.get('records_only') is True
247 show_detail = kwargs['detail'] if 'detail' in kwargs else False
248 if not show_folders and not show_records:
249 show_folders = True
250 show_records = True
251 fmt = kwargs.get('format') or ''
252 if fmt in ('json', 'csv'):
253 show_detail = True
254
255 folder = params.folder_cache[params.current_folder] if params.current_folder in params.folder_cache else params.root_folder
256 pattern = kwargs['pattern'] if 'pattern' in kwargs else None
257 if pattern:
258 rs = try_resolve_path(params, kwargs['pattern'])
259 if rs is not None:
260 folder, pattern = rs
261
262 regex = None
263 if pattern:
264 regex = re.compile(fnmatch.translate(pattern), re.IGNORECASE).match
265
266 folders = [] # type: List[BaseFolderNode]
267 records = [] # type: List[vault.KeeperRecord]
268
269 recursive_search = kwargs.get('recursive')
270 folder_uid = folder.uid or ''
271 if show_folders:
272 sub_folder_uids = get_contained_folder_uids(params, folder_uid, not recursive_search)
273 for uid in sub_folder_uids:
274 f = params.folder_cache[uid]
275 if any(filter(lambda x: regex(x) is not None, FolderListCommand.folder_match_strings(f))) if regex is not None else True:
276 folders.append(f)
277
278 if show_records:
279 record_uids = set()
280 if params.record_cache and (folder_uid in params.subfolder_record_cache or recursive_search):
281 record_uids_by_folder = get_contained_record_uids(params, folder_uid, not recursive_search)
282 record_uids.update(rec for recs in record_uids_by_folder.values() for rec in recs)
283 record_uids.update(FolderListCommand._collect_nsf_record_uids(params, folder_uid, recursive_search))
284
285 for uid in record_uids:
286 r = FolderListCommand._load_record_for_ls(params, uid)
287 if not r:
288 continue
289 if regex and not regex(r.title):
290 continue
291 records.append(r)
292
293 if len(folders) == 0 and len(records) == 0:
294 if pattern:
295 raise CommandError('ls', '{0}: No such folder or record'.format(pattern))
296 else:
297 if show_detail:
298 # Helper function to get folder flags
299 def folder_flags(f):
300 if f.type == BaseFolderNode.SharedFolderType:
301 flags = 'S'

Callers 2

test_listMethod · 0.95

Calls 13

try_resolve_pathFunction · 0.85
dump_report_dataFunction · 0.85
getMethod · 0.80
folder_match_stringsMethod · 0.80
_load_record_for_lsMethod · 0.80
formatMethod · 0.80
_record_sourceMethod · 0.80
CommandErrorClass · 0.70
updateMethod · 0.45

Tested by 2

test_listMethod · 0.76