Skip to content Skip to sidebar Skip to footer

Python Recursive Function Missing Results

Coming from Python recursively appending list function Trying to recursively get a list of permissions associated with a file structure. I have this function: def get_child_perms(

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"