Source code for runtimepy.net.server.app.env.tab.base
"""
A module implementing a channel-environment tab HTML interface.
"""
# built-in
from io import StringIO
# third-party
from vcorelib.io.markdown import MarkdownMixin
from vcorelib.logging import LoggerMixin
from vcorelib.math import RateLimiter
# internal
from runtimepy import PKG_NAME
from runtimepy.channel.environment.command.processor import (
ChannelCommandProcessor,
)
from runtimepy.net.arbiter.info import AppInfo
from runtimepy.net.html.bootstrap.tabs import TabbedContent
from runtimepy.net.server.app.tab import Tab
[docs]
class ChannelEnvironmentTabBase(Tab, LoggerMixin, MarkdownMixin):
"""A channel-environment tab interface."""
def __init__(
self,
name: str,
command: ChannelCommandProcessor,
app: AppInfo,
tabs: TabbedContent,
icon: str = "alarm",
markdown: str = None,
**kwargs,
) -> None:
"""Initialize this instance."""
self.command = command
self.set_markdown(markdown=markdown, package=PKG_NAME)
super().__init__(name, app, tabs, source="env", icon=icon, **kwargs)
# Logging.
LoggerMixin.__init__(self, logger=self.command.logger)
self.log_limiter = RateLimiter.from_s(1.0)
def _action_markdown(self) -> str:
"""Get action-button markdown."""
with StringIO() as stream:
for button in self.command.buttons:
button.element().encode(stream)
return stream.getvalue()