def traverse_for_mtime(directory, seen_already, directory_to_skip = None, relative_directory = None): directory = os.path.realpath(directory) for entry in os.listdir(directory): if entry.startswith('.'): continue entry_src = os.path.join(directory, entry) if os.path.isdir(entry_src): if not directory_to_skip == None and (entry == directory_to_skip or entry.endswith("{0}{1}".format(os.path.sep, directory_to_skip))): continue seen_already = traverse_for_mtime(entry_src, seen_already, directory_to_skip, relative_directory) else: f = File(entry, entry_src, os.stat(entry_src).st_mtime) if relative_directory == None: seen_already[entry] = f else: relative_path = f.relative_path(relative_directory) seen_already[relative_path] = f return seen_already