diff options
author | John L. Villalovos <debian.org@sodarock.com> | 2021-02-20 17:41:22 -0800 |
---|---|---|
committer | John L. Villalovos <debian.org@sodarock.com> | 2021-02-21 17:50:24 -0800 |
commit | 233b79ed442aac66faf9eb4b0087ea126d6dffc5 (patch) | |
tree | 05870d8084efc6e6ade18eb4911098b5057d8b8f /gitlab/client.py | |
parent | 5cc60d5a8ac129652611d3dc12b350b5ca7262b9 (diff) | |
download | gitlab-233b79ed442aac66faf9eb4b0087ea126d6dffc5.tar.gz |
chore: explicitly import gitlab.v4.objects/cli
As we only support the v4 Gitlab API, explicitly import
gitlab.v4.objects and gitlab.v4.clie instead of dynamically importing
it depending on the API version.
This has the added benefit of mypy being able to type check the Gitlab
__init__() function as currently it will fail if we enable type
checking of __init__() it will fail.
Also, this also helps by not confusing tools like pyinstaller/cx_freeze with
dynamic imports so you don't need hooks for standalone executables. And
according to https://docs.gitlab.com/ee/api/,
"GraphQL co-exists with the current v4 REST API. If we have a v5 API, this
should be a compatibility layer on top of GraphQL."
Diffstat (limited to 'gitlab/client.py')
-rw-r--r-- | gitlab/client.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/gitlab/client.py b/gitlab/client.py index dbfc834..6d0401d 100644 --- a/gitlab/client.py +++ b/gitlab/client.py @@ -16,7 +16,6 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. """Wrapper for the GitLab API.""" -import importlib import time import requests @@ -99,7 +98,14 @@ class Gitlab(object): self.pagination = pagination self.order_by = order_by - objects = importlib.import_module("gitlab.v%s.objects" % self._api_version) + # We only support v4 API at this time + if self._api_version not in ("4",): + raise ModuleNotFoundError(name="gitlab.v%s.objects" % self._api_version) + # NOTE: We must delay import of gitlab.v4.objects until now or + # otherwise it will cause circular import errors + import gitlab.v4.objects + + objects = gitlab.v4.objects self._objects = objects self.broadcastmessages = objects.BroadcastMessageManager(self) @@ -147,8 +153,14 @@ class Gitlab(object): def __setstate__(self, state): self.__dict__.update(state) - objects = importlib.import_module("gitlab.v%s.objects" % self._api_version) - self._objects = objects + # We only support v4 API at this time + if self._api_version not in ("4",): + raise ModuleNotFoundError(name="gitlab.v%s.objects" % self._api_version) + # NOTE: We must delay import of gitlab.v4.objects until now or + # otherwise it will cause circular import errors + import gitlab.v4.objects + + self._objects = gitlab.v4.objects @property def url(self): |