Skip to content

Commit e3019d5

Browse files
authored
Merge pull request #461 from tisnik/lcore-605-remove-assert-from-production-code
LCORE-605: remove assert from production code
2 parents 691c83e + c4a8c83 commit e3019d5

File tree

3 files changed

+36
-56
lines changed

3 files changed

+36
-56
lines changed

src/configuration.py

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
logger = logging.getLogger(__name__)
2626

2727

28+
class LogicError(Exception):
29+
"""Error in application logic."""
30+
31+
2832
class AppConfig:
2933
"""Singleton class to load and store the configuration."""
3034

@@ -55,62 +59,54 @@ def init_from_dict(self, config_dict: dict[Any, Any]) -> None:
5559
@property
5660
def configuration(self) -> Configuration:
5761
"""Return the whole configuration."""
58-
assert (
59-
self._configuration is not None
60-
), "logic error: configuration is not loaded"
62+
if self._configuration is None:
63+
raise LogicError("logic error: configuration is not loaded")
6164
return self._configuration
6265

6366
@property
6467
def service_configuration(self) -> ServiceConfiguration:
6568
"""Return service configuration."""
66-
assert (
67-
self._configuration is not None
68-
), "logic error: configuration is not loaded"
69+
if self._configuration is None:
70+
raise LogicError("logic error: configuration is not loaded")
6971
return self._configuration.service
7072

7173
@property
7274
def llama_stack_configuration(self) -> LlamaStackConfiguration:
7375
"""Return Llama stack configuration."""
74-
assert (
75-
self._configuration is not None
76-
), "logic error: configuration is not loaded"
76+
if self._configuration is None:
77+
raise LogicError("logic error: configuration is not loaded")
7778
return self._configuration.llama_stack
7879

7980
@property
8081
def user_data_collection_configuration(self) -> UserDataCollection:
8182
"""Return user data collection configuration."""
82-
assert (
83-
self._configuration is not None
84-
), "logic error: configuration is not loaded"
83+
if self._configuration is None:
84+
raise LogicError("logic error: configuration is not loaded")
8585
return self._configuration.user_data_collection
8686

8787
@property
8888
def mcp_servers(self) -> list[ModelContextProtocolServer]:
8989
"""Return model context protocol servers configuration."""
90-
assert (
91-
self._configuration is not None
92-
), "logic error: configuration is not loaded"
90+
if self._configuration is None:
91+
raise LogicError("logic error: configuration is not loaded")
9392
return self._configuration.mcp_servers
9493

9594
@property
9695
def authentication_configuration(self) -> AuthenticationConfiguration:
9796
"""Return authentication configuration."""
98-
assert (
99-
self._configuration is not None
100-
), "logic error: configuration is not loaded"
97+
if self._configuration is None:
98+
raise LogicError("logic error: configuration is not loaded")
10199

102-
assert (
103-
self._configuration.authentication is not None
104-
), "logic error: authentication configuration is not loaded"
100+
if self._configuration.authentication is None:
101+
raise LogicError("logic error: authentication configuration is not loaded")
105102

106103
return self._configuration.authentication
107104

108105
@property
109106
def authorization_configuration(self) -> AuthorizationConfiguration:
110107
"""Return authorization configuration or default no-op configuration."""
111-
assert (
112-
self._configuration is not None
113-
), "logic error: configuration is not loaded"
108+
if self._configuration is None:
109+
raise LogicError("logic error: configuration is not loaded")
114110

115111
if self._configuration.authorization is None:
116112
return AuthorizationConfiguration()
@@ -120,25 +116,22 @@ def authorization_configuration(self) -> AuthorizationConfiguration:
120116
@property
121117
def customization(self) -> Optional[Customization]:
122118
"""Return customization configuration."""
123-
assert (
124-
self._configuration is not None
125-
), "logic error: configuration is not loaded"
119+
if self._configuration is None:
120+
raise LogicError("logic error: configuration is not loaded")
126121
return self._configuration.customization
127122

128123
@property
129124
def inference(self) -> InferenceConfiguration:
130125
"""Return inference configuration."""
131-
assert (
132-
self._configuration is not None
133-
), "logic error: configuration is not loaded"
126+
if self._configuration is None:
127+
raise LogicError("logic error: configuration is not loaded")
134128
return self._configuration.inference
135129

136130
@property
137131
def database_configuration(self) -> DatabaseConfiguration:
138132
"""Return database configuration."""
139-
assert (
140-
self._configuration is not None
141-
), "logic error: configuration is not loaded"
133+
if self._configuration is None:
134+
raise LogicError("logic error: configuration is not loaded")
142135
return self._configuration.database
143136

144137

src/models/config.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,8 @@ def jwk_configuration(self) -> JwkConfiguration:
372372
raise ValueError(
373373
"JWK configuration is only available for JWK token authentication module"
374374
)
375-
assert self.jwk_config is not None, "JWK configuration should not be None"
375+
if self.jwk_config is None:
376+
raise ValueError("JWK configuration should not be None")
376377
return self.jwk_config
377378

378379

tests/unit/test_configuration.py

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Unit tests for functions defined in src/configuration.py."""
22

33
import pytest
4-
from configuration import AppConfig
4+
from configuration import AppConfig, LogicError
55
from models.config import ModelContextProtocolServer
66

77

@@ -290,63 +290,49 @@ def test_mcp_servers_property_with_servers() -> None:
290290
def test_configuration_not_loaded():
291291
"""Test that accessing configuration before loading raises an error."""
292292
cfg = AppConfig()
293-
with pytest.raises(
294-
AssertionError, match="logic error: configuration is not loaded"
295-
):
293+
with pytest.raises(LogicError, match="logic error: configuration is not loaded"):
296294
cfg.configuration # pylint: disable=pointless-statement
297295

298296

299297
def test_service_configuration_not_loaded():
300298
"""Test that accessing service_configuration before loading raises an error."""
301299
cfg = AppConfig()
302-
with pytest.raises(
303-
AssertionError, match="logic error: configuration is not loaded"
304-
):
300+
with pytest.raises(LogicError, match="logic error: configuration is not loaded"):
305301
cfg.service_configuration # pylint: disable=pointless-statement
306302

307303

308304
def test_llama_stack_configuration_not_loaded():
309305
"""Test that accessing llama_stack_configuration before loading raises an error."""
310306
cfg = AppConfig()
311-
with pytest.raises(
312-
AssertionError, match="logic error: configuration is not loaded"
313-
):
307+
with pytest.raises(LogicError, match="logic error: configuration is not loaded"):
314308
cfg.llama_stack_configuration # pylint: disable=pointless-statement
315309

316310

317311
def test_user_data_collection_configuration_not_loaded():
318312
"""Test that accessing user_data_collection_configuration before loading raises an error."""
319313
cfg = AppConfig()
320-
with pytest.raises(
321-
AssertionError, match="logic error: configuration is not loaded"
322-
):
314+
with pytest.raises(LogicError, match="logic error: configuration is not loaded"):
323315
cfg.user_data_collection_configuration # pylint: disable=pointless-statement
324316

325317

326318
def test_mcp_servers_not_loaded():
327319
"""Test that accessing mcp_servers before loading raises an error."""
328320
cfg = AppConfig()
329-
with pytest.raises(
330-
AssertionError, match="logic error: configuration is not loaded"
331-
):
321+
with pytest.raises(LogicError, match="logic error: configuration is not loaded"):
332322
cfg.mcp_servers # pylint: disable=pointless-statement
333323

334324

335325
def test_authentication_configuration_not_loaded():
336326
"""Test that accessing authentication_configuration before loading raises an error."""
337327
cfg = AppConfig()
338-
with pytest.raises(
339-
AssertionError, match="logic error: configuration is not loaded"
340-
):
328+
with pytest.raises(LogicError, match="logic error: configuration is not loaded"):
341329
cfg.authentication_configuration # pylint: disable=pointless-statement
342330

343331

344332
def test_customization_not_loaded():
345333
"""Test that accessing customization before loading raises an error."""
346334
cfg = AppConfig()
347-
with pytest.raises(
348-
AssertionError, match="logic error: configuration is not loaded"
349-
):
335+
with pytest.raises(LogicError, match="logic error: configuration is not loaded"):
350336
cfg.customization # pylint: disable=pointless-statement
351337

352338

0 commit comments

Comments
 (0)