diff --git a/twisted/web/http_headers.py b/twisted/web/http_headers.py
index f0790b9..4652af8 100644
|
a
|
b
|
|
| 194 | 194 | |
| 195 | 195 | @return: C{None} |
| 196 | 196 | """ |
| | 197 | |
| | 198 | if not all(isinstance(n, bytes) for n in name): |
| | 199 | raise TypeError("Header name %r must consist of bytes" % name) |
| | 200 | |
| 197 | 201 | if not isinstance(values, list): |
| 198 | 202 | raise TypeError("Header entry %r should be list but found " |
| 199 | 203 | "instance of %r instead" % (name, type(values))) |
| | 204 | |
| | 205 | for val in values: |
| | 206 | if not all(isinstance(n, bytes) for n in val): |
| | 207 | raise TypeError("Header entry %r must consist of bytes" % val) |
| | 208 | |
| 200 | 209 | self._rawHeaders[name.lower()] = values |
| 201 | 210 | |
| 202 | 211 | |
diff --git a/twisted/web/test/test_http.py b/twisted/web/test/test_http.py
index f3f2dcc..21c3329 100644
|
a
|
b
|
|
| 306 | 306 | ptests = [ |
| 307 | 307 | # (_prequest(connection=[b"Keep-Alive"]), b"HTTP/1.0", 1, {b'connection' : [b'Keep-Alive']}), |
| 308 | 308 | (_prequest(), b"HTTP/1.0", 0, {b'connection': None}), |
| 309 | | (_prequest(connection=[b"close"]), b"HTTP/1.1", 0, |
| | 309 | (_prequest(connection = [b"close"]), b"HTTP/1.1", 0, |
| 310 | 310 | {b'connection' : [b'close']}), |
| 311 | 311 | (_prequest(), b"HTTP/1.1", 1, {b'connection': None}), |
| 312 | 312 | (_prequest(), b"HTTP/0.9", 0, {b'connection': None}), |
| … |
… |
|
| 631 | 631 | self.didRequest = False |
| 632 | 632 | |
| 633 | 633 | |
| 634 | | def runRequest(self, httpRequest, requestClass, success=1): |
| | 634 | def runRequest(self, httpRequest, requestClass, success = 1): |
| 635 | 635 | httpRequest = httpRequest.replace(b"\n", b"\r\n") |
| 636 | 636 | b = StringTransport() |
| 637 | 637 | a = http.HTTPChannel() |
| … |
… |
|
| 903 | 903 | abasdfg |
| 904 | 904 | --AaB03x-- |
| 905 | 905 | ''' |
| 906 | | self.runRequest(req, http.Request, success=False) |
| | 906 | self.runRequest(req, http.Request, success = False) |
| 907 | 907 | if _PY3: |
| 908 | 908 | testMissingContentDisposition.skip = ( |
| 909 | 909 | "Cannot parse multipart/form-data on Python 3. " |
| … |
… |
|
| 982 | 982 | # This request should fail, so this should never be called. |
| 983 | 983 | didRequest.append(True) |
| 984 | 984 | |
| 985 | | channel = self.runRequest(httpRequest, MyRequest, success=False) |
| | 985 | channel = self.runRequest(httpRequest, MyRequest, success = False) |
| 986 | 986 | self.assertFalse(didRequest, "Request.process called") |
| 987 | 987 | self.assertEqual( |
| 988 | 988 | channel.transport.value(), |
| … |
… |
|
| 997 | 997 | cgi.parse_qs(b"a=b&d=c;+=f"), |
| 998 | 998 | http.parse_qs(b"a=b&d=c;+=f")) |
| 999 | 999 | self.assertRaises( |
| 1000 | | ValueError, http.parse_qs, b"blah", strict_parsing=True) |
| | 1000 | ValueError, http.parse_qs, b"blah", strict_parsing = True) |
| 1001 | 1001 | self.assertEqual( |
| 1002 | | cgi.parse_qs(b"a=&b=c", keep_blank_values=1), |
| 1003 | | http.parse_qs(b"a=&b=c", keep_blank_values=1)) |
| | 1002 | cgi.parse_qs(b"a=&b=c", keep_blank_values = 1), |
| | 1003 | http.parse_qs(b"a=&b=c", keep_blank_values = 1)) |
| 1004 | 1004 | self.assertEqual( |
| 1005 | 1005 | cgi.parse_qs(b"a=&b=c"), |
| 1006 | 1006 | http.parse_qs(b"a=&b=c")) |
| … |
… |
|
| 1357 | 1357 | |
| 1358 | 1358 | req.setResponseCode(200) |
| 1359 | 1359 | req.clientproto = b"HTTP/1.0" |
| 1360 | | req.responseHeaders.setRawHeaders(b"test", [10]) |
| | 1360 | req.responseHeaders.setRawHeaders(b"test", ["10"]) |
| 1361 | 1361 | req.write(b'Hello') |
| 1362 | 1362 | |
| 1363 | 1363 | self.assertResponseEquals( |
| … |
… |
|
| 1367 | 1367 | b"Hello")]) |
| 1368 | 1368 | |
| 1369 | 1369 | warnings = self.flushWarnings( |
| 1370 | | offendingFunctions=[self.test_nonByteHeaderValue]) |
| 1371 | | self.assertEqual(1, len(warnings)) |
| 1372 | | self.assertEqual(warnings[0]['category'], DeprecationWarning) |
| 1373 | | self.assertEqual( |
| 1374 | | warnings[0]['message'], |
| 1375 | | "Passing non-bytes header values is deprecated since " |
| 1376 | | "Twisted 12.3. Pass only bytes instead.") |
| | 1370 | offendingFunctions = [self.test_nonByteHeaderValue]) |
| | 1371 | self.assertEqual(0, len(warnings)) |
| | 1372 | |
| | 1373 | def test_nonByteHeaderError(self): |
| | 1374 | """ |
| | 1375 | L{http.Request.write} casts non-bytes header value to bytes |
| | 1376 | transparently. |
| | 1377 | """ |
| | 1378 | req = http.Request(DummyChannel(), None) |
| 1377 | 1379 | |
| | 1380 | intlist = [int(1), int(2)] |
| | 1381 | err = self.assertRaises(TypeError, req.responseHeaders.setRawHeaders, intlist, ["10"]) |
| | 1382 | self.assertEqual(str(err), "Header name " + intlist.__str__() + " must consist of bytes") |
| 1378 | 1383 | |
| 1379 | 1384 | def test_firstWriteHTTP11Chunked(self): |
| 1380 | 1385 | """ |