Python Recursive Function Missing Results
Solution 1:
The basic issue occurs you are only returning the folder permission
, when folder does not have any children , when it has children, you are not including the folder.has_read_permission(request)
in your return result , which is most probably causing you issue. You need to do -
def get_child_perms(self, folder, request, perm_list):
# Folder contains other folders
if folder.get_children():
# For every sub-folder
return [folder.has_read_permission(request)] + [self.get_child_perms(subfolder, request, perm_list) for subfolder in folder.get_children()]
return [folder.has_read_permission(request)]
This should result in (not tested) -
[folderperm [subfolderperm [subsubfolderperm]]
Solution 2:
why not os.walk
When topdown is True, the caller can modify the dirnames list in-place (perhaps using del or slice assignment), and walk() will only recurse into the subdirectories whose names remain in dirnames; this can be used to prune the search, impose a specific order of visiting, or even to inform walk() about directories the caller creates or renames before it resumes walk() again. Modifying dirnames when topdown is False is ineffective, because in bottom-up mode the directories in dirnames are generated before dirpath itself is generated.
for example you can build generator (lazy list) that generates only non restricted directories
for (dirpath, dirnames, filenames) in os.walk("top_path"):
if restricted(dirpath):
del dirnames
continue
yield (dirpath,tuple(filenames))
Post a Comment for "Python Recursive Function Missing Results"