def _before_record_request(request: VcrRequest) -> VcrRequest: """This function formats and cleans request data to make it more readable and idempotent when re-snapshotting""" request.uri = re.sub(r"\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}", "2000-01-01_00-00-00", request.uri) try: body_str = request.body.decode("utf-8") except Exception: body_str = None if "content-type" in request.headers: request.headers["content-type"] = re.sub( r"boundary=[0-9a-f]+", "boundary=fffffff0000000", request.headers["content-type"], ) if (request.headers["content-type"].startswith("multipart/form-data") and body_str is not None): for regex_to_replace, replace_with in _REPLACE_IN_REQUEST_MULTIFORM.items( ): body_str = re.sub(regex_to_replace, replace_with, body_str) if body_str is not None: for regex_to_replace, replace_with in _REPLACE_IN_REQUEST_CONTENT.items( ): body_str = re.sub(regex_to_replace, replace_with, body_str) request.body = body_str return request
def test_record_errors_to_cassette(temp_yaml_file, record_errors): custom_persister = CustomPersister() cassette_request = Request( **{ 'method': 'GET', 'uri': 'http://127.0.0.1:8080/test', 'body': None, 'headers': { 'User-Agent': 'python-requests/2.26.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive' } }) cassette_response = { 'status': { 'code': 401, 'message': 'Unauthorized' }, 'headers': { 'Server': ['http-kit'], 'Content-Length': ['19'], 'Date': ['Fri, 15 Oct 2021 10:41:06 GMT'] }, 'body': { 'string': b'Unauthorized access' } } cassette_request.uri = 'http://127.0.0.1:8080/test' cassette_dict = { "requests": [cassette_request], "responses": [cassette_response] } CustomPersister.record_errors = record_errors CustomPersister.base_uri = "http://127.0.0.1:8080" CustomPersister.mock_url = "http://cornell" custom_persister.save_cassette(temp_yaml_file, cassette_dict, yamlserializer) output = open(temp_yaml_file, encoding="utf-8") if record_errors: assert yaml.safe_load(output)["interactions"] == [{ "request": cassette_request._to_dict(), # pylint: disable=protected-access "response": cassette_response }] else: assert output.read() == "0"