def getPage(self, url, headers=None, method="GET", body=None, protocol=None): """Open the url. Return status, headers, body.""" if self.script_name: url = http.urljoin(self.script_name, url) webtest.WebCase.getPage(self, url, headers, method, body, protocol)
def get_response(self): """Run self.request and return its response.""" meth = self.environ['REQUEST_METHOD'] path = _http.urljoin(self.environ.get('SCRIPT_NAME', ''), self.environ.get('PATH_INFO', '')) qs = self.environ.get('QUERY_STRING', '') rproto = self.environ.get('SERVER_PROTOCOL') headers = self.translate_headers(self.environ) rfile = self.environ['wsgi.input'] response = self.request.run(meth, path, qs, rproto, headers, rfile) return response.status, response.header_list, response.body
def __call__(self, environ, start_response): # If you're calling this, then you're probably setting SCRIPT_NAME # to '' (some WSGI servers always set SCRIPT_NAME to ''). # Try to look up the app using the full path. path = _http.urljoin(environ.get('SCRIPT_NAME', ''), environ.get('PATH_INFO', '')) sn = self.script_name(path or "/") if sn is None: start_response('404 Not Found', []) return [] app = self.apps[sn] # Correct the SCRIPT_NAME and PATH_INFO environ entries. environ = environ.copy() environ['SCRIPT_NAME'] = sn environ['PATH_INFO'] = path[len(sn.rstrip("/")):] return app(environ, start_response)
def vhost_dispatch(path_info): header = cherrypy.request.headers.get domain = header('Host', '') if use_x_forwarded_host: domain = header("X-Forwarded-Host", domain) prefix = domains.get(domain, "") if prefix: path_info = http.urljoin(prefix, path_info) result = next_dispatcher(path_info) # Touch up staticdir config. See http://www.cherrypy.org/ticket/614. section = cherrypy.request.config.get('tools.staticdir.section') if section: section = section[len(prefix):] cherrypy.request.config['tools.staticdir.section'] = section return result
def script_name(self, path=None): """The script_name of the app at the given path, or None. If path is None, cherrypy.request is used. """ if path is None: try: path = _http.urljoin(cherrypy.request.script_name, cherrypy.request.path_info) except AttributeError: return None while True: if path in self.apps: return path if path == "": return None # Move one node up the tree and try again. path = path[:path.rfind("/")]
def test_urljoin(self): # Test all slash+atom combinations for SCRIPT_NAME and PATH_INFO self.assertEqual(http.urljoin("/sn/", "/pi/"), "/sn/pi/") self.assertEqual(http.urljoin("/sn/", "/pi"), "/sn/pi") self.assertEqual(http.urljoin("/sn/", "/"), "/sn/") self.assertEqual(http.urljoin("/sn/", ""), "/sn/") self.assertEqual(http.urljoin("/sn", "/pi/"), "/sn/pi/") self.assertEqual(http.urljoin("/sn", "/pi"), "/sn/pi") self.assertEqual(http.urljoin("/sn", "/"), "/sn/") self.assertEqual(http.urljoin("/sn", ""), "/sn") self.assertEqual(http.urljoin("/", "/pi/"), "/pi/") self.assertEqual(http.urljoin("/", "/pi"), "/pi") self.assertEqual(http.urljoin("/", "/"), "/") self.assertEqual(http.urljoin("/", ""), "/") self.assertEqual(http.urljoin("", "/pi/"), "/pi/") self.assertEqual(http.urljoin("", "/pi"), "/pi") self.assertEqual(http.urljoin("", "/"), "/") self.assertEqual(http.urljoin("", ""), "/")
def getPage(self, url, headers=None, method="GET", body=None, protocol=None): """Open the url. Return status, headers, body.""" if self.script_name: url = http.urljoin(self.script_name, url) return webtest.WebCase.getPage(self, url, headers, method, body, protocol)