diff options
author | 2018-05-15 14:40:11 +0100 | |
---|---|---|
committer | 2018-05-15 14:40:11 +0100 | |
commit | af412314eaba6a955b364da2ff7e4dbfb8eb7003 (patch) | |
tree | 9f9e7a1ac2d0db240c56569de6a964969eb10505 /pysite | |
parent | Update font-awesome to 5.0.13 (diff) |
Add TemplateView class for views that only render a template
Diffstat (limited to 'pysite')
-rw-r--r-- | pysite/base_route.py | 37 | ||||
-rw-r--r-- | pysite/route_manager.py | 3 | ||||
-rw-r--r-- | pysite/views/main/about/index.py | 8 | ||||
-rw-r--r-- | pysite/views/main/about/rules.py | 8 | ||||
-rw-r--r-- | pysite/views/main/index.py | 8 | ||||
-rw-r--r-- | pysite/views/main/info/help.py | 8 | ||||
-rw-r--r-- | pysite/views/main/info/index.py | 8 | ||||
-rw-r--r-- | pysite/views/main/info/jams.py | 8 | ||||
-rw-r--r-- | pysite/views/wiki/special/index.py | 9 |
9 files changed, 60 insertions, 37 deletions
diff --git a/pysite/base_route.py b/pysite/base_route.py index e9df7afe..58be7598 100644 --- a/pysite/base_route.py +++ b/pysite/base_route.py @@ -206,3 +206,40 @@ class ErrorView(BaseView): else: raise RuntimeError( "Error views must have an `error_code` that is either an `int` or an iterable") # pragma: no cover # noqa: E501 + + +class TemplateView(RouteView): + """ + An easy view for routes that simply render a template with no extra information. + + This class is intended to be subclassed - use it as a base class for your own views, and set the class-level + attributes as appropriate. For example: + + >>> class MyView(TemplateView): + ... name = "my_view" # Flask internal name for this route + ... path = "/my_view" # Actual URL path to reach this route + ... template = "my_view.html" # Template to use + + Note that this view only handles GET requests. If you need any other verbs, you can implement them yourself + or just use one of the more customizable base view classes. + """ + + template = None # type: str + + @classmethod + def setup(cls: "TemplateView", manager: "pysite.route_manager.RouteManager", blueprint: Blueprint): + """ + Set up the view, deferring most setup to the superclasses but checking for the template attribute. + + :param manager: Instance of the current RouteManager + :param blueprint: Current Flask blueprint to register the error handler for + """ + + if hasattr(super(), "setup"): + super().setup(manager, blueprint) # pragma: no cover + + if not cls.template: + raise RuntimeError("Template views must have `template` defined") + + def get(self, *_): + return self.render(self.template) diff --git a/pysite/route_manager.py b/pysite/route_manager.py index a666ce09..764049cd 100644 --- a/pysite/route_manager.py +++ b/pysite/route_manager.py @@ -8,7 +8,7 @@ from flask_dance.contrib.discord import make_discord_blueprint from flask_sockets import Sockets from gunicorn_config import _when_ready as when_ready -from pysite.base_route import APIView, BaseView, ErrorView, RouteView +from pysite.base_route import APIView, BaseView, ErrorView, RouteView, TemplateView from pysite.constants import ( CSRF, DEBUG_MODE, DISCORD_OAUTH_AUTHORIZED, DISCORD_OAUTH_ID, DISCORD_OAUTH_REDIRECT, DISCORD_OAUTH_SCOPE, DISCORD_OAUTH_SECRET, PREFERRED_URL_SCHEME) @@ -131,6 +131,7 @@ class RouteManager: cls is not RouteView and cls is not APIView and cls is not WS and + cls is not TemplateView and ( BaseView in cls.__mro__ or WS in cls.__mro__ diff --git a/pysite/views/main/about/index.py b/pysite/views/main/about/index.py index 9f211702..6f5ef1c8 100644 --- a/pysite/views/main/about/index.py +++ b/pysite/views/main/about/index.py @@ -1,9 +1,7 @@ -from pysite.base_route import RouteView +from pysite.base_route import TemplateView -class IndexView(RouteView): +class IndexView(TemplateView): path = "/about/" name = "about.index" - - def get(self): - return self.render("main/about/index.html") + template = "main/about/index.html" diff --git a/pysite/views/main/about/rules.py b/pysite/views/main/about/rules.py index 22e79afa..a40110a1 100644 --- a/pysite/views/main/about/rules.py +++ b/pysite/views/main/about/rules.py @@ -1,9 +1,7 @@ -from pysite.base_route import RouteView +from pysite.base_route import TemplateView -class RulesView(RouteView): +class RulesView(TemplateView): path = "/about/rules" name = "about.rules" - - def get(self): - return self.render("main/about/rules.html") + template = "main/about/rules.html" diff --git a/pysite/views/main/index.py b/pysite/views/main/index.py index ef5ed700..874961bb 100644 --- a/pysite/views/main/index.py +++ b/pysite/views/main/index.py @@ -1,9 +1,7 @@ -from pysite.base_route import RouteView +from pysite.base_route import TemplateView -class IndexView(RouteView): +class IndexView(TemplateView): path = "/" name = "index" - - def get(self): - return self.render("main/index.html") + template = "main/index.html" diff --git a/pysite/views/main/info/help.py b/pysite/views/main/info/help.py index a47362fc..6a82a9ed 100644 --- a/pysite/views/main/info/help.py +++ b/pysite/views/main/info/help.py @@ -1,9 +1,7 @@ -from pysite.base_route import RouteView +from pysite.base_route import TemplateView -class HelpView(RouteView): +class HelpView(TemplateView): path = "/info/help" name = "info.help" - - def get(self): - return self.render("main/info/help.html") + template = "main/info/help.html" diff --git a/pysite/views/main/info/index.py b/pysite/views/main/info/index.py index f9fab682..97678ee4 100644 --- a/pysite/views/main/info/index.py +++ b/pysite/views/main/info/index.py @@ -1,9 +1,7 @@ -from pysite.base_route import RouteView +from pysite.base_route import TemplateView -class IndexView(RouteView): +class IndexView(TemplateView): path = "/info/" name = "info.index" - - def get(self): - return self.render("main/info/index.html") + template = "main/info/index.html" diff --git a/pysite/views/main/info/jams.py b/pysite/views/main/info/jams.py index 9158091f..85b6a6dc 100644 --- a/pysite/views/main/info/jams.py +++ b/pysite/views/main/info/jams.py @@ -1,9 +1,7 @@ -from pysite.base_route import RouteView +from pysite.base_route import TemplateView -class IndexView(RouteView): +class IndexView(TemplateView): path = "/info/jams" name = "info.jams" - - def get(self): - return self.render("main/info/jams.html") + template = "main/info/jams.html" diff --git a/pysite/views/wiki/special/index.py b/pysite/views/wiki/special/index.py index 15c0a649..ccfc7a5a 100644 --- a/pysite/views/wiki/special/index.py +++ b/pysite/views/wiki/special/index.py @@ -1,10 +1,7 @@ -from pysite.base_route import RouteView -from pysite.mixins import DBMixin +from pysite.base_route import TemplateView -class PageView(RouteView, DBMixin): +class PageView(TemplateView): path = "/special" name = "special" - - def get(self): - return self.render("wiki/special.html") + template = "wiki/special.html" |