diff --git a/weboob/tools/config/extra.py b/weboob/tools/config/extra.py index 4412373bf91d7fef0ae14e3100939dbf4c8115c7..a74db3d8ffa7bfed92d6a624346a91ce0f332f7e 100644 --- a/weboob/tools/config/extra.py +++ b/weboob/tools/config/extra.py @@ -64,6 +64,16 @@ def __exit__(self, t, v, tb): self.join() super(ForkingConfig, self).__exit__(t, v, tb) + def __getstate__(self): + d = self.__dict__.copy() + d.pop('lock', None) + return d + + def __setstate__(self, d): + self.__init__(path=d['path']) + for k, v in d.items(): + setattr(self, k, v) + def time_buffer(since_seconds=None, last_run=True, logger=False): def decorator_time_buffer(func): @@ -116,3 +126,20 @@ def force_save(self): def __exit__(self, t, v, tb): self.force_save() super(TimeBufferConfig, self).__exit__(t, v, tb) + + def __getstate__(self): + try: + d = super(TimeBufferConfig, self).__getstate__() + except AttributeError: + d = self.__dict__.copy() + # When decorated, it is not serializable. + # The decorator will be added again by __setstate__. + d.pop('save', None) + return d + + def __setstate__(self, d): + # Add the decorator if needed + self.__init__(path=d['path'], + saved_since_seconds=d.get('saved_since_seconds')) + for k, v in d.items(): + setattr(self, k, v)