diff options
| author | Max Wittig <max.wittig@siemens.com> | 2022-08-04 16:36:31 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-04 16:36:31 +0200 |
| commit | d263f57a34a58d44531e3abbdbfedf354b0c70ca (patch) | |
| tree | 767a6ffd18128fe96108836cc3de714bd672a36d /gitlab/client.py | |
| parent | 2ebfc7096ddbf2386029536acef1858985f3f257 (diff) | |
| parent | 1398426cd748fdf492fe6184b03ac2fcb7e4fd6e (diff) | |
| download | gitlab-d263f57a34a58d44531e3abbdbfedf354b0c70ca.tar.gz | |
Merge pull request #2219 from python-gitlab/fix/no-duplicate-params
fix(client): ensure encoded query params are never duplicated
Diffstat (limited to 'gitlab/client.py')
| -rw-r--r-- | gitlab/client.py | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gitlab/client.py b/gitlab/client.py index dc6b6e6..b3223e5 100644 --- a/gitlab/client.py +++ b/gitlab/client.py @@ -20,6 +20,7 @@ import os import re import time from typing import Any, cast, Dict, List, Optional, Tuple, TYPE_CHECKING, Union +from urllib import parse import requests import requests.utils @@ -677,11 +678,15 @@ class Gitlab: GitlabHttpError: When the return code is not 2xx """ query_data = query_data or {} - url = self._build_url(path) + raw_url = self._build_url(path) - params: Dict[str, Any] = {} + # parse user-provided URL params to ensure we don't add our own duplicates + parsed = parse.urlparse(raw_url) + params = parse.parse_qs(parsed.query) utils.copy_dict(src=query_data, dest=params) + url = raw_url.replace(parsed.query, "").strip("?") + # Deal with kwargs: by default a user uses kwargs to send data to the # gitlab server, but this generates problems (python keyword conflicts # and python-gitlab/gitlab conflicts). |
