Completed
Push — master ( a144e0...32acac )
by Lakshmi
36s
created

ActiveCampaignAction   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 39
rs 10
c 0
b 0
f 0
wmc 8
1
import requests
2
import urlparse
3
4
from st2actions.runners.pythonrunner import Action
5
6
7
class ActiveCampaignAction(Action):
8
9
    def run(self, **kwargs):
10
        if kwargs['api_key'] is None:
11
            kwargs['api_key'] = self.config['api_key']
12
13
        return self._get_request(kwargs)
14
15
    def _get_request(self, params):
16
        url = urlparse.urljoin(self.config['url'], 'admin/api.php')
17
        headers = {}
18
        headers['Content-Type'] = 'application/x-www-form-urlencoded'
19
20
        params = self._format_params(params)
21
22
        response = requests.request(
23
            'POST', url=url,
24
            headers=headers, data=params
25
        )
26
27
        results = response.json()
28
        if results['result_code'] is not 1:
29
            failure_reason = (
30
                'Failed to perform action. status code: %s; response body: %s' % (
31
                    response.status_code,
32
                    response.json
33
                )
34
            )
35
            self.logger.exception(failure_reason)
36
            raise Exception(failure_reason)
37
38
        return results
39
40
    def _format_params(self, params):
41
        output = {}
42
        for k, v in params.iteritems():
43
            if isinstance(v, dict):
44
                for pk, pv in v.iteritems():
45
                    if k == 'field':
46
                        param_name = "{}[%{}%,0]".format(k, pk)
47
                    else:
48
                        param_name = "%s[%s]" % (k, pk)
49
                    output[param_name] = pv
50
            else:
51
                if v is not None:
52
                    output[k] = v
53
        return output
54