Changeset 59:5e584c75125a

Show
Ignore:
Timestamp:
01/02/07 14:15:05 (2 years ago)
Author:
Allan Saddi <allan@saddi.com>
branch:
default
convert_revision:
svn:46762da8-4eb7-0310-94e9-d918b60927c8/flup/trunk@2306
Message:

Re-commit r2304 since it was found that mod_scgi does set SCRIPT_NAME/
PATH_INFO correctly when using SCGIMount (vs. SCGIHandler/SCGIServer).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • ChangeLog

    r58 r59  
    112006-12-29  Allan Saddi  <allan@saddi.com> 
    2  
    3         * Back out previous commit. PATH_INFO is still not set 
    4           correctly by mod_scgi. 
    52 
    63        * Deprecate WSGI_SCRIPT_NAME and scriptName in scgi_base. 
  • flup/server/scgi.py

    r58 r59  
    6767import socket 
    6868 
    69 from flup.server.scgi_base import BaseSCGIServer, Connection 
     69from flup.server.scgi_base import BaseSCGIServer, Connection, NoDefault 
    7070from flup.server.threadedserver import ThreadedServer 
    7171 
     
    8888    mind running in multiple processes, go use SWAP. ;) 
    8989    """ 
    90     def __init__(self, application, scriptName='', environ=None, 
     90    def __init__(self, application, scriptName=NoDefault, environ=None, 
    9191                 multithreaded=True, multiprocess=False, 
    9292                 bindAddress=('localhost', 4000), umask=None, 
  • flup/server/scgi_base.py

    r58 r59  
    3737import datetime 
    3838import os 
     39import warnings 
    3940 
    4041# Threads are required. If you want a non-threaded (forking) version, look at 
     
    274275    requestClass = Request 
    275276 
    276     def __init__(self, application, scriptName='', environ=None, 
     277    def __init__(self, application, scriptName=NoDefault, environ=None, 
    277278                 multithreaded=True, multiprocess=False, 
    278279                 bindAddress=('localhost', 4000), umask=None, 
     
    472473    def _sanitizeEnv(self, environ): 
    473474        """Fill-in/deduce missing values in environ.""" 
    474         # Namely SCRIPT_NAME/PATH_INFO 
     475        # Ensure QUERY_STRING exists 
     476        if not environ.has_key('QUERY_STRING'): 
     477            environ['QUERY_STRING'] = '' 
     478 
     479        # Check WSGI_SCRIPT_NAME 
    475480        scriptName = environ.get('WSGI_SCRIPT_NAME') 
    476481        if scriptName is None: 
    477482            scriptName = self.scriptName 
    478         elif scriptName.lower() == 'none': 
    479             scriptName = None 
     483        else: 
     484            warnings.warn('WSGI_SCRIPT_NAME environment variable for scgi ' 
     485                          'servers is deprecated', 
     486                          DeprecationWarning) 
     487            if scriptName.lower() == 'none': 
     488                scriptName = None 
    480489 
    481490        if scriptName is None: 
     
    483492            return 
    484493 
    485         value = environ['SCRIPT_NAME'] 
    486         # Pull PATH_INFO from environ, if it exists. (cgi2scgi actually 
    487         # passes it in.) 
    488         value += environ.get('PATH_INFO', '') 
    489         if not value.startswith(scriptName): 
    490             self.logger.warning('scriptName does not match request URI') 
    491  
    492         environ['PATH_INFO'] = value[len(scriptName):] 
    493         environ['SCRIPT_NAME'] = scriptName 
    494  
    495         if not environ.has_key('QUERY_STRING'): 
    496             environ['QUERY_STRING'] = '' 
     494        if scriptName is NoDefault: 
     495            # Pull SCRIPT_NAME/PATH_INFO from environment, with empty defaults 
     496            if not environ.has_key('SCRIPT_NAME'): 
     497                environ['SCRIPT_INFO'] = '' 
     498            if not environ.has_key('PATH_INFO'): 
     499                environ['PATH_INFO'] = '' 
     500        else: 
     501            # Configured scriptName 
     502            warnings.warn('Configured SCRIPT_NAME is deprecated\n' 
     503                          'Do not use WSGI_SCRIPT_NAME or the scriptName\n' 
     504                          'keyword parameter -- they will be going away', 
     505                          DeprecationWarning) 
     506 
     507            value = environ['SCRIPT_NAME'] 
     508            value += environ.get('PATH_INFO', '') 
     509            if not value.startswith(scriptName): 
     510                self.logger.warning('scriptName does not match request URI') 
     511 
     512            environ['PATH_INFO'] = value[len(scriptName):] 
     513            environ['SCRIPT_NAME'] = scriptName 
    497514 
    498515    def error(self, request): 
  • flup/server/scgi_fork.py

    r58 r59  
    6767import socket 
    6868 
    69 from flup.server.scgi_base import BaseSCGIServer, Connection 
     69from flup.server.scgi_base import BaseSCGIServer, Connection, NoDefault 
    7070from flup.server.preforkserver import PreforkServer 
    7171 
     
    8888    mind running in multiple processes, go use SWAP. ;) 
    8989    """ 
    90     def __init__(self, application, scriptName='', environ=None, 
     90    def __init__(self, application, scriptName=NoDefault, environ=None, 
    9191                 bindAddress=('localhost', 4000), umask=None, 
    9292                 allowedServers=None,