refactor: convert klippy_connection into a component
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
a88468eb79
commit
ddd735feba
|
@ -54,7 +54,7 @@ if TYPE_CHECKING:
|
||||||
from ..server import Server
|
from ..server import Server
|
||||||
from ..eventloop import EventLoop
|
from ..eventloop import EventLoop
|
||||||
from ..confighelper import ConfigHelper
|
from ..confighelper import ConfigHelper
|
||||||
from ..klippy_connection import KlippyConnection as Klippy
|
from .klippy_connection import KlippyConnection as Klippy
|
||||||
from ..utils import IPAddress
|
from ..utils import IPAddress
|
||||||
from .websockets import WebsocketManager
|
from .websockets import WebsocketManager
|
||||||
from .file_manager.file_manager import FileManager
|
from .file_manager.file_manager import FileManager
|
||||||
|
|
|
@ -22,7 +22,7 @@ from typing import (
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ..confighelper import ConfigHelper
|
from ..confighelper import ConfigHelper
|
||||||
from ..common import WebRequest
|
from ..common import WebRequest
|
||||||
from ..klippy_connection import KlippyConnection
|
from .klippy_connection import KlippyConnection
|
||||||
from .klippy_apis import KlippyAPI as APIComp
|
from .klippy_apis import KlippyAPI as APIComp
|
||||||
GCQueue = Deque[Dict[str, Any]]
|
GCQueue = Deque[Dict[str, Any]]
|
||||||
TempStore = Dict[str, Dict[str, Deque[Optional[float]]]]
|
TempStore = Dict[str, Dict[str, Deque[Optional[float]]]]
|
||||||
|
|
|
@ -24,7 +24,7 @@ if TYPE_CHECKING:
|
||||||
from ..server import Server
|
from ..server import Server
|
||||||
from ..confighelper import ConfigHelper
|
from ..confighelper import ConfigHelper
|
||||||
from ..common import WebRequest
|
from ..common import WebRequest
|
||||||
from ..klippy_connection import KlippyConnection as Klippy
|
from .klippy_connection import KlippyConnection as Klippy
|
||||||
|
|
||||||
UNIX_BUFFER_LIMIT = 20 * 1024 * 1024
|
UNIX_BUFFER_LIMIT = 20 * 1024 * 1024
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ if TYPE_CHECKING:
|
||||||
from inotify_simple import Event as InotifyEvent
|
from inotify_simple import Event as InotifyEvent
|
||||||
from ...confighelper import ConfigHelper
|
from ...confighelper import ConfigHelper
|
||||||
from ...common import WebRequest
|
from ...common import WebRequest
|
||||||
from ...klippy_connection import KlippyConnection
|
from ..klippy_connection import KlippyConnection
|
||||||
from .. import database
|
from .. import database
|
||||||
from .. import klippy_apis
|
from .. import klippy_apis
|
||||||
from .. import shell_command
|
from .. import shell_command
|
||||||
|
|
|
@ -23,7 +23,7 @@ from typing import (
|
||||||
)
|
)
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ..confighelper import ConfigHelper
|
from ..confighelper import ConfigHelper
|
||||||
from ..klippy_connection import KlippyConnection as Klippy
|
from .klippy_connection import KlippyConnection as Klippy
|
||||||
Subscription = Dict[str, Optional[List[Any]]]
|
Subscription = Dict[str, Optional[List[Any]]]
|
||||||
SubCallback = Callable[[Dict[str, Dict[str, Any]], float], Optional[Coroutine]]
|
SubCallback = Callable[[Dict[str, Dict[str, Any]], float], Optional[Coroutine]]
|
||||||
_T = TypeVar("_T")
|
_T = TypeVar("_T")
|
||||||
|
|
|
@ -12,9 +12,9 @@ import logging
|
||||||
import getpass
|
import getpass
|
||||||
import asyncio
|
import asyncio
|
||||||
import pathlib
|
import pathlib
|
||||||
from .utils import ServerError, get_unix_peer_credentials
|
from ..utils import ServerError, get_unix_peer_credentials
|
||||||
from .utils import json_wrapper as jsonw
|
from ..utils import json_wrapper as jsonw
|
||||||
from .common import KlippyState, RequestType
|
from ..common import KlippyState, RequestType
|
||||||
|
|
||||||
# Annotation imports
|
# Annotation imports
|
||||||
from typing import (
|
from typing import (
|
||||||
|
@ -31,14 +31,13 @@ from typing import (
|
||||||
Union
|
Union
|
||||||
)
|
)
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .server import Server
|
from ..common import WebRequest, APITransport, BaseRemoteConnection
|
||||||
from .common import WebRequest, APITransport, BaseRemoteConnection
|
from ..confighelper import ConfigHelper
|
||||||
from .confighelper import ConfigHelper
|
from .klippy_apis import KlippyAPI
|
||||||
from .components.klippy_apis import KlippyAPI
|
from .file_manager.file_manager import FileManager
|
||||||
from .components.file_manager.file_manager import FileManager
|
from .machine import Machine
|
||||||
from .components.machine import Machine
|
from .job_state import JobState
|
||||||
from .components.job_state import JobState
|
from .database import MoonrakerDatabase as Database
|
||||||
from .components.database import MoonrakerDatabase as Database
|
|
||||||
FlexCallback = Callable[..., Optional[Coroutine]]
|
FlexCallback = Callable[..., Optional[Coroutine]]
|
||||||
Subscription = Dict[str, Optional[List[str]]]
|
Subscription = Dict[str, Optional[List[str]]]
|
||||||
|
|
||||||
|
@ -57,9 +56,11 @@ UNIX_BUFFER_LIMIT = 20 * 1024 * 1024
|
||||||
SVC_INFO_KEY = "klippy_connection.service_info"
|
SVC_INFO_KEY = "klippy_connection.service_info"
|
||||||
|
|
||||||
class KlippyConnection:
|
class KlippyConnection:
|
||||||
def __init__(self, server: Server) -> None:
|
def __init__(self, config: ConfigHelper) -> None:
|
||||||
self.server = server
|
self.server = config.get_server()
|
||||||
self.uds_address = pathlib.Path("/tmp/klippy_uds")
|
self.uds_address = config.getpath(
|
||||||
|
"klippy_uds_address", pathlib.Path("/tmp/klippy_uds")
|
||||||
|
)
|
||||||
self.writer: Optional[asyncio.StreamWriter] = None
|
self.writer: Optional[asyncio.StreamWriter] = None
|
||||||
self.connection_mutex: asyncio.Lock = asyncio.Lock()
|
self.connection_mutex: asyncio.Lock = asyncio.Lock()
|
||||||
self.event_loop = self.server.get_event_loop()
|
self.event_loop = self.server.get_event_loop()
|
||||||
|
@ -94,12 +95,6 @@ class KlippyConnection:
|
||||||
self.register_remote_method(
|
self.register_remote_method(
|
||||||
'process_status_update', self._process_status_update,
|
'process_status_update', self._process_status_update,
|
||||||
need_klippy_reg=False)
|
need_klippy_reg=False)
|
||||||
self.server.register_component("klippy_connection", self)
|
|
||||||
|
|
||||||
def configure(self, config: ConfigHelper):
|
|
||||||
self.uds_address = config.getpath(
|
|
||||||
"klippy_uds_address", self.uds_address
|
|
||||||
)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def klippy_apis(self) -> KlippyAPI:
|
def klippy_apis(self) -> KlippyAPI:
|
||||||
|
@ -789,3 +784,6 @@ class KlippyRequest:
|
||||||
'method': self.rpc_method,
|
'method': self.rpc_method,
|
||||||
'params': self.params
|
'params': self.params
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def load_component(config: ConfigHelper) -> KlippyConnection:
|
||||||
|
return KlippyConnection(config)
|
|
@ -43,7 +43,7 @@ if TYPE_CHECKING:
|
||||||
from ..confighelper import ConfigHelper
|
from ..confighelper import ConfigHelper
|
||||||
from ..common import WebRequest
|
from ..common import WebRequest
|
||||||
from .application import MoonrakerApp
|
from .application import MoonrakerApp
|
||||||
from ..klippy_connection import KlippyConnection
|
from .klippy_connection import KlippyConnection
|
||||||
from .shell_command import ShellCommandFactory as SCMDComp
|
from .shell_command import ShellCommandFactory as SCMDComp
|
||||||
from .database import MoonrakerDatabase
|
from .database import MoonrakerDatabase
|
||||||
from .file_manager.file_manager import FileManager
|
from .file_manager.file_manager import FileManager
|
||||||
|
|
|
@ -16,7 +16,7 @@ from typing import (
|
||||||
List,
|
List,
|
||||||
)
|
)
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ..klippy_connection import KlippyConnection
|
from .klippy_connection import KlippyConnection
|
||||||
from ..confighelper import ConfigHelper
|
from ..confighelper import ConfigHelper
|
||||||
from ..common import WebRequest
|
from ..common import WebRequest
|
||||||
from .klippy_apis import KlippyAPI as APIComp
|
from .klippy_apis import KlippyAPI as APIComp
|
||||||
|
|
|
@ -29,7 +29,7 @@ from typing import (
|
||||||
)
|
)
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ..confighelper import ConfigHelper
|
from ..confighelper import ConfigHelper
|
||||||
from ..klippy_connection import KlippyConnection
|
from .klippy_connection import KlippyConnection
|
||||||
from .klippy_apis import KlippyAPI as APIComp
|
from .klippy_apis import KlippyAPI as APIComp
|
||||||
from .file_manager.file_manager import FileManager as FMComp
|
from .file_manager.file_manager import FileManager as FMComp
|
||||||
FlexCallback = Callable[..., Optional[Coroutine]]
|
FlexCallback = Callable[..., Optional[Coroutine]]
|
||||||
|
|
|
@ -35,7 +35,7 @@ if TYPE_CHECKING:
|
||||||
from .mqtt import MQTTClient
|
from .mqtt import MQTTClient
|
||||||
from .template import JinjaTemplate
|
from .template import JinjaTemplate
|
||||||
from .http_client import HttpClient
|
from .http_client import HttpClient
|
||||||
from klippy_connection import KlippyConnection
|
from .klippy_connection import KlippyConnection
|
||||||
|
|
||||||
class PrinterPower:
|
class PrinterPower:
|
||||||
def __init__(self, config: ConfigHelper) -> None:
|
def __init__(self, config: ConfigHelper) -> None:
|
||||||
|
|
|
@ -45,7 +45,7 @@ if TYPE_CHECKING:
|
||||||
from .power import PrinterPower
|
from .power import PrinterPower
|
||||||
from .announcements import Announcements
|
from .announcements import Announcements
|
||||||
from .webcam import WebcamManager, WebCam
|
from .webcam import WebcamManager, WebCam
|
||||||
from ..klippy_connection import KlippyConnection
|
from .klippy_connection import KlippyConnection
|
||||||
|
|
||||||
COMPONENT_VERSION = "0.0.1"
|
COMPONENT_VERSION = "0.0.1"
|
||||||
SP_VERSION = "0.1"
|
SP_VERSION = "0.1"
|
||||||
|
|
|
@ -30,7 +30,7 @@ from typing import (
|
||||||
)
|
)
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ...confighelper import ConfigHelper
|
from ...confighelper import ConfigHelper
|
||||||
from ...klippy_connection import KlippyConnection as Klippy
|
from ..klippy_connection import KlippyConnection as Klippy
|
||||||
from .update_manager import CommandHelper
|
from .update_manager import CommandHelper
|
||||||
from ..machine import Machine
|
from ..machine import Machine
|
||||||
from ..file_manager.file_manager import FileManager
|
from ..file_manager.file_manager import FileManager
|
||||||
|
|
|
@ -37,7 +37,7 @@ if TYPE_CHECKING:
|
||||||
from ...server import Server
|
from ...server import Server
|
||||||
from ...confighelper import ConfigHelper
|
from ...confighelper import ConfigHelper
|
||||||
from ...common import WebRequest
|
from ...common import WebRequest
|
||||||
from ...klippy_connection import KlippyConnection
|
from ..klippy_connection import KlippyConnection
|
||||||
from ..shell_command import ShellCommandFactory as SCMDComp
|
from ..shell_command import ShellCommandFactory as SCMDComp
|
||||||
from ..database import MoonrakerDatabase as DBComp
|
from ..database import MoonrakerDatabase as DBComp
|
||||||
from ..database import NamespaceWrapper
|
from ..database import NamespaceWrapper
|
||||||
|
|
|
@ -32,7 +32,7 @@ from typing import (
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ..server import Server
|
from ..server import Server
|
||||||
from ..klippy_connection import KlippyConnection as Klippy
|
from .klippy_connection import KlippyConnection as Klippy
|
||||||
from ..confighelper import ConfigHelper
|
from ..confighelper import ConfigHelper
|
||||||
from .extensions import ExtensionManager
|
from .extensions import ExtensionManager
|
||||||
from .authorization import Authorization
|
from .authorization import Authorization
|
||||||
|
|
|
@ -27,7 +27,7 @@ from typing import (
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .server import Server
|
from .server import Server
|
||||||
from .common import WebRequest
|
from .common import WebRequest
|
||||||
from .klippy_connection import KlippyConnection
|
from .components.klippy_connection import KlippyConnection
|
||||||
|
|
||||||
# Coroutine friendly QueueHandler courtesy of Martjin Pieters:
|
# Coroutine friendly QueueHandler courtesy of Martjin Pieters:
|
||||||
# https://www.zopatista.com/python/2019/05/11/asyncio-logging/
|
# https://www.zopatista.com/python/2019/05/11/asyncio-logging/
|
||||||
|
|
|
@ -21,7 +21,6 @@ import uuid
|
||||||
import traceback
|
import traceback
|
||||||
from . import confighelper
|
from . import confighelper
|
||||||
from .eventloop import EventLoop
|
from .eventloop import EventLoop
|
||||||
from .klippy_connection import KlippyConnection
|
|
||||||
from .utils import (
|
from .utils import (
|
||||||
ServerError,
|
ServerError,
|
||||||
Sentinel,
|
Sentinel,
|
||||||
|
@ -50,6 +49,7 @@ if TYPE_CHECKING:
|
||||||
from .common import WebRequest
|
from .common import WebRequest
|
||||||
from .components.application import MoonrakerApp
|
from .components.application import MoonrakerApp
|
||||||
from .components.websockets import WebsocketManager
|
from .components.websockets import WebsocketManager
|
||||||
|
from .components.klippy_connection import KlippyConnection
|
||||||
from .components.file_manager.file_manager import FileManager
|
from .components.file_manager.file_manager import FileManager
|
||||||
from .components.machine import Machine
|
from .components.machine import Machine
|
||||||
from .components.extensions import ExtensionManager
|
from .components.extensions import ExtensionManager
|
||||||
|
@ -57,6 +57,7 @@ if TYPE_CHECKING:
|
||||||
_T = TypeVar("_T", Sentinel, Any)
|
_T = TypeVar("_T", Sentinel, Any)
|
||||||
|
|
||||||
API_VERSION = (1, 4, 0)
|
API_VERSION = (1, 4, 0)
|
||||||
|
SERVER_COMPONENTS = ['application', 'websockets', 'klippy_connection']
|
||||||
CORE_COMPONENTS = [
|
CORE_COMPONENTS = [
|
||||||
'dbus_manager', 'database', 'file_manager', 'klippy_apis',
|
'dbus_manager', 'database', 'file_manager', 'klippy_apis',
|
||||||
'machine', 'data_store', 'shell_command', 'proc_stats',
|
'machine', 'data_store', 'shell_command', 'proc_stats',
|
||||||
|
@ -96,7 +97,8 @@ class Server:
|
||||||
log_level = logging.DEBUG if args["verbose"] else logging.INFO
|
log_level = logging.DEBUG if args["verbose"] else logging.INFO
|
||||||
logging.getLogger().setLevel(log_level)
|
logging.getLogger().setLevel(log_level)
|
||||||
self.event_loop.set_debug(args["asyncio_debug"])
|
self.event_loop.set_debug(args["asyncio_debug"])
|
||||||
self.klippy_connection = KlippyConnection(self)
|
self.klippy_connection: KlippyConnection
|
||||||
|
self.klippy_connection = self.load_component(config, "klippy_connection")
|
||||||
|
|
||||||
# Tornado Application/Server
|
# Tornado Application/Server
|
||||||
self.moonraker_app: MoonrakerApp = self.load_component(config, "application")
|
self.moonraker_app: MoonrakerApp = self.load_component(config, "application")
|
||||||
|
@ -258,7 +260,6 @@ class Server:
|
||||||
for section in cfg_sections:
|
for section in cfg_sections:
|
||||||
self.load_component(config, section, None)
|
self.load_component(config, section, None)
|
||||||
|
|
||||||
self.klippy_connection.configure(config)
|
|
||||||
config.validate_config()
|
config.validate_config()
|
||||||
self._is_configured = True
|
self._is_configured = True
|
||||||
|
|
||||||
|
@ -281,9 +282,11 @@ class Server:
|
||||||
try:
|
try:
|
||||||
full_name = f"moonraker.components.{component_name}"
|
full_name = f"moonraker.components.{component_name}"
|
||||||
module = importlib.import_module(full_name)
|
module = importlib.import_module(full_name)
|
||||||
is_core = component_name in CORE_COMPONENTS
|
# Server components use the [server] section for configuration
|
||||||
fallback: Optional[str] = "server" if is_core else None
|
if component_name not in SERVER_COMPONENTS:
|
||||||
config = config.getsection(component_name, fallback)
|
is_core = component_name in CORE_COMPONENTS
|
||||||
|
fallback: Optional[str] = "server" if is_core else None
|
||||||
|
config = config.getsection(component_name, fallback)
|
||||||
load_func = getattr(module, "load_component")
|
load_func = getattr(module, "load_component")
|
||||||
component = load_func(config)
|
component = load_func(config)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
Loading…
Reference in New Issue