Completed
Pull Request — master (#449)
by
unknown
02:06
created

CircleCIWebhookSensor._get_headers_as_dict()   A

Complexity

Conditions 2

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 5
rs 9.4285
cc 2
1
from st2reactor.sensor.base import Sensor
2
from flask import Flask, request, jsonify, abort, make_response
3
import json, requests
4
5
6
class CircleCIWebhookSensor(Sensor):
7
8
    def setup(self):
9
        self.host = self._config['host']
10
        self.port = self._config['port']
11
        self._endpoints = self._config['endpoints']
12
        self.app = Flask(__name__)
13
        self.trigger_ref = "circle_ci.build_event"
14
        self.log = self._sensor_service.get_logger(__name__)
15
16
        @self.app.route('/status')
17
        def status():
18
            return json.dumps({"response":"OK"})
19
20
        @self.app.route('/webhooks/<path:endpoint>', methods=['POST',])
21
        def build_events(endpoint):
22
23
            webhook_body = request.get_json()
24
            payload = {}
25
            payload['headers'] = self._get_headers_as_dict(request.headers)
26
            payload['body'] = webhook_body
27
28
            response = self._sensor_service.dispatch(self.trigger_ref, payload)
29
            self.log.info(json.dumps(response))
30
            return json.dumps({"response":"triggerposted"})
31
32
    def run(self):
33
        self.app.run(host=self.host,port=self.port,debug=True, threaded=True)
34
35
    def cleanup(self):
36
        # This is called when the st2 system goes down. You can perform cleanup operations like
37
        # closing the connections to external system here.
38
        pass
39
40
    def _get_headers_as_dict(self, headers):
41
        headers_dict = {}
42
        for key, value in headers:
43
            headers_dict[key] = value
44
        return headers_dict
45
46
    def add_trigger(self, trigger):
47
        pass
48
49
    def update_trigger(self, trigger):
50
        self.remove_trigger(trigger)
51
        self.add_trigger(trigger)
52
53
    def remove_trigger(self, trigger):
54
        id = trigger['id']
55
56
        try:
57
            job_id = self._jobs[id]
58
        except KeyError:
59
            self._log.info('Job not found: %s', id)
60
            return
61
62
        self._scheduler.remove_job(job_id)
63
64
    def _get_trigger_type(self, ref):
65
        pass