Update HomeFS example to include controllers list
[invirt/packages/python-routefs.git] / routefs / examples / homefs.py
1 #!/usr/bin/python
2 """
3 RouteFS Example: HomeFS
4
5 If you work on a system where home directories are on network storage
6 (i.e. not in /home), mount HomeFS on /home. It's an automounter that
7 will automatically create symlinks from user -> their homedir whenever
8 /home/user is accessed in any way.
9 """
10
11 import pwd
12 import routefs
13 from routes import Mapper
14
15 class HomeFS(routefs.RouteFS):
16     controllers = ['getList', 'getUser']
17     def __init__(self, *args, **kwargs):
18         super(HomeFS, self).__init__(*args, **kwargs)
19         self.cache = {}
20     
21     def make_map(self):
22         m = Mapper()
23         m.connect('', controller='getList')
24         m.connect(':action', controller='getUser')
25         return m
26     
27     def getUser(self, action, **kwargs):
28         try:
29             if action not in self.cache:
30                 self.cache[action] = pwd.getpwnam(action).pw_dir
31             return routefs.Symlink(self.cache[action])
32         except KeyError:
33             return
34     
35     def getList(self, **kwargs):
36         return self.cache.keys()
37
38 if __name__ == '__main__':
39     routefs.main(HomeFS)