Completed
Pull Request — master (#474)
by
unknown
02:57
created

ICSPBaseActions.icsp_post()   A

Complexity

Conditions 1

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 1
dl 0
loc 9
rs 9.6666
1
# Licensed to the StackStorm, Inc ('StackStorm') under one or more
2
# contributor license agreements.  See the NOTICE file distributed with
3
# this work for additional information regarding copyright ownership.
4
# The ASF licenses this file to You under the Apache License, Version 2.0
5
# (the "License"); you may not use this file except in compliance with
6
# the License.  You may obtain a copy of the License at
7
#
8
#     http://www.apache.org/licenses/LICENSE-2.0
9
#
10
# Unless required by applicable law or agreed to in writing, software
11
# distributed under the License is distributed on an "AS IS" BASIS,
12
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
# See the License for the specific language governing permissions and
14
# limitations under the License.
15
16
import requests, copy
17
from st2actions.runners.pythonrunner import Action
18
19
20
class ICSPBaseActions(Action):
21
22
    def __init__(self, config):
23
        super(ICSPBaseActions, self).__init__(config)
24
        self.icsp_host = config['host']
25
        self.icsp_user = config['user']
26
        self.icsp_pass = config['pass']
27
        self.icsp_apiv = config['apiv']
28
        self.icsp_sslverify = config['sslverify']
29
30
    def check_results(self, results):
31
        # Check for errorCode json element
32
        if 'errorCode' in results:
33
            raise Exception("Error: %s" % (results["recommendedActions"]))
34
35
    def set_connection(self, connection=None):
36
        if connection:
37
            if 'host' in connection:
38
                self.icsp_host = connection['host']
39
            if 'user' in connection:
40
                self.icsp_user = connection['user']
41
            if 'pass' in connection:
42
                self.icsp_pass = connection['pass']
43
            if 'apiv' in connection:
44
                self.icsp_apiv = connection['apiv']
45
            if 'sslverify' in connection:
46
                if connection['sslverify'].lower() == "false":
47
                    self.icsp_sslverify = False
48
                else:
49
                    self.icsp_sslverify = True
50
51
    def get_sessionid(self):
52
        url = 'https://%s/rest/login-sessions' % self.icsp_host
53
        payload = {'userName': self.icsp_user, 'password': self.icsp_pass}
54
        headers = {'accept': 'application/json',
55
                   'accept-language': 'en-us',
56
                   'Content-Type': 'application/json'}
57
        p = requests.post(url, headers=headers,
58
                          json=payload, verify=self.icsp_sslverify)
59
        results = p.json()
60
        self.check_results(results)
61
        self.icsp_sessionid = results["sessionID"]
0 ignored issues
show
Coding Style introduced by
The attribute icsp_sessionid was defined outside __init__.

It is generally a good practice to initialize all attributes to default values in the __init__ method:

class Foo:
    def __init__(self, x=None):
        self.x = x
Loading history...
62
63
        # added here due to the requirement of the session id
64
        self.base_headers = {'Auth': self.icsp_sessionid,
0 ignored issues
show
Coding Style introduced by
The attribute base_headers was defined outside __init__.

It is generally a good practice to initialize all attributes to default values in the __init__ method:

class Foo:
    def __init__(self, x=None):
        self.x = x
Loading history...
65
                   'X-Api-Version': self.icsp_apiv}
66
67
        return results["sessionID"]
68
69
    def extract_id (self, joburi):
0 ignored issues
show
Coding Style introduced by
No space allowed before bracket
def extract_id (self, joburi):
^
Loading history...
70
        jobid = str(joburi)
71
        return int(jobid.split("/")[-1])
72
73
    def icsp_get(self, endpoint):
74
        url = 'https://%s%s' % (self.icsp_host, endpoint)
75
        headers = copy.copy(self.base_headers)
76
        p = requests.get(url, headers=headers, verify=self.icsp_sslverify)
77
        results = p.json()
78
        self.check_results(results)
79
        return results
80
81
    def icsp_put(self, endpoint, payload):
82
        url = 'https://%s%s' % (self.icsp_host, endpoint)
83
        headers = copy.copy(self.base_headers)
84
        p = requests.put(url, headers=headers,
85
                         json=payload, verify=self.icsp_sslverify)
86
        results = p.json()
87
        self.check_results(results)
88
        return
89
90
    def icsp_post(self, endpoint, payload):
91
        url = 'https://%s%s' % (self.icsp_host, endpoint)
92
        headers = copy.copy(self.base_headers)
93
        headers['Content-type'] = "application/json"
94
        p = requests.post(url, headers=headers,
95
                          data=payload, verify=self.icsp_sslverify)
96
        results = p.json()
97
        self.check_results(results)
98
        return results
99
100
    def icsp_delete(self, endpoint):
101
        url = 'https://%s%s' % (self.icsp_host, endpoint)
102
        headers = copy.copy(self.base_headers)
103
        requests.delete(url, headers=headers, verify=self.icsp_sslverify)
104
        return
105