Source code for runtimepy.net.server.app.env

"""
A module implementing a channel-environment tab HTML interface.
"""

# third-party
from svgen.element.html import div

# internal
from runtimepy import PKG_NAME
from runtimepy.net.arbiter.info import AppInfo
from runtimepy.net.html.bootstrap.elements import centered_markdown, input_box
from runtimepy.net.html.bootstrap.tabs import TabbedContent
from runtimepy.net.server.app.env.modal import Modal
from runtimepy.net.server.app.env.settings import plot_settings
from runtimepy.net.server.app.env.tab import ChannelEnvironmentTab
from runtimepy.net.server.app.placeholder import dummy_tabs
from runtimepy.net.server.app.sound import SoundTab


[docs] def populate_tabs(app: AppInfo, tabs: TabbedContent) -> None: """Populate tab contents.""" # Connection tabs. for name, conn in app.connections.items(): ChannelEnvironmentTab( name, conn.command, app, tabs, icon="ethernet", markdown=conn.markdown, ).entry() # Task tabs. for name, task in app.tasks.items(): ChannelEnvironmentTab( name, task.command, app, tabs, icon="arrow-repeat", markdown=task.markdown, js_uris=task.config.get("js_uris", []), ).entry() # Struct tabs. for struct in app.structs.values(): ChannelEnvironmentTab( struct.name, struct.command, app, tabs, icon="bucket", markdown=struct.markdown, js_uris=struct.config.get("js_uris", []), ).entry() # Subprocess tabs. for peer in app.peers.values(): # Host side. ChannelEnvironmentTab( peer.struct.name, peer.struct.command, app, tabs, icon="cpu-fill", markdown=peer.markdown, ).entry() # Remote side. assert peer.peer is not None ChannelEnvironmentTab( peer.peer_name, peer.peer, app, tabs, icon="cpu", markdown=peer.struct.markdown, ).entry() # If we are a peer program, load environments. # pylint:disable=import-outside-toplevel from runtimepy.subprocess.program import PROGRAM if PROGRAM is not None: # Host side. ChannelEnvironmentTab( PROGRAM.struct.name, PROGRAM.struct.command, app, tabs, icon="cpu-fill", markdown=PROGRAM.struct.markdown, ).entry() # Remote side. assert PROGRAM.peer is not None ChannelEnvironmentTab( PROGRAM.peer_name, PROGRAM.peer, app, tabs, icon="cpu", markdown=PROGRAM.markdown, ).entry()
[docs] def channel_environments(app: AppInfo, tabs: TabbedContent) -> None: """Populate application elements.""" # Remove tab-content scrolling. tabs.set_scroll(False) centered_markdown( tabs.tabs, app.config_param("top_markdown", "configure `top_markdown`"), "border-start", "border-bottom", "border-end", "bg-gradient-tertiary-to-top", ) # Tab name filter. _, label, box = input_box( div(tag="form", autocomplete="off", parent=tabs.tabs), label="tab", description="Tab name filter.", placement="bottom", icon="funnel", spellcheck="false", pattern=".* $ @", ) label.add_class("border-top-0") box.add_class("border-top-0") populate_tabs(app, tabs) # Toggle channel-table button. tabs.add_button( "Toggle channel table", ".channel-column", icon="table", id="channels-button", ) tabs.add_button( "Open channel table", "", icon="arrow-bar-right", id="open-channels-button", ) tabs.add_button( "Dedent channel table", "", icon="arrow-bar-left", id="dedent-channels-button", ) # Plot settings modal. plot_settings(tabs) # Experimental features. if app.config_param("experimental", False): # Sound tab. SoundTab("sound", app, tabs, source="sound", icon="boombox").entry() dummy_tabs(3, app, tabs) # Application modals. Modal(tabs) Modal(tabs, name="diagnostics", icon="activity") centered_markdown( tabs.tabs, app.config_param("bottom_markdown", "configure `bottom_markdown`"), "border-start", "border-end", "bg-gradient-tertiary-to-bottom", ) # Add splash screen element. div( id=f"{PKG_NAME}-splash", parent=tabs.container, class_str="bg-secondary-subtle bg-gradient", )