3 # pylint: disable=missing-docstring
10 import requests.sessions
11 from six.moves import urllib
14 def can_dump_request_to_file(method):
16 def dump_preparedrequest(request, **kwargs):
17 # pylint: disable=unused-argument
18 parseresult = urllib.parse.urlparse(request.url)
19 if parseresult.scheme == "file":
21 dirname = os.path.dirname(parseresult.path)
24 if ex.errno != errno.EEXIST:
26 with open(parseresult.path, 'a') as dumpfile:
28 for key in request.headers:
29 headers += key + " " + request.headers[key] + "\n"
30 message = "{} {}\n{}\n{}\n\n\n".format(
31 request.method, request.url, headers, request.body)
32 dumpfile.write(message)
35 def patch_request(method, url, **kwargs):
36 with requests.sessions.Session() as session:
37 parseresult = urllib.parse.urlparse(url)
38 if parseresult.scheme == "file":
39 with mock.patch.object(session, 'send',
40 side_effect=dump_preparedrequest):
41 return session.request(method=method, url=url, **kwargs)
43 return session.request(method=method, url=url, **kwargs)
45 @functools.wraps(method)
46 def hook(*args, **kwargs):
47 with mock.patch('requests.api.request', side_effect=patch_request):
48 return method(*args, **kwargs)