Source code for redditwarp.http.util.merge_query_params


from __future__ import annotations
from typing import Optional, Mapping

import urllib.parse

_NO_VALUE_PARAM_PLACEHOLDER = 'NO_VALUE_PARAM_PLACEHOLDER__d07d4b7d-d881-4217-9bca-42ed0c6a3d04'

[docs]def merge_query_params(url: str, params: Mapping[str, Optional[str]]) -> str: """Merge and return `url` with `params`. The mapping values for `params` can be `None`. A `None` value indicates that the equals delimiter symbol should be omitted. """ urlparts = list(urllib.parse.urlparse(url)) query_dict = urllib.parse.parse_qs(urlparts[4]) none_keys = [] for k, v in params.items(): if v is None: none_keys.append(k) v = _NO_VALUE_PARAM_PLACEHOLDER query_dict.setdefault(k, []).append(v) query = urllib.parse.urlencode(query_dict, doseq=True) for k in none_keys: query = query.replace(f'{k}={_NO_VALUE_PARAM_PLACEHOLDER}', k) urlparts[4] = query return urllib.parse.urlunparse(urlparts)