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
« 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
7from AcdhArcheAssets.uri_norm_rules import get_normalized_uri
9logger = logging.getLogger(__name__)
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