site/request.py
changeset 2 ec68a0f75c58
child 3 84a149e35cbe
equal deleted inserted replaced
1:0a98cbe5e2eb 2:ec68a0f75c58
       
     1 
       
     2 import os.path
       
     3 
       
     4 def get_site_url (script_name) :
       
     5     """
       
     6         Get the URL that points to the site root (i.e. where style.css is) using the given value of SCRIPT_NAME
       
     7 
       
     8         /foo/bar/quux.py                -> /foo
       
     9         /~terom/qmsk.net/site/index.py  -> /~terom/qmsk.net
       
    10         None                            -> /
       
    11     """
       
    12     
       
    13     if script_name :
       
    14         return os.path.dirname(os.path.dirname(script_name))
       
    15     else :
       
    16         return "/"
       
    17 
       
    18 def get_page_path (path_info, default) :
       
    19     """
       
    20         Get the path of the page that was requested, or the given default is empty/invalid.
       
    21         The path will never begin with an /.
       
    22 
       
    23         /quux       -> quux
       
    24         /           -> <default>
       
    25         None        -> <default>
       
    26     """
       
    27     
       
    28     if path_info :
       
    29         # remove prefixed slashes
       
    30         path_info = path_info.lstrip('/')
       
    31 
       
    32     if path_info :
       
    33         return path_info
       
    34     else :
       
    35         return default
       
    36 
       
    37 
       
    38 class Request (object) :
       
    39     # The name of the site itself, this can be used to reference e.g. style.css
       
    40     site_url = None
       
    41 
       
    42     # The page root url, for links to pages
       
    43     page_root = None
       
    44 
       
    45     # The full path to the requested page
       
    46     page_path = None
       
    47     
       
    48     def __init__ (self, environ, default_page='main') :
       
    49         self.site_url = get_site_url(environ.get("SCRIPT_NAME"))
       
    50         self.page_root = environ.get("SCRIPT_NAME")
       
    51         self.page_path = get_page_path(environ.get("PATH_INFO"), default_page)
       
    52     
       
    53     def page_name_parts (self) :
       
    54         """
       
    55             Returns a list of page name components
       
    56         """
       
    57 
       
    58         return self.page_path.split('/')
       
    59 
       
    60     def page_name_prefixes (self) :
       
    61         """
       
    62             Iterate over the components of the page name, yielding (prefix, suffix) pairs
       
    63         """
       
    64         
       
    65         prefix = self.page_name_parts()
       
    66         suffix = []
       
    67 
       
    68         while prefix :
       
    69             yield ('/'.join(prefix), '/'.join(suffix))
       
    70 
       
    71             suffix.insert(0, prefix.pop(-1))
       
    72