diff options
author | Lyudmil Nenov <lyudmil.nenov@gmail.com> | 2017-11-03 16:05:17 +0200 |
---|---|---|
committer | Gauvain Pocentek <gauvain@pocentek.net> | 2017-11-03 15:05:17 +0100 |
commit | 226e6ce9e5217367c896125a2b4b9d16afd2cf94 (patch) | |
tree | a02b5fe4e9f235be3c2b9b128f931a99da03a0bc /gitlab/tests | |
parent | 38d446737f45ea54136d1f03f75fbddf46c45e00 (diff) | |
download | gitlab-226e6ce9e5217367c896125a2b4b9d16afd2cf94.tar.gz |
Module's base objects serialization (#359)
Make gitlab objects serializable
With current implementation of API v3 and v4 support, some instances
have properties of type module and are not serializable. Handle
these properties manually with setstate and getstate methods.
Diffstat (limited to 'gitlab/tests')
-rw-r--r-- | gitlab/tests/test_base.py | 10 | ||||
-rw-r--r-- | gitlab/tests/test_gitlab.py | 9 | ||||
-rw-r--r-- | gitlab/tests/test_gitlabobject.py | 10 |
3 files changed, 29 insertions, 0 deletions
diff --git a/gitlab/tests/test_base.py b/gitlab/tests/test_base.py index c55f000..31dd967 100644 --- a/gitlab/tests/test_base.py +++ b/gitlab/tests/test_base.py @@ -15,6 +15,7 @@ # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. +import pickle try: import unittest except ImportError: @@ -86,6 +87,15 @@ class TestRESTObject(unittest.TestCase): self.assertEqual(self.manager, obj.manager) self.assertEqual(self.gitlab, obj.manager.gitlab) + def test_pickability(self): + obj = FakeObject(self.manager, {'foo': 'bar'}) + original_obj_module = obj._module + pickled = pickle.dumps(obj) + unpickled = pickle.loads(pickled) + self.assertIsInstance(unpickled, FakeObject) + self.assertTrue(hasattr(unpickled, '_module')) + self.assertEqual(unpickled._module, original_obj_module) + def test_attrs(self): obj = FakeObject(self.manager, {'foo': 'bar'}) diff --git a/gitlab/tests/test_gitlab.py b/gitlab/tests/test_gitlab.py index 0f39624..027de0c 100644 --- a/gitlab/tests/test_gitlab.py +++ b/gitlab/tests/test_gitlab.py @@ -18,6 +18,7 @@ from __future__ import print_function +import pickle try: import unittest except ImportError: @@ -890,6 +891,14 @@ class TestGitlab(unittest.TestCase): email="testuser@test.com", password="testpassword", ssl_verify=True) + def test_pickability(self): + original_gl_objects = self.gl._objects + pickled = pickle.dumps(self.gl) + unpickled = pickle.loads(pickled) + self.assertIsInstance(unpickled, Gitlab) + self.assertTrue(hasattr(unpickled, '_objects')) + self.assertEqual(unpickled._objects, original_gl_objects) + def test_credentials_auth_nopassword(self): self.gl.email = None self.gl.password = None diff --git a/gitlab/tests/test_gitlabobject.py b/gitlab/tests/test_gitlabobject.py index 695f900..f7fd187 100644 --- a/gitlab/tests/test_gitlabobject.py +++ b/gitlab/tests/test_gitlabobject.py @@ -21,6 +21,7 @@ from __future__ import print_function from __future__ import absolute_import import json +import pickle try: import unittest except ImportError: @@ -158,6 +159,15 @@ class TestGitlabObject(unittest.TestCase): self.assertEqual(data["username"], "testname") self.assertEqual(data["gitlab"]["url"], "http://localhost/api/v3") + def test_pickability(self): + gl_object = CurrentUser(self.gl, data={"username": "testname"}) + original_obj_module = gl_object._module + pickled = pickle.dumps(gl_object) + unpickled = pickle.loads(pickled) + self.assertIsInstance(unpickled, CurrentUser) + self.assertTrue(hasattr(unpickled, '_module')) + self.assertEqual(unpickled._module, original_obj_module) + def test_data_for_gitlab(self): class FakeObj1(GitlabObject): _url = '/fake1' |