move Index to urls; fix self.url(sort=...)
authorTero Marttila <terom@paivola.fi>
Wed, 10 Oct 2012 23:44:37 +0300
changeset 7 7baf4cccb4a9
parent 6 0f243c59d5d1
child 8 f64c44640b15
move Index to urls; fix self.url(sort=...)
pvl/verkko/urls.py
pvl/verkko/web.py
pvl/verkko/wsgi.py
--- a/pvl/verkko/urls.py	Wed Oct 10 23:36:23 2012 +0300
+++ b/pvl/verkko/urls.py	Wed Oct 10 23:44:37 2012 +0300
@@ -4,10 +4,23 @@
     return Rule(string, endpoint=endpoint, **opts)
 
 # URL -> Handler
-from pvl.verkko import web, hosts
+from pvl.verkko import hosts
+
+# index page here :)
+from pvl.verkko import web
+class Index (web.Handler) :
+    def render (self) :
+        html = web.html
+
+        return (
+            html.ul(
+                # TODO: self.url
+                html.a(href=self.url(hosts.IndexHandler))("DHCP Hosts"),
+            )
+        )
 
 urls = Map((
-    rule('/',                       web.Index),
+    rule('/',                       Index),
     rule('/hosts/',                 hosts.IndexHandler),
     rule('/hosts/<int:id>',         hosts.ItemHandler),
     rule('/hosts/<attr>/<value>',   hosts.ListHandler),
--- a/pvl/verkko/web.py	Wed Oct 10 23:36:23 2012 +0300
+++ b/pvl/verkko/web.py	Wed Oct 10 23:44:37 2012 +0300
@@ -1,5 +1,13 @@
 # encoding: utf-8
 
+def merge (*dicts) :
+    dict = {}
+
+    for d in dicts :
+        dict.update(d)
+
+    return dict
+
 # response types
 from werkzeug.wrappers import Response
 from werkzeug.exceptions import (
@@ -23,7 +31,7 @@
         "/static/style.css", 
     )
 
-    def __init__ (self, app, request, urls) :
+    def __init__ (self, app, request, urls, params) :
         """
             app     - wsgi.Application
             request - werkzeug.Request
@@ -34,6 +42,7 @@
         self.db = app.db
         self.request = request
         self.urlmap = urls
+        self.params = params
 
     def url (self, handler=None, **params) :
         """
@@ -41,7 +50,9 @@
         """
 
         if not handler :
+            # XXX: just generate a plain-relative '?foo=...' url instead?
             handler = self.__class__
+            params = merge(self.params, params)
 
         return self.urlmap.build(handler, params)
         
@@ -89,29 +100,18 @@
 
         pass
 
-    def respond (self, **params) :
+    def respond (self) :
         """
             Generate a response, or raise an HTTPException
 
             Does an HTML layout'd response per default.
-
-                **params    - url-mapped parameters
         """
         
         # XXX: returning e.g. redirect?
-        self.process(**params)
+        self.process(**self.params)
         
         # render as html per default
         text = unicode(html.document(self.render_html()))
 
         return Response(text, mimetype='text/html')
 
-class Index (Handler) :
-    def render (self) :
-        return (
-            html.ul(
-                # TODO: self.url
-                html.a(href='/hosts')("DHCP Hosts"),
-            )
-        )
-
--- a/pvl/verkko/wsgi.py	Wed Oct 10 23:36:23 2012 +0300
+++ b/pvl/verkko/wsgi.py	Wed Oct 10 23:44:37 2012 +0300
@@ -28,10 +28,10 @@
         handler, params = urls.match()
 
         # handler instance
-        handler = handler(self, request, urls)
+        handler = handler(self, request, urls, params)
 
         # apply
-        return handler.respond(**params)
+        return handler.respond()
 
     @Request.application
     def __call__ (self, request) :