make Page a RequestHandler in its own right, move code from FilesystemMapper sites
authorTero Marttila <terom@fixme.fi>
Sat, 07 Feb 2009 17:07:06 +0200
branchsites
changeset 33 19ea04f4b0cd
parent 32 be954df4f0e8
child 34 09196d5b2a39
make Page a RequestHandler in its own right, move code from FilesystemMapper
lib/filesystem/map.py
lib/filesystem/page.py
--- a/lib/filesystem/map.py	Sat Feb 07 16:55:23 2009 +0200
+++ b/lib/filesystem/map.py	Sat Feb 07 17:07:06 2009 +0200
@@ -3,7 +3,7 @@
 
 from lib import http, template, map
 
-import page, page_tree, menu
+import page, page_tree
 
 class FilesystemMapper (map.Mapper) :
     """
@@ -113,20 +113,8 @@
         page_name = request.get_page_name()
 
         # get the page handler
-        p = self._lookup_page(page_name)
-
-        # bind to request
-        p.bind_request(request)
+        page = self._lookup_page(page_name)
+        
+        # pass on
+        return page.handle_request(request)
 
-        # render the template
-        response_data = template.render(self.template,
-            site_root_url   = request.get_script_dir(),
-            site_page_url   = request.get_page_prefix(),
-            page            = p,
-            menu            = menu.Menu(self, p),
-        )
-        
-        # return the response
-        return http.Response(response_data)
-
-
--- a/lib/filesystem/page.py	Sat Feb 07 16:55:23 2009 +0200
+++ b/lib/filesystem/page.py	Sat Feb 07 17:07:06 2009 +0200
@@ -7,7 +7,9 @@
 import os, os.path
 import time
 
-from lib import http, template, config
+from lib import http, handler, template, config
+
+import menu
 
 class PageError (http.ResponseError) :
     """
@@ -17,7 +19,7 @@
     pass
 
 # XXX: should inherit from PageInfo
-class Page (object) :
+class Page (handler.RequestHandler) :
     """
         This object represents the information about our attempt to render some specific page
     """
@@ -42,9 +44,6 @@
         self.url_tail = url_tail
         self.charset = charset
 
-        # unbound
-        self.request = None
-
         # sub-init
         self._init()
 
@@ -55,13 +54,6 @@
         
         pass
 
-    def bind_request (self, request) :
-        """
-            Bind this page-render to the given request
-        """
-
-        self.request = request
-
     @property
     def title (self) :
         """
@@ -100,6 +92,23 @@
         timestamp = os.stat(self.path).st_mtime
 
         return time.strftime(config.DATETIME_FMT, time.gmtime(timestamp))
+    
+    def handle_request (self, request) :
+        """
+            Renders the fs's layout template with this page + menu
+        """
+
+        # render the template
+        response_data = template.render(self.fs.template,
+            request         = request,
+            site_root_url   = request.get_script_dir(),
+            site_page_url   = request.get_page_prefix(),
+            page            = self,
+            menu            = menu.Menu(self.fs, self),
+        )
+        
+        # return the response
+        return http.Response(response_data)
 
 class HTMLPage (Page) :
     """
@@ -126,7 +135,6 @@
         """
 
         return template.TemplateLoader.render_file(self.path,
-            request     = self.request,
-            page_tree   = self.fs.tree
+            page_tree   = self.fs.tree,
         )