Completed
Push — master ( 193f1f...0fe699 )
by Daniel
01:07
created

GwWebManager.__manager_view()   A

Complexity

Conditions 1

Size

Total Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

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