Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions httomo/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ def run(
method_wrapper_comm = global_comm if not does_contain_sweep else MPI.COMM_SELF

if global_comm.rank == 0:
initialise_output_directory(pipeline, does_contain_sweep)
initialise_output_dir_copy_files_inject_defaults(pipeline, does_contain_sweep)

global_comm.Barrier()

Expand Down Expand Up @@ -380,9 +380,15 @@ def set_global_constants(
httomo.globals.MAX_CPU_SLICES = max_cpu_slices


def initialise_output_directory(
def initialise_output_dir_copy_files_inject_defaults(
pipeline: Union[Path, str], does_contain_sweep: bool
) -> None:
"""This function does the following:
- creates output folder
- copies the distortion coefficient file (if provided)
- injects omitted default parameters into the pipeline file
- copies the YAML or JSON pipeline file
"""
try:
Path.mkdir(httomo.globals.run_out_dir, parents=True, exist_ok=True)
except PermissionError as e:
Expand Down
15 changes: 8 additions & 7 deletions httomo/cli_utils.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import json
from pathlib import Path
from typing import Union, Dict, List, Any

MANUAL_SWEEP_TAG = "!Sweep"
RANGE_SWEEP_TAG = "!SweepRange"
from typing import Union, Dict, Any
from httomo.ui_layer import yaml_loader


def is_sweep_pipeline(pipeline: Union[Path, str]) -> bool:
Expand Down Expand Up @@ -34,9 +32,12 @@ def is_sweep_pipeline(pipeline: Union[Path, str]) -> bool:
if isinstance(pipeline, (Path, str)) and (
isinstance(pipeline, Path) or Path(pipeline).exists()
):
with open(pipeline) as f:
for line in f:
if MANUAL_SWEEP_TAG in line or RANGE_SWEEP_TAG in line:
pipeline_conf = yaml_loader(pipeline)
for method in pipeline_conf:
for value in method["parameters"].values():
if isinstance(
value, tuple
): # checking if sweep tags were parsed into tuples
return True
return False

Expand Down
12 changes: 5 additions & 7 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import tempfile

import pytest
from pytest_mock import MockerFixture
from click.testing import CliRunner

import httomo
Expand All @@ -12,7 +11,7 @@
set_global_constants,
transform_limit_str_to_bytes,
main,
initialise_output_directory,
initialise_output_dir_copy_files_inject_defaults,
)
from httomo.ui_layer import PipelineFormat

Expand Down Expand Up @@ -121,7 +120,7 @@ def test_cli_run_accepts_json_string_with_format_flag(mocker, pipeline_format: s
mock_transform_layer.return_value = mock_transform_instance
mock_transform_instance.transform.return_value = mock_pipeline

mocker.patch("httomo.cli.initialise_output_directory")
mocker.patch("httomo.cli.initialise_output_dir_copy_files_inject_defaults")
mocker.patch("httomo.cli.execute_high_throughput_run")
mocker.patch("httomo.cli.is_sweep_pipeline", return_value=False)
mocker.patch("httomo.cli.make_monitors", return_value=None)
Expand Down Expand Up @@ -172,7 +171,6 @@ def test_cli_run_accepts_json_string_with_format_flag(mocker, pipeline_format: s

def test_initialise_output_directory_handles_json_string(tmp_path):
"""Test that initialise_output_directory correctly handles JSON string input."""
from httomo.cli import initialise_output_directory

# Set up the global output directory
output_dir = tmp_path / "output"
Expand All @@ -181,7 +179,7 @@ def test_initialise_output_directory_handles_json_string(tmp_path):
json_string = json.dumps(SAMPLE_JSON_PIPELINE)

# Call the function with a JSON string
initialise_output_directory(json_string, False)
initialise_output_dir_copy_files_inject_defaults(json_string, False)

# Verify directory was created
assert output_dir.exists()
Expand All @@ -206,7 +204,7 @@ def test_initialise_output_directory_handles_path_input(
pipeline_path = Path(__file__).parent.parent / standard_loader

# Call the function with a Path
initialise_output_directory(pipeline_path, False)
initialise_output_dir_copy_files_inject_defaults(pipeline_path, False)

# Verify directory was created
assert output_dir.exists()
Expand All @@ -219,7 +217,7 @@ def test_output_dir_created_if_doesnt_exist(tmp_path: Path, standard_loader: str
output_dir_cli_arg = tmp_path / "out"
httomo.globals.run_out_dir = output_dir_cli_arg / "httomo-output-dir"
pipeline_path = Path(__file__).parent.parent / standard_loader
initialise_output_directory(pipeline_path, False)
initialise_output_dir_copy_files_inject_defaults(pipeline_path, False)
assert output_dir_cli_arg.exists()
assert httomo.globals.run_out_dir.exists()

Expand Down
Loading