--- a/sites/www.qmsk.net/lookup.py Sun Feb 08 03:13:11 2009 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,120 +0,0 @@
-
-import os, os.path
-
-from lib import http, template, map
-
-import page, page_tree
-
-class PageMapper (map.Mapper) :
- """
- Translates requests to handlers based on a filesystem directory containing various kinds of files
- """
-
- # list of page handlers, by type
- PAGE_TYPES = [
- ('html', page.HTMLPage ),
- (template.TEMPLATE_EXT, page.TemplatePage ),
- ]
-
- def __init__ (self, path, template) :
- """
- Create, path is where the pages are stored. The list of pages is loaded from $path/list
- """
-
- # store
- self.path = path
- self.template = template
-
- # load the page tree
- self.tree = page_tree.PageTree(path + '/list')
-
- def _lookup_page_type (self, url, path, filename, basename, extension, tail) :
- """
- We found the file that we looked for, now get the correct type
- """
-
- # find appropriate handler
- for handler_ext, type in self.PAGE_TYPES :
- # match against file extension?
- if handler_ext == extension :
- # found handler, return instance
- return type(self, url, path, basename, tail)
-
- # no handler found
- raise PageError("No handler found for page %r of type %r" % (url, extension))
-
- def _lookup_page (self, name) :
- """
- Look up and return a Page object for the given page, or raise an error
- """
-
- # inital path
- path = self.path
- url_segments = []
-
- # name segments
- segments = name.split('/')
-
- # iterate through the parts of the page segments
- while True :
- segment = None
-
- # pop segment
- if segments :
- segment = segments.pop(0)
-
- url_segments.append(segment)
-
- # translate empty -> index
- if not segment :
- segment = 'index'
-
- # look for it in the dir
- for filename in os.listdir(path) :
- # build full file path
- file_path = os.path.join(path, filename)
-
- # stat, recurse into subdirectory?
- if os.path.isdir(file_path) and filename == segment :
- # use new dir
- path = file_path
-
- # break for-loop to look at next segment
- break
-
- # split into basename + extension
- basename, extension = os.path.splitext(filename)
-
- # ...remove that dot
- extension = extension.lstrip('.')
-
- # match against requested page name?
- if basename == segment :
- # found the file we wanted
- return self._lookup_page_type('/'.join(url_segments), file_path, filename, basename, extension, '/'.join(segments))
-
- else :
- # inspect next file in dir
- continue
-
- else :
- # did not find any dir or file, break out of while loop
- break
-
- # did not find the filename we were looking for in os.listdir
- raise map.MapperError(name)
-
- def handle_request (self, request) :
- """
- Looks up the appropriate Page, and then renders it
- """
-
- # determine the page name
- page_name = request.get_page_name()
-
- # get the page handler
- page = self._lookup_page(page_name)
-
- # pass on
- return page.handle_request(request)
-