7373]
7474
7575
76- def init (cfg : dict ) -> bool :
76+ def get_manager (cfg : dict ) -> JoinManager | None :
7777 """
78- Shortcut to initialize join utility with config .
78+ Shortcut to initialize a JoinManager instance .
7979 Called dynamically by the main `API.__init__` method.
8080
8181 :param cfg: pygeoapi configuration dict
8282
83- :returns: True if OGC API - Joins is available and initialized
83+ :returns: `JoinManager` instance or None ( if OGC API - Joins is disabled)
8484 """
85- return join_util . init (cfg )
85+ return JoinManager . from_config (cfg )
8686
8787
8888def get_oas_30 (cfg : dict , locale : str ) -> tuple [list [dict [str , str ]], dict [str , dict ]]: # noqa
@@ -97,7 +97,7 @@ def get_oas_30(cfg: dict, locale: str) -> tuple[list[dict[str, str]], dict[str,
9797
9898 paths = {}
9999
100- if not join_util . enabled (cfg ):
100+ if not get_manager (cfg ):
101101 LOGGER .info ('OpenAPI: skipping OGC API - Joins endpoints setup' )
102102 return [], {'paths' : paths }
103103
@@ -540,7 +540,7 @@ def list_joins(api: API, request: APIRequest,
540540 return _not_found (api , request , headers , msg )
541541
542542 try :
543- sources = join_util .list_sources (dataset )
543+ sources = api . join_manager .list_sources (dataset )
544544 except Exception as e :
545545 LOGGER .error (str (e ), exc_info = True )
546546 return _server_error (api , request , headers , str (e ))
@@ -645,7 +645,7 @@ def join_details(api: API, request: APIRequest,
645645 return _not_found (api , request , headers , msg )
646646
647647 try :
648- details = join_util .read_join_source (dataset , join_id )
648+ details = api . join_manager .read_join_source (dataset , join_id )
649649
650650 uri = f'{ api .get_collections_url ()} /{ dataset } '
651651 output = {
@@ -697,10 +697,9 @@ def join_details(api: API, request: APIRequest,
697697 except ValueError as e :
698698 LOGGER .error (f'Invalid request parameter: { e } ' , exc_info = True )
699699 return _bad_request (api , request , headers , str (e ))
700- except KeyError as e :
701- msg = 'Collection or join source not found'
702- LOGGER .error (f'Invalid parameter value: { e } ' , exc_info = True )
703- return _not_found (api , request , headers , msg )
700+ except (JoinSourceNotFoundError , JoinSourceMissingError ) as e :
701+ LOGGER .error (f'{ e } ' , exc_info = True )
702+ return _not_found (api , request , headers , str (e ))
704703 except Exception as e :
705704 LOGGER .error (f'Failed to retrieve join: { e } ' , exc_info = True )
706705 msg = f'Failed to retrieve join: { str (e )} '
@@ -739,7 +738,7 @@ def create_join(api: API, request: APIRequest,
739738 """
740739 headers , collections , dataset = _prepare (api , request , collection )
741740
742- if not api .supports_joins :
741+ if not api .join_manager :
743742 # TODO: perhaps a 406 Not Acceptable would be better?
744743 msg = 'OGC API - Joins is not available on this instance'
745744 return _server_error (api , request , headers , msg )
@@ -768,7 +767,7 @@ def create_join(api: API, request: APIRequest,
768767 # Get provider locale (if any)
769768 prv_locale = l10n .get_plugin_locale (provider_def , request .raw_locale )
770769
771- details = join_util .process_csv (dataset , provider , request .form )
770+ details = api . join_manager .process_csv (dataset , provider , request .form )
772771
773772 uri = f'{ api .get_collections_url ()} /{ dataset } '
774773 join_id = details ['id' ]
@@ -865,13 +864,14 @@ def delete_join(api: API, request: APIRequest,
865864 return _not_found (api , request , headers , msg )
866865
867866 try :
868- if not join_util .remove_source (dataset , join_id ):
867+ if not api . join_manager .remove_source (dataset , join_id ):
869868 msg = f'Join source { join_id } not found for collection { dataset } '
870869 return _not_found (api , request , headers , msg )
871870 except ValueError as e :
872871 LOGGER .error (f'Invalid request parameter: { e } ' , exc_info = True )
873872 return _bad_request (api , request , headers , str (e ))
874873 except Exception as e :
874+ # e.g. unable to delete file from disk
875875 LOGGER .error (f'Failed to delete join source: { e } ' ,
876876 exc_info = True )
877877 msg = f'Failed to delete join: { str (e )} '
0 commit comments