diff options
Diffstat (limited to 'config')
-rw-r--r-- | config/__init__.py | 37 |
1 files changed, 34 insertions, 3 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) |