From e417fee5c4afdaae46bb08eba9f31faa80c67e84 Mon Sep 17 00:00:00 2001 From: HombreLaser Date: Thu, 1 Feb 2024 23:33:48 -0600 Subject: Thin main.py --- config/__init__.py | 37 ++++++++++++++++++++++++++++++++++--- main.py | 16 ++++------------ 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/config/__init__.py b/config/__init__.py index b3819b8..1f79ed9 100644 --- a/config/__init__.py +++ b/config/__init__.py @@ -1,11 +1,22 @@ import tomllib -from sqlalchemy.exc import IntegrityError -from src.database import db +import re +import sqlalchemy.exc as sqlalchemy_exceptions +from src.database import db, init_db from src.database.models.blog import Blog +import src.controllers as app_controllers with open('config.toml', 'rb') as config_file: user_config = tomllib.load(config_file) + +def initialize(app): + app.config['SQLALCHEMY_DATABASE_URI'] = database_connection_string(app) + init_db(app) + # Check the config file for any blog domains. + initialize_blogs(app) + initialize_blueprints(app) + + def database_connection_string(app): if app.debug: return (f"mysql+pymysql://{user_config['Database']['user']}:" @@ -16,13 +27,33 @@ def database_connection_string(app): f"{user_config['Database']['password']}@" f"{user_config['Database']['host']}/simple_comments") + def initialize_blogs(app): with app.app_context(): for domain in user_config['Blogs']['domains']: blog = Blog(domain=domain) db.session.add(blog) + # It may be worth it to research a better way to do this... try: db.session.commit() - except IntegrityError: + # The blog's already been registered. + except sqlalchemy_exceptions.IntegrityError: db.session.rollback() continue + # The tables haven't been created. + except sqlalchemy_exceptions.ProgrammingError: + break + + +def initialize_blueprints(app): + controller_regex = re.compile('_controller$') + controllers = [definition for definition in dir(app_controllers) + if controller_regex.search(definition) is not None] + + for controller in controllers: + # Remove the _controller substring from the controller name, + # getting its prefix. + controller_name = controller.split('_')[0] + blueprint = getattr(getattr(app_controllers, controller), + f"{controller_name}_blueprint") + app.register_blueprint(blueprint) diff --git a/main.py b/main.py index 5a585f0..0016370 100644 --- a/main.py +++ b/main.py @@ -1,21 +1,13 @@ from flask import Flask -from flask_migrate import Migrate -from src.database import db, init_db -from src.controllers.dashboard_controller import dashboard_blueprint +from src.database import db import config app = Flask(__name__) -app.config['SQLALCHEMY_DATABASE_URI'] = config.database_connection_string(app) -init_db(app) +# Initialize database, blog domains... +config.initialize(app) -# Blueprints registration -app.register_blueprint(dashboard_blueprint) - -# Check the config file for any blog domains -config.initialize_blogs(app) - -if app.debug == 'development': +if app.debug: # Shell mode @app.shell_context_processor def shell(): -- cgit v1.2.3