Changeset 8:32111cd994e9

Show
Ignore:
Timestamp:
04/16/05 02:45:05 (3 years ago)
Author:
Allan Saddi <allan@saddi.com>
branch:
default
convert_revision:
svn:46762da8-4eb7-0310-94e9-d918b60927c8/flup/trunk@1764
Message:

mod_scgi doesn't pass in PATH_INFO. Deduce from SCRIPT_NAME.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • flup/server/scgi_base.py

    r2 r8  
    268268    requestClass = Request 
    269269 
    270     def __init__(self, application, environ=None, 
     270    def __init__(self, application, scriptName='', environ=None, 
    271271                 multithreaded=True, 
    272272                 bindAddress=('localhost', 4000), allowedServers=None, 
    273273                 loggingLevel=logging.INFO): 
    274274        """ 
     275        scriptName is the initial portion of the URL path that "belongs" 
     276        to your application. It is used to determine PATH_INFO (which doesn't 
     277        seem to be passed in). An empty scriptName means your application 
     278        is mounted at the root of your virtual host. 
     279 
    275280        environ, which must be a dictionary, can contain any additional 
    276281        environment variables you want to pass to your application. 
     
    293298 
    294299        self.application = application 
     300        self.scriptName = scriptName 
    295301        self.environ = environ 
    296302        self.multithreaded = multithreaded 
     
    345351        else: 
    346352            environ['wsgi.url_scheme'] = 'http' 
     353 
     354        self._sanitizeEnv(environ) 
    347355 
    348356        headers_set = [] 
     
    426434                self._appLock.release() 
    427435 
     436    def _sanitizeEnv(self, environ): 
     437        """Fill-in/deduce missing values in environ.""" 
     438        # Namely SCRIPT_NAME/PATH_INFO 
     439        value = environ['SCRIPT_NAME'] 
     440        scriptName = self.scriptName 
     441        if not value.startswith(scriptName): 
     442            self.logger.warning('scriptName does not match request URI') 
     443 
     444        environ['PATH_INFO'] = value[len(scriptName):] 
     445        environ['SCRIPT_NAME'] = scriptName 
     446 
    428447    def error(self, request): 
    429448        """