diff -r 9ed4c7d2bdd2 -r 5565d94da522 lib/request.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/request.py Fri Feb 06 20:49:29 2009 +0200 @@ -0,0 +1,73 @@ + +import os.path + +def get_site_url (script_name) : + """ + Get the URL that points to the site root (i.e. where style.css is) using the given value of SCRIPT_NAME + + /foo/bar/quux.py -> /foo + /~terom/qmsk.net/site/index.py -> /~terom/qmsk.net + / -> "" + None -> "" + """ + + if script_name : + return os.path.dirname(os.path.dirname(script_name)).rstrip("/") + else : + return "" + +def get_page_path (path_info, default) : + """ + Get the path of the page that was requested, or the given default is empty/invalid. + The path will never begin with an /. + + /quux -> quux + / -> + None -> + """ + + if path_info : + # remove prefixed slashes + path_info = path_info.lstrip('/') + + if path_info : + return path_info + else : + return default + + +class Request (object) : + # The name of the site itself, this can be used to reference e.g. style.css + site_url = None + + # The page root url, for links to pages + page_root = None + + # The full path to the requested page + page_path = None + + def __init__ (self, environ, default_page='main') : + self.site_url = get_site_url(environ.get("SCRIPT_NAME")) + self.page_root = environ.get("SCRIPT_NAME") + self.page_path = get_page_path(environ.get("PATH_INFO"), default_page) + + def page_name_parts (self) : + """ + Returns a list of page name components + """ + + return self.page_path.split('/') + + def page_name_prefixes (self) : + """ + Iterate over the components of the page name, yielding (prefix, suffix) pairs + """ + + prefix = self.page_name_parts() + suffix = [] + + while prefix : + yield ('/'.join(prefix), '/'.join(suffix)) + + suffix.insert(0, prefix.pop(-1)) +