Coding style.

- Used __getstate__ to make classes picklable.
This commit is contained in:
Andrew Hamilton 2018-08-14 09:54:36 +10:00
parent f881156c4a
commit 4157e5b04c

View file

@ -230,6 +230,12 @@ class Summary:
self._all_results = set() self._all_results = set()
self.sync_with_filesystem() self.sync_with_filesystem()
def __getstate__(self):
state = self.__dict__.copy()
state["closest_placeholder_generator"] = None
state["_jobs_added_event"] = None
return state
@property @property
def _cursor_position(self): def _cursor_position(self):
return self.__cursor_position return self.__cursor_position
@ -486,6 +492,11 @@ class Log:
self.portal = fill3.Portal(self.widget) self.portal = fill3.Portal(self.widget)
self._appearance_cache = None self._appearance_cache = None
def __getstate__(self):
state = self.__dict__.copy()
state["_appearance_changed_event"] = None
return state
def log_message(self, message, timestamp=None, char_style=None): def log_message(self, message, timestamp=None, char_style=None):
if isinstance(message, list): if isinstance(message, list):
message = [part[1] if isinstance(part, tuple) else part message = [part[1] if isinstance(part, tuple) else part
@ -615,6 +626,13 @@ class Screen:
self._make_widgets() self._make_widgets()
self._key_map = make_key_map(Screen._KEY_DATA) self._key_map = make_key_map(Screen._KEY_DATA)
def __getstate__(self):
state = self.__dict__.copy()
state["_appearance_changed_event"] = None
state["_main_loop"] = None
state["workers"] = None
return state
def make_workers(self, worker_count, is_being_tested): def make_workers(self, worker_count, is_being_tested):
workers = [] workers = []
for index in range(worker_count): for index in range(worker_count):
@ -1000,16 +1018,6 @@ def load_state(pickle_path, jobs_added_event, appearance_changed_event,
return summary, screen, log, is_first_run return summary, screen, log, is_first_run
def save_state(pickle_path, summary, screen, log):
# Cannot pickle generators, locks, sockets or events.
(summary.closest_placeholder_generator, summary._lock,
summary._jobs_added_event, screen._appearance_changed_event,
screen._main_loop, screen.workers,
log._appearance_changed_event) = [None] * 7
open_compressed = functools.partial(gzip.open, compresslevel=1)
tools.dump_pickle_safe(screen, pickle_path, open=open_compressed)
def main(root_path, loop, worker_count=None, editor_command=None, theme=None, def main(root_path, loop, worker_count=None, editor_command=None, theme=None,
is_being_tested=False): is_being_tested=False):
if worker_count is None: if worker_count is None:
@ -1049,7 +1057,8 @@ def main(root_path, loop, worker_count=None, editor_command=None, theme=None,
log.log_message("Program stopped.") log.log_message("Program stopped.")
finally: finally:
notifier.stop() notifier.stop()
save_state(pickle_path, summary, screen, log) open_compressed = functools.partial(gzip.open, compresslevel=1)
tools.dump_pickle_safe(screen, pickle_path, open=open_compressed)
@contextlib.contextmanager @contextlib.contextmanager