Add DictFS, for when the filesystem tree is known in advance
authorEvan Broder <broder@mit.edu>
Tue, 12 Aug 2008 06:09:08 +0000 (23:09 -0700)
committerEvan Broder <broder@mit.edu>
Tue, 12 Aug 2008 06:09:08 +0000 (23:09 -0700)
routefs/dictfs.py [new file with mode: 0755]

diff --git a/routefs/dictfs.py b/routefs/dictfs.py
new file mode 100755 (executable)
index 0000000..a0d302c
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/python
+
+"""
+DictFS allows you to easily create read-only filesystems when the
+file tree is known in advance.
+
+To create your own DictFS descendent, simply override the files
+property, which can be created either using the property
+decorator, or just a simple assignment.
+
+A dictionary represents a directory, with keys corresponding to
+file names and the values corresponding to the file contents.
+"""
+
+import routefs
+from routes import Mapper
+import os
+
+class DictFS(routefs.RouteFS):
+    @property
+    def files(self):
+        """
+        This property should be overridden in your DictFS descendant
+        """
+        return dict(Hello='World',
+                    Directory=dict(a='a', b='b', c=routefs.Symlink('a')))
+    
+    def make_map(self):
+        m = Mapper()
+        
+        m.connect('*path', controller='handler')
+        
+        return m
+    
+    def handler(self, path, **kwargs):
+        if path != '':
+            elements = path.split(os.path.sep)
+        else:
+            elements = []
+        
+        try:
+            tree = self.files
+            for elt in elements:
+                tree = tree[elt]
+        except KeyError:
+            return
+        
+        if type(tree) is dict:
+            return routefs.Directory(tree.keys())
+        else:
+            return tree
+
+if __name__ == '__main__':
+    routefs.main(DictFS)