From e15b6a812f9bab67b1d2a49a1aaaa113c152070c Mon Sep 17 00:00:00 2001 From: David Perl Date: Fri, 28 Aug 2026 10:04:39 +0200 Subject: [PATCH 1/2] fix: report user friendly error on attempted file overwrite --- src/aare/devices/jfjoch.py | 7 ++++++- src/aare/gui/panels/rotation_data_collection.py | 7 +++---- src/aare/gui/panels/smart_rotation_panel.py | 5 +---- src/aare/gui/scan_logic/raster_grid_manager.py | 5 ++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/aare/devices/jfjoch.py b/src/aare/devices/jfjoch.py index 73b4fd70..22c89b19 100644 --- a/src/aare/devices/jfjoch.py +++ b/src/aare/devices/jfjoch.py @@ -8,7 +8,7 @@ from typing import Concatenate, ParamSpec, TypeVar, final import jfjoch_client from aarecommon.config.beamline import get_jfjoch_url from aarecommon.config.logger import setup_logger -from aarecommon.errors.exception_handler import JFJochCommunicationError +from aarecommon.errors.exception_handler import AareUserError, JFJochCommunicationError from aarecommon.models.beamline import MXBeamline from aarecommon.models.models import DAQStatusModel, FluorescenceSpectrumOutputModel from aarecommon.models.raster_grid import RasterGridRequest @@ -293,6 +293,11 @@ class JFJochWrapper: ) return True except Exception as e: + if "Output file already exists" in str(e): + raise AareUserError( + "JFJoch reports output file already exists! Change the filename or increment the run number.", + critical=True, + ) from e raise self._jfjoch_error( f"JFJoch wait until running returned an exception: {e}", error=e, diff --git a/src/aare/gui/panels/rotation_data_collection.py b/src/aare/gui/panels/rotation_data_collection.py index 32f14336..94d7fa04 100644 --- a/src/aare/gui/panels/rotation_data_collection.py +++ b/src/aare/gui/panels/rotation_data_collection.py @@ -1,4 +1,3 @@ -import secrets from pathlib import Path from aarecommon.config.beamline import cfg_get @@ -189,7 +188,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel): if is_single_image: r = RotationScanRequest( - file_prefix=str(add_screening_to_path(self._filename)) + "_" + secrets.token_hex(3), + file_prefix=str(add_screening_to_path(self._filename)), start_omega_deg=self.start_angle.value, incr_omega_deg=self.screening_image_angle.value, wedge_omega_deg=screening_settings["omega_step_deg"], @@ -201,7 +200,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel): ) else: r = RotationScanRequest( - file_prefix=str(add_screening_to_path(self._filename)) + "_" + secrets.token_hex(3), + file_prefix=str(add_screening_to_path(self._filename)), start_omega_deg=self.start_angle.value, wedge_omega_deg=self.screening_image_angle.value, incr_omega_deg=screening_settings["omega_step_deg"], @@ -225,7 +224,7 @@ class RotationDataCollectionPanel(ScanSettingsPanel): logger.error("Cannot run measurement because of check") return r = RotationScanRequest( - file_prefix=str(add_data_to_path(self._filename)) + "_" + secrets.token_hex(3), + file_prefix=str(add_data_to_path(self._filename)), start_omega_deg=self.start_angle.value, steps=self.image_number(), incr_omega_deg=self.image_angle.value, diff --git a/src/aare/gui/panels/smart_rotation_panel.py b/src/aare/gui/panels/smart_rotation_panel.py index dfda61e2..6d6ccd9c 100644 --- a/src/aare/gui/panels/smart_rotation_panel.py +++ b/src/aare/gui/panels/smart_rotation_panel.py @@ -1,5 +1,4 @@ import math -import secrets from aarecommon.config.logger import setup_logger from aarecommon.models.models import CrystalSize, DAQStatusModel, SimpleScanParameters @@ -402,16 +401,14 @@ class SimpleRotationSettingsPanel(QWidget): d_tar=d_tar, ) - # logger.debug("updated labels") if self._prev_params != self.parameters: self._prev_params = self.parameters self.parameters_changed.emit(self.parameters) - # logger.debug("emitted parameters") @Slot() def run_measurement(self): r = RotationScanRequest( - file_prefix=str(add_data_to_path(self._filename)) + "_" + secrets.token_hex(3), + file_prefix=str(add_data_to_path(self._filename)), start_omega_deg=self.start_angle_enter.value, steps=self.n_images, incr_omega_deg=self.image_angle_enter.value, diff --git a/src/aare/gui/scan_logic/raster_grid_manager.py b/src/aare/gui/scan_logic/raster_grid_manager.py index ee75d9ca..0457ee81 100644 --- a/src/aare/gui/scan_logic/raster_grid_manager.py +++ b/src/aare/gui/scan_logic/raster_grid_manager.py @@ -1,5 +1,4 @@ import math -import secrets from enum import Enum import numpy as np @@ -459,7 +458,7 @@ class RasterGridManager(QObject): grid = RasterGridRequest( dtz=ag.dtz, transmission=ag.transmission, - file_prefix=ag.file_prefix + "_" + secrets.token_hex(3), + file_prefix=ag.file_prefix, exp_time_s=ag.exp_time_s, n_x=ag.n_x, n_y=ag.n_y, @@ -485,7 +484,7 @@ class RasterGridManager(QObject): grid = RasterGridRequest( dtz=ag.dtz, transmission=ag.transmission, - file_prefix=ag.file_prefix + "_" + secrets.token_hex(3), + file_prefix=ag.file_prefix, exp_time_s=ag.exp_time_s, n_x=ag.n_x, n_y=ag.n_y, -- 2.54.0 From b5c3dac276d0452c9da6e76ce066c00b29485851 Mon Sep 17 00:00:00 2001 From: perl_d Date: Mon, 31 Aug 2026 17:47:41 +0200 Subject: [PATCH 2/2] fix: add .json to package data --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 538a8a2a..3523aaff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -90,6 +90,7 @@ build-backend = "setuptools.build_meta" [tool.setuptools.package-data] "aare.gui.graphics" = ["*.svg", "*.png"] +"*" = ["*.json"] [tool.black] line-length = 100 -- 2.54.0