summaryrefslogtreecommitdiffstats
path: root/functest/utils/decorators.py
blob: 99bcef3e64c1512e81ebc813daa70a70d062c44d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/env python

import mock
import requests.sessions
import urlparse


def can_dump_request_to_file(method):

    def dump_preparedrequest(request, **kwargs):
        parseresult = urlparse.urlparse(request.url)
        if parseresult.scheme == "file":
            with open(parseresult.path.replace('/results', ''), 'a') as f:
                headers = ""
                for key in request.headers:
                    headers += key + " " + request.headers[key] + "\n"
                message = "{} {}\n{}\n{}\n\n\n".format(
                    request.method, request.url, headers, request.body)
                f.write(message)
        return mock.Mock()

    def patch_request(method, url, **kwargs):
        with requests.sessions.Session() as session:
            parseresult = urlparse.urlparse(url)
            if parseresult.scheme == "file":
                with mock.patch.object(
                        session, 'send', side_effect=dump_preparedrequest):
                    return session.request(method=method, url=url, **kwargs)
            else:
                return session.request(method=method, url=url, **kwargs)

    def hook(*args, **kwargs):
        with mock.patch('requests.api.request', side_effect=patch_request):
            return method(*args, **kwargs)

    return hook