From 0cf8cd5d404d9a56f55eb3481b1a5efc2ae7c0bb Mon Sep 17 00:00:00 2001 From: Eitan Date: Thu, 11 May 2023 17:09:07 +0300 Subject: [PATCH 1/3] Updated existing test to use unittest --- pims/utils/tests/test_sort.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pims/utils/tests/test_sort.py b/pims/utils/tests/test_sort.py index 373e625..6d1783f 100644 --- a/pims/utils/tests/test_sort.py +++ b/pims/utils/tests/test_sort.py @@ -1,7 +1,13 @@ +import unittest + from pims.utils.sort import natural_keys -def test_natural_keys(): - alist = ["something1", "something12", "something17", "something2"] - alist.sort(key=natural_keys) - assert alist == ['something1', 'something2', 'something12', 'something17'] +class TestNaturalSort(unittest.TestCase): + def setUp(self): + pass + + def test_natural_keys(self): + alist = ["something1", "something12", "something17", "something2"] + alist.sort(key=natural_keys) + assert alist == ['something1', 'something2', 'something12', 'something17'] From f396ed0c57ac1ec13133f98affaa9dfae2ac6948 Mon Sep 17 00:00:00 2001 From: Eitan Date: Thu, 11 May 2023 17:13:32 +0300 Subject: [PATCH 2/3] refactoring natural_keys - modified function to handle spaces in paths (https://github.com/soft-matter/pims/issues/309); edited docstring; added type hints --- pims/utils/sort.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pims/utils/sort.py b/pims/utils/sort.py index 614a1b3..90e937c 100644 --- a/pims/utils/sort.py +++ b/pims/utils/sort.py @@ -3,12 +3,12 @@ __all__ = ["natural_keys"] -def _atoi(text): +def _atoi(text: str): return int(text) if text.isdigit() else text -def natural_keys(text): - """Sort list of string in a human way. +def natural_keys(text: str): + """Natural sort order function for strings. See: http://stackoverflow.com/questions/5967500/how-to-correctly-sort-a-string-with-a-number- inside Examples @@ -18,4 +18,4 @@ def natural_keys(text): >>> print(alist) ['something1', 'something2', 'something12', 'something17'] """ - return [_atoi(c) for c in re.split(r'(\d+)', text)] + return [_atoi(c) for c in re.split(r'(\d+)', text.replace(' ', ''))] \ No newline at end of file From f9d54d56349cfad8b52791f48dcb93a460a204ae Mon Sep 17 00:00:00 2001 From: Eitan Date: Thu, 11 May 2023 17:16:04 +0300 Subject: [PATCH 3/3] Added test for the handling of spaces in path when using natural_keys --- pims/utils/tests/test_sort.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pims/utils/tests/test_sort.py b/pims/utils/tests/test_sort.py index 6d1783f..431f551 100644 --- a/pims/utils/tests/test_sort.py +++ b/pims/utils/tests/test_sort.py @@ -11,3 +11,25 @@ def test_natural_keys(self): alist = ["something1", "something12", "something17", "something2"] alist.sort(key=natural_keys) assert alist == ['something1', 'something2', 'something12', 'something17'] + + def test_natural_keys_with_spaces(self): + paths = [ + '/data/meh/img- 19.tiff', + '/data/meh/img- 181.tiff', + '/data/meh/img- 20.tiff', + '/data/meh/img- 0.tiff', + '/data/meh/img- 1.tiff', + '/data/meh/img- 2.tiff', + ] + + paths.sort(key=natural_keys) + + assert paths == [ + '/data/meh/img- 0.tiff', + '/data/meh/img- 1.tiff', + '/data/meh/img- 2.tiff', + '/data/meh/img- 19.tiff', + '/data/meh/img- 20.tiff', + '/data/meh/img- 181.tiff', + + ]