diff options
Diffstat (limited to 'src/expense/app.py')
-rw-r--r-- | src/expense/app.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/expense/app.py b/src/expense/app.py new file mode 100644 index 0000000..6a7b99b --- /dev/null +++ b/src/expense/app.py @@ -0,0 +1,54 @@ +""" +The app setup. +""" + +import os +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_login import LoginManager +from sqlalchemy.orm import DeclarativeBase, MappedAsDataclass + + +class Base(DeclarativeBase, MappedAsDataclass): + """SQLAlchemy Base model that is serailizeable""" + + pass + + +db = SQLAlchemy(model_class=Base) +loginManager = LoginManager() + + +def create_app(instance_path=None) -> Flask: + """Application Factory for Flask""" + app = Flask(__name__, instance_relative_config=True, instance_path=instance_path) + + try: + os.makedirs(app.instance_path) + except OSError: + pass + + app.config.from_pyfile("config.py") + + db.init_app(app) + loginManager.init_app(app) + + with app.app_context(): + from . import auth + + app.register_blueprint(auth.auth) + + from . import tracker + + app.register_blueprint(tracker.tracker) + app.add_url_rule("/", endpoint="index") + + from . import model + + db.create_all() + + model.populate_table() + + loginManager.login_view = "auth.login" # type: ignore + + return app |