Coverage for apis_core/generic/utils/__init__.py: 76%

21 statements  

« prev     ^ index     » next       coverage.py v7.5.3, created at 2025-12-04 11:32 +0000

1import base64 

2import json 

3import logging 

4from typing import Tuple 

5from urllib.parse import parse_qs, urlencode, urlparse, urlunparse 

6 

7from AcdhArcheAssets.uri_norm_rules import get_normalized_uri 

8 

9logger = logging.getLogger(__name__) 

10 

11 

12def get_autocomplete_data_and_normalized_uri( 

13 uri: str, key: str = "anero_ac_data" 

14) -> Tuple[dict, str]: 

15 urlparts = urlparse(uri) 

16 query = urlparts.query 

17 params = parse_qs(query) 

18 data = params.pop(key, {}) 

19 if data: 

20 try: 

21 data = json.loads(base64.b64decode(data[0])) 

22 except Exception as e: 

23 logger.debug("Could not decode anero_ac_data: %s", e) 

24 data = {} 

25 urlparts = urlparts._replace(query=urlencode(params, doseq=True)) 

26 uri = get_normalized_uri(urlunparse(urlparts)) 

27 return data, uri