`gitlab.v4.objects.repositories.RepositoryMixin.repository_merge_base` should only return `dict[str, Any]`
Description of the problem, including code/CLI snippet
Based on the "average" repository_merge_base call
| @cli.register_custom_action(cls_names="Project", required=("refs",)) | |
| @exc.on_http_error(exc.GitlabGetError) | |
| def repository_merge_base( | |
| self, refs: list[str], **kwargs: Any | |
| ) -> dict[str, Any] | requests.Response: | |
| """Return a diff between two branches/commits. | |
| Args: | |
| refs: The refs to find the common ancestor of. Multiple refs can be passed. | |
| **kwargs: Extra options to send to the server (e.g. sudo) | |
| Raises: | |
| GitlabAuthenticationError: If authentication is not correct | |
| GitlabGetError: If the server failed to perform the request | |
| Returns: | |
| The common ancestor commit (*not* a RESTObject) | |
| """ | |
| path = f"/projects/{self.encoded_id}/repository/merge_base" | |
| query_data, _ = utils._transform_types( | |
| data={"refs": refs}, | |
| custom_types={"refs": types.ArrayAttribute}, | |
| transform_data=True, | |
| ) | |
| return self.manager.gitlab.http_get(path, query_data=query_data, **kwargs) |
And the definition of http_get
| def http_get( | |
| self, | |
| path: str, | |
| query_data: dict[str, Any] | None = None, | |
| streamed: bool = False, | |
| raw: bool = False, | |
| **kwargs: Any, | |
| ) -> dict[str, Any] | requests.Response: | |
| """Make a GET request to the Gitlab server. | |
| Args: | |
| path: Path or full URL to query ('/projects' or | |
| 'http://whatever/v4/api/projecs') | |
| query_data: Data to send as query parameters | |
| streamed: Whether the data should be streamed | |
| raw: If True do not try to parse the output as json | |
| **kwargs: Extra options to send to the server (e.g. sudo) | |
| Returns: | |
| A requests result object is streamed is True or the content type is | |
| not json. | |
| The parsed json data otherwise. | |
| Raises: | |
| GitlabHttpError: When the return code is not 2xx | |
| GitlabParsingError: If the json data could not be parsed | |
| """ | |
| query_data = query_data or {} | |
| result = self.http_request( | |
| "get", path, query_data=query_data, streamed=streamed, **kwargs | |
| ) | |
| content_type = utils.get_content_type(result.headers.get("Content-Type")) | |
| if content_type == "application/json" and not streamed and not raw: | |
| try: | |
| json_result = result.json() | |
| if TYPE_CHECKING: | |
| assert isinstance(json_result, dict) | |
| return json_result | |
| except Exception as e: | |
| raise gitlab.exceptions.GitlabParsingError( | |
| error_message="Failed to parse the server message" | |
| ) from e | |
| else: | |
| return result |
I would say that 99.9% (or even 100% of the time) the result is JSON aka dict[str, Any]
Expected Behavior
Actual Behavior
Specifications
- python-gitlab version:
- Gitlab server version (or gitlab.com):