diff options
author | Nejc Habjan <hab.nejc@gmail.com> | 2021-04-26 22:23:58 +0200 |
---|---|---|
committer | Nejc Habjan <hab.nejc@gmail.com> | 2021-04-26 22:23:58 +0200 |
commit | 8e25cecce3c0a19884a8d231ee1a672b80e94398 (patch) | |
tree | fba98537b4a8573987508d4538ad03ae0696a173 | |
parent | e37de189d5799e9bdbbd7556289d4b617aff9c4d (diff) | |
download | gitlab-8e25cecce3c0a19884a8d231ee1a672b80e94398.tar.gz |
fix(files): do not url-encode file paths twice
-rw-r--r-- | gitlab/__version__.py | 2 | ||||
-rw-r--r-- | gitlab/tests/objects/test_repositories.py | 49 | ||||
-rw-r--r-- | gitlab/v4/objects/files.py | 1 |
3 files changed, 50 insertions, 2 deletions
diff --git a/gitlab/__version__.py b/gitlab/__version__.py index 8128e31..a28b9bc 100644 --- a/gitlab/__version__.py +++ b/gitlab/__version__.py @@ -3,4 +3,4 @@ __copyright__ = "Copyright 2013-2019 Gauvain Pocentek, 2019-2021 python-gitlab t __email__ = "gauvainpocentek@gmail.com" __license__ = "LGPL3" __title__ = "python-gitlab" -__version__ = "2.7.0" +__version__ = "2.7.1" diff --git a/gitlab/tests/objects/test_repositories.py b/gitlab/tests/objects/test_repositories.py new file mode 100644 index 0000000..7c4d77d --- /dev/null +++ b/gitlab/tests/objects/test_repositories.py @@ -0,0 +1,49 @@ +""" +GitLab API: +https://docs.gitlab.com/ee/api/repositories.html +https://docs.gitlab.com/ee/api/repository_files.html +""" +from urllib.parse import quote + +import pytest +import responses + +from gitlab.v4.objects import ProjectFile + +file_path = "app/models/key.rb" +ref = "main" + + +@pytest.fixture +def resp_get_repository_file(): + file_response = { + "file_name": "key.rb", + "file_path": file_path, + "size": 1476, + "encoding": "base64", + "content": "IyA9PSBTY2hlbWEgSW5mb3...", + "content_sha256": "4c294617b60715c1d218e61164a3abd4808a4284cbc30e6728a01ad9aada4481", + "ref": ref, + "blob_id": "79f7bbd25901e8334750839545a9bd021f0e4c83", + "commit_id": "d5a3ff139356ce33e37e73add446f16869741b50", + "last_commit_id": "570e7b2abdd848b95f2f578043fc23bd6f6fd24d", + } + + # requests also encodes `.` + encoded_path = quote(file_path, safe="").replace(".", "%2E") + + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url=f"http://localhost/api/v4/projects/1/repository/files/{encoded_path}", + json=file_response, + content_type="application/json", + status=200, + ) + yield rsps + + +def test_get_repository_file(project, resp_get_repository_file): + file = project.files.get(file_path, ref=ref) + assert isinstance(file, ProjectFile) + assert file.file_path == file_path diff --git a/gitlab/v4/objects/files.py b/gitlab/v4/objects/files.py index 9fe692f..5d0401f 100644 --- a/gitlab/v4/objects/files.py +++ b/gitlab/v4/objects/files.py @@ -94,7 +94,6 @@ class ProjectFileManager(GetMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTMa Returns: object: The generated RESTObject """ - file_path = file_path.replace("/", "%2F") return GetMixin.get(self, file_path, ref=ref, **kwargs) @cli.register_custom_action( |