Layaout first version finished with conffile.
authordanigm <dani@danigm.net>
Fri, 17 Apr 2009 19:05:46 +0000 (21:05 +0200)
committerdanigm <dani@danigm.net>
Fri, 17 Apr 2009 19:05:46 +0000 (21:05 +0200)
Notfound page.
New module testmod that show the url.

index.py
kisspi.py
modules/modconf [new file with mode: 0644]
modules/testmod/__init__.py [new file with mode: 0644]
modules/testmod/testmod.py [new file with mode: 0644]
static/themes/default/css/style.css

index a534b5a..0109683 100644 (file)
--- a/index.py
+++ b/index.py
@@ -20,8 +20,16 @@ def internalerror():
     template = templated(title="ERROR")
     body = template(body)
     return web.internalerror(body)
-
 #app.internalerror = internalerror
+def notfound():
+    msg = '''
+    <h1> 404 </h1>
+    Sorry, the page you were looking for was not found.
+    '''
+    return web.notfound(kisspi.template(title="404 NOT FOUND",
+        body=msg))
+app.notfound = notfound
+
 
 web.ses = session
 
@@ -50,15 +58,20 @@ class index:
                 #return m.body().GET()
                 f, fargs = kisspi.parse_url(m, '/'.join(args[1:]))
                 # adding kisspi to module class (sessions and others stuff)
+                if not f:
+                    raise web.notfound()
+
                 f.kisspi = kisspi
                 function = getattr(f, method)
                 if fargs:
                     returned = function(*fargs)
                 else:
                     returned = function()
-                return kisspi.template(title="test", body=returned)
+                return kisspi.template(title="test", body=returned,
+                        path='/'.join(args), method=method)
 
-        return kisspi.template(title="test", body=str(args))
+        return kisspi.template(title="test", body=str(args),
+                path='/'.join(args), method=method)
     
     def GET(self, args):
         return self.default(args, method="GET")
index 95ef1c5..5aac9e9 100644 (file)
--- a/kisspi.py
+++ b/kisspi.py
@@ -13,13 +13,14 @@ def load_modules(path='modules'):
     global MODULES
     sys.path += [path]
     modules = os.listdir(path)
-    MODULES = dict([(i, __import__(i)) for i in modules])
+    MODULES = dict([(i, __import__(i)) for i in modules if\
+        os.path.isdir(os.path.join(os.path.abspath('modules'), i))])
 
     return MODULES
 
 def parse_url(module, path):
     for url, function in module.urls:
-        match = re.match(url, path)
+        match = re.match(url+'$', path)
         if match:
             return function(), match.groups()
     return None, None
@@ -36,15 +37,22 @@ def redirect(path):
 def get_render():
     return web.template.render('static/themes/'+THEME+'/templates')
 
-def template(title, body=''):
+def template(title, body='', path='', method='GET'):
     # TODO check conffile and put in head, pre_body, etc the assigned
     # module
     head, pre_body, post_body, left, foot = 'head', 'pre-body', 'post-body', 'left', 'foot'
+    default_modules = modconf()
+
+    head = parse_layaout(default_modules['head'], path, method)
+    pre_body = parse_layaout(default_modules['pre_body'], path, method)
+    post_body = parse_layaout(default_modules['post_body'], path, method)
+    left = parse_layaout(default_modules['left'], path, method)
+    foot = parse_layaout(default_modules['foot'], path, method)
+
     render = get_render()
     e = utils.get_err()
     m = utils.get_msg()
 
-    import os
     globals = {'listdir': os.listdir}
     render = web.template.render('static/themes/'+THEME+'/templates',
             globals=globals)
@@ -52,4 +60,36 @@ def template(title, body=''):
     return render.master(title, head, pre_body, body, post_body, left,
             foot, errors=e, msgs=m)
 
+def parse_layaout(args, real_path, method):
+    to_ret = ''
+    for modpath, real_path_expr in args:
+        match = re.match(real_path_expr+'$', real_path)
+        if match:
+            mod_name = modpath.split('/')[0]
+            path = '/'.join(modpath.split('/')[1:])
+            mod = MODULES[mod_name]
+            f, fargs = parse_url(mod, path)
+            function = getattr(f, method)
+            to_ret += function(*fargs)
+    return to_ret
+
+def modconf(file='modules/modconf'):
+    # TODO cache that
+    lines = open(file).readlines()
+    default_modules = {'head': [], 'pre_body': [], 'post_body': [],
+            'foot': [], 'left': []}
+
+    for line in lines:
+        if line.strip().startswith('#'):
+            continue
+        
+        try:
+            layaout, module, path = line.split()
+        except ValueError:
+            # blank line
+            continue
+
+        default_modules[layaout].append((module, path))
 
+    return default_modules
+        
diff --git a/modules/modconf b/modules/modconf
new file mode 100644 (file)
index 0000000..55cd9a1
--- /dev/null
@@ -0,0 +1,8 @@
+#layaout module paths
+
+head testmod/head .*
+pre_body testmod/prebody .*
+post_body testmod/postbody .*
+left testmod/left .*
+foot testmod/foot .* 
+head testmod/head2 hello
diff --git a/modules/testmod/__init__.py b/modules/testmod/__init__.py
new file mode 100644 (file)
index 0000000..587757b
--- /dev/null
@@ -0,0 +1,9 @@
+import testmod
+
+urls = (
+        ('(.*)', testmod.Test),
+        )
+
+admin = None
+add = None
+body = testmod.Test
diff --git a/modules/testmod/testmod.py b/modules/testmod/testmod.py
new file mode 100644 (file)
index 0000000..6fb7625
--- /dev/null
@@ -0,0 +1,5 @@
+class Test:
+    kisspi = None
+    def GET(self, arg):
+        return '<div style="border: 1px dashed gray; background-color: #ffe371; padding: 3px;">%s</div>' % arg
+
index 8758343..75a86b7 100644 (file)
@@ -14,10 +14,14 @@ textarea{ width: 100% }
     background-color: white;
     margin: 0 auto 1em auto;
     border: 2px solid green;
+    padding: 2em;
 }
 
-#left, #header, #foot, #main {
-    padding: 2em;
+#left, #header, #foot, #body, #pre-body, #post-body {
+}
+
+div {
+    margin-top: 1em;
 }
 
 #main {