Module function receive only re.match.groups as arguments, not url
[kisspi.git] / index.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 import web
5 import kisspi
6 from utils import authenticated, templated
7
8 web.config.debug = False
9
10 urls = (
11         '/(.*)', 'index',
12         )
13
14 app = web.application(urls, globals())
15 session = web.session.Session(app, web.session.DiskStore('sessions'))
16
17 def internalerror():
18     render = web.template.render('templates')
19     body = render.error()
20     template = templated(title="ERROR")
21     body = template(body)
22     return web.internalerror(body)
23
24 #app.internalerror = internalerror
25
26 web.ses = session
27
28 modules = kisspi.load_modules()
29
30 class index:
31     '''
32     This is the default handler. All petitions goes trouth this
33     controller.
34     '''
35
36     def default(self, args, method="GET"):
37         '''
38         if url is like /methodname/arg1/arg2...
39             returns the method page
40         else
41             returns the default page
42         '''
43
44         #TODO pages goes inside a layaout, in body
45
46         args = args.split('/')
47         if args:
48             m = modules.get(args[0], None)
49             if m:
50                 #return m.body().GET()
51                 f, fargs = kisspi.parse_url(m, '/'.join(args[1:]))
52                 # adding kisspi to module class (sessions and others stuff)
53                 f.kisspi = kisspi
54                 function = getattr(f, method)
55                 if fargs:
56                     returned = function(*fargs)
57                 else:
58                     returned = function()
59                 return returned
60         return args
61     
62     def GET(self, args):
63         return self.default(args, method="GET")
64     def POST(self, args):
65         return self.default(args, method="POST")
66
67 if __name__ == '__main__':
68     app.run()