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', '', '')
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
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)
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:]