def chmod(location, flags, recurse=False): """ Update permissions for `location` with with `flags`. `flags` is one of R, RW, RX or RWX with the same semantics as in the chmod command. Update is done recursively if `recurse`. """ if not location or not os.path.exists(location): return if on_linux and py2: location = fsencode(location) location = os.path.abspath(location) new_flags = flags if filetype.is_dir(location): # POSIX dirs need to be executable to be readable, # and to be writable so we can change perms of files inside new_flags = RWX # FIXME: do we really need to change the parent directory perms? # FIXME: may just check them instead? parent = os.path.dirname(location) current_stat = stat.S_IMODE(os.stat(parent).st_mode) if not is_rwx(parent): os.chmod(parent, current_stat | RWX) if filetype.is_regular(location): current_stat = stat.S_IMODE(os.stat(location).st_mode) os.chmod(location, current_stat | new_flags) if recurse: chmod_tree(location, flags)
def chmod(location, flags, recurse=False): """ Update permissions for `location` with with `flags`. `flags` is one of R, RW, RX or RWX with the same semantics as in the chmod command. Update is done recursively if `recurse`. """ if not location or not os.path.exists(location): return location = os.path.abspath(location) new_flags = flags if filetype.is_dir(location): # POSIX dirs need to be executable to be readable, # and to be writable so we can change perms of files inside new_flags = RWX # FIXME: do we really need to change the parent directory perms? # FIXME: may just check them instead? parent = os.path.dirname(location) current_stat = stat.S_IMODE(os.stat(parent).st_mode) if not is_rwx(parent): os.chmod(parent, current_stat | RWX) if filetype.is_regular(location): current_stat = stat.S_IMODE(os.stat(location).st_mode) os.chmod(location, current_stat | new_flags) if recurse: chmod_tree(location, flags)