Rework whole package structure (improved dependency handling)

This commit is contained in:
Kristóf Tóth 2019-07-24 15:17:16 +02:00
parent c6e01d294d
commit a23224aced
72 changed files with 74 additions and 75 deletions

View File

@ -1,7 +1,7 @@
from collections import namedtuple from collections import namedtuple
from os import environ from os import environ
from tfw.decorators.lazy_property import lazy_property from tfw.internals.lazy import lazy_property
class LazyEnvironment: class LazyEnvironment:

View File

@ -1,10 +0,0 @@
from .directory_snapshotting_event_handler import DirectorySnapshottingEventHandler
from .frontend_event_handler import FrontendEventHandler
from .fsm_managing_event_handler import FSMManagingEventHandler
from .ide_event_handler import IdeEventHandler
from .log_monitoring_event_handler import LogMonitoringEventHandler
from .pipe_io_event_handler import PipeIOEventHandlerBase, PipeIOEventHandler
from .pipe_io_event_handler import TransformerPipeIOEventHandler, CommandEventHandler
from .process_managing_event_handler import ProcessManagingEventHandler
from .terminal_commands_event_handler import TerminalCommandsEventHandler
from .terminal_event_handler import TerminalEventHandler

View File

@ -1,11 +0,0 @@
from .commands_equal import CommandsEqual
from .file_manager import FileManager
from .fsm_updater import FSMUpdater
from .history_monitor import BashMonitor, GDBMonitor
from .log_inotify_observer import LogInotifyObserver
from .message_sender import MessageSender
from .message_storage import FrontendMessageStorage
from .snapshot_provider import SnapshotProvider
from .supervisor import ProcessManager, LogManager
from .terminado_mini_server import TerminadoMiniServer
from .terminal_commands import TerminalCommands

View File

@ -0,0 +1,2 @@
from .frontend_handler import FrontendHandler
from .message_sender import MessageSender

View File

@ -1,8 +1,9 @@
from tfw.networking import Scope from tfw.internals.networking import Scope
from tfw.components import FrontendMessageStorage
from .message_storage import FrontendMessageStorage
class FrontendEventHandler: class FrontendHandler:
keys = ['message', 'queueMessages', 'dashboard', 'console'] keys = ['message', 'queueMessages', 'dashboard', 'console']
def __init__(self): def __init__(self):

View File

@ -0,0 +1 @@
from .fsm_handler import FSMHandler

View File

@ -1,14 +1,15 @@
import logging import logging
from tfw.crypto import KeyManager, sign_message, verify_message from tfw.internals.crypto import KeyManager, sign_message, verify_message
from tfw.networking import Scope from tfw.internals.networking import Scope
from tfw.components import FSMUpdater
from .fsm_updater import FSMUpdater
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class FSMManagingEventHandler: class FSMHandler:
keys = ['fsm'] keys = ['fsm']
""" """
EventHandler responsible for managing the state machine of EventHandler responsible for managing the state machine of

View File

@ -0,0 +1 @@
from .ide_handler import IdeHandler

View File

@ -1,8 +1,9 @@
import logging import logging
from tfw.networking import Scope from tfw.internals.networking import Scope
from tfw.components import FileManager from tfw.internals.inotify import InotifyObserver
from tfw.components.inotify import InotifyObserver
from .file_manager import FileManager
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -31,7 +32,7 @@ BUILD_ARTIFACTS = (
) )
class IdeEventHandler: class IdeHandler:
keys = ['ide'] keys = ['ide']
# pylint: disable=too-many-arguments,anomalous-backslash-in-string # pylint: disable=too-many-arguments,anomalous-backslash-in-string
""" """

View File

@ -0,0 +1 @@
from .pipe_io_handler import PipeIOHandler, PipeIOHandlerBase, TransformerPipeIOHandler, CommandHandler

View File

@ -10,14 +10,14 @@ from secrets import token_urlsafe
from threading import Thread from threading import Thread
from contextlib import suppress from contextlib import suppress
from tfw.components.pipe_io_server import PipeIOServer, terminate_process_on_failure from .pipe_io_server import PipeIOServer, terminate_process_on_failure
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
DEFAULT_PERMISSIONS = 0o600 DEFAULT_PERMISSIONS = 0o600
class PipeIOEventHandlerBase: class PipeIOHandlerBase:
keys = [''] keys = ['']
def __init__(self, in_pipe_path, out_pipe_path, permissions=DEFAULT_PERMISSIONS): def __init__(self, in_pipe_path, out_pipe_path, permissions=DEFAULT_PERMISSIONS):
@ -50,7 +50,7 @@ class CallbackPipeIOServer(PipeIOServer):
LOG.exception('Failed to handle message %s from pipe %s!', message, self.in_pipe) LOG.exception('Failed to handle message %s from pipe %s!', message, self.in_pipe)
class PipeIOEventHandler(PipeIOEventHandlerBase): class PipeIOHandler(PipeIOHandlerBase):
def handle_event(self, message, _): def handle_event(self, message, _):
json_bytes = dumps(message).encode() json_bytes = dumps(message).encode()
self.pipe_io.send_message(json_bytes) self.pipe_io.send_message(json_bytes)
@ -60,7 +60,7 @@ class PipeIOEventHandler(PipeIOEventHandlerBase):
self.server_connector.send_message(json) self.server_connector.send_message(json)
class TransformerPipeIOEventHandler(PipeIOEventHandlerBase): class TransformerPipeIOHandler(PipeIOHandlerBase):
# pylint: disable=too-many-arguments # pylint: disable=too-many-arguments
def __init__( def __init__(
self, in_pipe_path, out_pipe_path, self, in_pipe_path, out_pipe_path,
@ -97,7 +97,7 @@ class TransformerPipeIOEventHandler(PipeIOEventHandlerBase):
self.server_connector.send_message(json_message) self.server_connector.send_message(json_message)
class CommandEventHandler(PipeIOEventHandler): class CommandHandler(PipeIOHandler):
def __init__(self, command, permissions=DEFAULT_PERMISSIONS): def __init__(self, command, permissions=DEFAULT_PERMISSIONS):
super().__init__( super().__init__(
self._generate_tempfilename(), self._generate_tempfilename(),

View File

@ -0,0 +1,2 @@
from .process_handler import ProcessHandler
from .process_log_handler import ProcessLogHandler

View File

@ -1,19 +1,19 @@
import logging import logging
from tfw.networking import Scope from tfw.internals.networking import Scope
from tfw.internals.inotify import InotifyObserver
from .inotify import InotifyObserver from .supervisor import ProcessLogManager
from .supervisor import LogManager
class LogInotifyObserver(InotifyObserver, LogManager): class LogInotifyObserver(InotifyObserver, ProcessLogManager):
def __init__(self, server_connector, supervisor_uri, process_name, log_tail=0): def __init__(self, server_connector, supervisor_uri, process_name, log_tail=0):
self._prevent_log_recursion() self._prevent_log_recursion()
self._server_connector = server_connector self._server_connector = server_connector
self._process_name = process_name self._process_name = process_name
self.log_tail = log_tail self.log_tail = log_tail
self._procinfo = None self._procinfo = None
LogManager.__init__(self, supervisor_uri) ProcessLogManager.__init__(self, supervisor_uri)
InotifyObserver.__init__(self, self._get_logfiles()) InotifyObserver.__init__(self, self._get_logfiles())
@staticmethod @staticmethod

View File

@ -1,14 +1,15 @@
import logging import logging
from xmlrpc.client import Fault as SupervisorFault from xmlrpc.client import Fault as SupervisorFault
from tfw.networking import Scope from tfw.internals.networking import Scope
from tfw.components import ProcessManager, LogManager
from .supervisor import ProcessManager, ProcessLogManager
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class ProcessManagingEventHandler(ProcessManager, LogManager): class ProcessHandler(ProcessManager, ProcessLogManager):
keys = ['processmanager'] keys = ['processmanager']
""" """
Event handler that can manage processes managed by supervisor. Event handler that can manage processes managed by supervisor.
@ -24,7 +25,7 @@ class ProcessManagingEventHandler(ProcessManager, LogManager):
""" """
def __init__(self, *, supervisor_uri, log_tail=0): def __init__(self, *, supervisor_uri, log_tail=0):
ProcessManager.__init__(self, supervisor_uri) ProcessManager.__init__(self, supervisor_uri)
LogManager.__init__(self, supervisor_uri) ProcessLogManager.__init__(self, supervisor_uri)
self.log_tail = log_tail self.log_tail = log_tail
self.commands = { self.commands = {
'start': self.start_process, 'start': self.start_process,

View File

@ -1,12 +1,12 @@
import logging import logging
from tfw.components import LogInotifyObserver from .log_inotify_observer import LogInotifyObserver
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class LogMonitoringEventHandler: class ProcessLogHandler:
keys = ['logmonitor'] keys = ['logmonitor']
""" """
Monitors the output of a supervisor process (stdout, stderr) and Monitors the output of a supervisor process (stdout, stderr) and

View File

@ -22,7 +22,7 @@ class ProcessManager(SupervisorBase):
self.start_process(process_name) self.start_process(process_name)
class LogManager(SupervisorBase): class ProcessLogManager(SupervisorBase):
def read_stdout(self, process_name, tail=0): def read_stdout(self, process_name, tail=0):
return self.supervisor.readProcessStdoutLog(process_name, -tail, 0) return self.supervisor.readProcessStdoutLog(process_name, -tail, 0)

View File

@ -0,0 +1 @@
from .snapshot_handler import SnapshotHandler

View File

@ -6,14 +6,15 @@ from datetime import datetime
from dateutil import parser as dateparser from dateutil import parser as dateparser
from tfw.components.snapshot_provider import SnapshotProvider from tfw.internals.networking import Scope
from tfw.networking import Scope
from .snapshot_provider import SnapshotProvider
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class DirectorySnapshottingEventHandler: class SnapshotHandler:
keys = ['snapshot'] keys = ['snapshot']
def __init__(self, *, directories, snapshots_dir, exclude_unix_patterns=None): def __init__(self, *, directories, snapshots_dir, exclude_unix_patterns=None):

View File

@ -0,0 +1,3 @@
from .terminal_handler import TerminalHandler
from .terminal_commands_handler import TerminalCommandsHandler
from .commands_equal import CommandsEqual

View File

@ -1,7 +1,7 @@
from shlex import split from shlex import split
from re import search from re import search
from tfw.decorators.lazy_property import lazy_property from tfw.internals.lazy import lazy_property
class CommandsEqual: class CommandsEqual:

View File

@ -2,7 +2,7 @@ from re import findall
from re import compile as compileregex from re import compile as compileregex
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from tfw.components.inotify import InotifyObserver from tfw.internals.inotify import InotifyObserver
class HistoryMonitor(ABC, InotifyObserver): class HistoryMonitor(ABC, InotifyObserver):

View File

@ -1,7 +1,7 @@
from tfw.components import TerminalCommands from .terminal_commands import TerminalCommands
class TerminalCommandsEventHandler(TerminalCommands): class TerminalCommandsHandler(TerminalCommands):
keys = ['history.bash'] keys = ['history.bash']
def handle_event(self, message, _): def handle_event(self, message, _):

View File

@ -1,12 +1,13 @@
import logging import logging
from tfw.components import BashMonitor, TerminadoMiniServer from .history_monitor import BashMonitor
from .terminado_mini_server import TerminadoMiniServer
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
class TerminalEventHandler: class TerminalHandler:
keys = ['shell'] keys = ['shell']
""" """
Event handler responsible for managing terminal sessions for frontend xterm Event handler responsible for managing terminal sessions for frontend xterm

View File

@ -0,0 +1,2 @@
# pylint: disable=unused-import
from tfw.internals.event_handling import EventHandler, FSMAwareEventHandler

View File

@ -4,7 +4,7 @@ from datetime import datetime
from transitions import Machine, MachineError from transitions import Machine, MachineError
from tfw.mixins.callback_mixin import CallbackMixin from tfw.internals.callback_mixin import CallbackMixin
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)

View File

@ -1,6 +1,6 @@
from transitions import State from transitions import State
from tfw.fsm.fsm_base import FSMBase from .fsm_base import FSMBase
class LinearFSM(FSMBase): class LinearFSM(FSMBase):

View File

@ -6,7 +6,7 @@ import yaml
import jinja2 import jinja2
from transitions import State from transitions import State
from tfw.fsm.fsm_base import FSMBase from .fsm_base import FSMBase
class YamlFSM(FSMBase): class YamlFSM(FSMBase):

View File

@ -1,6 +1,6 @@
from functools import partial from functools import partial
from tfw.decorators.lazy_property import lazy_property from .lazy import lazy_property
class CallbackMixin: class CallbackMixin:

View File

@ -11,8 +11,8 @@ from cryptography.hazmat.primitives.hashes import SHA256
from cryptography.hazmat.primitives.hmac import HMAC as _HMAC from cryptography.hazmat.primitives.hmac import HMAC as _HMAC
from cryptography.exceptions import InvalidSignature from cryptography.exceptions import InvalidSignature
from tfw.networking import message_bytes from tfw.internals.networking import message_bytes
from tfw.decorators.lazy_property import lazy_property from tfw.internals.lazy import lazy_property
from tfw.config import TFWENV from tfw.config import TFWENV

View File

@ -1,6 +1,6 @@
import logging import logging
from tfw.crypto import KeyManager, verify_message from tfw.internals.crypto import KeyManager, verify_message
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)

View File

@ -0,0 +1 @@
from .zmq_websocket_router import ZMQWebSocketRouter

View File

@ -3,7 +3,7 @@ import logging
from tornado.websocket import WebSocketHandler from tornado.websocket import WebSocketHandler
from tfw.networking import Scope from tfw.internals.networking import Scope
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)

View File

@ -102,7 +102,7 @@ class LogFormatter(Formatter):
class VerboseLogFormatter(Formatter): class VerboseLogFormatter(Formatter):
def format(self, record): def format(self, record): # pylint: disable=no-self-use
date = datetime.utcfromtimestamp(record.created).strftime('%H:%M:%S') date = datetime.utcfromtimestamp(record.created).strftime('%H:%M:%S')
if record.args: if record.args:
message = record.msg % record.args message = record.msg % record.args

View File

@ -1,3 +1,4 @@
from .tfw_connector import TFWUplinkConnector, TFWConnector from .tfw_connector import TFWUplinkConnector, TFWConnector
from .event_handler_factory import EventHandlerFactory from .event_handler_factory import EventHandlerFactory
from .signal_handling import setup_signal_handlers from .signal_handling import setup_signal_handlers
from .tfw_server import TFWServer

View File

@ -1,4 +1,4 @@
from tfw.event_handlers import EventHandlerFactoryBase from tfw.internals.event_handling import EventHandlerFactoryBase
from .tfw_connector import TFWConnector from .tfw_connector import TFWConnector

View File

@ -1,6 +1,6 @@
from signal import signal, SIGTERM, SIGINT from signal import signal, SIGTERM, SIGINT
from tfw.event_handlers import EventHandler from tfw.internals.event_handling import EventHandler
def setup_signal_handlers(): def setup_signal_handlers():

View File

@ -1,4 +1,4 @@
from tfw.networking import ServerConnector, ServerUplinkConnector from tfw.internals.networking import ServerConnector, ServerUplinkConnector
from tfw.config import TFWENV from tfw.config import TFWENV

View File

@ -2,10 +2,10 @@ import logging
from tornado.web import Application from tornado.web import Application
from tfw.networking import EventHandlerConnector from tfw.internals.networking import EventHandlerConnector
from tfw.internals.server import ZMQWebSocketRouter
from tfw.config import TFWENV from tfw.config import TFWENV
from .zmq_websocket_router import ZMQWebSocketRouter
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)

View File

@ -1 +0,0 @@
from .tfw_server import TFWServer

View File

@ -2,7 +2,7 @@ from sys import stderr
from tornado.ioloop import IOLoop from tornado.ioloop import IOLoop
from tfw.server import TFWServer from tfw.main import TFWServer
from tfw.config import TFWENV from tfw.config import TFWENV
from tfw.logging import Log, Logger, LogFormatter, VerboseLogFormatter from tfw.logging import Log, Logger, LogFormatter, VerboseLogFormatter