comparison mercurial/hgweb/request.py @ 48996:7eebe5630bcc

hgweb: remove Python 3 conditional We probably have a better tobytes() implementation somewhere in pycompat. But I don't want to bloat scope of this commit. Differential Revision: https://phab.mercurial-scm.org/D12308
author Gregory Szorc <gregory.szorc@gmail.com>
date Thu, 03 Mar 2022 08:06:37 -0800
parents 6000f5b25c9b
children f254fc73d956
comparison
equal deleted inserted replaced
48995:7dc430b85351 48996:7eebe5630bcc
158 # We first validate that the incoming object conforms with the WSGI spec. 158 # We first validate that the incoming object conforms with the WSGI spec.
159 # We only want to be dealing with spec-conforming WSGI implementations. 159 # We only want to be dealing with spec-conforming WSGI implementations.
160 # TODO enable this once we fix internal violations. 160 # TODO enable this once we fix internal violations.
161 # wsgiref.validate.check_environ(env) 161 # wsgiref.validate.check_environ(env)
162 162
163 # PEP-0333 states that environment keys and values are native strings 163 # PEP-0333 states that environment keys and values are native strings.
164 # (bytes on Python 2 and str on Python 3). The code points for the Unicode 164 # The code points for the Unicode strings on Python 3 must be between
165 # strings on Python 3 must be between \00000-\000FF. We deal with bytes 165 # \00000-\000FF. We deal with bytes in Mercurial, so mass convert string
166 # in Mercurial, so mass convert string keys and values to bytes. 166 # keys and values to bytes.
167 if pycompat.ispy3: 167 def tobytes(s):
168 168 if not isinstance(s, str):
169 def tobytes(s): 169 return s
170 if not isinstance(s, str): 170 if pycompat.iswindows:
171 return s 171 # This is what mercurial.encoding does for os.environ on
172 if pycompat.iswindows: 172 # Windows.
173 # This is what mercurial.encoding does for os.environ on 173 return encoding.strtolocal(s)
174 # Windows. 174 else:
175 return encoding.strtolocal(s) 175 # This is what is documented to be used for os.environ on Unix.
176 else: 176 return pycompat.fsencode(s)
177 # This is what is documented to be used for os.environ on Unix. 177
178 return pycompat.fsencode(s) 178 env = {tobytes(k): tobytes(v) for k, v in pycompat.iteritems(env)}
179
180 env = {tobytes(k): tobytes(v) for k, v in pycompat.iteritems(env)}
181 179
182 # Some hosting solutions are emulating hgwebdir, and dispatching directly 180 # Some hosting solutions are emulating hgwebdir, and dispatching directly
183 # to an hgweb instance using this environment variable. This was always 181 # to an hgweb instance using this environment variable. This was always
184 # checked prior to d7fd203e36cc; keep doing so to avoid breaking them. 182 # checked prior to d7fd203e36cc; keep doing so to avoid breaking them.
185 if not reponame: 183 if not reponame: