Skip to content

Commit 2200cf2

Browse files
committed
Remove parser_registry parameter and use auto-discovered FilenameParser registry
- Remove parser_registry parameter from OMEROLocalBackend.__init__() - Auto-discover FilenameParser registry from openhcs.microscopes.microscope_interfaces - Update error message to show available parsers - Add retry mechanism for OMERO plate queries
1 parent a438893 commit 2200cf2

1 file changed

Lines changed: 20 additions & 8 deletions

File tree

src/polystore/omero_local.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ def __init__(
115115
omero_data_dir: Optional[Path] = None,
116116
omero_conn=None,
117117
namespace_prefix: str = "polystore",
118-
parser_registry: Optional[Dict[str, Any]] = None,
119118
lock_dir_name: str = ".polystore",
120119
):
121120
try:
@@ -162,8 +161,9 @@ def __init__(
162161
self._microscope_key = f"{namespace_prefix}.microscope_type"
163162
self._lock_dir_name = lock_dir_name
164163

165-
# Parser registry (name -> class/factory/instance)
166-
self._parser_registry = parser_registry or {}
164+
# Parser registry - use auto-discovered FilenameParser registry from openhcs
165+
from openhcs.microscopes.microscope_interfaces import FilenameParser
166+
self._parser_registry = FilenameParser.__registry__
167167

168168
# File format registry
169169
self.format_registry = OMEROFileFormatRegistry()
@@ -325,7 +325,7 @@ def _load_parser(self, parser_name: str):
325325
if parser_entry is None:
326326
raise ValueError(
327327
f"Unknown parser: {parser_name}. "
328-
"Provide parser_registry when constructing OMEROLocalBackend."
328+
f"Available parsers: {list(self._parser_registry.keys())}"
329329
)
330330

331331
if isinstance(parser_entry, type):
@@ -345,12 +345,24 @@ def _load_plate_structure(self, plate_id: int, **kwargs) -> None:
345345
Raises:
346346
ValueError: If plate not found or missing metadata
347347
"""
348+
import time
349+
348350
conn = self._get_connection(**kwargs)
349351

350-
# Query OMERO for plate
351-
plate = conn.getObject("Plate", plate_id)
352-
if not plate:
353-
raise ValueError(f"OMERO Plate not found: {plate_id}")
352+
# Query OMERO for plate with retry mechanism
353+
# Plates may need time to become available after upload
354+
max_retries = 30
355+
retry_delay = 1.0
356+
357+
for attempt in range(max_retries):
358+
plate = conn.getObject("Plate", plate_id)
359+
if plate:
360+
break
361+
if attempt < max_retries - 1:
362+
logger.info(f"Plate {plate_id} not found yet, retrying in {retry_delay}s (attempt {attempt + 1}/{max_retries})")
363+
time.sleep(retry_delay)
364+
else:
365+
raise ValueError(f"OMERO Plate not found after {max_retries} retries: {plate_id}")
354366

355367
# Get parser metadata
356368
parser_name = self._get_parser_from_plate_metadata(plate)

0 commit comments

Comments
 (0)