From aac6b526153274491e6d856f7127c50b5f768234 Mon Sep 17 00:00:00 2001 From: Minh Duc Nguyen <37109868+mducducd@users.noreply.github.com> Date: Fri, 23 Jan 2026 11:51:55 +0100 Subject: [PATCH 1/2] Refactor _resolve_extractor_name for better clarity Refactor _resolve_extractor_name function to improve name handling and add regex check for hash suffix. --- src/stamp/encoding/encoder/__init__.py | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/stamp/encoding/encoder/__init__.py b/src/stamp/encoding/encoder/__init__.py index 9e76af5..a7f929e 100644 --- a/src/stamp/encoding/encoder/__init__.py +++ b/src/stamp/encoding/encoder/__init__.py @@ -1,5 +1,6 @@ import logging -import os +import +import re from abc import ABC, abstractmethod from pathlib import Path from tempfile import NamedTemporaryFile @@ -218,23 +219,22 @@ def _save_features_( _logger.debug(f"saved features to {output_path}") -def _resolve_extractor_name(raw: str) -> ExtractorName: - if not raw: - raise ValueError("Empty extractor string") +_HASH_RE = re.compile(r"^[0-9a-fA-F]{6,}$") - name = str(raw).strip().lower() - name = name.replace("_", "-") - for e in ExtractorName: - if name == e.value.lower(): - return e +def _resolve_extractor_name(name: str) -> str: + if not name: + raise ValueError("Empty extractor name") - for e in ExtractorName: - if name.startswith(e.value.lower() + "-"): - return e + name = str(name).strip() - raise ValueError( - f"Unknown extractor '{raw}'. " - f"Expected one of {[e.value for e in ExtractorName]} " - f"or a versioned variant like '-'." - ) + if "-" not in name: + return name + + base, suffix = name.rsplit("-", 1) + + # Strip ONLY if suffix looks like a real hash + if _HASH_RE.match(suffix): + return base + + return name From b5cb6ff02236d6b6e65b59121627644819636bb8 Mon Sep 17 00:00:00 2001 From: mducducd Date: Fri, 23 Jan 2026 11:02:23 +0000 Subject: [PATCH 2/2] reformat --- src/stamp/encoding/encoder/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/stamp/encoding/encoder/__init__.py b/src/stamp/encoding/encoder/__init__.py index a7f929e..5827e88 100644 --- a/src/stamp/encoding/encoder/__init__.py +++ b/src/stamp/encoding/encoder/__init__.py @@ -1,5 +1,5 @@ import logging -import +import os import re from abc import ABC, abstractmethod from pathlib import Path @@ -63,7 +63,7 @@ def encode_slides_( for tile_feats_filename in (progress := tqdm(os.listdir(feat_dir))): h5_path = os.path.join(feat_dir, tile_feats_filename) - slide_name: str = Path(tile_feats_filename).name + slide_name: str = Path(tile_feats_filename).stem progress.set_description(slide_name) # skip patient in case feature file already exists