4949import logging
5050import re
5151import sys
52- from typing import Any , Tuple , Union , Optional
52+ from typing import Any , Tuple , Union , Optional , Self
5353
54+ from babel import Locale
5455from dateutil .parser import parse as dateparse
5556import pytz
5657
@@ -286,7 +287,8 @@ def _get_params(request):
286287 LOGGER .debug ('No query parameters found' )
287288 return {}
288289
289- def _get_locale (self , headers , supported_locales ):
290+ def _get_locale (self , headers : dict ,
291+ supported_locales : Union [list , Locale ]) -> tuple :
290292 """
291293 Detects locale from "lang=<language>" param or `Accept-Language`
292294 header. Returns a tuple of (raw, locale) if found in params or headers.
@@ -325,7 +327,7 @@ def _get_locale(self, headers, supported_locales):
325327
326328 return raw , default_locale
327329
328- def _get_format (self , headers ) -> Union [str , None ]:
330+ def _get_format (self , headers : dict ) -> Union [str , None ]:
329331 """
330332 Get `Request` format type from query parameters or headers.
331333
@@ -464,9 +466,9 @@ def is_valid(self, additional_formats=None) -> bool:
464466 return True
465467 return False
466468
467- def get_response_headers (self , force_lang : l10n .Locale = None ,
468- force_type : str = None ,
469- force_encoding : str = None ,
469+ def get_response_headers (self , force_lang : l10n .Locale | None = None ,
470+ force_type : str | None = None ,
471+ force_encoding : str | None = None ,
470472 ** custom_headers ) -> dict :
471473 """
472474 Prepares and returns a dictionary with Response object headers.
@@ -512,7 +514,7 @@ def get_response_headers(self, force_lang: l10n.Locale = None,
512514
513515 return headers
514516
515- def get_request_headers (self , headers ) -> dict :
517+ def get_request_headers (self , headers : dict ) -> dict :
516518 """
517519 Obtains and returns a dictionary with Request object headers.
518520
@@ -529,7 +531,7 @@ def get_request_headers(self, headers) -> dict:
529531class API :
530532 """API object"""
531533
532- def __init__ (self , config , openapi ) :
534+ def __init__ (self , config : dict , openapi : dict ) -> Self | None :
533535 """
534536 constructor
535537
@@ -571,8 +573,8 @@ def __init__(self, config, openapi):
571573 self .manager = get_manager (self .config )
572574 LOGGER .info ('Process manager plugin loaded' )
573575
574- def get_exception (self , status , headers , format_ , code ,
575- description ) -> Tuple [dict , int , str ]:
576+ def get_exception (self , status : int , headers : dict , format_ : str | None ,
577+ code : str , description : str ) -> Tuple [dict , int , str ]:
576578 """
577579 Exception handler
578580
@@ -610,7 +612,8 @@ def get_exception(self, status, headers, format_, code,
610612
611613 return headers , status , content
612614
613- def get_format_exception (self , request ) -> Tuple [dict , int , str ]:
615+ def get_format_exception (self ,
616+ request : APIRequest ) -> Tuple [dict , int , str ]:
614617 """
615618 Returns a format exception.
616619
@@ -631,7 +634,7 @@ def get_format_exception(self, request) -> Tuple[dict, int, str]:
631634 def get_collections_url (self ) -> str :
632635 return f"{ self .base_url } /collections"
633636
634- def get_dataset_templates (self , dataset ) -> dict :
637+ def get_dataset_templates (self , dataset : str ) -> dict :
635638 templates = self .config ['resources' ][dataset ].get ('templates' )
636639
637640 return templates or self .tpl_config ['server' ]['templates' ]
@@ -884,7 +887,7 @@ def openapi_(api: API, request: APIRequest) -> Tuple[dict, int, str]:
884887 return headers , HTTPStatus .OK , api .openapi
885888
886889
887- def conformance (api , request : APIRequest ) -> Tuple [dict , int , str ]:
890+ def conformance (api : API , request : APIRequest ) -> Tuple [dict , int , str ]:
888891 """
889892 Provide conformance definition
890893
@@ -930,7 +933,7 @@ def conformance(api, request: APIRequest) -> Tuple[dict, int, str]:
930933
931934@jsonldify
932935def describe_collections (api : API , request : APIRequest ,
933- dataset = None ) -> Tuple [dict , int , str ]:
936+ dataset : str | None = None ) -> Tuple [dict , int , str ]:
934937 """
935938 Provide collection metadata
936939
@@ -1377,7 +1380,7 @@ def describe_collections(api: API, request: APIRequest,
13771380
13781381
13791382def get_collection_schema (api : API , request : Union [APIRequest , Any ],
1380- dataset ) -> Tuple [dict , int , str ]:
1383+ dataset : str ) -> Tuple [dict , int , str ]:
13811384 """
13821385 Returns a collection schema
13831386
@@ -1462,7 +1465,7 @@ def get_collection_schema(api: API, request: Union[APIRequest, Any],
14621465 return headers , HTTPStatus .OK , to_json (schema , api .pretty_print )
14631466
14641467
1465- def validate_bbox (value = None ) -> list :
1468+ def validate_bbox (value : list | None = None ) -> list :
14661469 """
14671470 Helper function to validate bbox parameter
14681471
@@ -1510,7 +1513,8 @@ def validate_bbox(value=None) -> list:
15101513 return bbox
15111514
15121515
1513- def validate_datetime (resource_def , datetime_ = None ) -> str :
1516+ def validate_datetime (resource_def : dict ,
1517+ datetime_ : str | None = None ) -> str :
15141518 """
15151519 Helper function to validate temporal parameter
15161520
0 commit comments