GwWeb   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 64
rs 10
wmc 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __init__() 0 3 1
A activate() 0 22 2
A __server_list() 0 8 2
A deactivate() 0 3 1
A __server_start() 0 8 2
A __test_view() 0 2 1
A __start_flask_debug_server() 0 11 1
1
import os
2
from click import Argument, echo
3
4
from groundwork.patterns import GwCommandsPattern
5
6
7
from groundwork_web.patterns import GwWebPattern
8
9
10
class GwWeb(GwWebPattern, GwCommandsPattern):
11
    def __init__(self, *args, **kwargs):
12
        self.name = kwargs.get("name", self.__class__.__name__)
13
        super(GwWeb, self).__init__(*args, **kwargs)
14
15
    def activate(self):
16
        self.commands.register("server_start", "starts a given server",
17
                               self.__server_start,
18
                               params=[Argument(("server",), required=True)])
19
20
        self.commands.register("server_list", "prints a list of registered server",
21
                               self.__server_list)
22
23
        template_folder = os.path.join(os.path.abspath(os.path.dirname(__file__)), "templates")
24
        static_folder = os.path.join(os.path.abspath(os.path.dirname(__file__)), "static")
25
        self.web.contexts.register("web",
26
                                   template_folder=template_folder,
27
                                   static_folder=static_folder,
28
                                   url_prefix="/",
29
                                   description="web context, which was created by GwWeb as initial context")
30
31
        if self.app.config.get("SHOW_WEB_TEST_PAGE", True):
32
            self.web.routes.register("/test", ["GET"], self.__test_view,
33
                                     name="Test", description="Test view of GwWeb")
34
35
        # Register the flask debug server.
36
        self.web.servers.register("flask_debug", self.__start_flask_debug_server, "Starts the flask debug server")
37
38
    def deactivate(self):
39
        self.commands.unregister("server_start")
40
        self.commands.unregister("server_list")
41
42
    def __server_start(self, server):
43
        servers = self.app.web.servers.get()
44
        if server not in servers.keys():
45
            echo("Server '%s' not found.")
46
            echo("Available servers: %s" % ",".join(servers.keys()))
47
        else:
48
            echo("Starting server %s" % server)
49
            servers[server].function()
50
51
    def __server_list(self):
52
        servers = self.app.web.servers.get()
53
        echo("List of registered servers\n")
54
        for name, server in servers.items():
55
            echo(name)
56
            echo("*" * len(name))
57
            echo("  Description: %s" % server.description)
58
            echo("  Plugin: %s" % server.plugin.name)
59
60
    def __start_flask_debug_server(self):
61
62
        host = str(self.app.config.get("FLASK_HOST", "127.0.0.1"))
63
        port = int(self.app.config.get("FLASK_PORT", 5000))
64
        server_name = str(self.app.config.get("FLASK_SERVER_NAME", "%s:%s" % ("127.0.0.1", port)))
65
        self.web.flask.config.SERVER_NAME = server_name
66
67
        self.log.info("Flask Server Name: %s" % self.web.flask.config["SERVER_NAME"])
68
        self.web.flask.run(host=host,
69
                           port=port,
70
                           debug=bool(self.app.config.get("FLASK_DEBUG", True)))
71
72
    def __test_view(self):
73
        return self.web.render("test.html")
74