summaryrefslogtreecommitdiff
path: root/config/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'config/__init__.py')
-rw-r--r--config/__init__.py37
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)