Source code for ezmsg.panel.application
from dataclasses import field
from typing import TYPE_CHECKING, Any, Callable, Dict, Mapping, Optional, Union
import ezmsg.core as ez
import panel
if TYPE_CHECKING:
from panel.template.base import BaseTemplate
from panel.viewable import Viewable, Viewer
TViewable = Union[Viewable, Viewer, BaseTemplate]
TViewableOrFunc = Union[TViewable, Callable[[], TViewable]]
[docs]
class ApplicationSettings(ez.Settings):
port: Optional[int] = None # None => disable server, 0 => choose open port
name: str = "ezmsg Panel"
serve_kwargs: Dict[str, Any] = field(default_factory=dict)
[docs]
class Application(ez.Unit):
SETTINGS = ApplicationSettings
panels: Mapping[str, "TViewableOrFunc"]
[docs]
@ez.task
async def serve(self) -> None:
if self.SETTINGS.port is not None:
if hasattr(self, "panels"):
panel.serve(
self.panels,
port=self.SETTINGS.port,
title=self.SETTINGS.name,
websocket_origin="*",
**self.SETTINGS.serve_kwargs,
)
else:
ez.logger.warning(
"Panel application has no panels set. "
+ "Did you forget to configure the panels attribute?"
)