From 5989274e479f93c537fc4698d60042eb3f9da8c1 Mon Sep 17 00:00:00 2001 From: Thomas Christiansen Date: Tue, 1 Apr 2025 16:25:39 -0600 Subject: [PATCH 1/4] Fix a case where is_somewhere_below_system_temp would yield incorrect results for Windows users with long names. --- _package/tests/unit_tests/filesystem_pyt.py | 23 +++++++++++++++++++-- _package/xms/core/filesystem/filesystem.py | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/_package/tests/unit_tests/filesystem_pyt.py b/_package/tests/unit_tests/filesystem_pyt.py index 2fc1a3482..2bb815515 100644 --- a/_package/tests/unit_tests/filesystem_pyt.py +++ b/_package/tests/unit_tests/filesystem_pyt.py @@ -5,8 +5,10 @@ from pathlib import Path import platform import shutil +import sys import tempfile import unittest +from unittest import mock import uuid # 2. Third party modules @@ -261,7 +263,24 @@ def test_is_somewhere_below_system_temp(self): """Tests filesystem.is_somewhere_below_system_temp().""" temp_dir = tempfile.mkdtemp() file_path = _make_bob_file(temp_dir) - self.assertTrue(True, is_somewhere_below_system_temp(file_path)) - self.assertTrue(True, is_somewhere_below_system_temp(Path(file_path))) + self.assertTrue(is_somewhere_below_system_temp(file_path)) + self.assertTrue(is_somewhere_below_system_temp(Path(file_path))) Path(file_path).unlink() shutil.rmtree(temp_dir) + + @mock.patch('xms.core.filesystem.filesystem.tempfile') + def test_is_somewhere_below_system_temp_8dot3_names(self, patched_tempfile): + """ + Tests filesystem.is_somewhere_below_system_temp with a shortened file name on Windows. + + is_somewhere_below_system_temp uses a function internally that returns 8.3 file paths on Windows, which makes + people with usernames like LongNameThatExtendsPastThe8Dot3Limit get paths like `c:/users/LONGNA~1/AppData...`. + Failure to compensate for that results in callers that pass expanded paths being told their path isn't in the + system temp directory, even though it is. + """ + if sys.platform != 'win32': + return # Only Windows uses 8.3 filenames, and this test needs Windows. + + patched_tempfile.gettempdir.return_value = 'c:\\PROGRA~1' + file_path = 'C:/Program Files/somewhere' + self.assertTrue(is_somewhere_below_system_temp(file_path)) diff --git a/_package/xms/core/filesystem/filesystem.py b/_package/xms/core/filesystem/filesystem.py index 042353752..2a783a4f1 100644 --- a/_package/xms/core/filesystem/filesystem.py +++ b/_package/xms/core/filesystem/filesystem.py @@ -159,7 +159,7 @@ def is_somewhere_below_system_temp(filename: str | Path) -> bool: Returns: See description. """ - temp_dir = Path(tempfile.gettempdir()) + temp_dir = Path(tempfile.gettempdir()).resolve() filepath = Path(filename) return temp_dir in filepath.parents From 1f9daf2d02559c27e6ac2e4c6e930ee4772f6178 Mon Sep 17 00:00:00 2001 From: Thomas Christiansen Date: Tue, 1 Apr 2025 16:52:21 -0600 Subject: [PATCH 2/4] Add a check for if the other path is an 8.3 one. --- _package/tests/unit_tests/filesystem_pyt.py | 4 ++++ _package/xms/core/filesystem/filesystem.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/_package/tests/unit_tests/filesystem_pyt.py b/_package/tests/unit_tests/filesystem_pyt.py index 2bb815515..7e54a6dff 100644 --- a/_package/tests/unit_tests/filesystem_pyt.py +++ b/_package/tests/unit_tests/filesystem_pyt.py @@ -282,5 +282,9 @@ def test_is_somewhere_below_system_temp_8dot3_names(self, patched_tempfile): return # Only Windows uses 8.3 filenames, and this test needs Windows. patched_tempfile.gettempdir.return_value = 'c:\\PROGRA~1' + file_path = 'C:/Program Files/somewhere' self.assertTrue(is_somewhere_below_system_temp(file_path)) + + file_path = 'C:/PROGRA~1/somewhere' + self.assertTrue(is_somewhere_below_system_temp(file_path)) diff --git a/_package/xms/core/filesystem/filesystem.py b/_package/xms/core/filesystem/filesystem.py index 2a783a4f1..e19bb6cfd 100644 --- a/_package/xms/core/filesystem/filesystem.py +++ b/_package/xms/core/filesystem/filesystem.py @@ -160,7 +160,7 @@ def is_somewhere_below_system_temp(filename: str | Path) -> bool: See description. """ temp_dir = Path(tempfile.gettempdir()).resolve() - filepath = Path(filename) + filepath = Path(filename).resolve() return temp_dir in filepath.parents From 5785783b99aa261b867f3f478ca6ae1a479d5c42 Mon Sep 17 00:00:00 2001 From: Thomas Christiansen Date: Mon, 7 Jul 2025 11:54:05 -0600 Subject: [PATCH 3/4] Flake something to see if the CI will run. --- _package/xms/core/time/time_conversion.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_package/xms/core/time/time_conversion.py b/_package/xms/core/time/time_conversion.py index 09fb7190c..76aa7bad4 100644 --- a/_package/xms/core/time/time_conversion.py +++ b/_package/xms/core/time/time_conversion.py @@ -1,4 +1,8 @@ """Time conversion methods.""" + +__copyright__ = "(C) Copyright Aquaveo 2022" +__license__ = "All rights reserved" + # 1. Standard python modules from datetime import datetime from typing import Optional @@ -10,10 +14,6 @@ # 4. Local modules from .. import _xmscore -__copyright__ = "(C) Copyright Aquaveo 2022" -__license__ = "All rights reserved" - - time_cpp = _xmscore.time From 1eafb91750d654c9c332bdb2c70ebef33de3d633 Mon Sep 17 00:00:00 2001 From: Thomas Christiansen Date: Mon, 7 Jul 2025 11:56:08 -0600 Subject: [PATCH 4/4] Another trivial change to see if the CI will run. --- _package/xms/core/filesystem/filesystem.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_package/xms/core/filesystem/filesystem.py b/_package/xms/core/filesystem/filesystem.py index e19bb6cfd..19aa6e451 100644 --- a/_package/xms/core/filesystem/filesystem.py +++ b/_package/xms/core/filesystem/filesystem.py @@ -1,4 +1,8 @@ """Filesystem utility methods.""" + +__copyright__ = "(C) Copyright Aquaveo 2019" +__license__ = "All rights reserved" + # 1. Standard python modules import os from pathlib import Path @@ -13,10 +17,6 @@ # 4. Local modules -__copyright__ = "(C) Copyright Aquaveo 2019" -__license__ = "All rights reserved" - - def clear_folder(folder: str | Path) -> None: """Deletes everything in folder.