From 5c6bf7d2abee96e6baf6c2e851db503925fcc72a Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Tue, 6 Feb 2018 11:47:19 +0000 Subject: Template rendering --- pysite/route_manager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'pysite/route_manager.py') diff --git a/pysite/route_manager.py b/pysite/route_manager.py index 501076b7..f922be6a 100644 --- a/pysite/route_manager.py +++ b/pysite/route_manager.py @@ -5,7 +5,7 @@ import os from flask import Flask -from pysite.base_route import BaseView, ErrorView +from pysite.base_route import BaseView, ErrorView, RouteView __author__ = "Gareth Coles" @@ -35,7 +35,8 @@ class RouteManager: inspect.isclass(cls) and cls is not BaseView and cls is not ErrorView and - (BaseView in cls.__mro__ or ErrorView in cls.__mro__) + cls is not RouteView and + BaseView in cls.__mro__ ): cls.setup(self.app) print(f"View loaded: {cls.name: <25} ({module.__name__}.{cls_name})") -- cgit v1.2.3 From e3d01f857375b6a226dd09480f326dbb20764783 Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Tue, 6 Feb 2018 14:36:49 +0000 Subject: Rethinkdb setup method; not actually called yet --- pysite/route_manager.py | 43 ++++++++++++++++++++++++++++++++++++++++++- requirements.txt | 3 ++- 2 files changed, 44 insertions(+), 2 deletions(-) (limited to 'pysite/route_manager.py') diff --git a/pysite/route_manager.py b/pysite/route_manager.py index f922be6a..813816b7 100644 --- a/pysite/route_manager.py +++ b/pysite/route_manager.py @@ -2,13 +2,19 @@ import importlib import inspect import os +import rethinkdb -from flask import Flask +from flask import Flask, g, abort from pysite.base_route import BaseView, ErrorView, RouteView __author__ = "Gareth Coles" +DB_HOST = os.environ["RETHINKDB_HOST"] +DB_PORT = os.environ["RETHINKDB_PORT"] +DB_DATABASE = os.environ["RETHINKDB_DATABASE"] +DB_TABLE = os.environ["RETHINKDB_TABLE"] + class RouteManager: def __init__(self): @@ -40,3 +46,38 @@ class RouteManager: ): cls.setup(self.app) print(f"View loaded: {cls.name: <25} ({module.__name__}.{cls_name})") + + def setup_db(self): + connection = self.get_db_connection(connect_database=False) + + try: + rethinkdb.db_create(DB_DATABASE).run(connection) + rethinkdb.db(DB_DATABASE).table_create(DB_TABLE).run(connection) + print("Database created") + except rethinkdb.RqlRuntimeError: + print("Database found") + finally: + connection.close() + + self.app.before_request(self.db_before_request) + self.app.teardown_request(self.db_teardown_request) + + def get_db_connection(self, connect_database=True): + if connect_database: + return rethinkdb.connect(host=DB_HOST, port=DB_PORT, db=DB_DATABASE) + else: + return rethinkdb.connect(host=DB_HOST, port=DB_PORT) + + def db_before_request(self): + try: + # g is the Flask global context object + g.rdb_conn = self.get_db_connection() + except rethinkdb.RqlDriverError: + abort(503, "Database connection could be established.") + + def db_teardown_request(self, _): + try: + # g is the Flask global context object + g.rdb_conn.close() + except AttributeError: + pass diff --git a/requirements.txt b/requirements.txt index 69ca547f..e6a3877f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ -flask==0.12.2 \ No newline at end of file +flask==0.12.2 +rethinkdb -- cgit v1.2.3 From 520ff6c0072591d3b9a034ebdf85f158f5a0ddda Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Tue, 6 Feb 2018 14:37:25 +0000 Subject: snekchek --- pysite/route_manager.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'pysite/route_manager.py') diff --git a/pysite/route_manager.py b/pysite/route_manager.py index 813816b7..142882e6 100644 --- a/pysite/route_manager.py +++ b/pysite/route_manager.py @@ -2,9 +2,10 @@ import importlib import inspect import os -import rethinkdb -from flask import Flask, g, abort +from flask import Flask, abort, g + +import rethinkdb from pysite.base_route import BaseView, ErrorView, RouteView -- cgit v1.2.3 From bb86a6e537e8f556323f505ee3f5d62f84e416ec Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Tue, 6 Feb 2018 14:40:19 +0000 Subject: Use .get() for environs --- pysite/route_manager.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'pysite/route_manager.py') diff --git a/pysite/route_manager.py b/pysite/route_manager.py index 142882e6..b71dea2f 100644 --- a/pysite/route_manager.py +++ b/pysite/route_manager.py @@ -11,10 +11,10 @@ from pysite.base_route import BaseView, ErrorView, RouteView __author__ = "Gareth Coles" -DB_HOST = os.environ["RETHINKDB_HOST"] -DB_PORT = os.environ["RETHINKDB_PORT"] -DB_DATABASE = os.environ["RETHINKDB_DATABASE"] -DB_TABLE = os.environ["RETHINKDB_TABLE"] +DB_HOST = os.environ.get("RETHINKDB_HOST") +DB_PORT = os.environ.get("RETHINKDB_PORT") +DB_DATABASE = os.environ.get("RETHINKDB_DATABASE") +DB_TABLE = os.environ.get("RETHINKDB_TABLE") class RouteManager: -- cgit v1.2.3 From dea4ca1d9c601b4add6612d4850439dc1c703a98 Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Tue, 6 Feb 2018 14:57:11 +0000 Subject: Fix template loading --- pysite/route_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pysite/route_manager.py') diff --git a/pysite/route_manager.py b/pysite/route_manager.py index b71dea2f..e9e701e0 100644 --- a/pysite/route_manager.py +++ b/pysite/route_manager.py @@ -19,7 +19,7 @@ DB_TABLE = os.environ.get("RETHINKDB_TABLE") class RouteManager: def __init__(self): - self.app = Flask(__name__) + self.app = Flask(__name__, template_folder="../templates") self.app.secret_key = os.environ.get("WEBPAGE_SECRET_KEY") self.load_views() -- cgit v1.2.3 From 7bc5e8bee74bb0a8b879a38f69748d40558a5e0b Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Wed, 7 Feb 2018 10:13:36 +0000 Subject: Static files; basic templates --- pysite/base_route.py | 12 +++++++----- pysite/route_manager.py | 7 ++++++- static/favicon.ico | Bin 0 -> 28957 bytes static/logos/logo_discord.png | Bin 0 -> 63590 bytes templates/base.html | 17 +++++++++++++++++ templates/index.html | 19 +++++++++---------- templates/navigation.html | 18 ++++++++++++++++++ 7 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 static/favicon.ico create mode 100644 static/logos/logo_discord.png create mode 100644 templates/base.html create mode 100644 templates/navigation.html (limited to 'pysite/route_manager.py') diff --git a/pysite/base_route.py b/pysite/base_route.py index 16bf0984..f983c1a2 100644 --- a/pysite/base_route.py +++ b/pysite/base_route.py @@ -6,14 +6,17 @@ __author__ = "Gareth Coles" class BaseView(MethodView): + name = None # type: str + def render(self, *template_names, **context): - # thin wrapper here in case it needs to be modified later + context["current_page"] = self.name + context["view"] = self + return render_template(template_names, **context) class RouteView(BaseView): - path = None #: str - name = None #: str + path = None # type: str @classmethod def setup(cls: "RouteView", app: Flask): @@ -24,8 +27,7 @@ class RouteView(BaseView): class ErrorView(BaseView): - name = None #: str - error_code = None #: int + error_code = None # type: int @classmethod def setup(cls: "ErrorView", app: Flask): diff --git a/pysite/route_manager.py b/pysite/route_manager.py index e9e701e0..f61c4f65 100644 --- a/pysite/route_manager.py +++ b/pysite/route_manager.py @@ -16,10 +16,15 @@ DB_PORT = os.environ.get("RETHINKDB_PORT") DB_DATABASE = os.environ.get("RETHINKDB_DATABASE") DB_TABLE = os.environ.get("RETHINKDB_TABLE") +TEMPLATES_PATH = "../templates" +STATIC_PATH = "../static" + class RouteManager: def __init__(self): - self.app = Flask(__name__, template_folder="../templates") + self.app = Flask( + __name__, template_folder=TEMPLATES_PATH, static_folder=STATIC_PATH, static_url_path="/static" + ) self.app.secret_key = os.environ.get("WEBPAGE_SECRET_KEY") self.load_views() diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 00000000..046480bf Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/logos/logo_discord.png b/static/logos/logo_discord.png new file mode 100644 index 00000000..2bf74ffd Binary files /dev/null and b/static/logos/logo_discord.png differ diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 00000000..9e00af20 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,17 @@ + + + + {% block head %} + Python | {% block title %}{% endblock %} + + + + + + {% endblock %} + + +{% include "navigation.html" %} +{% block content %}{% endblock %} + + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 07bd4541..418347d2 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,10 +1,9 @@ - - - - - Python | Home - - -

Coming soon:tm:

- - \ No newline at end of file +{% extends "base.html" %} +{% block title %}Home{% endblock %} +{% block content %} +
+

+ Coming soon :tm: +

+
+{% endblock %} \ No newline at end of file diff --git a/templates/navigation.html b/templates/navigation.html new file mode 100644 index 00000000..d1f1f363 --- /dev/null +++ b/templates/navigation.html @@ -0,0 +1,18 @@ +
+ +
\ No newline at end of file -- cgit v1.2.3 From 6f65f2111a95cc813955f978e5fc92f11ebedea0 Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Wed, 7 Feb 2018 10:58:43 +0000 Subject: Turn on debug mode with `FLASK_DEBUG=1` --- pysite/route_manager.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'pysite/route_manager.py') diff --git a/pysite/route_manager.py b/pysite/route_manager.py index f61c4f65..8133c486 100644 --- a/pysite/route_manager.py +++ b/pysite/route_manager.py @@ -23,14 +23,16 @@ STATIC_PATH = "../static" class RouteManager: def __init__(self): self.app = Flask( - __name__, template_folder=TEMPLATES_PATH, static_folder=STATIC_PATH, static_url_path="/static" + __name__, template_folder=TEMPLATES_PATH, static_folder=STATIC_PATH, static_url_path="/static", ) 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) + self.app.run( + port=int(os.environ.get("WEBPAGE_PORT")), debug="FLASK_DEBUG" in os.environ + ) def load_views(self, location="pysite/views"): for filename in os.listdir(location): -- cgit v1.2.3