diff --git a/src/configuration.py b/src/configuration.py index 8c318454..f70fe820 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -25,6 +25,10 @@ logger = logging.getLogger(__name__) +class LogicError(Exception): + """Error in application logic.""" + + class AppConfig: """Singleton class to load and store the configuration.""" @@ -55,62 +59,54 @@ def init_from_dict(self, config_dict: dict[Any, Any]) -> None: @property def configuration(self) -> Configuration: """Return the whole configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") return self._configuration @property def service_configuration(self) -> ServiceConfiguration: """Return service configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") return self._configuration.service @property def llama_stack_configuration(self) -> LlamaStackConfiguration: """Return Llama stack configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") return self._configuration.llama_stack @property def user_data_collection_configuration(self) -> UserDataCollection: """Return user data collection configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") return self._configuration.user_data_collection @property def mcp_servers(self) -> list[ModelContextProtocolServer]: """Return model context protocol servers configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") return self._configuration.mcp_servers @property def authentication_configuration(self) -> AuthenticationConfiguration: """Return authentication configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") - assert ( - self._configuration.authentication is not None - ), "logic error: authentication configuration is not loaded" + if self._configuration.authentication is None: + raise LogicError("logic error: authentication configuration is not loaded") return self._configuration.authentication @property def authorization_configuration(self) -> AuthorizationConfiguration: """Return authorization configuration or default no-op configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") if self._configuration.authorization is None: return AuthorizationConfiguration() @@ -120,25 +116,22 @@ def authorization_configuration(self) -> AuthorizationConfiguration: @property def customization(self) -> Optional[Customization]: """Return customization configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") return self._configuration.customization @property def inference(self) -> InferenceConfiguration: """Return inference configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") return self._configuration.inference @property def database_configuration(self) -> DatabaseConfiguration: """Return database configuration.""" - assert ( - self._configuration is not None - ), "logic error: configuration is not loaded" + if self._configuration is None: + raise LogicError("logic error: configuration is not loaded") return self._configuration.database diff --git a/src/models/config.py b/src/models/config.py index 0516c661..de6cc3e2 100644 --- a/src/models/config.py +++ b/src/models/config.py @@ -372,7 +372,8 @@ def jwk_configuration(self) -> JwkConfiguration: raise ValueError( "JWK configuration is only available for JWK token authentication module" ) - assert self.jwk_config is not None, "JWK configuration should not be None" + if self.jwk_config is None: + raise ValueError("JWK configuration should not be None") return self.jwk_config diff --git a/tests/unit/test_configuration.py b/tests/unit/test_configuration.py index 22d84783..4bed5664 100644 --- a/tests/unit/test_configuration.py +++ b/tests/unit/test_configuration.py @@ -1,7 +1,7 @@ """Unit tests for functions defined in src/configuration.py.""" import pytest -from configuration import AppConfig +from configuration import AppConfig, LogicError from models.config import ModelContextProtocolServer @@ -290,63 +290,49 @@ def test_mcp_servers_property_with_servers() -> None: def test_configuration_not_loaded(): """Test that accessing configuration before loading raises an error.""" cfg = AppConfig() - with pytest.raises( - AssertionError, match="logic error: configuration is not loaded" - ): + with pytest.raises(LogicError, match="logic error: configuration is not loaded"): cfg.configuration # pylint: disable=pointless-statement def test_service_configuration_not_loaded(): """Test that accessing service_configuration before loading raises an error.""" cfg = AppConfig() - with pytest.raises( - AssertionError, match="logic error: configuration is not loaded" - ): + with pytest.raises(LogicError, match="logic error: configuration is not loaded"): cfg.service_configuration # pylint: disable=pointless-statement def test_llama_stack_configuration_not_loaded(): """Test that accessing llama_stack_configuration before loading raises an error.""" cfg = AppConfig() - with pytest.raises( - AssertionError, match="logic error: configuration is not loaded" - ): + with pytest.raises(LogicError, match="logic error: configuration is not loaded"): cfg.llama_stack_configuration # pylint: disable=pointless-statement def test_user_data_collection_configuration_not_loaded(): """Test that accessing user_data_collection_configuration before loading raises an error.""" cfg = AppConfig() - with pytest.raises( - AssertionError, match="logic error: configuration is not loaded" - ): + with pytest.raises(LogicError, match="logic error: configuration is not loaded"): cfg.user_data_collection_configuration # pylint: disable=pointless-statement def test_mcp_servers_not_loaded(): """Test that accessing mcp_servers before loading raises an error.""" cfg = AppConfig() - with pytest.raises( - AssertionError, match="logic error: configuration is not loaded" - ): + with pytest.raises(LogicError, match="logic error: configuration is not loaded"): cfg.mcp_servers # pylint: disable=pointless-statement def test_authentication_configuration_not_loaded(): """Test that accessing authentication_configuration before loading raises an error.""" cfg = AppConfig() - with pytest.raises( - AssertionError, match="logic error: configuration is not loaded" - ): + with pytest.raises(LogicError, match="logic error: configuration is not loaded"): cfg.authentication_configuration # pylint: disable=pointless-statement def test_customization_not_loaded(): """Test that accessing customization before loading raises an error.""" cfg = AppConfig() - with pytest.raises( - AssertionError, match="logic error: configuration is not loaded" - ): + with pytest.raises(LogicError, match="logic error: configuration is not loaded"): cfg.customization # pylint: disable=pointless-statement