comparison mercurial/hgweb/server.py @ 34512:482d6f6dba91

hgweb: when constructing or adding to a wsgi environ dict, use native strs That's what's required of us to work with the WSGI API on Python 3. Differential Revision: https://phab.mercurial-scm.org/D967
author Augie Fackler <augie@google.com>
date Thu, 05 Oct 2017 14:22:02 -0400
parents 4741428606ed
children 75979c8d4572
comparison
equal deleted inserted replaced
34511:67873ec0f4ce 34512:482d6f6dba91
61 @staticmethod 61 @staticmethod
62 def preparehttpserver(httpserver, ui): 62 def preparehttpserver(httpserver, ui):
63 """Prepare .socket of new HTTPServer instance""" 63 """Prepare .socket of new HTTPServer instance"""
64 64
65 def __init__(self, *args, **kargs): 65 def __init__(self, *args, **kargs):
66 self.protocol_version = 'HTTP/1.1' 66 self.protocol_version = r'HTTP/1.1'
67 httpservermod.basehttprequesthandler.__init__(self, *args, **kargs) 67 httpservermod.basehttprequesthandler.__init__(self, *args, **kargs)
68 68
69 def _log_any(self, fp, format, *args): 69 def _log_any(self, fp, format, *args):
70 fp.write("%s - - [%s] %s\n" % (self.client_address[0], 70 fp.write("%s - - [%s] %s\n" % (self.client_address[0],
71 self.log_date_time_string(), 71 self.log_date_time_string(),
110 110
111 def do_hgweb(self): 111 def do_hgweb(self):
112 path, query = _splitURI(self.path) 112 path, query = _splitURI(self.path)
113 113
114 env = {} 114 env = {}
115 env['GATEWAY_INTERFACE'] = 'CGI/1.1' 115 env[r'GATEWAY_INTERFACE'] = r'CGI/1.1'
116 env['REQUEST_METHOD'] = self.command 116 env[r'REQUEST_METHOD'] = self.command
117 env['SERVER_NAME'] = self.server.server_name 117 env[r'SERVER_NAME'] = self.server.server_name
118 env['SERVER_PORT'] = str(self.server.server_port) 118 env[r'SERVER_PORT'] = str(self.server.server_port)
119 env['REQUEST_URI'] = self.path 119 env[r'REQUEST_URI'] = self.path
120 env['SCRIPT_NAME'] = self.server.prefix 120 env[r'SCRIPT_NAME'] = self.server.prefix
121 env['PATH_INFO'] = path[len(self.server.prefix):] 121 env[r'PATH_INFO'] = path[len(self.server.prefix):]
122 env['REMOTE_HOST'] = self.client_address[0] 122 env[r'REMOTE_HOST'] = self.client_address[0]
123 env['REMOTE_ADDR'] = self.client_address[0] 123 env[r'REMOTE_ADDR'] = self.client_address[0]
124 if query: 124 if query:
125 env['QUERY_STRING'] = query 125 env[r'QUERY_STRING'] = query
126 126
127 if self.headers.typeheader is None: 127 if self.headers.typeheader is None:
128 env['CONTENT_TYPE'] = self.headers.type 128 env[r'CONTENT_TYPE'] = self.headers.type
129 else: 129 else:
130 env['CONTENT_TYPE'] = self.headers.typeheader 130 env[r'CONTENT_TYPE'] = self.headers.typeheader
131 length = self.headers.getheader('content-length') 131 length = self.headers.getheader('content-length')
132 if length: 132 if length:
133 env['CONTENT_LENGTH'] = length 133 env[r'CONTENT_LENGTH'] = length
134 for header in [h for h in self.headers.keys() 134 for header in [h for h in self.headers.keys()
135 if h not in ('content-type', 'content-length')]: 135 if h not in ('content-type', 'content-length')]:
136 hkey = 'HTTP_' + header.replace('-', '_').upper() 136 hkey = r'HTTP_' + header.replace(r'-', r'_').upper()
137 hval = self.headers.getheader(header) 137 hval = self.headers.get(header)
138 hval = hval.replace('\n', '').strip() 138 hval = hval.replace(r'\n', r'').strip()
139 if hval: 139 if hval:
140 env[hkey] = hval 140 env[hkey] = hval
141 env['SERVER_PROTOCOL'] = self.request_version 141 env[r'SERVER_PROTOCOL'] = self.request_version
142 env['wsgi.version'] = (1, 0) 142 env[r'wsgi.version'] = (1, 0)
143 env['wsgi.url_scheme'] = self.url_scheme 143 env[r'wsgi.url_scheme'] = self.url_scheme
144 if env.get('HTTP_EXPECT', '').lower() == '100-continue': 144 if env.get(r'HTTP_EXPECT', '').lower() == '100-continue':
145 self.rfile = common.continuereader(self.rfile, self.wfile.write) 145 self.rfile = common.continuereader(self.rfile, self.wfile.write)
146 146
147 env['wsgi.input'] = self.rfile 147 env[r'wsgi.input'] = self.rfile
148 env['wsgi.errors'] = _error_logger(self) 148 env[r'wsgi.errors'] = _error_logger(self)
149 env['wsgi.multithread'] = isinstance(self.server, 149 env[r'wsgi.multithread'] = isinstance(self.server,
150 socketserver.ThreadingMixIn) 150 socketserver.ThreadingMixIn)
151 env['wsgi.multiprocess'] = isinstance(self.server, 151 env[r'wsgi.multiprocess'] = isinstance(self.server,
152 socketserver.ForkingMixIn) 152 socketserver.ForkingMixIn)
153 env['wsgi.run_once'] = 0 153 env[r'wsgi.run_once'] = 0
154 154
155 self.saved_status = None 155 self.saved_status = None
156 self.saved_headers = [] 156 self.saved_headers = []
157 self.sent_headers = False 157 self.sent_headers = False
158 self.length = None 158 self.length = None