From 226e6ce9e5217367c896125a2b4b9d16afd2cf94 Mon Sep 17 00:00:00 2001 From: Lyudmil Nenov Date: Fri, 3 Nov 2017 16:05:17 +0200 Subject: 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. --- gitlab/base.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'gitlab/base.py') diff --git a/gitlab/base.py b/gitlab/base.py index 4213d2f..ec5f698 100644 --- a/gitlab/base.py +++ b/gitlab/base.py @@ -416,6 +416,17 @@ class GitlabObject(object): if not hasattr(self, "id"): self.id = None + def __getstate__(self): + state = self.__dict__.copy() + module = state.pop('_module') + state['_module_name'] = module.__name__ + return state + + def __setstate__(self, state): + module_name = state.pop('_module_name') + self.__dict__.update(state) + self._module = importlib.import_module(module_name) + def _set_manager(self, var, cls, attrs): manager = cls(self.gitlab, self, attrs) setattr(self, var, manager) @@ -555,6 +566,17 @@ class RESTObject(object): self.__dict__['_parent_attrs'] = self.manager.parent_attrs self._create_managers() + def __getstate__(self): + state = self.__dict__.copy() + module = state.pop('_module') + state['_module_name'] = module.__name__ + return state + + def __setstate__(self, state): + module_name = state.pop('_module_name') + self.__dict__.update(state) + self._module = importlib.import_module(module_name) + def __getattr__(self, name): try: return self.__dict__['_updated_attrs'][name] -- cgit v1.2.1