コード例 #1
0
ファイル: response.py プロジェクト: geertj/draco2
 def rewrite_uri(self, uri, force_rewrite=False):
     """Pass on extended Draco URI components."""
     if callable(uri):
         extension = self.m_api.options['extension']
         uri = dracouri.uri_from_method(uri, extension)
     scheme, host, path, query = urimod.parse_uri(uri)
     if scheme and scheme != 'http':
         return uri
     docroot = self.m_request.docroot()
     extension = self.m_api.options['extension']
     servername = self.m_request.servername()
     parts = dracouri.parse_draco_uri(uri, docroot)
     if not force_rewrite and (parts[1] and parts[1] != servername) \
                 or not parts[3].endswith('.' + extension):
         return uri
     locale = self.m_request.locale()
     if hasattr(self.m_api, 'session'):
         sessionid = self.m_api.session.sessionid()
     else:
         sessionid = None
     if sessionid:
         sessionid = list(sessionid)
         # subsession if not default
         if self.m_rewrite_link_level == 0:
             sessionid[0] = None
             if sessionid[1] == 0:
                 sessionid[1] = None
         # subsession unconditionally
         elif self.m_rewrite_link_level == 1:
             sessionid[0] = None
         session = dump_sessionid(sessionid)
     else:
         session = None
     uri = self.paste_uri(uri, locale=locale, session=session)
     return uri
コード例 #2
0
ファイル: handler.py プロジェクト: geertj/draco2
 def _create(cls, api):
     """Factory function."""
     uri = api.iface.uri()
     docroot = api.options['documentroot']
     scheme, host, path, args = urilib.parse_uri(uri)
     directory, filename, pathinfo = urilib.resolve_path_uri(path, docroot)
     dirname = directory.replace('/', os.sep)
     relname = os.path.join(dirname, '__handler__.py')
     cls = api.loader.load_class(relname, Handler,
                                 scope='__docroot__', default=cls)
     handler = cls()
     return handler
コード例 #3
0
ファイル: uri.py プロジェクト: geertj/draco2
def parse_draco_uri(uri, docroot):
    """Decompose an URI into Draco specific components.

    The return value is the 8-tuple: (protocol, host, path,
        filename, locale, session, pathinfo, args)
    """
    protocol, host, path, args = urimod.parse_uri(uri)
    directory, filename, pathinfo = urimod.resolve_path_uri(path, docroot) 
    parts = pathinfo.split('/')
    if parts and islocale(parts[0]):
        locale = parts[0]
        parts = parts[1:]
    else:
        locale = ''
    if parts and issessionid(parts[0]):
        session = parts[0]
        parts = parts[1:]
    else:
        session = ''
    pathinfo = '/'.join(parts)
    return (protocol, host, directory, filename, locale, session,
            pathinfo, args)
コード例 #4
0
ファイル: request.py プロジェクト: geertj/draco2
 def _parse_uri(self):
     """Parse the request URI."""
     uri = self.m_iface.uri()
     docroot = self.m_iface.options()['documentroot']
     protocol, host, path, args = urilib.parse_uri(uri)
     directory, filename, pathinfo = urilib.resolve_path_uri(path, docroot)
     self.m_docroot = docroot
     self.m_directory = directory
     self.m_filename = filename
     self.m_pathinfo = [ pi for pi in pathinfo.split('/') if pi ]
     self.m_args = {}
     args = urilib.parse_query(args)
     self._add_args(args)
     if self.m_iface.method() == 'POST':
         ctype = self.header('content-type')
         if ctype is not None:
             value, options = http.parse_header_options(ctype)
             if value in ('application/x-www-form-urlencoded',
                          'multipart/form-data'):
                 args = http.parse_post(self.headers(), self)
                 self._add_args(args)
     self.m_basename, self.m_extension = os.path.splitext(self.filename())
     self.m_extension = self.m_extension[1:]
コード例 #5
0
ファイル: test_uri.py プロジェクト: geertj/draco2
 def test_parse_uri(self):
     for uri,parts in self.data:
         assert urimod.parse_uri(uri) == parts