(
url: str,
parameters: dict[str, Any],
)
| 494 | |
| 495 | @staticmethod |
| 496 | def add_parameters_to_url( |
| 497 | url: str, |
| 498 | parameters: dict[str, Any], |
| 499 | ) -> str: |
| 500 | scheme, netloc, url, params, query, fragment = urllib.parse.urlparse(url) |
| 501 | url_params = urllib.parse.parse_qs(query) |
| 502 | # union parameters in url with given parameters, the latter has precedence |
| 503 | url_params.update(**{k: v if isinstance(v, list) else [v] for k, v in parameters.items()}) |
| 504 | parameter_list = [(key, value) for key, values in url_params.items() for value in values] |
| 505 | # remove query from url |
| 506 | url = urllib.parse.urlunparse((scheme, netloc, url, params, "", fragment)) |
| 507 | |
| 508 | if len(parameter_list) == 0: |
| 509 | return url |
| 510 | else: |
| 511 | # we need deterministic URLs for stable test assertions |
| 512 | return f"{url}?{urllib.parse.urlencode(sorted(parameter_list))}" |
| 513 | |
| 514 | def close(self) -> None: |
| 515 | """ |
no test coverage detected