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