Test Failed
Push — master ( 94b1f7...ff0954 )
by Oleksandr
12:55 queued 02:06
created

EndpointsHandler.initialize()   A

Complexity

Conditions 1

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 2
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
nop 2
crap 1
1
"""
2
HTTP handeler to serve general endpoints request, specifically
3
http://myserver:9004/endpoints
4
5
For how individual endpoint requests are served look
6
at endpoint_handler.py
7
"""
8
9 1
import json
10 1
import logging
11 1
from tabpy.tabpy_server.common.util import format_exception
12 1
from tabpy.tabpy_server.handlers import ManagementHandler
13 1
from tornado import gen
14
15
16 1
class EndpointsHandler(ManagementHandler):
17 1
    def initialize(self, app):
18 1
        super(EndpointsHandler, self).initialize(app)
19
20 1
    def get(self):
21 1
        if self.should_fail_with_not_authorized():
22 1
            self.fail_with_not_authorized()
23 1
            return
24
25 1
        self._add_CORS_header()
26 1
        self.write(json.dumps(self.tabpy_state.get_endpoints()))
27
28 1
    @gen.coroutine
29
    def post(self):
30
        if self.should_fail_with_not_authorized():
31
            self.fail_with_not_authorized()
32
            return
33
34
        try:
35
            if not self.request.body:
36
                self.error_out(400, "Input body cannot be empty")
37
                self.finish()
38
                return
39
40
            try:
41
                request_data = json.loads(self.request.body.decode("utf-8"))
42
            except Exception as ex:
43
                self.error_out(400, "Failed to decode input body", str(ex))
44
                self.finish()
45
                return
46
47
            if "name" not in request_data:
48
                self.error_out(400, "name is required to add an endpoint.")
49
                self.finish()
50
                return
51
52
            name = request_data["name"]
53
54
            # check if endpoint already exist
55
            if name in self.tabpy_state.get_endpoints():
56
                self.error_out(400, f"endpoint {name} already exists.")
57
                self.finish()
58
                return
59
60
            self.logger.log(logging.DEBUG, f'Adding endpoint "{name}"')
61
            err_msg = yield self._add_or_update_endpoint("add", name, 1, request_data)
62
            if err_msg:
63
                self.error_out(400, err_msg)
64
            else:
65
                self.logger.log(logging.DEBUG, f"Endpoint {name} successfully added")
66
                self.set_status(201)
67
                self.write(self.tabpy_state.get_endpoints(name))
68
                self.finish()
69
                return
70
71
        except Exception as e:
72
            err_msg = format_exception(e, "/add_endpoint")
73
            self.error_out(500, "error adding endpoint", err_msg)
74
            self.finish()
75
            return
76