コード例 #1
0
ファイル: test_uri.py プロジェクト: geertj/draco2
 def test_resolve_path_uri(self):
     uri = '/dir/subdir/template.dsp/path/info'
     parts = urimod.resolve_path_uri(uri, self.docroot)
     assert parts == ('', 'dir', 'subdir/template.dsp/path/info')
     self.create_reldir('dir')
     parts = urimod.resolve_path_uri(uri, self.docroot)
     assert parts == ('dir', 'subdir', 'template.dsp/path/info')
     self.create_reldir('dir/subdir')
     parts = urimod.resolve_path_uri(uri, self.docroot)
     assert parts == ('dir/subdir', 'template.dsp', 'path/info')
     uri = '/dir//subdir//template.dsp//path//info/'
     parts = urimod.resolve_path_uri(uri, self.docroot)
     assert parts == ('dir/subdir', 'template.dsp', 'path/info')
     uri = '/dir/./subdir/template.dsp/path/info'
     py.test.raises(urimod.ResolutionError, urimod.resolve_path_uri,
                    uri, self.docroot)
     uri = '/dir/../subdir/template.dsp/path/info'
     py.test.raises(urimod.ResolutionError, urimod.resolve_path_uri,
                    uri, self.docroot)
     uri = '/dir/subdir/template.dsp/path/./info'
     parts = urimod.resolve_path_uri(uri, self.docroot)
     assert parts == ('dir/subdir', 'template.dsp', 'path/./info')
     uri = '/dir/subdir/template.dsp/path/../info'
     parts = urimod.resolve_path_uri(uri, self.docroot)
     assert parts == ('dir/subdir', 'template.dsp', 'path/../info')
     uri = '/dir/subdir/template.dsp/path/info'
     nonex = '%snon_existant_directory_%d' % (os.sep, os.getpid())
     py.test.raises(urimod.ResolutionError, urimod.resolve_path_uri,
                    uri, nonex)
     uri = '/dir/subdir'
     parts = urimod.resolve_path_uri(uri, self.docroot)
     assert parts == ('dir/subdir', '', '')
     uri = '/dir/subdir/'
     parts = urimod.resolve_path_uri(uri, self.docroot)
     assert parts == ('dir/subdir', '', '')
コード例 #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:]