summaryrefslogtreecommitdiff
path: root/extension/examples/filesystem/virtual.py
diff options
context:
space:
mode:
Diffstat (limited to 'extension/examples/filesystem/virtual.py')
-rw-r--r--extension/examples/filesystem/virtual.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/extension/examples/filesystem/virtual.py b/extension/examples/filesystem/virtual.py
new file mode 100644
index 00000000..91a10e7d
--- /dev/null
+++ b/extension/examples/filesystem/virtual.py
@@ -0,0 +1,39 @@
+from typing import Dict, List
+from filesystem.filesystem import FileSystem
+
+
+class VirtualFileSystem(FileSystem):
+ """A simulated filesystem from a mapping of filepath to file contents."""
+ files: Dict[str, str]
+
+ def __init__(self, files: Dict[str, str]):
+ self.files = files
+
+ def read(self, path) -> str:
+ return self.files[path]
+
+ def readlines(self, path) -> List[str]:
+ return self.files[path].splitlines()
+
+ def write(self, path, content):
+ self.files[path] = content
+
+ def exists(self, path) -> bool:
+ return path in self.files
+
+ def rename_file(self, filepath: str, new_filepath: str):
+ self.files[new_filepath] = self.files[filepath]
+ del self.files[filepath]
+
+ def rename_directory(self, path: str, new_path: str):
+ for filepath in self.files:
+ if filepath.startswith(path):
+ new_filepath = new_path + filepath[len(path):]
+ self.files[new_filepath] = self.files[filepath]
+ del self.files[filepath]
+
+ def delete_file(self, filepath: str):
+ del self.files[filepath]
+
+ def add_directory(self, path: str):
+ pass