Merge pull request #13 from avatao-content/bottomless_pit

Refactor TFW architecture to support stateless event handling
This commit is contained in:
Bokros Bálint
2018-02-26 17:06:22 +01:00
committed by Kristóf Tóth
12 changed files with 132 additions and 86 deletions

View File

@ -24,9 +24,9 @@ class WebideReloadEventHandler(FileSystemEventHandler):
def on_modified(self, event):
if self._paused: return
log.debug(event)
anchor = 'anchor_webide'
self.uplink.send(anchor, {'anchor': anchor,
'data': {'command': 'reload'}})
key = 'webide'
self.uplink.send(key, {'key': key,
'data': {'command': 'reload'}})
class DirectoryMonitor:

View File

@ -1,8 +1,7 @@
from os.path import isfile, join, relpath
from glob import glob
from tfw.components.mixins import SupervisorMixin
from tfw.event_handler_base import EventHandlerBase
from tfw.event_handler_base import TriggerlessEventHandler
from tfw.components.directory_monitor import DirectoryMonitor
from tfw.config.logs import logging
@ -43,11 +42,10 @@ class FileManager:
return relpath(self._filepath(filename), start=self._workdir)
class SourceCodeEventHandler(EventHandlerBase, SupervisorMixin):
def __init__(self, anchor, directory, process_name, selected_file=None):
super().__init__(anchor)
class SourceCodeEventHandler(TriggerlessEventHandler):
def __init__(self, key, directory, selected_file=None):
super().__init__(key)
self.filemanager = FileManager(directory, selected_file=selected_file)
self.process_name = process_name
self.commands = {
'read': self.read,
@ -69,7 +67,6 @@ class SourceCodeEventHandler(EventHandlerBase, SupervisorMixin):
with self.monitor.pauser:
try: self.filemanager.file_contents = data['content']
except Exception: log.exception('Error writing file!')
self.restart_process()
return data
def select(self, data):
@ -81,7 +78,7 @@ class SourceCodeEventHandler(EventHandlerBase, SupervisorMixin):
data['filename'] = self.filemanager.filename
data['files'] = self.filemanager.files
def handle_event(self, anchor, data_json):
def handle_event(self, key, data_json):
data = data_json['data']
data_json['data'] = self.commands[data['command']](data)
self.attach_fileinfo(data)

View File

@ -1,17 +1,17 @@
from tfw.event_handler_base import EventHandlerBase
from tfw.event_handler_base import TriggerlessEventHandler
from tfw.components.mixins import SupervisorMixin
from tfw.config import tfwenv
from tfw.config.logs import logging
log = logging.getLogger(__name__)
class TerminadoEventHandler(EventHandlerBase, SupervisorMixin):
def __init__(self, anchor, process_name):
super().__init__(anchor)
class TerminadoEventHandler(TriggerlessEventHandler, SupervisorMixin):
def __init__(self, key, process_name):
super().__init__(key)
self.working_directory = tfwenv.TERMINADO_DIR
self.process_name = process_name
self.start_process()
def handle_event(self, anchor, data_json):
log.debug('TerminadoEventHandler received event for anchor {}'.format(anchor))
def handle_event(self, key, data_json):
log.debug('TerminadoEventHandler received event for key {}'.format(key))
# TODO: wat do?