enable pickling of LockableImpl
This commit is contained in:
parent
88d42807be
commit
939ad5451c
@ -1,4 +1,4 @@
|
|||||||
from typing import TypeVar
|
from typing import TypeVar, Dict, Tuple, Any
|
||||||
from abc import ABCMeta, abstractmethod
|
from abc import ABCMeta, abstractmethod
|
||||||
|
|
||||||
from ..error import PatternLockedError
|
from ..error import PatternLockedError
|
||||||
@ -12,7 +12,7 @@ class Lockable(metaclass=ABCMeta):
|
|||||||
"""
|
"""
|
||||||
Abstract class for all lockable entities
|
Abstract class for all lockable entities
|
||||||
"""
|
"""
|
||||||
__slots__ = ()
|
__slots__ = () # type: Tuple[str, ...]
|
||||||
|
|
||||||
'''
|
'''
|
||||||
---- Methods
|
---- Methods
|
||||||
@ -68,7 +68,7 @@ class LockableImpl(Lockable, metaclass=ABCMeta):
|
|||||||
"""
|
"""
|
||||||
Simple implementation of Lockable
|
Simple implementation of Lockable
|
||||||
"""
|
"""
|
||||||
__slots__ = ()
|
__slots__ = () # type: Tuple[str, ...]
|
||||||
|
|
||||||
locked: bool
|
locked: bool
|
||||||
""" If `True`, disallows changes to the object """
|
""" If `True`, disallows changes to the object """
|
||||||
@ -81,6 +81,16 @@ class LockableImpl(Lockable, metaclass=ABCMeta):
|
|||||||
raise PatternLockedError()
|
raise PatternLockedError()
|
||||||
object.__setattr__(self, name, value)
|
object.__setattr__(self, name, value)
|
||||||
|
|
||||||
|
def __getstate__(self) -> Dict[str, Any]:
|
||||||
|
if hasattr(self, '__slots__'):
|
||||||
|
return {key: getattr(self, key) for key in self.__slots__}
|
||||||
|
else:
|
||||||
|
return self.__dict__
|
||||||
|
|
||||||
|
def __setstate__(self, state: Dict[str, Any]) -> None:
|
||||||
|
for k, v in state.items():
|
||||||
|
object.__setattr__(self, k, v)
|
||||||
|
|
||||||
def lock(self: I) -> I:
|
def lock(self: I) -> I:
|
||||||
object.__setattr__(self, 'locked', True)
|
object.__setattr__(self, 'locked', True)
|
||||||
return self
|
return self
|
||||||
|
Loading…
Reference in New Issue
Block a user