diff --git a/.copier-answers.yml b/.copier-answers.yml index 6e8fe95..6bb0ecd 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -2,7 +2,7 @@ # It is needed to track the repo template version, and editing may break things. # This file will be overwritten by copier on template updates. -_commit: v1.2.8 +_commit: v1.3.2 _src_path: https://github.com/bec-project/plugin_copier_template.git make_commit: false project_name: csaxs_bec diff --git a/.gitea/workflows/create_update_pr.yml b/.gitea/workflows/create_update_pr.yml index bfb47c3..c83b901 100644 --- a/.gitea/workflows/create_update_pr.yml +++ b/.gitea/workflows/create_update_pr.yml @@ -17,14 +17,14 @@ jobs: uses: actions/setup-python@v5 with: python-version: '3.12' - + - name: Install tools run: | - pip install copier PySide6 + pip install copier PySide6 bec_lib - name: Checkout uses: actions/checkout@v4 - + - name: Perform update run: | git config --global user.email "bec_ci_staging@psi.ch" @@ -35,8 +35,10 @@ jobs: git checkout -b $branch echo "Running copier update..." - output="$(copier update --trust --defaults --conflict inline 2>&1)" - echo "$output" + copier update --trust --defaults --conflict inline 2>&1 | tee copier.log + status=${PIPESTATUS[0]} + output="$(cat copier.log)" + echo $output msg="$(printf '%s\n' "$output" | head -n 1)" if ! grep -q "make_commit: true" .copier-answers.yml ; then diff --git a/csaxs_bec/scans/scan_customization/__init__.py b/csaxs_bec/scans/scan_customization/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/csaxs_bec/scans/scan_customization/scan_components.py b/csaxs_bec/scans/scan_customization/scan_components.py new file mode 100644 index 0000000..ea2fe31 --- /dev/null +++ b/csaxs_bec/scans/scan_customization/scan_components.py @@ -0,0 +1,12 @@ +""" +Scan components for csaxs_bec. + +The scan components module allows you to define custom components that can be used in your scans. +These components can be used to encapsulate reusable logic, interact with devices, or perform specific actions during the scan lifecycle. +""" + +from bec_server.scan_server.scans.scan_components import ScanComponents + + +class CsaxsBecScanComponents(ScanComponents): + """Scan components for csaxs_bec.""" diff --git a/csaxs_bec/scans/scan_customization/scan_modifier.py b/csaxs_bec/scans/scan_customization/scan_modifier.py new file mode 100644 index 0000000..7fa01f6 --- /dev/null +++ b/csaxs_bec/scans/scan_customization/scan_modifier.py @@ -0,0 +1,33 @@ +""" +Scan modifier plugin for csaxs_bec. + +The scan modifier allows you to modify the scan lifecycle and run custom actions before or after the scan hook or replace the scan hook entirely. +Note that the scan_modifier module must be registered as a plugin in the pyproject.toml file for it to be recognized by the BEC framework and that +there can only be one scan_modifier plugin registered at a time. If you need to run multiple scan modifiers, you can create a single scan +modifier plugin that runs multiple actions in sequence with conditional logic to determine which actions to run based on the scan context. +""" + +from bec_server.scan_server.scans.scan_modifier import ScanModifier, scan_hook_impl + + +class CsaxsBecScanModifier(ScanModifier): + """ + Scan modifier for csaxs_bec. + + By inheriting from the ScanModifier base class, you get access to currently running scan (self.scan), the devices (self.dev), the scan info (self.scan_info), + the scan components (self.components) and the scan actions (self.actions). + """ + + def __init__(self, **kwargs): + """Initialize the scan modifier.""" + super().__init__(**kwargs) + + # Example of running code before the scan stage for a specific scan + # @scan_hook_impl("stage", "before") + # def before_stage(self): + # """Run before the stage hook.""" + # self.actions.send_client_info("Custom stage logic executed by ScanModifier.") + # if self.scan_info.scan_name == "example_scan": + # self.dev.samx.set(20) + + diff --git a/pyproject.toml b/pyproject.toml index 5924b4f..19caca4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,9 @@ plugin_file_writer = "csaxs_bec.file_writer" [project.entry-points."bec.scans"] plugin_scans = "csaxs_bec.scans" +[project.entry-points."bec.scans.scan_modifier"] +plugin_scan_modifier = "csaxs_bec.scans.scan_customization.scan_modifier" + [project.entry-points."bec.scans.metadata_schema"] plugin_metadata_schema = "csaxs_bec.scans.metadata_schema"