← 返回首页
`gitlab.v4.objects.repositories.RepositoryMixin.repository_merge_base` should only return `dict[str, Any]` · Issue #3390 · python-gitlab/python-gitlab · GitHub
Skip to content

Navigation Menu

Toggle navigation
Sign in
Appearance settings
Search or jump to...

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Resetting focus

gitlab.v4.objects.repositories.RepositoryMixin.repository_merge_base should only return dict[str, Any] #3390

New issue
New issue

Description

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):

https://github.com/python-gitlab/python-gitlab/issues?q=sort%3Aupdated-desc%20is%3Aissue%20repository_merge_base

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Footer

      © 2026 GitHub, Inc.