aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/route_manager.py
diff options
context:
space:
mode:
Diffstat (limited to 'pysite/route_manager.py')
-rw-r--r--pysite/route_manager.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/pysite/route_manager.py b/pysite/route_manager.py
new file mode 100644
index 00000000..501076b7
--- /dev/null
+++ b/pysite/route_manager.py
@@ -0,0 +1,41 @@
+# coding=utf-8
+import importlib
+import inspect
+import os
+
+from flask import Flask
+
+from pysite.base_route import BaseView, ErrorView
+
+__author__ = "Gareth Coles"
+
+
+class RouteManager:
+ def __init__(self):
+ self.app = Flask(__name__)
+ self.app.secret_key = os.environ.get("WEBPAGE_SECRET_KEY")
+
+ self.load_views()
+
+ def run(self):
+ self.app.run(port=int(os.environ.get("WEBPAGE_PORT")), debug=False)
+
+ def load_views(self, 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}")
+ continue
+
+ if filename.endswith(".py") and not filename.startswith("__init__"):
+ module = importlib.import_module(f"{location}/{filename}".replace("/", ".")[:-3])
+
+ for cls_name, cls in inspect.getmembers(module):
+ if (
+ inspect.isclass(cls) and
+ cls is not BaseView and
+ cls is not ErrorView and
+ (BaseView in cls.__mro__ or ErrorView in cls.__mro__)
+ ):
+ cls.setup(self.app)
+ print(f"View loaded: {cls.name: <25} ({module.__name__}.{cls_name})")