Completed
Push — master ( d9b99a...978de0 )
by Daniel
01:01
created

GwWebManager.__receiver_view()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
import os
2
from flask import request, url_for
3
4
from groundwork_web.patterns import GwWebPattern
5
6
7
class GwWebManager(GwWebPattern):
8
    """
9
    Provides functions and views to manage the application via a web interface.
10
11
    """
12
    def __init__(self, *args, **kwargs):
13
        self.name = kwargs.get("name", self.__class__.__name__)
14
        self.needed_plugins = ["GwWeb"]
15
        super().__init__(*args, **kwargs)
16
17
    def activate(self):
18
        template_folder = os.path.join(os.path.abspath(os.path.dirname(__file__)), "templates")
19
        static_folder = os.path.join(os.path.abspath(os.path.dirname(__file__)), "static")
20
        self.web.contexts.register("webmanager",
21
                                   template_folder=template_folder,
22
                                   static_folder=static_folder,
23
                                   url_prefix="/webmanager",
24
                                   description="context for web manager urls")
25
26
        # Pure groundwork objects
27
28
        self.web.routes.register("/", ["GET"], self.__manager_view, context="webmanager",
29
                                 name="manager_view", description="Entry-Page for the webmanager")
30
31
        self.web.routes.register("/command", ["GET"], self.__command_view, context="webmanager",
32
                                 name="command_list", description="Lists all registered commands")
33
34
        self.web.routes.register("/plugin", ["GET"], self.__plugin_view, context="webmanager",
35
                                 name="plugin_list", description="Lists all registered plugins")
36
37
        self.web.routes.register("/plugin/class/<clazz>", ["GET", "POST"], self.__plugin_class_view,
38
                                 context="webmanager",
39
                                 name="plugin_class_details", description="Shows details of a plugin class")
40
41
        self.web.routes.register("/plugin/instance/<plugin_name>", ["GET", "POST"], self.__plugin_detail_view,
42
                                 context="webmanager",
43
                                 name="plugin_details", description="Shows details of a plugin instance")
44
45
        self.web.routes.register("/signal", ["GET"], self.__signal_view, context="webmanager",
46
                                 name="signal_list", description="Lists all registered signals")
47
48
        self.web.routes.register("/receiver", ["GET"], self.__receiver_view, context="webmanager",
49
                                 name="receiver_list", description="Lists all registered receivers")
50
51
        self.web.routes.register("/document", ["GET"], self.__document_view, context="webmanager",
52
                                 name="document_list", description="Lists all registered documents")
53
54
        # WEB objects
55
56
        self.web.routes.register("/route", ["GET"], self.__route_view, context="webmanager",
57
                                 name="route_list", description="Lists all registered routes")
58
59
        self.web.routes.register("/menu", ["GET"], self.__menu_view, context="webmanager",
60
                                 name="menu_list", description="Lists all registered menus")
61
62
        self.web.routes.register("/context", ["GET"], self.__context_view, context="webmanager",
63
                                 name="context_list", description="Lists all registered contexts")
64
65
        self.web.routes.register("/server", ["GET"], self.__server_view, context="webmanager",
66
                                 name="server_list", description="Lists all registered servers")
67
68
        with self.app.web.flask.app_context():
69
            webmanager_menu = self.web.menus.register("WebManager", "/webmanager")
70
            webmanager_menu.register("Overview", "/webmanager")
71
            webmanager_menu.register("Commands", url_for("webmanager.__command_view"))
72
            webmanager_menu.register("Signals", url_for("webmanager.__signal_view"))
73
            webmanager_menu.register("Receivers", url_for("webmanager.__receiver_view"))
74
            webmanager_menu.register("Plugins", url_for("webmanager.__plugin_view"))
75
            webmanager_menu.register("Routes", url_for("webmanager.__route_view"))
76
            webmanager_menu.register("Menu entries", url_for("webmanager.__menu_view"))
77
            webmanager_menu.register("Contexts", url_for("webmanager.__context_view"))
78
            webmanager_menu.register("Servers", url_for("webmanager.__server_view"))
79
            webmanager_menu.register("Documents", url_for("webmanager.__document_view"))
80
81
    def deactivate(self):
82
        pass
83
84
    def __manager_view(self):
85
        return self.web.render("manager.html")
86
87
    def __command_view(self):
88
        return self.web.render("commands.html")
89
90
    def __document_view(self):
91
        return self.web.render("documents.html")
92
93
    def __signal_view(self):
94
        return self.web.render("signals.html")
95
96
    def __receiver_view(self):
97
        return self.web.render("receivers.html")
98
99
    def __plugin_view(self):
100
        return self.web.render("plugins.html")
101
102
    def __plugin_detail_view(self, plugin_name):
103
        plugin_instance = self.app.plugins.get(plugin_name)
104
        if plugin_instance is None:
105
            return "404"
106
107
        if request.method == "POST":
108
            if plugin_instance.active:
109
                plugin_instance.deactivate()
110
            else:
111
                plugin_instance.activate()
112
113
        return self.web.render("plugin_detail.html", plugin_instance=plugin_instance)
114
115
    def __plugin_class_view(self, clazz):
116
        clazz_obj = self.app.plugins.classes.get(clazz)
117
        if clazz_obj is None:
118
            return "404"
119
120
        if request.method == "POST":
121
            plugin_class = self.app.plugins.classes.get(clazz)
122
            name = request.form["name"] or clazz
123
            plugin_instance = self.app.plugins.initialise(plugin_class.clazz, name)
124
125
        return self.web.render("plugin_class_detail.html", clazz=clazz_obj)
126
127
    def __route_view(self):
128
        routes = self.app.web.routes.get()
129
        return self.web.render("routes.html", routes=routes)
130
131
    def __context_view(self):
132
        contexts = self.app.web.contexts.get()
133
        return self.web.render("contexts.html", contexts=contexts)
134
135
    def __provider_view(self):
136
        providers = self.app.web.providers.get()
137
        return self.web.render("providers.html", providers=providers)
138
139
    def __server_view(self):
140
        servers = self.app.web.servers.get()
141
        return self.web.render("servers.html", servers=servers)
142
143
    def __menu_view(self):
144
        clusters = self.app.web.menus.get_clusters()
145
146
        menus = {}
147
        for cluster in clusters:
148
            menus[cluster] = self.app.web.menus.get(cluster=cluster)
149
150
        return self.web.render("menus.html", menus=menus)
151
152
153