From c276de1d8f3c2eddb43413385614e6a685868385 Mon Sep 17 00:00:00 2001 From: Gareth Walley Date: Sat, 9 Aug 2025 20:45:38 +0100 Subject: [PATCH] fix filename util --- src/cegpy/utilities/_util.py | 15 ++++++++++----- src/tests/test_util.py | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/cegpy/utilities/_util.py b/src/cegpy/utilities/_util.py index e72ea95..41df6f8 100644 --- a/src/cegpy/utilities/_util.py +++ b/src/cegpy/utilities/_util.py @@ -90,13 +90,18 @@ def generate_colour_run(number, starts, ends) -> list: def generate_filename_and_mkdir(filename: Union[str, Path]) -> Tuple[Path, str]: - """Creates a filename.""" - if filename is not Path: + """Create a filename ensuring the directory exists. + + If *filename* has no suffix a ``.png`` suffix is appended and the + corresponding filetype returned. + """ + + if not isinstance(filename, Path): filename = Path(filename) - filetype = filename.suffix.strip(".") - if filename.suffix == filetype: - filename.joinpath(".png") + filetype = filename.suffix.lstrip(".") + if not filetype: + filename = filename.with_suffix(".png") filetype = "png" filename.parent.mkdir(parents=True, exist_ok=True) diff --git a/src/tests/test_util.py b/src/tests/test_util.py index d8ed8d0..64df247 100644 --- a/src/tests/test_util.py +++ b/src/tests/test_util.py @@ -1,10 +1,13 @@ """Tests cegpy.utilities""" from collections import defaultdict +from tempfile import TemporaryDirectory +from pathlib import Path import unittest from cegpy.utilities import ( check_list_contains_strings, check_tuple_contains_strings, create_sampling_zeros, + generate_filename_and_mkdir, ) @@ -55,3 +58,18 @@ def test_check_tuple_contains_strings(self) -> None: self.assertFalse(check_tuple_contains_strings(("string thing"))) self.assertTrue(check_tuple_contains_strings(("string one", "string two"))) self.assertFalse(check_tuple_contains_strings((1, "2"))) + + def test_generate_filename_and_mkdir(self) -> None: + """Ensure filenames are normalised and directories created.""" + with TemporaryDirectory() as tmpdir: + path_no_ext = Path(tmpdir) / "out" / "fig" + filename, filetype = generate_filename_and_mkdir(str(path_no_ext)) + self.assertTrue(filename.parent.exists()) # directory exists + self.assertEqual(filename.suffix, ".png") + self.assertEqual(filetype, "png") + + path_with_ext = Path(tmpdir) / "out2" / "fig.svg" + filename2, filetype2 = generate_filename_and_mkdir(path_with_ext) + self.assertTrue(filename2.parent.exists()) + self.assertEqual(filename2.suffix, ".svg") + self.assertEqual(filetype2, "svg")