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

Function prepare_folder_tree

keepercommander/sync_down.py:1080–1136  ·  view source on GitHub ↗
(params)

Source from the content-addressed store, hash-verified

1078
1079
1080def prepare_folder_tree(params): # type: (KeeperParams) -> None
1081 params.folder_cache = {}
1082 params.root_folder = RootFolderNode()
1083
1084 for sf in params.subfolder_cache.values():
1085 data_unencrypted = sf.get('data_unencrypted') # type: Optional[bytes]
1086 folder_uid = None
1087 if sf['type'] == 'user_folder':
1088 folder_uid = sf['folder_uid']
1089 if sf.get('source') == 'nested_share_folder':
1090 uf = NestedShareFolderNode()
1091 else:
1092 uf = UserFolderNode()
1093 uf.uid = folder_uid
1094 uf.parent_uid = sf.get('parent_uid')
1095 if sf.get('name'):
1096 uf.name = sf['name']
1097 params.folder_cache[uf.uid] = uf
1098
1099 elif sf['type'] == 'shared_folder_folder':
1100 folder_uid = sf['folder_uid']
1101 sff = SharedFolderFolderNode()
1102 sff.uid = folder_uid
1103 sff.shared_folder_uid = sf['shared_folder_uid']
1104 sff.parent_uid = sf.get('parent_uid') or sff.shared_folder_uid
1105 params.folder_cache[sff.uid] = sff
1106
1107 elif sf['type'] == 'shared_folder':
1108 folder_uid = sf['shared_folder_uid']
1109 shf = SharedFolderNode()
1110 shf.uid = folder_uid
1111 shf.parent_uid = sf.get('folder_uid')
1112 folder = params.shared_folder_cache.get(shf.uid)
1113 if folder is not None:
1114 data_unencrypted = folder.get('data_unencrypted')
1115 shf.name = folder['name_unencrypted']
1116 params.folder_cache[shf.uid] = shf
1117
1118 if data_unencrypted and folder_uid:
1119 try:
1120 f = params.folder_cache.get(folder_uid) # type: Optional[BaseFolderNode]
1121 data = json.loads(data_unencrypted.decode())
1122 f.name = data.get('name') or f.name or f.uid
1123 f.color = data.get('color')
1124 except Exception as e:
1125 logging.debug('Error decrypting user folder name. Folder UID: %s. Error: %s', sf.uid, e)
1126
1127 for f in params.folder_cache.values():
1128 parent_folder = params.folder_cache.get(f.parent_uid) if f.parent_uid else params.root_folder
1129 if parent_folder:
1130 parent_folder.subfolders.append(f.uid)
1131 elif f.parent_uid and hasattr(params, 'nested_share_folders') and f.uid in params.nested_share_folders:
1132 # Nested Share Folder root-level folders have a parent UID pointing to the NSF vault root,
1133 # which is not a real vault folder. Clear parent_uid so that navigation
1134 # and ls treat them as direct children of the vault root.
1135 f.parent_uid = None
1136 params.root_folder.subfolders.append(f.uid)

Callers 1

_sync_down_implFunction · 0.85

Calls 7

RootFolderNodeClass · 0.85
UserFolderNodeClass · 0.85
SharedFolderNodeClass · 0.85
getMethod · 0.80
debugMethod · 0.45

Tested by

no test coverage detected