diff options
author | John L. Villalovos <john@sodarock.com> | 2021-12-20 14:24:17 -0800 |
---|---|---|
committer | John L. Villalovos <john@sodarock.com> | 2021-12-20 14:24:17 -0800 |
commit | 702e41dd0674e76b292d9ea4f559c86f0a99edfe (patch) | |
tree | 7af846efbabb09e7941d599503ae658f37dea6f7 /gitlab/client.py | |
parent | ccefe80f150eb50176e52b8c9f5b4d0bdb4f5b43 (diff) | |
download | gitlab-jlvillal/leave_dot.tar.gz |
fix: stop encoding '.' to '%2E'jlvillal/leave_dot
Forcing the encoding of '.' to '%2E' causes issues. It also goes
against the RFC:
https://datatracker.ietf.org/doc/html/rfc3986.html#section-2.3
From the RFC:
For consistency, percent-encoded octets in the ranges of ALPHA
(%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen (%2D), period (%2E),
underscore (%5F), or tilde (%7E) should not be created by URI
producers...
Closes #1006
Related #1356
Related #1561
BREAKING CHANGE: stop encoding '.' to '%2E'. This could potentially be
a breaking change for users who have incorrectly configured GitLab
servers which don't handle period '.' characters correctly.
Diffstat (limited to 'gitlab/client.py')
-rw-r--r-- | gitlab/client.py | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/gitlab/client.py b/gitlab/client.py index d3fdaab..e61fb97 100644 --- a/gitlab/client.py +++ b/gitlab/client.py @@ -593,24 +593,19 @@ class Gitlab(object): json, data, content_type = self._prepare_send_data(files, post_data, raw) opts["headers"]["Content-type"] = content_type - # Requests assumes that `.` should not be encoded as %2E and will make - # changes to urls using this encoding. Using a prepped request we can - # get the desired behavior. - # The Requests behavior is right but it seems that web servers don't - # always agree with this decision (this is the case with a default - # gitlab installation) - req = requests.Request(verb, url, json=json, data=data, params=params, **opts) - prepped = self.session.prepare_request(req) - if TYPE_CHECKING: - assert prepped.url is not None - prepped.url = utils.sanitized_url(prepped.url) - settings = self.session.merge_environment_settings( - prepped.url, {}, streamed, verify, None - ) - cur_retries = 0 while True: - result = self.session.send(prepped, timeout=timeout, **settings) + result = self.session.request( + method=verb, + url=url, + json=json, + data=data, + params=params, + timeout=timeout, + verify=verify, + stream=streamed, + **opts, + ) self._check_redirects(result) |