import tomllib import re import sqlalchemy.exc as sqlalchemy_exceptions from src.database import db, init_db from src.database.models import Blog 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']}:" f"{user_config['Database']['password']}@" f"{user_config['Database']['host']}/dev_simple_comments") else: return (f"mysql+pymysql://{user_config['Database']['user']}:" 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() # 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): import src.controllers as app_controllers 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)