From 67d4468ea2f23b58da7c4a852334e496b9dbcaf9 Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 25 Apr 2025 11:17:14 +0200 Subject: [PATCH 01/10] Normalize Windows style paths to parse folder --- roboflow/util/folderparser.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/roboflow/util/folderparser.py b/roboflow/util/folderparser.py index eff2a118..a0a1f146 100644 --- a/roboflow/util/folderparser.py +++ b/roboflow/util/folderparser.py @@ -12,10 +12,17 @@ LABELMAPS_EXTENSIONS = {".labels", ".yaml", ".yml"} +def _patch_sep(filename): + """ + Replace Windows style slashes to keep filenames consistent. + + Roboflow depend on it server side. + """ + return filename.replace("\\", "/") + + def parsefolder(folder): - folder = folder.strip() - if folder.endswith("/"): - folder = folder[:-1] + folder = _patch_sep(folder).strip().rstrip("/") if not os.path.exists(folder): raise Exception(f"folder does not exist. {folder}") files = _list_files(folder) @@ -53,7 +60,9 @@ def _list_files(folder): for root, dirs, files in os.walk(folder): for file in files: file_path = os.path.join(root, file) - filedescriptors.append(_describe_file(file_path.split(folder)[1])) + rel = os.path.relpath(file_path, folder) + print("FILENAME", file_path, rel) + filedescriptors.append(_describe_file(f"/{rel}")) filedescriptors = sorted(filedescriptors, key=lambda x: _alphanumkey(x["file"])) return filedescriptors @@ -64,8 +73,8 @@ def _add_indices(files): def _describe_file(f): - name = f.split("/")[-1] - dirname = os.path.dirname(f) + f = _patch_sep(f) + dirname, name = f.rsplit("/", 1) fullkey, extension = os.path.splitext(f) fullkey2 = fullkey.replace("/labels", "").replace("/images", "") key = os.path.splitext(name)[0] From 4d98eb9c40f500047057a925b8ae1f10a0d1a325 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 25 Apr 2025 09:21:34 +0000 Subject: [PATCH 02/10] =?UTF-8?q?fix(pre=5Fcommit):=20=F0=9F=8E=A8=20auto?= =?UTF-8?q?=20format=20pre-commit=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roboflow/util/folderparser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roboflow/util/folderparser.py b/roboflow/util/folderparser.py index a0a1f146..e2539ae2 100644 --- a/roboflow/util/folderparser.py +++ b/roboflow/util/folderparser.py @@ -15,7 +15,7 @@ def _patch_sep(filename): """ Replace Windows style slashes to keep filenames consistent. - + Roboflow depend on it server side. """ return filename.replace("\\", "/") From 9f93c9b3a102cf1a449638519be32cb2c4d23113 Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 25 Apr 2025 11:24:46 +0200 Subject: [PATCH 03/10] fixup! Normalize Windows style paths to parse folder --- roboflow/util/folderparser.py | 1 + 1 file changed, 1 insertion(+) diff --git a/roboflow/util/folderparser.py b/roboflow/util/folderparser.py index e2539ae2..239fff9c 100644 --- a/roboflow/util/folderparser.py +++ b/roboflow/util/folderparser.py @@ -278,6 +278,7 @@ def _load_labelmaps(folder, labelmaps): except Exception: # raise Exception(f"failed to load labelmap {labelmap['file']}") pass + print("LABEL MAP", folder, labelmap) return [lm for lm in labelmaps if lm.get("labelmap")] From 9c40aee5827de392d6c59e145470b090c0e9851f Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 25 Apr 2025 11:25:15 +0200 Subject: [PATCH 04/10] fixup! fixup! Normalize Windows style paths to parse folder --- .github/workflows/test.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 70f0f2a7..570da3d1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,10 +8,13 @@ on: jobs: build: - runs-on: ubuntu-latest strategy: matrix: + os: ["ubuntu-latest", "windows-latest"] python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + runs-on: ${{ matrix.os }} + env: + PYTHONUTF8: 1 steps: - name: 🛎️ Checkout From 51f863e1cd8471f2936268484f238b08a7c28bc5 Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 25 Apr 2025 11:38:31 +0200 Subject: [PATCH 05/10] fixup! fixup! fixup! Normalize Windows style paths to parse folder --- tests/util/test_folderparser.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/util/test_folderparser.py b/tests/util/test_folderparser.py index d4d497cb..abbbf319 100644 --- a/tests/util/test_folderparser.py +++ b/tests/util/test_folderparser.py @@ -36,6 +36,7 @@ def test(sharksfolder): testImagePath = "/train/images/sharks_mp4-20_jpg.rf.5359121123e86e016401ea2731e47949.jpg" testImage = [i for i in parsed["images"] if i["file"] == testImagePath][0] expectAnnotationFile = "/train/labels/sharks_mp4-20_jpg.rf.5359121123e86e016401ea2731e47949.txt" + print("AAA", testImagePath, testImage) assert testImage["annotationfile"]["file"] == expectAnnotationFile assert testImage["annotationfile"]["labelmap"] == {0: "fish", 1: "primary", 2: "shark"} From ae3ed357406816e8c3ddce561aa686d08af71189 Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 25 Apr 2025 11:59:42 +0200 Subject: [PATCH 06/10] fixup! fixup! fixup! fixup! Normalize Windows style paths to parse folder --- roboflow/util/folderparser.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/roboflow/util/folderparser.py b/roboflow/util/folderparser.py index 239fff9c..356a3039 100644 --- a/roboflow/util/folderparser.py +++ b/roboflow/util/folderparser.py @@ -74,7 +74,8 @@ def _add_indices(files): def _describe_file(f): f = _patch_sep(f) - dirname, name = f.rsplit("/", 1) + name = f.split("/")[-1] + dirname = os.path.dirname(f) fullkey, extension = os.path.splitext(f) fullkey2 = fullkey.replace("/labels", "").replace("/images", "") key = os.path.splitext(name)[0] From c641cc11f6adf767be8669c6bd8945fe66ef8caa Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 25 Apr 2025 12:00:30 +0200 Subject: [PATCH 07/10] fixup! fixup! fixup! fixup! fixup! Normalize Windows style paths to parse folder --- roboflow/util/folderparser.py | 2 -- tests/util/test_folderparser.py | 1 - 2 files changed, 3 deletions(-) diff --git a/roboflow/util/folderparser.py b/roboflow/util/folderparser.py index 356a3039..33489b79 100644 --- a/roboflow/util/folderparser.py +++ b/roboflow/util/folderparser.py @@ -61,7 +61,6 @@ def _list_files(folder): for file in files: file_path = os.path.join(root, file) rel = os.path.relpath(file_path, folder) - print("FILENAME", file_path, rel) filedescriptors.append(_describe_file(f"/{rel}")) filedescriptors = sorted(filedescriptors, key=lambda x: _alphanumkey(x["file"])) return filedescriptors @@ -279,7 +278,6 @@ def _load_labelmaps(folder, labelmaps): except Exception: # raise Exception(f"failed to load labelmap {labelmap['file']}") pass - print("LABEL MAP", folder, labelmap) return [lm for lm in labelmaps if lm.get("labelmap")] diff --git a/tests/util/test_folderparser.py b/tests/util/test_folderparser.py index abbbf319..d4d497cb 100644 --- a/tests/util/test_folderparser.py +++ b/tests/util/test_folderparser.py @@ -36,7 +36,6 @@ def test(sharksfolder): testImagePath = "/train/images/sharks_mp4-20_jpg.rf.5359121123e86e016401ea2731e47949.jpg" testImage = [i for i in parsed["images"] if i["file"] == testImagePath][0] expectAnnotationFile = "/train/labels/sharks_mp4-20_jpg.rf.5359121123e86e016401ea2731e47949.txt" - print("AAA", testImagePath, testImage) assert testImage["annotationfile"]["file"] == expectAnnotationFile assert testImage["annotationfile"]["labelmap"] == {0: "fish", 1: "primary", 2: "shark"} From e876bb8a9da9e679245d6830c0c7b899fb70faff Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 25 Apr 2025 12:03:40 +0200 Subject: [PATCH 08/10] fixup! fixup! fixup! fixup! fixup! fixup! Normalize Windows style paths to parse folder --- tests/test_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_version.py b/tests/test_version.py index f13479bc..3697e1f5 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -59,7 +59,7 @@ def test_download_returns_dataset(self, *_): self.assertEqual(dataset.name, self.version.name) self.assertEqual(dataset.version, self.version.version) self.assertEqual(dataset.model_format, "coco") - self.assertEqual(dataset.location, "/my-spot") + self.assertEqual(dataset.location, os.path.abspath("/my-spot")) class TestExport(unittest.TestCase): From e104ae2bfbf7ea1b36a800bec5d93f77392b89f0 Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 25 Apr 2025 12:04:05 +0200 Subject: [PATCH 09/10] fixup! fixup! fixup! fixup! fixup! fixup! fixup! Normalize Windows style paths to parse folder --- roboflow/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roboflow/__init__.py b/roboflow/__init__.py index 37a44b09..bcbf24da 100644 --- a/roboflow/__init__.py +++ b/roboflow/__init__.py @@ -15,7 +15,7 @@ from roboflow.models import CLIPModel, GazeModel # noqa: F401 from roboflow.util.general import write_line -__version__ = "1.1.61" +__version__ = "1.1.62" def check_key(api_key, model, notebook, num_retries=0): From b28ec1de7bed6b6dff218f867347086f3c369bc3 Mon Sep 17 00:00:00 2001 From: Iuri de Silvio Date: Fri, 25 Apr 2025 12:04:43 +0200 Subject: [PATCH 10/10] fixup! fixup! fixup! fixup! fixup! fixup! fixup! fixup! Normalize Windows style paths to parse folder --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 570da3d1..a9481351 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: os: ["ubuntu-latest", "windows-latest"] - python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"] runs-on: ${{ matrix.os }} env: PYTHONUTF8: 1