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

Function prepare_folder_tree

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

Source from the content-addressed store, hash-verified

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