Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
 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("/")]
Ejemplo n.º 9
0
    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("/")]
Ejemplo n.º 10
0
 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("", ""), "/")
Ejemplo n.º 11
0
 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("", ""), "/")
Ejemplo n.º 12
0
 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)