Skip to content

Commit aae2937

Browse files
committed
Make models inherit from ConfigModel rather than BaseModel
1 parent 20826b1 commit aae2937

File tree

6 files changed

+23
-16
lines changed

6 files changed

+23
-16
lines changed

src/daq_config_server/client.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@
55

66
import requests
77
from cachetools import TTLCache, cachedmethod
8-
from pydantic import BaseModel, TypeAdapter
8+
from pydantic import TypeAdapter
99
from requests import Response
1010
from requests.exceptions import HTTPError
1111

1212
from daq_config_server.app import ValidAcceptHeaders
13+
from daq_config_server.converters.models import ConfigModel
1314

1415
from .constants import ENDPOINTS
1516

16-
TModel = TypeVar("TModel", bound=BaseModel)
17+
TModel = TypeVar("TModel", bound=ConfigModel)
1718
TNonModel = TypeVar("TNonModel", str, bytes, dict[str, Any])
1819

1920

@@ -27,7 +28,7 @@ def _get_mime_type(
2728
if (
2829
get_origin(requested_return_type) is dict
2930
or requested_return_type is dict
30-
or issubclass(requested_return_type, BaseModel)
31+
or issubclass(requested_return_type, ConfigModel)
3132
):
3233
return ValidAcceptHeaders.JSON
3334
elif requested_return_type is bytes:

src/daq_config_server/converters/_file_converter_map.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from typing import Any
33

44
import xmltodict
5-
from pydantic import BaseModel
65

76
from daq_config_server.converters._converters import (
87
beamline_parameters_to_dict,
@@ -12,8 +11,9 @@
1211
display_config_to_model,
1312
undulator_energy_gap_lut,
1413
)
14+
from daq_config_server.converters.models import ConfigModel
1515

16-
FILE_TO_CONVERTER_MAP: dict[str, Callable[[str], BaseModel | dict[str, Any]]] = { # type: ignore
16+
FILE_TO_CONVERTER_MAP: dict[str, Callable[[str], ConfigModel | dict[str, Any]]] = { # type: ignore
1717
"/tests/test_data/test_good_lut.txt": undulator_energy_gap_lut, # For system tests # noqa
1818
"/dls_sw/i23/software/aithre/aithre_display.configuration": display_config_to_model,
1919
"/dls_sw/i03/software/gda_versions/var/display.configuration": display_config_to_model, # noqa

src/daq_config_server/converters/convert.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22
from pathlib import Path
33
from typing import Any
44

5-
from pydantic import BaseModel
6-
75
import daq_config_server.converters._file_converter_map as file_converter_map
86
from daq_config_server.converters._converter_utils import ConverterParseError
7+
from daq_config_server.converters.models import ConfigModel
98

109

1110
def get_converted_file_contents(file_path: Path) -> dict[str, Any]:
@@ -14,7 +13,7 @@ def get_converted_file_contents(file_path: Path) -> dict[str, Any]:
1413
if converter := file_converter_map.FILE_TO_CONVERTER_MAP.get(str(file_path)):
1514
try:
1615
contents = converter(raw_contents)
17-
if isinstance(contents, BaseModel):
16+
if isinstance(contents, ConfigModel):
1817
return contents.model_dump()
1918
return contents
2019
except Exception as e:

src/daq_config_server/converters/models.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
from pydantic import BaseModel, model_validator
22

33

4-
class DisplayConfigData(BaseModel):
4+
class ConfigModel(BaseModel): ...
5+
6+
7+
class DisplayConfigData(ConfigModel):
58
crosshairX: int
69
crosshairY: int
710
topLeftX: int
@@ -10,7 +13,7 @@ class DisplayConfigData(BaseModel):
1013
bottomRightY: int
1114

1215

13-
class DisplayConfig(BaseModel):
16+
class DisplayConfig(ConfigModel):
1417
zoom_levels: dict[float, DisplayConfigData]
1518
required_zoom_levels: set[float] | None = None
1619

@@ -28,7 +31,7 @@ def check_zoom_levels_match_required(self):
2831
return self
2932

3033

31-
class GenericLookupTable(BaseModel):
34+
class GenericLookupTable(ConfigModel):
3235
column_names: list[str]
3336
rows: list[list[int | float]]
3437

tests/conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@
44

55
import pytest
66
import xmltodict
7-
from pydantic import BaseModel
87

98
from daq_config_server.converters._converters import (
109
beamline_parameters_to_dict,
1110
display_config_to_model,
1211
undulator_energy_gap_lut,
1312
)
13+
from daq_config_server.converters.models import ConfigModel
1414
from tests.constants import ServerFilePaths, TestDataPaths
1515

1616

1717
@pytest.fixture
1818
def mock_file_converter_map() -> Generator[
19-
Mapping[str, Callable[[str], BaseModel | dict[str, Any]]], None, None
19+
Mapping[str, Callable[[str], ConfigModel | dict[str, Any]]], None, None
2020
]:
2121
with patch(
2222
"daq_config_server.converters._file_converter_map.FILE_TO_CONVERTER_MAP",

tests/system_tests/test_client.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@
55

66
import pytest
77
import requests
8-
from pydantic import BaseModel, ValidationError
8+
from pydantic import ValidationError
99

1010
import daq_config_server.converters._file_converter_map as file_converter_map
1111
from daq_config_server.client import ConfigServer
12-
from daq_config_server.converters.models import DisplayConfig, GenericLookupTable
12+
from daq_config_server.converters.models import (
13+
ConfigModel,
14+
DisplayConfig,
15+
GenericLookupTable,
16+
)
1317
from tests.constants import (
1418
ServerFilePaths,
1519
TestDataPaths,
@@ -157,6 +161,6 @@ def test_all_files_in_file_converter_map_can_be_converted_to_target_type(
157161
):
158162
for filename, converter in file_converter_map.FILE_TO_CONVERTER_MAP.items():
159163
return_type = get_type_hints(converter)["return"]
160-
assert return_type is dict or issubclass(return_type, BaseModel)
164+
assert return_type is dict or issubclass(return_type, ConfigModel)
161165
result = server.get_file_contents(filename, return_type)
162166
assert isinstance(result, return_type)

0 commit comments

Comments
 (0)