diff --git a/config.dev.yml b/config.dev.yml index 61bb3a8..8fe1ddb 100644 --- a/config.dev.yml +++ b/config.dev.yml @@ -1,6 +1 @@ -# Secret key (CHANGE TO RANDOM STRING IN PRODUCTION!) SECRET_KEY: 'development' - -# Database configuration -SQLALCHEMY_DATABASE_URI: 'sqlite:////tmp/test.db' -SQLALCHEMY_ECHO: false diff --git a/development.env b/development.env index 3cd6d84..5faadd5 100644 --- a/development.env +++ b/development.env @@ -1,6 +1,3 @@ FLASK_APP=tofu_api.app FLASK_ENV=development FLASK_CONFIG_FILE=config.dev.yml - -# Show SQLAlchemy 2.0 deprecation warnings -SQLALCHEMY_WARN_20=1 diff --git a/tofu_api/app.py b/tofu_api/app.py index d7a6237..f5a2038 100644 --- a/tofu_api/app.py +++ b/tofu_api/app.py @@ -1,28 +1,17 @@ import os -import sys -import warnings +import yaml from flask import Flask from tofu_api.api import TofuApiBlueprint -from tofu_api.common.config import Config +from tofu_api.config import DefaultConfig from tofu_api.dependencies import Dependencies -# Enable deprecation warnings in dev environment -if not sys.warnoptions and os.getenv('FLASK_ENV') == 'development': - warnings.filterwarnings('default', module='tofu_api.*') - class App(Flask): """ Flask application for Tofu API. """ - # Override Flask classes - config_class = Config - - # Set type hint for config - config: Config - # Dependencies container dependencies: Dependencies @@ -36,9 +25,10 @@ class App(Flask): instance_path=project_root_dir, instance_relative_config=True, ) + self.config.from_object(DefaultConfig) # Load app configuration from YAML file - self.config.from_yaml(os.getenv('FLASK_CONFIG_FILE', default='config.yml')) + self.config.from_file(os.getenv('FLASK_CONFIG_FILE', default='config.yml'), load=yaml.safe_load) # Initialize DI container self.dependencies = Dependencies() diff --git a/tofu_api/common/config/__init__.py b/tofu_api/common/config/__init__.py deleted file mode 100644 index d7bf64b..0000000 --- a/tofu_api/common/config/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .config import Config -from .defaults import DefaultConfig diff --git a/tofu_api/common/config/config.py b/tofu_api/common/config/config.py deleted file mode 100644 index 37186bd..0000000 --- a/tofu_api/common/config/config.py +++ /dev/null @@ -1,32 +0,0 @@ -import yaml -from flask import Config as BaseConfig - -from .defaults import DefaultConfig - - -class Config(BaseConfig): - """ - Custom config class for the Flask application. - """ - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Set app-specific default values - self.from_object(DefaultConfig) - - def from_yaml(self, filename: str, *, silent: bool = False) -> bool: - """ - Update config from a YAML file. - """ - return self.from_file(filename, load=yaml.safe_load, silent=silent) - - # Properties for type safe access to config values - - @property - def sqlalchemy_database_uri(self) -> str: - return self.get('SQLALCHEMY_DATABASE_URI') - - @property - def sqlalchemy_echo(self) -> bool: - return bool(self.get('SQLALCHEMY_ECHO')) diff --git a/tofu_api/common/config/defaults.py b/tofu_api/common/config/defaults.py deleted file mode 100644 index 9ff5c29..0000000 --- a/tofu_api/common/config/defaults.py +++ /dev/null @@ -1,13 +0,0 @@ -__all__ = [ - 'DefaultConfig', -] - - -class DefaultConfig: - """ - This class defines default values for the app configuration. - """ - - # Database configuration - SQLALCHEMY_DATABASE_URI = None - SQLALCHEMY_ECHO = False diff --git a/tofu_api/common/database/sqlalchemy.py b/tofu_api/common/database/sqlalchemy.py index 1d1cbe9..f3ab214 100644 --- a/tofu_api/common/database/sqlalchemy.py +++ b/tofu_api/common/database/sqlalchemy.py @@ -5,7 +5,6 @@ from sqlalchemy import MetaData, create_engine from sqlalchemy.engine import Engine from sqlalchemy.orm import Session, scoped_session, sessionmaker -from tofu_api.common.config import Config from .metadata import metadata_obj __all__ = [ @@ -24,22 +23,19 @@ class SQLAlchemy: """ Initializes the SQLAlchemy engine. """ - self._engine = self._create_engine(app.config) + self._engine = self._create_engine() self._scoped_session = self._create_scoped_session() @app.teardown_appcontext def shutdown_session(_exception=None): self._scoped_session.remove() - @staticmethod - def _create_engine(config: Config) -> Engine: + def _create_engine(self) -> Engine: """ Create the database engine using the app configuration. """ - return create_engine( - config.sqlalchemy_database_uri, - echo=config.sqlalchemy_echo, - ) + # TODO: Use config + return create_engine('sqlite:////tmp/test.db') def _create_scoped_session(self) -> scoped_session: """ diff --git a/tofu_api/config.py b/tofu_api/config.py new file mode 100644 index 0000000..fbca7a3 --- /dev/null +++ b/tofu_api/config.py @@ -0,0 +1,5 @@ +class DefaultConfig: + """ + This class defined default values for the app configuration. + """ + # TODO