Completed
Push — master ( 3b5137...dd25e3 )
by Daniel
52s
created

GwWebManager.__plugin_detail_view()   A

Complexity

Conditions 4

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
c 0
b 0
f 0
dl 0
loc 12
rs 9.2
1
import os
2
from flask import request
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
        super().__init__(*args, **kwargs)
15
16
    def activate(self):
17
        template_folder = os.path.join(os.path.abspath(os.path.dirname(__file__)), "templates")
18
        static_folder = os.path.join(os.path.abspath(os.path.dirname(__file__)), "static")
19
        self.web.contexts.register("webmanager",
20
                                   template_folder=template_folder,
21
                                   static_folder=static_folder,
22
                                   url_prefix="/webmanager",
23
                                   description="context for web manager urls")
24
25
        self.web.routes.register("/", ["GET"], self.__manager_view, context="webmanager",
26
                                 name="manager_view", description="Entry-Page for the webmanager")
27
28
        self.web.routes.register("/command", ["GET"], self.__command_view, context="webmanager",
29
                                 name="command_list", description="Lists all registered commands")
30
31
        self.web.routes.register("/plugin", ["GET"], self.__plugin_view, context="webmanager",
32
                                 name="plugin_list", description="Lists all registered plugins")
33
34
        self.web.routes.register("/plugin/class/<clazz>", ["GET", "POST"], self.__plugin_class_view,
35
                                 context="webmanager",
36
                                 name="plugin_class_details", description="Shows details of a plugin class")
37
38
        self.web.routes.register("/plugin/instance/<plugin>", ["GET", "POST"], self.__plugin_detail_view,
39
                                 context="webmanager",
40
                                 name="plugin_details", description="Shows details of a plugin instance")
41
42
        self.web.routes.register("/route", ["GET"], self.__route_view, context="webmanager",
43
                                 name="route_list", description="Lists all registered routes")
44
45
        self.web.routes.register("/menu", ["GET"], self.__menu_view, context="webmanager",
46
                                 name="menu_list", description="Lists all registered menus")
47
48
        self.web.routes.register("/context", ["GET"], self.__context_view, context="webmanager",
49
                                 name="context_list", description="Lists all registered contexts")
50
51
        self.web.routes.register("/provider", ["GET"], self.__provider_view, context="webmanager",
52
                                 name="provider_list", description="Lists all registered providers")
53
54
        self.web.routes.register("/server", ["GET"], self.__server_view, context="webmanager",
55
                                 name="server_list", description="Lists all registered servers")
56
57
        webmanager_menu = self.web.menus.register("WebManager", "/webmanager")
58
        self.web.menus.register("Commands", "/webmanager/command", menu=webmanager_menu)
59
        self.web.menus.register("Plugins", "/webmanager/plugin", menu=webmanager_menu)
60
        self.web.menus.register("Routes", "/webmanager/route", menu=webmanager_menu)
61
        self.web.menus.register("Menu entries", "/webmanager/menu", menu=webmanager_menu)
62
        self.web.menus.register("Contexts", "/webmanager/context", menu=webmanager_menu)
63
        self.web.menus.register("Providers", "/webmanager/provider", menu=webmanager_menu)
64
        self.web.menus.register("Servers", "/webmanager/server", menu=webmanager_menu)
65
66
    def deactivate(self):
67
        pass
68
69
    def __manager_view(self):
70
        return self.web.render("manager.html")
71
72
    def __command_view(self):
73
        return self.web.render("commands.html", app=self.app)
74
75
    def __plugin_view(self):
76
        return self.web.render("plugins.html", app=self.app)
77
78
    def __plugin_detail_view(self, plugin):
79
        plugin_instance = self.app.plugins.get(plugin)
80
        if plugin_instance is None:
81
            return "404"
82
83
        if request.method == "POST":
84
            if plugin_instance.active:
85
                plugin_instance.deactivate()
86
            else:
87
                plugin_instance.activate()
88
89
        return self.web.render("plugin_detail.html", app=self.app, plugin=plugin_instance)
90
91
    def __plugin_class_view(self, clazz):
92
        clazz_obj = self.app.plugins.classes.get(clazz)
93
        if clazz_obj is None:
94
            return "404"
95
96
        if request.method == "POST":
97
            plugin_class = self.app.plugins.classes.get(clazz)
98
            name = request.form["name"] or clazz
99
            plugin_instance = self.app.plugins.initialise(plugin_class.clazz, name)
100
101
        return self.web.render("plugin_class_detail.html", app=self.app, clazz=clazz_obj)
102
103
    def __route_view(self):
104
        routes = self.app.web.routes.get()
105
        return self.web.render("routes.html", routes=routes, app=self.app)
106
107
    def __context_view(self):
108
        contexts = self.app.web.contexts.get()
109
        return self.web.render("contexts.html", contexts=contexts)
110
111
    def __provider_view(self):
112
        providers = self.app.web.providers.get()
113
        return self.web.render("providers.html", providers=providers)
114
115
    def __server_view(self):
116
        servers = self.app.web.servers.get()
117
        return self.web.render("servers.html", servers=servers)
118
119
    def __menu_view(self):
120
        clusters = self.app.web.menus.get_clusters()
121
122
        menus = {}
123
        for cluster in clusters:
124
            menus[cluster] = self.app.web.menus.get(cluster=cluster)
125
126
        return self.web.render("menus.html", menus=menus)
127
128
129