From 0b70da335690456a556afb9ff7a56dfca693b019 Mon Sep 17 00:00:00 2001 From: jeroen_decroos Date: Thu, 7 Mar 2019 09:07:00 -0800 Subject: [PATCH] Make gitlab.Gitlab.from_config a classmethod --- gitlab/__init__.py | 18 +++++++++--------- gitlab/tests/test_gitlab.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/gitlab/__init__.py b/gitlab/__init__.py index 18f9d162b..819096d9b 100644 --- a/gitlab/__init__.py +++ b/gitlab/__init__.py @@ -165,8 +165,8 @@ def api_version(self): """The API version used (4 only).""" return self._api_version - @staticmethod - def from_config(gitlab_id=None, config_files=None): + @classmethod + def from_config(cls, gitlab_id=None, config_files=None): """Create a Gitlab connection from configuration files. Args: @@ -181,13 +181,13 @@ def from_config(gitlab_id=None, config_files=None): """ config = gitlab.config.GitlabConfigParser(gitlab_id=gitlab_id, config_files=config_files) - return Gitlab(config.url, private_token=config.private_token, - oauth_token=config.oauth_token, - ssl_verify=config.ssl_verify, timeout=config.timeout, - http_username=config.http_username, - http_password=config.http_password, - api_version=config.api_version, - per_page=config.per_page) + return cls(config.url, private_token=config.private_token, + oauth_token=config.oauth_token, + ssl_verify=config.ssl_verify, timeout=config.timeout, + http_username=config.http_username, + http_password=config.http_password, + api_version=config.api_version, + per_page=config.per_page) def auth(self): """Performs an authentication. diff --git a/gitlab/tests/test_gitlab.py b/gitlab/tests/test_gitlab.py index 5174bd23e..fddd5ed8b 100644 --- a/gitlab/tests/test_gitlab.py +++ b/gitlab/tests/test_gitlab.py @@ -18,7 +18,9 @@ from __future__ import print_function +import os import pickle +import tempfile try: import unittest except ImportError: @@ -34,6 +36,17 @@ from gitlab.v4.objects import * # noqa +valid_config = b"""[global] +default = one +ssl_verify = true +timeout = 2 + +[one] +url = http://one.url +private_token = ABCDEF +""" + + class TestSanitize(unittest.TestCase): def test_do_nothing(self): self.assertEqual(1, gitlab._sanitize(1)) @@ -536,3 +549,22 @@ def resp_get_user(url, request): self.assertEqual(type(user), User) self.assertEqual(user.name, "name") self.assertEqual(user.id, 1) + + def _default_config(self): + fd, temp_path = tempfile.mkstemp() + os.write(fd, valid_config) + os.close(fd) + return temp_path + + def test_from_config(self): + config_path = self._default_config() + gitlab.Gitlab.from_config('one', [config_path]) + os.unlink(config_path) + + def test_subclass_from_config(self): + class MyGitlab(gitlab.Gitlab): + pass + config_path = self._default_config() + gl = MyGitlab.from_config('one', [config_path]) + self.assertEqual(type(gl).__name__, 'MyGitlab') + os.unlink(config_path)