Skip to content

Commit

Permalink
Implement get and set state for ImageArray
Browse files Browse the repository at this point in the history
  • Loading branch information
gb119 committed Nov 10, 2019
1 parent 3f746bf commit f24a935
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 10 deletions.
32 changes: 23 additions & 9 deletions Stoner/Image/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -699,6 +699,20 @@ def draw(self):
# OTHER SPECIAL METHODS
# ==============================================================================

def __getstate__(self):
"""Help with pickling ImageArrays"""
ret = super(ImageArray, self).__getstate__()

return {"numpy": ret, "ImageArray": {"metadata": self.metadata}}

def __setstate__(self, state):
"""Help with pickling ImageArrays"""
original = state.pop("numpy", tuple())
local = state.pop("ImageArray", {})
metadata = local.pop("metadata", {})
super(ImageArray, self).__setstate__(original)
self.metadata.update(metadata)

def __setattr__(self, name, value):
"""Set an attribute on the object."""
super(ImageArray, self).__setattr__(name, value)
Expand Down Expand Up @@ -1189,20 +1203,20 @@ def __setitem__(self, n, v):

def __dir__(self):
"""Merge both the ImageFile and ImageArray dirs."""
parent=set(dir(metadataObject()))
parent = set(dir(metadataObject()))
this = set(dir(super(ImageFile, self)))
image = set(dir(self.image))
return list(parent | this | image)

def __getstate__(self):
"""This is need to implement multiprocessing."""
state={"metadata":self.metadata}
state.update(self.__dict__)
return state

def __setstate__(self,state):
"""This is need to implement multiprocessing."""
metadata=state.pop("metadata",{})
"""Helper for pickling ImageFiles."""
ret = copy(self.__dict__)
ret.update({"metadata": self.metadata})
return ret

def __setstate__(self, state):
"""Helper for pickling ImageFiles."""
metadata = state.pop("metadata", {})
self.__dict__.update(state)
self.metadata.update(metadata)

Expand Down
2 changes: 1 addition & 1 deletion Stoner/folders/each.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def _worker(d, **kwargs):
func = getattr(d, func, lambda x: x)
args = kwargs.get("args", tuple())
kargs = kwargs.get("kargs", dict)
if hasattr(d,"setas"):
if hasattr(d, "setas"):
d["setas"] = list(d.setas)
d["args"] = args
d["kargs"] = kargs
Expand Down

0 comments on commit f24a935

Please sign in to comment.