]>
Commit | Line | Data |
---|---|---|
9877dda9 MT |
1 | #!/usr/bin/python3 |
2 | ############################################################################### | |
3 | # # | |
4 | # Westferry - The IPFire web user interface # | |
5 | # Copyright (C) 2015 IPFire development team # | |
6 | # # | |
7 | # This program is free software: you can redistribute it and/or modify # | |
8 | # it under the terms of the GNU General Public License as published by # | |
9 | # the Free Software Foundation, either version 3 of the License, or # | |
10 | # (at your option) any later version. # | |
11 | # # | |
12 | # This program is distributed in the hope that it will be useful, # | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of # | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # | |
15 | # GNU General Public License for more details. # | |
16 | # # | |
17 | # You should have received a copy of the GNU General Public License # | |
18 | # along with this program. If not, see <http://www.gnu.org/licenses/>. # | |
19 | # # | |
20 | ############################################################################### | |
21 | ||
19514d9c | 22 | import functools |
9877dda9 MT |
23 | import tornado.web |
24 | ||
19514d9c | 25 | from .. import ui |
615d6335 | 26 | from ..i18n import _, N_ |
a6144752 | 27 | |
9877dda9 MT |
28 | _handlers = [] |
29 | ||
30 | class HandlerRegistration(type): | |
31 | def __init__(handler, name, bases, dict): | |
32 | type.__init__(handler, name, bases, dict) | |
33 | ||
34 | # The main class from which is inherited is not registered | |
35 | # as a plugin | |
36 | if name.endswith("BaseHandler"): | |
37 | return | |
38 | ||
39 | if handler.url is None: | |
40 | raise RuntimeError(_("Handler %s is improperly configured") % handler) | |
41 | ||
42 | _handlers.append(handler) | |
43 | ||
44 | @staticmethod | |
45 | def get_handlers(): | |
46 | return _handlers | |
47 | ||
48 | ||
49 | class BaseHandler(tornado.web.RequestHandler, metaclass=HandlerRegistration): | |
50 | url = None | |
21a66327 | 51 | |
a6144752 MT |
52 | title = N_("No Title") |
53 | ||
54 | # Points to the menu map of the section in which the handler is in | |
55 | menu = None | |
56 | ||
21a66327 MT |
57 | @property |
58 | def backend(self): | |
59 | """ | |
60 | Shortcut to access the backend | |
61 | """ | |
62 | return self.application.backend | |
63 | ||
19514d9c MT |
64 | @functools.cached_property |
65 | def tabs(self): | |
66 | return ui.tabs.Tabs(self) | |
67 | ||
a6144752 MT |
68 | def get_template_namespace(self): |
69 | ns = tornado.web.RequestHandler.get_template_namespace(self) | |
70 | ||
71 | # Add some global constants | |
72 | ns.update({ | |
73 | "VERSION" : self.backend.version, | |
74 | }) | |
75 | ||
76 | # Add some more | |
77 | ns.update({ | |
78 | "menu" : self.menu, | |
79 | }) | |
80 | ||
81 | return ns | |
82 | ||
21a66327 MT |
83 | def get_argument_int(self, name, *args, **kwargs): |
84 | val = self.get_argument(name, *args, **kwargs) | |
85 | ||
86 | if val is None: | |
87 | return | |
88 | ||
89 | try: | |
90 | return int(val) | |
91 | except ValueError: | |
92 | raise tornado.web.HTTPError(400, | |
93 | _("Invalid type for '%s', expected integer") % name) | |
19514d9c MT |
94 | |
95 | def get(self): | |
96 | # Render the default view | |
97 | self.render("default.html") |