~ubuntu-branches/ubuntu/natty/flup/natty

« back to all changes in this revision

Viewing changes to flup/server/scgi_base.py

  • Committer: Bazaar Package Importer
  • Author(s): Kai Hendry
  • Date: 2007-09-12 20:22:04 UTC
  • mfrom: (1.2.1 upstream) (4 gutsy)
  • mto: This revision was merged to the branch mainline in revision 5.
  • Revision ID: james.westby@ubuntu.com-20070912202204-fg63etr9vzaf8hea
* New upstream release
* http://www.saddi.com/software/news/archives/58-flup-1.0-released.html
* Added a note in the description that people should probably start thinking
  of moving to modwsgi.org

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23
23
# SUCH DAMAGE.
24
24
#
25
 
# $Id: scgi_base.py 2113 2006-11-25 02:08:55Z asaddi $
 
25
# $Id: scgi_base.py 2306 2007-01-02 22:15:53Z asaddi $
26
26
 
27
27
__author__ = 'Allan Saddi <allan@saddi.com>'
28
 
__version__ = '$Revision: 2113 $'
 
28
__version__ = '$Revision: 2306 $'
29
29
 
30
30
import sys
31
31
import logging
36
36
import signal
37
37
import datetime
38
38
import os
 
39
import warnings
39
40
 
40
41
# Threads are required. If you want a non-threaded (forking) version, look at
41
42
# SWAP <http://www.idyll.org/~t/www-tools/wsgi/>.
273
274
    # What Request class to use.
274
275
    requestClass = Request
275
276
 
276
 
    def __init__(self, application, scriptName='', environ=None,
 
277
    def __init__(self, application, scriptName=NoDefault, environ=None,
277
278
                 multithreaded=True, multiprocess=False,
278
279
                 bindAddress=('localhost', 4000), umask=None,
279
280
                 allowedServers=NoDefault,
471
472
 
472
473
    def _sanitizeEnv(self, environ):
473
474
        """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
475
480
        scriptName = environ.get('WSGI_SCRIPT_NAME')
476
481
        if scriptName is None:
477
482
            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
480
489
 
481
490
        if scriptName is None:
482
491
            # Do nothing (most likely coming from cgi2scgi)
483
492
            return
484
493
 
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
        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
494
514
 
495
515
    def error(self, request):
496
516
        """