From a79c68515b9aa6be8a6da3c30f4807a8dfb951c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Mon, 16 Jul 2018 11:17:06 +0200 Subject: [PATCH] Remove controller stuff, tidy code based on pylint suggestions --- .../components/fsm_managing_event_handler.py | 1 + lib/tfw/components/ide_event_handler.py | 4 +- lib/tfw/components/terminal_commands.py | 1 + lib/tfw/event_handler_base.py | 4 +- lib/tfw/fsm_base.py | 1 - lib/tfw/mixins/callback_mixin.py | 1 + lib/tfw/mixins/observer_mixin.py | 1 + lib/tfw/mixins/supervisor_mixin.py | 1 + lib/tfw/networking/controller_connector.py | 18 --------- lib/tfw/networking/server/__init__.py | 1 - .../networking/server/controller_responder.py | 38 ------------------- lib/tfw/networking/server/tfw_server.py | 7 ++-- .../networking/server/zmq_websocket_proxy.py | 2 + lib/tfw/yaml_fsm.py | 28 +++++++------- 14 files changed, 27 insertions(+), 81 deletions(-) delete mode 100644 lib/tfw/networking/controller_connector.py delete mode 100644 lib/tfw/networking/server/controller_responder.py diff --git a/lib/tfw/components/fsm_managing_event_handler.py b/lib/tfw/components/fsm_managing_event_handler.py index 1068bbd..0401a16 100644 --- a/lib/tfw/components/fsm_managing_event_handler.py +++ b/lib/tfw/components/fsm_managing_event_handler.py @@ -33,6 +33,7 @@ class FSMManagingEventHandler(EventHandlerBase): return data def handle_update(self, data): + # pylint: disable=no-self-use return data diff --git a/lib/tfw/components/ide_event_handler.py b/lib/tfw/components/ide_event_handler.py index 72e83b3..2c698ad 100644 --- a/lib/tfw/components/ide_event_handler.py +++ b/lib/tfw/components/ide_event_handler.py @@ -4,7 +4,7 @@ from os.path import isfile, join, relpath, exists, isdir, realpath from glob import glob from fnmatch import fnmatchcase -from collections import Iterable +from typing import Iterable from tfw import EventHandlerBase from tfw.mixins import MonitorManagerMixin @@ -103,7 +103,7 @@ class FileManager: # pylint: disable=too-many-instance-attributes class IdeEventHandler(EventHandlerBase, MonitorManagerMixin): - # pylint: disable=too-many-arguments + # pylint: disable=too-many-arguments,anomalous-backslash-in-string """ Event handler implementing the backend of our browser based IDE. By default all files in the directory specified in __init__ are displayed diff --git a/lib/tfw/components/terminal_commands.py b/lib/tfw/components/terminal_commands.py index a47852d..14563bd 100644 --- a/lib/tfw/components/terminal_commands.py +++ b/lib/tfw/components/terminal_commands.py @@ -11,6 +11,7 @@ LOG = logging.getLogger(__name__) class TerminalCommands(ABC): + # pylint: disable=anomalous-backslash-in-string """ A class you can use to define hooks for terminal commands. This means that you can have python code executed when the user enters a specific command to the terminal on diff --git a/lib/tfw/event_handler_base.py b/lib/tfw/event_handler_base.py index 0cc023d..880e406 100644 --- a/lib/tfw/event_handler_base.py +++ b/lib/tfw/event_handler_base.py @@ -120,8 +120,8 @@ class FSMAwareEventHandler(EventHandlerBase, ABC): def dispatch_handling(self, message): if message['key'] == 'fsm_update': self._handle_fsm_update(message) - else: - return super().dispatch_handling(message) + return None + return super().dispatch_handling(message) def _handle_fsm_update(self, message): try: diff --git a/lib/tfw/fsm_base.py b/lib/tfw/fsm_base.py index 2de2b43..fe3a01a 100644 --- a/lib/tfw/fsm_base.py +++ b/lib/tfw/fsm_base.py @@ -58,7 +58,6 @@ class FSMBase(Machine, CallbackMixin): for predicate in self.trigger_predicates[trigger] ) - # TODO: think about what could we do when this prevents triggering if all(predicate_results): try: self.trigger(trigger) diff --git a/lib/tfw/mixins/callback_mixin.py b/lib/tfw/mixins/callback_mixin.py index 54515f3..33ddb6d 100644 --- a/lib/tfw/mixins/callback_mixin.py +++ b/lib/tfw/mixins/callback_mixin.py @@ -9,6 +9,7 @@ from tfw.decorators import lazy_property class CallbackMixin: @lazy_property def _callbacks(self): + # pylint: disable=no-self-use return [] def subscribe_callback(self, callback, *args, **kwargs): diff --git a/lib/tfw/mixins/observer_mixin.py b/lib/tfw/mixins/observer_mixin.py index 712a31e..9d8b5e2 100644 --- a/lib/tfw/mixins/observer_mixin.py +++ b/lib/tfw/mixins/observer_mixin.py @@ -9,6 +9,7 @@ from tfw.decorators import lazy_property class ObserverMixin: @lazy_property def observer(self): + # pylint: disable=no-self-use return Observer() def watch(self): diff --git a/lib/tfw/mixins/supervisor_mixin.py b/lib/tfw/mixins/supervisor_mixin.py index 00cf398..2238985 100644 --- a/lib/tfw/mixins/supervisor_mixin.py +++ b/lib/tfw/mixins/supervisor_mixin.py @@ -13,6 +13,7 @@ from tfw.config import TFWENV class SupervisorBaseMixin: @lazy_property def supervisor(self): + # pylint: disable=no-self-use return xmlrpc.client.ServerProxy(TFWENV.SUPERVISOR_HTTP_URI).supervisor diff --git a/lib/tfw/networking/controller_connector.py b/lib/tfw/networking/controller_connector.py deleted file mode 100644 index b344ce1..0000000 --- a/lib/tfw/networking/controller_connector.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (C) 2018 Avatao.com Innovative Learning Kft. -# All Rights Reserved. See LICENSE file for details. - -import zmq -from zmq.eventloop.zmqstream import ZMQStream - -from tfw.config import TFWENV -from tfw.networking import ZMQConnectorBase - - -class ControllerConnector(ZMQConnectorBase): - def __init__(self, zmq_context=None): - super(ControllerConnector, self).__init__(zmq_context) - self._zmq_rep_socket = self._zmq_context.socket(zmq.REP) - self._zmq_rep_socket.connect(f'tcp://localhost:{TFWENV.CONTROLLER_PORT}') - self._zmq_rep_stream = ZMQStream(self._zmq_rep_socket) - - self.register_callback = self._zmq_rep_stream.on_recv_stream diff --git a/lib/tfw/networking/server/__init__.py b/lib/tfw/networking/server/__init__.py index e707fab..eb9adde 100644 --- a/lib/tfw/networking/server/__init__.py +++ b/lib/tfw/networking/server/__init__.py @@ -3,4 +3,3 @@ from .event_handler_connector import EventHandlerConnector, EventHandlerUplinkConnector, EventHandlerDownlinkConnector from .tfw_server import TFWServer -# from .controller_responder import ControllerResponder # TODO: readd once controller stuff is resolved diff --git a/lib/tfw/networking/server/controller_responder.py b/lib/tfw/networking/server/controller_responder.py deleted file mode 100644 index 02d442f..0000000 --- a/lib/tfw/networking/server/controller_responder.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (C) 2018 Avatao.com Innovative Learning Kft. -# All Rights Reserved. See LICENSE file for details. - -from tfw.networking import deserialize_all, serialize_all, ControllerConnector - - -class ControllerResponder: - def __init__(self, fsm): - self.fsm = fsm - self.token = None - self.controller_connector = ControllerConnector() - self.controller_connector.register_callback(self.handle_controller_request) - self.controller_request_handlers = { - 'solution_check': self.handle_solution_check_request, - 'test': self.handle_test_request, - 'token': self.handle_token_request - } - - def handle_controller_request(self, stream, msg_parts): - key, data = deserialize_all(*msg_parts) - response = self.controller_request_handlers[key](data) - stream.send_multipart(serialize_all(self.token, response)) - - def handle_test_request(self, data): - # pylint: disable=unused-argument,no-self-use - return 'OK' - - def handle_token_request(self, data): - if self.token is None: - self.token = data - return {'token': self.token} - - def handle_solution_check_request(self, data): - # pylint: disable=unused-argument - return { - 'solved': self.fsm.is_solved(), - 'message': 'solved' if self.fsm.is_solved() else 'not solved' - } diff --git a/lib/tfw/networking/server/tfw_server.py b/lib/tfw/networking/server/tfw_server.py index 067bb6c..54edbf5 100644 --- a/lib/tfw/networking/server/tfw_server.py +++ b/lib/tfw/networking/server/tfw_server.py @@ -25,12 +25,11 @@ class TFWServer: self._uplink_connector = ServerUplinkConnector() self.application = Application([( - r'/ws', ZMQWebSocketProxy,{ + r'/ws', ZMQWebSocketProxy, { 'event_handler_connector': self._event_handler_connector, 'message_handlers': [self.handle_trigger, self.handle_recover], 'frontend_message_handlers': [self.save_frontend_messages] - })] - ) + })]) self._frontend_messages = FrontendMessageStorage() @@ -68,7 +67,7 @@ class MessageStorage(ABC): def filter_message(self, message): raise NotImplementedError - def transform_message(self, message): + def transform_message(self, message): # pylint: disable=no-self-use yield message diff --git a/lib/tfw/networking/server/zmq_websocket_proxy.py b/lib/tfw/networking/server/zmq_websocket_proxy.py index 7a38e4a..f456d94 100644 --- a/lib/tfw/networking/server/zmq_websocket_proxy.py +++ b/lib/tfw/networking/server/zmq_websocket_proxy.py @@ -12,6 +12,7 @@ LOG = logging.getLogger(__name__) class ZMQWebSocketProxy(WebSocketHandler): + # pylint: disable=abstract-method instances = set() def initialize(self, **kwargs): # pylint: disable=arguments-differ @@ -83,6 +84,7 @@ class ZMQWebSocketProxy(WebSocketHandler): class TFWProxy: + # pylint: disable=protected-access def __init__(self, to_source, to_destination): self.to_source = to_source self.to_destination = to_destination diff --git a/lib/tfw/yaml_fsm.py b/lib/tfw/yaml_fsm.py index 82c955e..63070d2 100644 --- a/lib/tfw/yaml_fsm.py +++ b/lib/tfw/yaml_fsm.py @@ -40,19 +40,19 @@ class YamlFSM(FSMBase): def subscribe_and_remove_predicates(self, json_obj): if 'predicates' in json_obj: for predicate in json_obj['predicates']: - self.subscribe_predicate( - json_obj['trigger'], - partial( - command_statuscode_is_zero, - predicate + self.subscribe_predicate( + json_obj['trigger'], + partial( + command_statuscode_is_zero, + predicate ) - ) - + ) + with suppress(KeyError): json_obj.pop('predicates') -def run_command_async(command, event): +def run_command_async(command, _): Popen(command, shell=True) @@ -62,7 +62,7 @@ def command_statuscode_is_zero(command): class ConfigParser: def __init__(self, config_file, jinja2_variables): - self.read_variables = singledispatch(self.read_variables) + self.read_variables = singledispatch(self._read_variables) self.read_variables.register(dict, self._read_variables_dict) self.read_variables.register(str, self._read_variables_str) @@ -82,16 +82,14 @@ class ConfigParser: return ifile.read() @staticmethod - def read_variables(variables): + def _read_variables(variables): raise TypeError(f'Invalid variables type {type(variables)}') @staticmethod def _read_variables_str(variables): - if isinstance(variables, str): - with open(variables, 'r') as ifile: - return yaml.safe_load(ifile) + with open(variables, 'r') as ifile: + return yaml.safe_load(ifile) @staticmethod def _read_variables_dict(variables): - return variables - + return variables