mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-27 13:34:28 +00:00
I somehow managed to get FLASK_DEBUG to work. Flask multithreading is weird.
This commit is contained in:
parent
6ba220869f
commit
8e96cc0a07
8 changed files with 24 additions and 52 deletions
|
@ -1,7 +1,7 @@
|
|||
import typing
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
from sqlalchemy.orm import sessionmaker, scoped_session
|
||||
from contextlib import contextmanager, asynccontextmanager
|
||||
from ..utils import asyncify
|
||||
# noinspection PyUnresolvedReferences
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
import flask as f
|
||||
from werkzeug.local import LocalProxy
|
||||
|
||||
|
||||
alchemy = f.current_app.config["ALCHEMY"]
|
||||
|
||||
|
||||
def get_alchemy_session():
|
||||
if "alchemy_session" not in f.g:
|
||||
f.g.alchemy_session = alchemy.Session()
|
||||
return f.g.alchemy_session
|
||||
|
||||
|
||||
@f.current_app.teardown_appcontext
|
||||
def teardown_alchemy_session(*_, **__):
|
||||
_alchemy_session = f.g.pop("alchemy_session", None)
|
||||
if _alchemy_session is not None:
|
||||
_alchemy_session.close()
|
||||
|
||||
|
||||
alchemy_session = LocalProxy(get_alchemy_session)
|
|
@ -1,7 +1,5 @@
|
|||
from .helloworld import bp as helloworld
|
||||
from .testing import bp as testing
|
||||
from .home import bp as home
|
||||
from .wikiview import bp as wikiview
|
||||
from .tglogin import bp as tglogin
|
||||
|
||||
__all__ = ["helloworld", "testing", "home", "wikiview", "tglogin"]
|
||||
__all__ = ["home", "wikiview", "tglogin"]
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
import flask as f
|
||||
from ... import Royalprint
|
||||
|
||||
|
||||
bp = Royalprint("helloworld", __name__, url_prefix="/helloworld")
|
||||
|
||||
|
||||
@bp.route("/")
|
||||
def helloworld_index():
|
||||
return "Hello world!"
|
|
@ -1,13 +0,0 @@
|
|||
import flask as f
|
||||
from ... import Royalprint
|
||||
from ....database.tables import Royal
|
||||
|
||||
|
||||
bp = Royalprint("testing", __name__, url_prefix="/testing", required_tables={Royal})
|
||||
|
||||
|
||||
@bp.route("/listroyals")
|
||||
def testing_listroyals():
|
||||
from ...alchemyhandler import alchemy, alchemy_session
|
||||
royals = alchemy_session.query(alchemy.Royal).all()
|
||||
return f'<body><script type="text/plain" style="display: block;">{repr(royals)}</script></body>'
|
|
@ -18,7 +18,7 @@ def tglogin_index():
|
|||
|
||||
@bp.route("/done")
|
||||
def tglogin_done():
|
||||
from ...alchemyhandler import alchemy, alchemy_session
|
||||
alchemy, alchemy_session = f.current_app.config["ALCHEMY"], f.current_app.config["ALCHEMY_SESSION"]
|
||||
data_check_string = ""
|
||||
for field in sorted(list(f.request.args)):
|
||||
if field == "hash":
|
||||
|
|
|
@ -50,7 +50,7 @@ def prepare_page(page):
|
|||
|
||||
@bp.route("/")
|
||||
def wikiview_index():
|
||||
from ...alchemyhandler import alchemy, alchemy_session
|
||||
alchemy, alchemy_session = f.current_app.config["ALCHEMY"], f.current_app.config["ALCHEMY_SESSION"]
|
||||
pages = sorted(alchemy_session.query(alchemy.WikiPage).all(), key=lambda page: page.title)
|
||||
return f.render_template("wikiview_index.html", pages=pages)
|
||||
|
||||
|
@ -58,7 +58,7 @@ def wikiview_index():
|
|||
@bp.route("/<uuid:page_id>", defaults={"title": ""})
|
||||
@bp.route("/<uuid:page_id>/<title>")
|
||||
def wikiview_by_id(page_id: uuid.UUID, title: str):
|
||||
from ...alchemyhandler import alchemy, alchemy_session
|
||||
alchemy, alchemy_session = f.current_app.config["ALCHEMY"], f.current_app.config["ALCHEMY_SESSION"]
|
||||
page = alchemy_session.query(alchemy.WikiPage).filter(alchemy.WikiPage.page_id == page_id).one_or_none()
|
||||
if page is None:
|
||||
return "No such page", 404
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import typing
|
||||
import flask as f
|
||||
import os
|
||||
from sqlalchemy.orm import scoped_session
|
||||
from ..database import Alchemy
|
||||
from .royalprint import Royalprint
|
||||
|
||||
|
@ -9,9 +10,26 @@ def create_app(config_obj: typing.Type, blueprints: typing.List[Royalprint]):
|
|||
app = f.Flask(__name__)
|
||||
app.config.from_object(config_obj)
|
||||
app.secret_key = os.environ["SECRET_KEY"]
|
||||
|
||||
@app.teardown_request
|
||||
def teardown_alchemy_session(*_, **__):
|
||||
alchemy_session = app.config["ALCHEMY_SESSION"]
|
||||
if alchemy_session is not None:
|
||||
alchemy_session.remove()
|
||||
|
||||
# Load blueprints
|
||||
required_tables = set()
|
||||
for blueprint in blueprints:
|
||||
required_tables = required_tables.union(blueprint.required_tables)
|
||||
app.register_blueprint(blueprint)
|
||||
app.config["ALCHEMY"] = Alchemy(app.config["DB_PATH"], required_tables)
|
||||
|
||||
# Init Alchemy
|
||||
# Seems like a dirty hack to me, but experiments are fun, right?
|
||||
if len(required_tables) > 0:
|
||||
alchemy = Alchemy(app.config["DB_PATH"], required_tables)
|
||||
app.config["ALCHEMY"] = alchemy
|
||||
app.config["ALCHEMY_SESSION"] = scoped_session(alchemy.Session)
|
||||
else:
|
||||
app.config["ALCHEMY"] = None
|
||||
app.config["ALCHEMY_SESSION"] = None
|
||||
return app
|
||||
|
|
Loading…
Reference in a new issue