summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn L. Villalovos <john@sodarock.com>2022-01-08 13:58:04 -0800
committerJohn L. Villalovos <john@sodarock.com>2022-01-08 13:58:04 -0800
commit8c17afafcc7d9d2a8fecb53b853c2b4f004c4121 (patch)
tree10193bc1178dab265df9cd8fa31cff278e6ad909
parentd45b59e800a14460a1ecdad2d750e42aa99bb96e (diff)
downloadgitlab-jlvillal/remove_replace.tar.gz
chore: remove custom URL encodingjlvillal/remove_replace
We were using `str.replace()` calls to take care of URL encoding issues. Switch them to use our `utils.clean_str_id` which itself uses `urllib.parse.quote()` Closes: #1356
-rw-r--r--gitlab/utils.py4
-rw-r--r--gitlab/v4/objects/features.py3
-rw-r--r--gitlab/v4/objects/files.py15
-rw-r--r--gitlab/v4/objects/repositories.py2
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: