3333 NodesDataframe ,
3434 CatalogOntologies ,
3535)
36- from ontograph .downloader import DownloaderPort
36+ from ontograph .downloader import DownloaderPort , get_default_downloader
3737from ontograph .config .settings import DEFAULT_CACHE_DIR
3838from ontograph .queries .navigator import (
3939 NavigatorPronto ,
5858]
5959
6060
61+ def _resolve_downloader (
62+ cache_dir : Path , downloader : DownloaderPort | str | None
63+ ) -> DownloaderPort :
64+ if isinstance (downloader , str ):
65+ return get_default_downloader (cache_dir = cache_dir , backend = downloader )
66+ if downloader is None :
67+ return get_default_downloader (cache_dir = cache_dir , backend = 'pooch' )
68+ return downloader
69+
70+
6171# --------------------------------------------- #
6272# ---- Client for Catalog --- #
6373# --------------------------------------------- #
@@ -76,19 +86,22 @@ class ClientCatalog:
7686 def __init__ (
7787 self ,
7888 cache_dir : str = DEFAULT_CACHE_DIR ,
79- downloader : DownloaderPort | None = None ,
89+ downloader : DownloaderPort | str | None = None ,
8090 ) -> None :
8191 """Initialize the ClientCatalog.
8292
8393 Args:
8494 cache_dir (str, optional): Directory for caching catalog data. Defaults to DEFAULT_CACHE_DIR.
85- downloader (DownloaderPort | None, optional): Downloader adapter for remote resources. Defaults to None.
95+ downloader (DownloaderPort | str | None, optional): Downloader adapter or backend name
96+ ('pooch' or 'download_manager'). Defaults to 'pooch'.
8697 """
98+ cache_path = Path (cache_dir )
99+ resolved_downloader = _resolve_downloader (cache_path , downloader )
87100 self .__catalog_adapter = CatalogOntologies (
88- cache_dir = Path ( cache_dir ) ,
89- downloader = downloader ,
101+ cache_dir = cache_path ,
102+ downloader = resolved_downloader ,
90103 )
91- self ._downloader = downloader
104+ self ._downloader = resolved_downloader
92105
93106 def load_catalog (self , force_download : bool = False ) -> None :
94107 """Load the ontology catalog.
@@ -231,17 +244,18 @@ class ClientOntology:
231244 def __init__ (
232245 self ,
233246 cache_dir : str = DEFAULT_CACHE_DIR ,
234- downloader : DownloaderPort | None = None ,
247+ downloader : DownloaderPort | str | None = None ,
235248 ) -> None :
236249 """Initialize the ClientOntology.
237250
238251 Args:
239252 cache_dir (str, optional): Directory for caching ontology data. Defaults to DEFAULT_CACHE_DIR.
240- downloader (DownloaderPort | None, optional): Downloader adapter for remote resources. Defaults to None.
253+ downloader (DownloaderPort | str | None, optional): Downloader adapter or backend name
254+ ('pooch' or 'download_manager'). Defaults to 'pooch'.
241255 """
242256 self ._cache_dir = Path (cache_dir )
257+ self ._downloader = _resolve_downloader (self ._cache_dir , downloader )
243258 self ._ontology = None
244- self ._downloader = downloader
245259 self ._lookup_tables = None
246260 self ._navigator = None
247261 self ._relations = None
@@ -331,7 +345,7 @@ def _detect_source_type(self, source: str) -> str:
331345 def load (
332346 self ,
333347 source : str ,
334- downloader : DownloaderPort = None ,
348+ downloader : DownloaderPort | str | None = None ,
335349 include_obsolete : bool = False ,
336350 backend : str = 'pronto' ,
337351 ) -> None :
@@ -346,7 +360,8 @@ def load(
346360
347361 Args:
348362 source (str): Path to the ontology file, URL, or OBO Foundry identifier.
349- downloader (DownloaderPort, optional): Downloader adapter for remote files. Defaults to None.
363+ downloader (DownloaderPort | str | None, optional): Downloader adapter or backend name
364+ ('pooch' or 'download_manager'). Defaults to None.
350365 include_obsolete (bool, optional): If True, include obsolete terms when building GraphBLAS structures. Defaults to False.
351366 backend (str, optional): Backend for queries ('pronto' or 'graphblas'). Defaults to 'pronto'.
352367
@@ -362,12 +377,19 @@ def load(
362377 >>> client.load(source="./tests/resources/dummy_ontology.obo")
363378 """
364379 logger .info (f'Loading ontology from source: { source } ...' )
380+ resolved_downloader = (
381+ _resolve_downloader (self ._cache_dir , downloader )
382+ if downloader is not None
383+ else self ._downloader
384+ )
365385 logger .debug (
366386 'Using downloader: %s' ,
367- type (downloader ).__name__ if downloader else 'default' ,
387+ type (resolved_downloader ).__name__
388+ if resolved_downloader
389+ else 'default' ,
368390 )
369391 loader = ProntoLoaderAdapter (
370- cache_dir = self ._cache_dir , downloader = self . _downloader
392+ cache_dir = self ._cache_dir , downloader = resolved_downloader
371393 )
372394
373395 path = Path (source )
@@ -388,14 +410,16 @@ def load(
388410 f'Detected URL source, downloading ontology from { source } '
389411 )
390412 filename = Path (source ).name or 'ontology.obo'
391- ontology = loader .load_from_url (source , filename , downloader )
413+ ontology = loader .load_from_url (
414+ source , filename , resolved_downloader
415+ )
392416
393417 # 3. Case 3: Try OBO catalog (if file missing or simple ID)
394418 else :
395419 logger .debug ('Resolved source type: catalog' )
396420 catalog_client = ClientCatalog (
397421 cache_dir = self ._cache_dir ,
398- downloader = self . _downloader ,
422+ downloader = resolved_downloader ,
399423 )
400424 catalog_client .load_catalog ()
401425 available = [
@@ -410,7 +434,7 @@ def load(
410434 ontology = loader .load_from_catalog (
411435 name_id = name_id ,
412436 format = 'obo' ,
413- downloader = self . _downloader ,
437+ downloader = resolved_downloader ,
414438 )
415439 else :
416440 msg = f"Ontology '{ source } ' not found as file, URL, or catalog entry."
0 commit comments