@@ -73,13 +73,22 @@ class ClientCatalog:
7373 {'id': 'ado', 'title': "Alzheimer's Disease Ontology"}
7474 """
7575
76- def __init__ (self , cache_dir : str = DEFAULT_CACHE_DIR ) -> None :
76+ def __init__ (
77+ self ,
78+ cache_dir : str = DEFAULT_CACHE_DIR ,
79+ downloader : DownloaderPort | None = None ,
80+ ) -> None :
7781 """Initialize the ClientCatalog.
7882
7983 Args:
8084 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.
8186 """
82- self .__catalog_adapter = CatalogOntologies (cache_dir = Path (cache_dir ))
87+ self .__catalog_adapter = CatalogOntologies (
88+ cache_dir = Path (cache_dir ),
89+ downloader = downloader ,
90+ )
91+ self ._downloader = downloader
8392
8493 def load_catalog (self , force_download : bool = False ) -> None :
8594 """Load the ontology catalog.
@@ -92,7 +101,8 @@ def load_catalog(self, force_download: bool = False) -> None:
92101 >>> catalog.load_catalog()
93102 """
94103 return self .__catalog_adapter .load_catalog (
95- force_download = force_download
104+ force_download = force_download ,
105+ downloader = self ._downloader ,
96106 )
97107
98108 def catalog_as_dict (self ) -> dict :
@@ -218,14 +228,20 @@ class ClientOntology:
218228 [Term('Z', name='root')]
219229 """
220230
221- def __init__ (self , cache_dir : str = DEFAULT_CACHE_DIR ) -> None :
231+ def __init__ (
232+ self ,
233+ cache_dir : str = DEFAULT_CACHE_DIR ,
234+ downloader : DownloaderPort | None = None ,
235+ ) -> None :
222236 """Initialize the ClientOntology.
223237
224238 Args:
225239 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.
226241 """
227242 self ._cache_dir = Path (cache_dir )
228243 self ._ontology = None
244+ self ._downloader = downloader
229245 self ._lookup_tables = None
230246 self ._navigator = None
231247 self ._relations = None
@@ -346,20 +362,28 @@ def load(
346362 >>> client.load(source="./tests/resources/dummy_ontology.obo")
347363 """
348364 logger .info (f'Loading ontology from source: { source } ...' )
349- loader = ProntoLoaderAdapter (cache_dir = self ._cache_dir )
365+ logger .debug (
366+ 'Using downloader: %s' ,
367+ type (downloader ).__name__ if downloader else 'default' ,
368+ )
369+ loader = ProntoLoaderAdapter (
370+ cache_dir = self ._cache_dir , downloader = self ._downloader
371+ )
350372
351373 path = Path (source )
352374 ontology = None
353375
354376 # 1. Case 1: Local file exists
355377 if path .exists ():
378+ logger .debug ('Resolved source type: file' )
356379 logger .info (
357380 f'Found local file at { path } , loading with ProntoLoaderAdapter...'
358381 )
359382 ontology = loader .load_from_file (file_path_ontology = path )
360383
361384 # 2. Case 2: Provided source is a URL
362385 elif re .match (r'^https?://' , source ):
386+ logger .debug ('Resolved source type: url' )
363387 logger .info (
364388 f'Detected URL source, downloading ontology from { source } '
365389 )
@@ -368,7 +392,11 @@ def load(
368392
369393 # 3. Case 3: Try OBO catalog (if file missing or simple ID)
370394 else :
371- catalog_client = ClientCatalog (cache_dir = self ._cache_dir )
395+ logger .debug ('Resolved source type: catalog' )
396+ catalog_client = ClientCatalog (
397+ cache_dir = self ._cache_dir ,
398+ downloader = self ._downloader ,
399+ )
372400 catalog_client .load_catalog ()
373401 available = [
374402 o ['id' ] for o in catalog_client .list_available_ontologies ()
@@ -380,7 +408,9 @@ def load(
380408 f"Ontology '{ name_id } ' found in catalog, downloading..."
381409 )
382410 ontology = loader .load_from_catalog (
383- name_id = name_id , format = 'obo'
411+ name_id = name_id ,
412+ format = 'obo' ,
413+ downloader = self ._downloader ,
384414 )
385415 else :
386416 msg = f"Ontology '{ source } ' not found as file, URL, or catalog entry."
0 commit comments