mercurial/hgweb/wsgicgi.py
changeset 30473 39d13b8c101d
parent 27046 37fcfe52c68c
child 30636 f1c9fafcbf46
equal deleted inserted replaced
30472:277f4fe6d01a 30473:39d13b8c101d
     9 # http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side
     9 # http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side
    10 
    10 
    11 from __future__ import absolute_import
    11 from __future__ import absolute_import
    12 
    12 
    13 import os
    13 import os
    14 import sys
       
    15 
    14 
    16 from .. import (
    15 from .. import (
    17     util,
    16     util,
    18 )
    17 )
    19 
    18 
    20 from . import (
    19 from . import (
    21     common,
    20     common,
    22 )
    21 )
    23 
    22 
    24 def launch(application):
    23 def launch(application):
    25     util.setbinary(sys.stdin)
    24     util.setbinary(util.stdin)
    26     util.setbinary(sys.stdout)
    25     util.setbinary(util.stdout)
    27 
    26 
    28     environ = dict(os.environ.iteritems())
    27     environ = dict(os.environ.iteritems())
    29     environ.setdefault('PATH_INFO', '')
    28     environ.setdefault('PATH_INFO', '')
    30     if environ.get('SERVER_SOFTWARE', '').startswith('Microsoft-IIS'):
    29     if environ.get('SERVER_SOFTWARE', '').startswith('Microsoft-IIS'):
    31         # IIS includes script_name in PATH_INFO
    30         # IIS includes script_name in PATH_INFO
    32         scriptname = environ['SCRIPT_NAME']
    31         scriptname = environ['SCRIPT_NAME']
    33         if environ['PATH_INFO'].startswith(scriptname):
    32         if environ['PATH_INFO'].startswith(scriptname):
    34             environ['PATH_INFO'] = environ['PATH_INFO'][len(scriptname):]
    33             environ['PATH_INFO'] = environ['PATH_INFO'][len(scriptname):]
    35 
    34 
    36     stdin = sys.stdin
    35     stdin = util.stdin
    37     if environ.get('HTTP_EXPECT', '').lower() == '100-continue':
    36     if environ.get('HTTP_EXPECT', '').lower() == '100-continue':
    38         stdin = common.continuereader(stdin, sys.stdout.write)
    37         stdin = common.continuereader(stdin, util.stdout.write)
    39 
    38 
    40     environ['wsgi.input'] = stdin
    39     environ['wsgi.input'] = stdin
    41     environ['wsgi.errors'] = sys.stderr
    40     environ['wsgi.errors'] = util.stderr
    42     environ['wsgi.version'] = (1, 0)
    41     environ['wsgi.version'] = (1, 0)
    43     environ['wsgi.multithread'] = False
    42     environ['wsgi.multithread'] = False
    44     environ['wsgi.multiprocess'] = True
    43     environ['wsgi.multiprocess'] = True
    45     environ['wsgi.run_once'] = True
    44     environ['wsgi.run_once'] = True
    46 
    45 
    49     else:
    48     else:
    50         environ['wsgi.url_scheme'] = 'http'
    49         environ['wsgi.url_scheme'] = 'http'
    51 
    50 
    52     headers_set = []
    51     headers_set = []
    53     headers_sent = []
    52     headers_sent = []
    54     out = sys.stdout
    53     out = util.stdout
    55 
    54 
    56     def write(data):
    55     def write(data):
    57         if not headers_set:
    56         if not headers_set:
    58             raise AssertionError("write() before start_response()")
    57             raise AssertionError("write() before start_response()")
    59 
    58