diff --git a/src/aare/devices/jfjoch.py b/src/aare/devices/jfjoch.py index f731b6ab..d3ea6388 100644 --- a/src/aare/devices/jfjoch.py +++ b/src/aare/devices/jfjoch.py @@ -64,6 +64,19 @@ class JFJochWrapper: logger.exception("Failed to create aare config client") self._config_client = None + def _get_images_per_file(self) -> int | None: + """Images per file from aare config; None (JFJoch default) if unavailable.""" + if self._config_client is None: + return None + try: + return self._config_client.jfjoch.n_images_per_file or None + except Exception: + logger.warning( + "jfjoch/n_images_per_file not available from aare config; using JFJoch default", + exc_info=True, + ) + return None + def connect(self) -> None: """Connect to JFJoch on first use; a no-op once the client exists.""" if self._connected: @@ -186,11 +199,7 @@ class JFJochWrapper: ) else: smargon_phi_chi = None - images_per_file = ( - self._config_client.jfjoch.n_images_per_file - if self._config_client is not None - else None - ) or None + images_per_file = self._get_images_per_file() dataset_settings = jfjoch_client.DatasetSettings( beam_x_pxl=s.diffraction.beam_center_pxl[0], beam_y_pxl=s.diffraction.beam_center_pxl[1], diff --git a/tests/unit/devices/test_jfjoch.py b/tests/unit/devices/test_jfjoch.py index 298aa972..f96c48ad 100644 --- a/tests/unit/devices/test_jfjoch.py +++ b/tests/unit/devices/test_jfjoch.py @@ -1,4 +1,4 @@ -from unittest.mock import MagicMock, patch +from unittest.mock import MagicMock, PropertyMock, patch import pytest from aarecommon.errors.exception_handler import JFJochCommunicationError @@ -123,6 +123,26 @@ def test_client_is_created_lazily(mock_jfjoch_client): assert wrapper._api is api +def test_images_per_file_from_config(jfjoch_wrapper): + jfjoch_wrapper._config_client = MagicMock() + jfjoch_wrapper._config_client.jfjoch.n_images_per_file = 500 + assert jfjoch_wrapper._get_images_per_file() == 500 + + +def test_images_per_file_without_config_client(jfjoch_wrapper): + jfjoch_wrapper._config_client = None + assert jfjoch_wrapper._get_images_per_file() is None + + +def test_images_per_file_falls_back_when_key_not_set(jfjoch_wrapper): + # e.g. x06da, where jfjoch/n_images_per_file is not set and has no default + jfjoch_wrapper._config_client = MagicMock() + type(jfjoch_wrapper._config_client.jfjoch).n_images_per_file = PropertyMock( + side_effect=KeyError("jfjoch/n_images_per_file is not set and has no default") + ) + assert jfjoch_wrapper._get_images_per_file() is None + + def test_initialize(jfjoch_wrapper, mock_jfjoch_client): mock_jfjoch_client.initialize_post.reset_mock() jfjoch_wrapper.initialize()