| 346 | |
| 347 | |
| 348 | class MockHTTPClass: |
| 349 | def __init__(self): |
| 350 | self.level = 0 |
| 351 | self.req_headers = [] |
| 352 | self.data = None |
| 353 | self.raise_on_endheaders = False |
| 354 | self.sock = None |
| 355 | self._tunnel_headers = {} |
| 356 | |
| 357 | def __call__(self, host, timeout=socket._GLOBAL_DEFAULT_TIMEOUT): |
| 358 | self.host = host |
| 359 | self.timeout = timeout |
| 360 | return self |
| 361 | |
| 362 | def set_debuglevel(self, level): |
| 363 | self.level = level |
| 364 | |
| 365 | def set_tunnel(self, host, port=None, headers=None): |
| 366 | self._tunnel_host = host |
| 367 | self._tunnel_port = port |
| 368 | if headers: |
| 369 | self._tunnel_headers = headers |
| 370 | else: |
| 371 | self._tunnel_headers.clear() |
| 372 | |
| 373 | def request(self, method, url, body=None, headers=None, *, |
| 374 | encode_chunked=False): |
| 375 | self.method = method |
| 376 | self.selector = url |
| 377 | if headers is not None: |
| 378 | self.req_headers += headers.items() |
| 379 | self.req_headers.sort() |
| 380 | if body: |
| 381 | self.data = body |
| 382 | self.encode_chunked = encode_chunked |
| 383 | if self.raise_on_endheaders: |
| 384 | raise OSError() |
| 385 | |
| 386 | def getresponse(self): |
| 387 | return MockHTTPResponse(MockFile(), {}, 200, "OK") |
| 388 | |
| 389 | def close(self): |
| 390 | pass |
| 391 | |
| 392 | |
| 393 | class MockHandler: |