Source code for eve_panel.eve_model

"""
Eve model
==========
Base classes for objects that represent Eve models.
"""

import panel as pn
import param
from copy import copy

from .settings import config as settings


[docs]class DefaultLayout(pn.GridBox): ncols = param.Integer(max(1, int(settings.GUI_WIDTH / 200))) width = param.Integer(settings.GUI_WIDTH)
[docs]class EveModelBase(param.Parameterized): _panel = param.ClassSelector(pn.viewable.Viewable, default=None, precedence=-1) max_width = param.Integer(default=settings.GUI_WIDTH, precedence=-1) max_height = param.Integer(default=settings.GUI_HEIGHT, precedence=-1) sizing_mode = param.Selector(default=settings.SIZING_MODE, precedence=-1, objects=["stretch_width", "stretch_height", "stretch_both", "scale_width", "scale_height", "scale_both"])
[docs] def make_panel(self): parameters = [ k for k, v in self.param.get_param_values() if not k.startswith("_") and not isinstance(v,bytes)] panel = pn.Param(self.param, max_width=self.max_width, max_height=self.max_height, sizing_mode=self.sizing_mode, parameters=parameters, default_layout=pn.Card) return panel
[docs] def panel(self): if self._panel is None: self._panel = self.make_panel() return self._panel
def _repr_mimebundle_(self, include=None, exclude=None): mimebundle = self.panel()._repr_mimebundle_(include, exclude) return mimebundle @property def gui(self): return self.panel()
[docs] def show(self): return self.panel().show()
[docs] def servable(self): return self.panel().servable()
[docs] def clone(self, **kwargs): params = {} for k,v in self.param.get_param_values(): if isinstance(v, EveModelBase): try: params[k] = v.clone() except: params[k] = v else: try: params[k] = copy(v) except: params[k] = v params.update(kwargs) params["_panel"] = None return self.__class__(**params)
[docs] def propagate(self, **kwargs): for k,v in kwargs.items(): if hasattr(self, k): setattr(self, k, v) for k,v in self.param.get_param_values(): if isinstance(v, EveModelBase): v.propagate(**kwargs) self._panel = None return self
def __iter__(self): for k,v in self.param.get_param_values(): if isinstance(v, EveModelBase): v = dict(v) yield k,v def __getstate__(self): state = super().__getstate__() state.pop("_panel", None) return state def __repr__(self): return self.name