From c74c00c6180113e2d707ae6235176b0987d3930a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Tue, 6 Feb 2018 15:34:43 +0100 Subject: [PATCH] Extract process managing logic to SupervisorMixin from event handlers --- lib/tfw/util.py | 13 +++++++++++++ src/event_handlers/source_code_event_handler.py | 11 +++-------- src/event_handlers/terminado_event_handler.py | 2 +- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/tfw/util.py b/lib/tfw/util.py index 4785ed4..82f4169 100644 --- a/lib/tfw/util.py +++ b/lib/tfw/util.py @@ -1,4 +1,6 @@ import xmlrpc.client, zmq +from contextlib import suppress +from xmlrpc.client import Fault as SupervisorFault from .config.envvars import SUPERVISOR_HTTP_URI @@ -14,6 +16,17 @@ def create_source_code_response_data(filename, content, language): class SupervisorMixin: supervisor = xmlrpc.client.ServerProxy(SUPERVISOR_HTTP_URI).supervisor + def stop_process(self): + with suppress(SupervisorFault): + self.supervisor.stopProcess(self.process_name) + + def start_process(self): + self.supervisor.startProcess(self.process_name) + + def restart_process(self): + self.stop_process() + self.start_process() + class ZMQConnectorBase: def __init__(self, zmq_context=None): diff --git a/src/event_handlers/source_code_event_handler.py b/src/event_handlers/source_code_event_handler.py index 4620729..6ba7b78 100644 --- a/src/event_handlers/source_code_event_handler.py +++ b/src/event_handlers/source_code_event_handler.py @@ -1,7 +1,5 @@ from shutil import copy, rmtree, copytree from os.path import splitext -from contextlib import suppress -from xmlrpc.client import Fault as SupervisorFault from tfw.util import SupervisorMixin from tfw.config import LOGIN_APP_DIR @@ -43,19 +41,16 @@ class SourceCodeEventHandler(EventHandlerBase, SupervisorMixin): data = data_json['data'] with open(self.file, 'w') as ofile: ofile.write(data['content']) - self.supervisor.stopProcess(self.process_name) - self.supervisor.startProcess(self.process_name) + self.restart_process() def create_initial_state(self): - with suppress(SupervisorFault): - self.supervisor.stopProcess(self.process_name) + self.stop_process() rmtree(self.working_directory, ignore_errors=True) copytree('source_code_server/', self.working_directory) file = copy(self.filename, self.working_directory) - self.supervisor.startProcess(self.process_name) - + self.start_process() return file diff --git a/src/event_handlers/terminado_event_handler.py b/src/event_handlers/terminado_event_handler.py index 463af7e..4554d28 100644 --- a/src/event_handlers/terminado_event_handler.py +++ b/src/event_handlers/terminado_event_handler.py @@ -17,7 +17,7 @@ class TerminadoEventHandler(EventHandlerBase, SupervisorMixin): def setup_terminado_server(self): rmtree(self.working_directory, ignore_errors=True) copytree('terminado_server/', self.working_directory) - self.supervisor.startProcess(self.process_name) + self.start_process() def handle_event(self, anchor, data_json): log.debug('TerminadoEventHandler received event for anchor {}'.format(anchor))