comparison mercurial/hgweb/server.py @ 36802:7fc80c982656

hgweb: ensure all wsgi environment values are str Previously, we had a few entries that were bytes on Python 3. PEP-0333 states that all entries must be the native str type (bytes on Python 2, str on Python 3). This required a number of changes to hgweb_mod to unbreak things on Python 3. I suspect there still may be some regressions. I'm going to introduce a data structure that represents a parsed WSGI request in upcoming commits. This will hold bytes and will allow us to stop using raw literals throughout the WSGI code. Differential Revision: https://phab.mercurial-scm.org/D2730
author Gregory Szorc <gregory.szorc@gmail.com>
date Thu, 08 Mar 2018 09:26:51 -0800
parents bf9a04d78084
children 8e1556ac01bb
comparison
equal deleted inserted replaced
36801:66de4555cefd 36802:7fc80c982656
122 env[r'GATEWAY_INTERFACE'] = r'CGI/1.1' 122 env[r'GATEWAY_INTERFACE'] = r'CGI/1.1'
123 env[r'REQUEST_METHOD'] = self.command 123 env[r'REQUEST_METHOD'] = self.command
124 env[r'SERVER_NAME'] = self.server.server_name 124 env[r'SERVER_NAME'] = self.server.server_name
125 env[r'SERVER_PORT'] = str(self.server.server_port) 125 env[r'SERVER_PORT'] = str(self.server.server_port)
126 env[r'REQUEST_URI'] = self.path 126 env[r'REQUEST_URI'] = self.path
127 env[r'SCRIPT_NAME'] = self.server.prefix 127 env[r'SCRIPT_NAME'] = pycompat.sysstr(self.server.prefix)
128 env[r'PATH_INFO'] = path[len(self.server.prefix):] 128 env[r'PATH_INFO'] = pycompat.sysstr(path[len(self.server.prefix):])
129 env[r'REMOTE_HOST'] = self.client_address[0] 129 env[r'REMOTE_HOST'] = self.client_address[0]
130 env[r'REMOTE_ADDR'] = self.client_address[0] 130 env[r'REMOTE_ADDR'] = self.client_address[0]
131 if query: 131 if query:
132 env[r'QUERY_STRING'] = query 132 env[r'QUERY_STRING'] = query
133 133
152 hval = hval.replace(r'\n', r'').strip() 152 hval = hval.replace(r'\n', r'').strip()
153 if hval: 153 if hval:
154 env[hkey] = hval 154 env[hkey] = hval
155 env[r'SERVER_PROTOCOL'] = self.request_version 155 env[r'SERVER_PROTOCOL'] = self.request_version
156 env[r'wsgi.version'] = (1, 0) 156 env[r'wsgi.version'] = (1, 0)
157 env[r'wsgi.url_scheme'] = self.url_scheme 157 env[r'wsgi.url_scheme'] = pycompat.sysstr(self.url_scheme)
158 if env.get(r'HTTP_EXPECT', '').lower() == '100-continue': 158 if env.get(r'HTTP_EXPECT', '').lower() == '100-continue':
159 self.rfile = common.continuereader(self.rfile, self.wfile.write) 159 self.rfile = common.continuereader(self.rfile, self.wfile.write)
160 160
161 env[r'wsgi.input'] = self.rfile 161 env[r'wsgi.input'] = self.rfile
162 env[r'wsgi.errors'] = _error_logger(self) 162 env[r'wsgi.errors'] = _error_logger(self)