Return list of folders (empty if component not present) containing component within parent folder 'folder
(params, folders, component)
| 85 | |
| 86 | |
| 87 | def contained_folders(params, folders, component): |
| 88 | # type: (KeeperParams, List[Optional[BaseFolderNode]], str) -> List[Optional[BaseFolderNode]] |
| 89 | """Return list of folders (empty if component not present) containing component within parent folder 'folder'""" |
| 90 | get_folder_by_id = lambda uid: params.folder_cache.get(uid) |
| 91 | get_folder_ids = lambda: params.folder_cache.keys() |
| 92 | |
| 93 | if component in ('.', ''): |
| 94 | result = folders |
| 95 | elif component == '..': |
| 96 | # Handle parent navigation, accounting for Nested Share Folders with invalid parent_uid |
| 97 | result = [] |
| 98 | for f in folders: |
| 99 | if f.parent_uid: |
| 100 | parent = get_folder_by_id(f.parent_uid) |
| 101 | result.append(parent if parent else params.root_folder) |
| 102 | else: |
| 103 | result.append(params.root_folder) |
| 104 | elif component in get_folder_ids(): |
| 105 | result = [get_folder_by_id(component)] |
| 106 | else: |
| 107 | result = [get_folder_by_id(uid) for f in folders for uid in f.subfolders if get_folder_by_id(uid).name == component] |
| 108 | |
| 109 | return result |
| 110 | |
| 111 | |
| 112 | def lookup_path(params, folder, components): |