From 701b918e6ff48ec3c0325216208d28a21f974390 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Mon, 2 Sep 2019 15:49:38 +0200 Subject: [PATCH] Refactor IdeHandler --- tfw/components/ide/ide_handler.py | 61 ++++++++++++++++--------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/tfw/components/ide/ide_handler.py b/tfw/components/ide/ide_handler.py index e75ea84..d4ef8a1 100644 --- a/tfw/components/ide/ide_handler.py +++ b/tfw/components/ide/ide_handler.py @@ -1,5 +1,4 @@ import logging -from os.path import isfile from tfw.internals.networking import Scope from tfw.internals.inotify import InotifyObserver @@ -36,10 +35,10 @@ class IdeHandler: keys = ['ide'] type_id = 'ControlEventHandler' - def __init__(self, *, patterns, initial_file=''): + def __init__(self, *, patterns, initial_file=None): self.connector = None self.filemanager = FileManager(patterns) - self._initial_file = initial_file + self._initial_file = initial_file or '' self.monitor = InotifyObserver( path=self.filemanager.parents, @@ -53,46 +52,48 @@ class IdeHandler: 'ide.write' : self.write } - @property - def initial_file(self): - if not isfile(self._initial_file): - self._initial_file = self.filemanager.files[0] - return self._initial_file - def _reload_frontend(self, event): # pylint: disable=unused-argument self.send_message({'key': 'ide.reload'}) + @property + def initial_file(self): + if not self.filemanager.is_allowed(self._initial_file): + self._initial_file = self.filemanager.files[0] + return self._initial_file + def send_message(self, message): self.connector.send_message(message, scope=Scope.WEBSOCKET) - def read(self, message): - if message.get('files'): - self.filemanager.patterns = message['files'] - try: - message['content'] = self.filemanager.read_file(message['filename']) - except PermissionError: - message['content'] = 'You have no permission to open that file :(' - except FileNotFoundError: - message['content'] = 'This file was removed :(' - except Exception: # pylint: disable=broad-except - message['content'] = 'Failed to read file :(' - - def write(self, message): - try: - self.filemanager.write_file(message['filename'], message['content']) - except Exception: # pylint: disable=broad-except - LOG.exception('Error writing file!') - del message['content'] - def handle_event(self, message, _): try: - if message['filename'] == '': - message['filename'] = self.initial_file self.commands[message['key']](message) message['files'] = self.filemanager.files self.send_message(message) except KeyError: LOG.error('IGNORING MESSAGE: Invalid message received: %s', message) + def read(self, message): + if message.get('files'): + self.filemanager.patterns = message['files'] + try: + message['filename'] = message.get('filename') or self.initial_file + message['content'] = self.filemanager.read_file(message['filename']) + except (PermissionError, ValueError): + message['content'] = 'You have no permission to open that file :(' + except FileNotFoundError: + message['content'] = 'This file does not exist :(' + except Exception: # pylint: disable=broad-except + message['content'] = 'Failed to read file :(' + LOG.exception('Error reading file!') + + def write(self, message): + try: + self.filemanager.write_file(message['filename'], message['content']) + except KeyError: + LOG.error('You must provide a filename to write!') + except Exception: # pylint: disable=broad-except + LOG.exception('Error writing file!') + del message['content'] + def cleanup(self): self.monitor.stop()