##// END OF EJS Templates
hgweb: encode WSGI environment using the ISO-8859-1 codec...
Manuel Jacob -
r51713:9ed281bb stable
parent child Browse files
Show More
@@ -11,7 +11,6 b''
11
11
12 from ..thirdparty import attr
12 from ..thirdparty import attr
13 from .. import (
13 from .. import (
14 encoding,
15 error,
14 error,
16 pycompat,
15 pycompat,
17 util,
16 util,
@@ -167,13 +166,7 b' def parserequestfromenv(env, reponame=No'
167 def tobytes(s):
166 def tobytes(s):
168 if not isinstance(s, str):
167 if not isinstance(s, str):
169 return s
168 return s
170 if pycompat.iswindows:
169 return s.encode('iso8859-1')
171 # This is what mercurial.encoding does for os.environ on
172 # Windows.
173 return encoding.strtolocal(s)
174 else:
175 # This is what is documented to be used for os.environ on Unix.
176 return pycompat.fsencode(s)
177
170
178 env = {tobytes(k): tobytes(v) for k, v in env.items()}
171 env = {tobytes(k): tobytes(v) for k, v in env.items()}
179
172
@@ -500,16 +500,9 b' class ParseRequestTests(unittest.TestCas'
500 self.assertEqual(r.reponame, b'repo')
500 self.assertEqual(r.reponame, b'repo')
501
501
502 def testenvencoding(self):
502 def testenvencoding(self):
503 if pycompat.iswindows:
503 b = b''.join(pycompat.bytechr(i) for i in range(256))
504 # On Windows, we can't generally know which non-ASCII characters
504 r = parse(DEFAULT_ENV, extra={'foo': b.decode('iso8859-1')})
505 # are supported.
505 self.assertEqual(r.rawenv[b'foo'], b)
506 r = parse(DEFAULT_ENV, extra={'foo': 'bar'})
507 self.assertEqual(r.rawenv[b'foo'], b'bar')
508 else:
509 # Unix is byte-based. Therefore we test all possible bytes.
510 b = b''.join(pycompat.bytechr(i) for i in range(256))
511 r = parse(DEFAULT_ENV, extra={'foo': pycompat.fsdecode(b)})
512 self.assertEqual(r.rawenv[b'foo'], b)
513
506
514
507
515 if __name__ == '__main__':
508 if __name__ == '__main__':
General Comments 0
You need to be logged in to leave comments. Login now