diff options
-rw-r--r-- | gitlab/utils.py | 4 | ||||
-rw-r--r-- | gitlab/v4/objects/features.py | 3 | ||||
-rw-r--r-- | gitlab/v4/objects/files.py | 15 | ||||
-rw-r--r-- | gitlab/v4/objects/repositories.py | 2 |
4 files changed, 13 insertions, 11 deletions
diff --git a/gitlab/utils.py b/gitlab/utils.py index a1dcb45..2ae107c 100644 --- a/gitlab/utils.py +++ b/gitlab/utils.py @@ -16,7 +16,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. from typing import Any, Callable, Dict, Optional -from urllib.parse import quote +import urllib.parse import requests @@ -57,7 +57,7 @@ def copy_dict(dest: Dict[str, Any], src: Dict[str, Any]) -> None: def clean_str_id(id: str) -> str: - return quote(id, safe="") + return urllib.parse.quote(id, safe="") def remove_none_from_dict(data: Dict[str, Any]) -> Dict[str, Any]: diff --git a/gitlab/v4/objects/features.py b/gitlab/v4/objects/features.py index 2e92596..3078dd6 100644 --- a/gitlab/v4/objects/features.py +++ b/gitlab/v4/objects/features.py @@ -52,7 +52,8 @@ class FeatureManager(ListMixin, DeleteMixin, RESTManager): Returns: The created/updated attribute """ - path = f"{self.path}/{name.replace('/', '%2F')}" + name = utils.clean_str_id(name) + path = f"{self.path}/{name}" data = { "value": value, "feature_group": feature_group, diff --git a/gitlab/v4/objects/files.py b/gitlab/v4/objects/files.py index c3a8ec8..69004f8 100644 --- a/gitlab/v4/objects/files.py +++ b/gitlab/v4/objects/files.py @@ -56,7 +56,7 @@ class ProjectFile(SaveMixin, ObjectDeleteMixin, RESTObject): """ self.branch = branch self.commit_message = commit_message - self.file_path = self.file_path.replace("/", "%2F") + self.file_path = utils.clean_str_id(self.file_path) super(ProjectFile, self).save(**kwargs) @exc.on_http_error(exc.GitlabDeleteError) @@ -76,7 +76,7 @@ class ProjectFile(SaveMixin, ObjectDeleteMixin, RESTObject): GitlabAuthenticationError: If authentication is not correct GitlabDeleteError: If the server cannot perform the request """ - file_path = self.get_id().replace("/", "%2F") + file_path = utils.clean_str_id(self.get_id()) self.manager.delete(file_path, branch, commit_message, **kwargs) @@ -144,7 +144,7 @@ class ProjectFileManager(GetMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTMa assert data is not None self._check_missing_create_attrs(data) new_data = data.copy() - file_path = new_data.pop("file_path").replace("/", "%2F") + file_path = utils.clean_str_id(new_data.pop("file_path")) path = f"{self.path}/{file_path}" server_data = self.gitlab.http_post(path, post_data=new_data, **kwargs) if TYPE_CHECKING: @@ -173,7 +173,7 @@ class ProjectFileManager(GetMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTMa """ new_data = new_data or {} data = new_data.copy() - file_path = file_path.replace("/", "%2F") + file_path = utils.clean_str_id(file_path) data["file_path"] = file_path path = f"{self.path}/{file_path}" self._check_missing_update_attrs(data) @@ -203,7 +203,8 @@ class ProjectFileManager(GetMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTMa GitlabAuthenticationError: If authentication is not correct GitlabDeleteError: If the server cannot perform the request """ - path = f"{self.path}/{file_path.replace('/', '%2F')}" + file_path = utils.clean_str_id(file_path) + path = f"{self.path}/{file_path}" data = {"branch": branch, "commit_message": commit_message} self.gitlab.http_delete(path, query_data=data, **kwargs) @@ -238,7 +239,7 @@ class ProjectFileManager(GetMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTMa Returns: The file content """ - file_path = file_path.replace("/", "%2F").replace(".", "%2E") + file_path = utils.clean_str_id(file_path) path = f"{self.path}/{file_path}/raw" query_data = {"ref": ref} result = self.gitlab.http_get( @@ -265,7 +266,7 @@ class ProjectFileManager(GetMixin, CreateMixin, UpdateMixin, DeleteMixin, RESTMa Returns: A list of commits/lines matching the file """ - file_path = file_path.replace("/", "%2F").replace(".", "%2E") + file_path = utils.clean_str_id(file_path) path = f"{self.path}/{file_path}/blame" query_data = {"ref": ref} result = self.gitlab.http_list(path, query_data, **kwargs) diff --git a/gitlab/v4/objects/repositories.py b/gitlab/v4/objects/repositories.py index b520ab7..60a94fe 100644 --- a/gitlab/v4/objects/repositories.py +++ b/gitlab/v4/objects/repositories.py @@ -39,7 +39,7 @@ class RepositoryMixin(_RestObjectBase): GitlabPutError: If the submodule could not be updated """ - submodule = submodule.replace("/", "%2F") # .replace('.', '%2E') + submodule = utils.clean_str_id(submodule) path = f"/projects/{self.get_id()}/repository/submodules/{submodule}" data = {"branch": branch, "commit_sha": commit_sha} if "commit_message" in kwargs: |