diff --git a/gitlab/base.py b/gitlab/base.py index 0706ffb76..dc7a004ec 100644 --- a/gitlab/base.py +++ b/gitlab/base.py @@ -19,7 +19,7 @@ import pprint import textwrap from types import ModuleType -from typing import Any, Dict, Iterable, NamedTuple, Optional, Tuple, Type +from typing import Any, Dict, Iterable, NamedTuple, Optional, Tuple, Type, Union import gitlab from gitlab import types as g_types @@ -211,14 +211,14 @@ def _update_attrs(self, new_attrs: Dict[str, Any]) -> None: self.__dict__["_updated_attrs"] = {} self.__dict__["_attrs"] = new_attrs - def get_id(self) -> Any: + def get_id(self) -> Optional[Union[int, str]]: """Returns the id of the resource.""" if self._id_attr is None or not hasattr(self, self._id_attr): return None return getattr(self, self._id_attr) @property - def encoded_id(self) -> Any: + def encoded_id(self) -> Optional[Union[int, str]]: """Ensure that the ID is url-encoded so that it can be safely used in a URL path""" obj_id = self.get_id() diff --git a/gitlab/mixins.py b/gitlab/mixins.py index 0d22b78e4..d66b2ebe5 100644 --- a/gitlab/mixins.py +++ b/gitlab/mixins.py @@ -576,6 +576,7 @@ def delete(self, **kwargs: Any) -> None: """ if TYPE_CHECKING: assert isinstance(self.manager, DeleteMixin) + assert self.encoded_id is not None self.manager.delete(self.encoded_id, **kwargs) diff --git a/gitlab/v4/objects/files.py b/gitlab/v4/objects/files.py index 0a56fefa2..4ff5b3add 100644 --- a/gitlab/v4/objects/files.py +++ b/gitlab/v4/objects/files.py @@ -77,6 +77,8 @@ def delete( # type: ignore GitlabDeleteError: If the server cannot perform the request """ file_path = self.encoded_id + if TYPE_CHECKING: + assert isinstance(file_path, str) self.manager.delete(file_path, branch, commit_message, **kwargs)