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

Method execute

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

Source from the content-addressed store, hash-verified

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