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

Function walk

keepercommander/commands/folder.py:2383–2474  ·  view source on GitHub ↗
(node)

Source from the content-addressed store, hash-verified

2381 visited = set()
2382
2383 def walk(node):
2384 if isinstance(node, Record):
2385 ruid = node.record_uid
2386 if ruid in nsf_records:
2387 nsf_record_uids.add(ruid)
2388 else:
2389 classic_record_uids.add(ruid)
2390 return
2391
2392 node_uid = node.uid if hasattr(node, 'uid') else ''
2393 walk_key = node_uid or id(node)
2394 if walk_key in visited:
2395 return
2396 visited.add(walk_key)
2397
2398 is_nsf = (
2399 (hasattr(node, 'type') and node.type == 'nested_share_folder')
2400 or (node_uid and node_uid in nsf_folders)
2401 )
2402 if is_nsf and node_uid:
2403 nsf_folder_uids.add(node_uid)
2404
2405 dir_nodes = []
2406 if hasattr(node, 'subfolders'):
2407 dir_nodes = [params.folder_cache.get(fuid) for fuid in node.subfolders if params.folder_cache.get(fuid)]
2408
2409 is_root = (isinstance(node, BaseFolderNode) and (node.type == '/' or node_uid == '')) or (
2410 hasattr(node, 'type') and node.type == 'nested_share_folder' and not node_uid)
2411
2412 if is_root and nsf_folders:
2413 for nsf_uid, nsf_folder in nsf_folders.items():
2414 parent_uid = nsf_folder.get('parent_uid')
2415 is_root_folder = (
2416 parent_uid is None or parent_uid == '' or parent_uid == 'root'
2417 or parent_uid == 'AAAAAAAAAAAAAAAAAPmtNA'
2418 or (parent_uid and parent_uid not in nsf_folders)
2419 )
2420 if not is_root_folder:
2421 continue
2422 nsf_folder_uids.add(nsf_uid)
2423 if nsf_uid in params.folder_cache:
2424 dir_nodes.append(params.folder_cache.get(nsf_uid))
2425 else:
2426 dir_nodes.append(type('FolderNode', (), {
2427 'uid': nsf_uid, 'name': nsf_folder.get('name', ''),
2428 'type': 'nested_share_folder', 'subfolders': []
2429 })())
2430 elif node_uid and nsf_folders:
2431 for child_uid, child_folder in nsf_folders.items():
2432 if child_folder.get('parent_uid', '') == node_uid:
2433 nsf_folder_uids.add(child_uid)
2434 if child_uid in params.folder_cache:
2435 dir_nodes.append(params.folder_cache.get(child_uid))
2436 else:
2437 dir_nodes.append(type('FolderNode', (), {
2438 'uid': child_uid, 'name': child_folder.get('name', ''),
2439 'type': 'nested_share_folder', 'subfolders': []
2440 })())

Calls 4

getMethod · 0.80
addMethod · 0.45
updateMethod · 0.45