diff options
author | 2018-02-09 12:19:55 +0000 | |
---|---|---|
committer | 2018-02-09 12:19:55 +0000 | |
commit | b38a9f56e54eb21eec37f40075399961ba82906f (patch) | |
tree | 3255dc43a11734726509a1ed79d7dfa1da02cb63 /pysite | |
parent | Weird, PyCharm didn't commit all my changes last push (diff) |
Move from straight app registration to Blueprints (#6)
Diffstat (limited to 'pysite')
-rw-r--r-- | pysite/base_route.py | 10 | ||||
-rw-r--r-- | pysite/route_manager.py | 24 | ||||
-rw-r--r-- | pysite/views/api/__init__.py (renamed from pysite/views/__init__.py) | 0 | ||||
-rw-r--r-- | pysite/views/api/healthcheck.py (renamed from pysite/views/healthcheck.py) | 0 | ||||
-rw-r--r-- | pysite/views/main/__init__.py (renamed from pysite/views/error_handlers/__init__.py) | 0 | ||||
-rw-r--r-- | pysite/views/main/error_handlers/__init__.py | 1 | ||||
-rw-r--r-- | pysite/views/main/error_handlers/http_404.py (renamed from pysite/views/error_handlers/http_404.py) | 0 | ||||
-rw-r--r-- | pysite/views/main/index.py (renamed from pysite/views/index.py) | 0 | ||||
-rw-r--r-- | pysite/views/main/invite.py (renamed from pysite/views/invite.py) | 0 |
9 files changed, 24 insertions, 11 deletions
diff --git a/pysite/base_route.py b/pysite/base_route.py index 916e7fae..8274e66f 100644 --- a/pysite/base_route.py +++ b/pysite/base_route.py @@ -1,5 +1,5 @@ # coding=utf-8 -from flask import Flask, render_template +from flask import Blueprint, render_template from flask.views import MethodView @@ -17,19 +17,19 @@ class RouteView(BaseView): path = None # type: str @classmethod - def setup(cls: "RouteView", app: Flask): + def setup(cls: "RouteView", blueprint: Blueprint): if not cls.path or not cls.name: raise RuntimeError("Route views must have both `path` and `name` defined") - app.add_url_rule(cls.path, view_func=cls.as_view(cls.name)) + blueprint.add_url_rule(cls.path, view_func=cls.as_view(cls.name)) class ErrorView(BaseView): error_code = None # type: int @classmethod - def setup(cls: "ErrorView", app: Flask): + def setup(cls: "ErrorView", blueprint: Blueprint): if not cls.name or not cls.error_code: raise RuntimeError("Error views must have both `name` and `error_code` defined") - app._register_error_handler(None, cls.error_code, cls.as_view(cls.name)) + blueprint.errorhandler(cls.error_code)(cls.as_view(cls.name)) diff --git a/pysite/route_manager.py b/pysite/route_manager.py index ed0947f8..6ed597b1 100644 --- a/pysite/route_manager.py +++ b/pysite/route_manager.py @@ -3,7 +3,7 @@ import importlib import inspect import os -from flask import Flask, abort, g +from flask import Blueprint, Flask, abort, g import rethinkdb @@ -25,18 +25,30 @@ class RouteManager: ) self.app.secret_key = os.environ.get("WEBPAGE_SECRET_KEY") - self.load_views() + self.main_blueprint = Blueprint("main", __name__) + + print(f"Loading Blueprint: {self.main_blueprint.name}") + self.load_views(self.main_blueprint, "pysite/views/main") + self.app.register_blueprint(self.main_blueprint) + print("") + + self.api_blueprint = Blueprint("api", __name__, subdomain="api") + + print(f"Loading Blueprint: {self.api_blueprint.name}") + self.load_views(self.api_blueprint, "pysite/views/api") + self.app.register_blueprint(self.api_blueprint) + print("") def run(self): self.app.run( port=int(os.environ.get("WEBPAGE_PORT")), debug="FLASK_DEBUG" in os.environ ) - def load_views(self, location="pysite/views"): + def load_views(self, blueprint, location="pysite/views"): for filename in os.listdir(location): if os.path.isdir(f"{location}/{filename}"): # Recurse if it's a directory; load ALL the views! - self.load_views(location=f"{location}/{filename}") + self.load_views(blueprint, location=f"{location}/{filename}") continue if filename.endswith(".py") and not filename.startswith("__init__"): @@ -50,8 +62,8 @@ class RouteManager: cls is not RouteView and BaseView in cls.__mro__ ): - cls.setup(self.app) - print(f"View loaded: {cls.name: <25} ({module.__name__}.{cls_name})") + cls.setup(blueprint) + print(f">> View loaded: {cls.name: <15} ({module.__name__}.{cls_name})") def setup_db(self): connection = self.get_db_connection(connect_database=False) diff --git a/pysite/views/__init__.py b/pysite/views/api/__init__.py index 9bad5790..9bad5790 100644 --- a/pysite/views/__init__.py +++ b/pysite/views/api/__init__.py diff --git a/pysite/views/healthcheck.py b/pysite/views/api/healthcheck.py index 9d1f681a..9d1f681a 100644 --- a/pysite/views/healthcheck.py +++ b/pysite/views/api/healthcheck.py diff --git a/pysite/views/error_handlers/__init__.py b/pysite/views/main/__init__.py index 9bad5790..9bad5790 100644 --- a/pysite/views/error_handlers/__init__.py +++ b/pysite/views/main/__init__.py diff --git a/pysite/views/main/error_handlers/__init__.py b/pysite/views/main/error_handlers/__init__.py new file mode 100644 index 00000000..9bad5790 --- /dev/null +++ b/pysite/views/main/error_handlers/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 diff --git a/pysite/views/error_handlers/http_404.py b/pysite/views/main/error_handlers/http_404.py index 1d557d9b..1d557d9b 100644 --- a/pysite/views/error_handlers/http_404.py +++ b/pysite/views/main/error_handlers/http_404.py diff --git a/pysite/views/index.py b/pysite/views/main/index.py index 0c2d1578..0c2d1578 100644 --- a/pysite/views/index.py +++ b/pysite/views/main/index.py diff --git a/pysite/views/invite.py b/pysite/views/main/invite.py index 9563a5e6..9563a5e6 100644 --- a/pysite/views/invite.py +++ b/pysite/views/main/invite.py |