Mercurial > public > mercurial-scm > hg
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) |