Spaces:
Running
on
Zero
Running
on
Zero
| import os | |
| from typing import List, Union, TypedDict, Literal | |
| from typing_extensions import TypeGuard | |
| class FileInfo(TypedDict): | |
| name: str | |
| path: str | |
| type: Literal["file"] | |
| size: int | |
| class DirectoryInfo(TypedDict): | |
| name: str | |
| path: str | |
| type: Literal["directory"] | |
| FileSystemItem = Union[FileInfo, DirectoryInfo] | |
| def is_file_info(item: FileSystemItem) -> TypeGuard[FileInfo]: | |
| return item["type"] == "file" | |
| class FileSystemOperations: | |
| def walk_directory(directory: str) -> List[FileSystemItem]: | |
| file_list: List[FileSystemItem] = [] | |
| for root, dirs, files in os.walk(directory): | |
| for name in files: | |
| file_path = os.path.join(root, name) | |
| relative_path = os.path.relpath(file_path, directory) | |
| file_list.append({ | |
| "name": name, | |
| "path": relative_path, | |
| "type": "file", | |
| "size": os.path.getsize(file_path) | |
| }) | |
| for name in dirs: | |
| dir_path = os.path.join(root, name) | |
| relative_path = os.path.relpath(dir_path, directory) | |
| file_list.append({ | |
| "name": name, | |
| "path": relative_path, | |
| "type": "directory" | |
| }) | |
| return file_list | |