diff --git a/gitlab/client.py b/gitlab/client.py index 5bae14d35..9312b30d8 100644 --- a/gitlab/client.py +++ b/gitlab/client.py @@ -29,6 +29,7 @@ from gitlab import utils from gitlab.exceptions import GitlabHttpError, GitlabParsingError, on_http_error from gitlab.types import GitlabList +from gitlab.utils import inherit_docstrings REDIRECT_MSG = ( "python-gitlab detected an http to https redirection. You " @@ -572,6 +573,7 @@ def search(self, scope, search, **kwargs): return self.http_list("/search", query_data=data, **kwargs) +@inherit_docstrings class Gitlab(BaseGitlab): _httpx_client_class = httpx.Client @@ -781,6 +783,7 @@ def http_put(self, path, query_data=None, post_data=None, files=None, **kwargs): raise GitlabParsingError(error_message="Failed to parse the server message") +@inherit_docstrings class AsyncGitlab(BaseGitlab): _httpx_client_class = httpx.AsyncClient diff --git a/gitlab/utils.py b/gitlab/utils.py index 8eed3c20e..dbc4f68ca 100644 --- a/gitlab/utils.py +++ b/gitlab/utils.py @@ -17,6 +17,7 @@ import asyncio import functools +from inspect import getmembers, isfunction from urllib.parse import urlparse @@ -93,3 +94,17 @@ def wrapped_f(self, obj, *args, **kwargs): return f(self, obj, *args, **kwargs) return wrapped_f + + +def inherit_docstrings(cls): + """Inherit docstrings for methods which doesn't have its' own + """ + for name, func in getmembers(cls, isfunction): + if func.__doc__: + continue + + for parent in cls.__mro__[1:]: + if hasattr(parent, name): + func.__doc__ = getattr(parent, name).__doc__ + break + return cls