Skip to content
This repository has been archived by the owner on Sep 2, 2024. It is now read-only.

Commit

Permalink
(#1517) Ensure unique pcap file names are created
Browse files Browse the repository at this point in the history
  • Loading branch information
rtuck99 committed Aug 12, 2024
1 parent c6ddb73 commit aa7f8da
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 30 deletions.
16 changes: 5 additions & 11 deletions src/hyperion/device_setup_plans/setup_panda.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import os
from datetime import datetime
from enum import Enum
from importlib import resources
from pathlib import Path
Expand Down Expand Up @@ -209,18 +209,12 @@ def disarm_panda_for_gridscan(panda, group="disarm_panda_gridscan") -> MsgGenera
yield from bps.wait(group=group, timeout=GENERAL_TIMEOUT)


def set_and_create_panda_directory(panda_directory: Path) -> MsgGenerator:
"""Updates and creates the panda subdirectory which is used by the PandA's PCAP.
See https://github.com/DiamondLightSource/hyperion/issues/1385 for a better long
term solution.
"""
def set_panda_directory(panda_directory: Path) -> MsgGenerator:
"""Updates the root folder which is used by the PandA's PCAP."""

if not os.path.isdir(panda_directory):
LOGGER.debug(f"Creating PandA PCAP subdirectory at {panda_directory}")
# Assumes we have permissions, which should be true on Hyperion for now
os.makedirs(panda_directory)
suffix = datetime.now().strftime("_%Y%m%d%H%M%S")

async def set_panda_dir():
await get_directory_provider().update(directory=panda_directory)
await get_directory_provider().update(directory=panda_directory, suffix=suffix)

yield from bps.wait_for([set_panda_dir])
5 changes: 2 additions & 3 deletions src/hyperion/experiment_plans/flyscan_xray_centre_plan.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
)
from hyperion.device_setup_plans.setup_panda import (
disarm_panda_for_gridscan,
set_and_create_panda_directory,
set_panda_directory,
setup_panda_for_flyscan,
)
from hyperion.device_setup_plans.setup_zebra import (
Expand Down Expand Up @@ -521,8 +521,7 @@ def _panda_triggering_setup(
)

directory_provider_root = Path(parameters.storage_directory)

yield from set_and_create_panda_directory(directory_provider_root)
yield from set_panda_directory(directory_provider_root)

yield from setup_panda_for_flyscan(
fgs_composite.panda,
Expand Down
30 changes: 17 additions & 13 deletions tests/unit_tests/device_setup_plans/test_setup_panda.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from pathlib import Path
from datetime import datetime
from typing import NamedTuple
from unittest.mock import MagicMock, patch

Expand All @@ -7,13 +7,14 @@
from bluesky.plan_stubs import null
from bluesky.run_engine import RunEngine
from bluesky.simulators import RunEngineSimulator
from dodal.common.types import UpdatingDirectoryProvider
from dodal.devices.fast_grid_scan import PandAGridScanParams
from ophyd_async.panda import SeqTrigger

from hyperion.device_setup_plans.setup_panda import (
MM_TO_ENCODER_COUNTS,
disarm_panda_for_gridscan,
set_and_create_panda_directory,
set_panda_directory,
setup_panda_for_flyscan,
)

Expand Down Expand Up @@ -220,15 +221,18 @@ def test_disarm_panda_disables_correct_blocks(sim_run_engine):
assert num_of_waits == 1


def test_set_and_create_panda_directory(tmp_path, RE):
with patch(
"hyperion.device_setup_plans.setup_panda.os.path.isdir", return_value=False
), patch("hyperion.device_setup_plans.setup_panda.os.makedirs") as mock_makedir:
RE(set_and_create_panda_directory(Path(tmp_path)))
mock_makedir.assert_called_once()
@patch("hyperion.device_setup_plans.setup_panda.get_directory_provider")
@patch("hyperion.device_setup_plans.setup_panda.datetime", spec=datetime)
def test_set_panda_directory(
mock_datetime, mock_get_directory_provider: MagicMock, tmp_path, RE
):
mock_directory_provider = MagicMock(spec=UpdatingDirectoryProvider)
mock_datetime.now = MagicMock(
return_value=datetime.fromisoformat("2024-08-11T15:59:23")
)
mock_get_directory_provider.return_value = mock_directory_provider

with patch(
"hyperion.device_setup_plans.setup_panda.os.path.isdir", return_value=True
), patch("hyperion.device_setup_plans.setup_panda.os.makedirs") as mock_makedir:
RE(set_and_create_panda_directory(Path(tmp_path)))
mock_makedir.assert_not_called()
RE(set_panda_directory(tmp_path))
mock_directory_provider.update.assert_called_with(
directory=tmp_path, suffix="_20240811155923"
)
Original file line number Diff line number Diff line change
Expand Up @@ -895,7 +895,7 @@ def test_when_grid_scan_ran_then_eiger_disarmed_before_zocalo_end(
mock_parent.assert_has_calls([call.disarm(), call.run_end(0), call.run_end(0)])

@patch(
"hyperion.experiment_plans.flyscan_xray_centre_plan.set_and_create_panda_directory",
"hyperion.experiment_plans.flyscan_xray_centre_plan.set_panda_directory",
side_effect=_custom_msg("set_panda_directory"),
)
@patch(
Expand All @@ -912,7 +912,7 @@ def test_when_grid_scan_ran_then_eiger_disarmed_before_zocalo_end(
)
def test_flyscan_xray_centre_sets_directory_stages_arms_disarms_unstages_the_panda(
self,
mock_set_and_create_panda_directory: MagicMock,
mock_set_panda_directory: MagicMock,
done_status: Status,
fgs_composite_with_panda_pcap: FlyScanXRayCentreComposite,
fgs_params_use_panda: ThreeDGridScan,
Expand All @@ -927,7 +927,7 @@ def test_flyscan_xray_centre_sets_directory_stages_arms_disarms_unstages_the_pan
flyscan_xray_centre(fgs_composite_with_panda_pcap, fgs_params_use_panda)
)

mock_set_and_create_panda_directory.assert_called_with(
mock_set_panda_directory.assert_called_with(
Path("/tmp/dls/i03/data/2024/cm31105-4/xraycentring/123456")
)

Expand Down

0 comments on commit aa7f8da

Please sign in to comment.