Created
March 3, 2020 09:35
-
-
Save ajtucker/ae0180476c50bc5d00e13bbe5f98aacd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import requests | |
| import functools | |
| import os | |
| from io import BytesIO | |
| class Resp(BytesIO): | |
| def __init__(self, stream, status=200, headers=None): | |
| self.status = status | |
| self.headers = headers or {} | |
| self.reason = requests.status_codes._codes.get( | |
| status, [''] | |
| )[0].upper().replace('_', ' ') | |
| BytesIO.__init__(self, stream) | |
| @property | |
| def _original_response(self): | |
| return self | |
| @property | |
| def msg(self): | |
| return self | |
| def read(self, chunk_size, **kwargs): | |
| return BytesIO.read(self, chunk_size) | |
| def info(self): | |
| return self | |
| def get_all(self, name, default): | |
| result = self.headers.get(name) | |
| if not result: | |
| return default | |
| return [result] | |
| def getheaders(self, name): | |
| return self.get_all(name, []) | |
| def release_conn(self): | |
| self.close() | |
| class LocalFileAdapter(requests.adapters.HTTPAdapter): | |
| def build_response_from_file(self, request): | |
| file_path = request.url[7:] | |
| with open(file_path, 'rb') as file: | |
| buff = bytearray(os.path.getsize(file_path)) | |
| file.readinto(buff) | |
| resp = Resp(buff) | |
| r = self.build_response(request, resp) | |
| return r | |
| def send(self, request, stream=False, timeout=None, | |
| verify=True, cert=None, proxies=None): | |
| return self.build_response_from_file(request) | |
| def session_init_wrapper(old_init): | |
| @functools.wraps(old_init) | |
| def new_init(self): | |
| old_init(self) | |
| self.mount('file://', LocalFileAdapter()) | |
| return new_init | |
| requests.Session.__init__ = session_init_wrapper(requests.Session.__init__) | |
| print(requests.get('file://scratch.txt').text) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment