Create a Viewer

Introduction

To write your custom Viewer, you will subclass the Viewer class, or one of the already existing subclasses that exist in the solidipes-core-plugin package.

Your custom Viewer would typically live in a separate Solidipes plugin package. If the Viewer is generic enough (not specific to a particular field), it might be added to the solidipes-core-plugin package.

Viewers define different routines depending on the platform Solidipes is running on (Python, Jupyter notebook, or Streamlit web interface). See the example below.

Example

Here is a minimal example of a text Viewer that reads the content of a text file on demand:

import streamlit as st
from IPython.display import display
from solidipes.loaders.data_container import DataContainer
from solidipes.viewers import backends as viewer_backends
# Viewer class or subclasses can be imported from solidipes or from other plugins
from solidipes.viewers.viewer import Viewer


class Text(Viewer):
    """Viewer for text

    If instanced with data, it will directly display it.
    """

    def __init__(self, data=None):
        #: List of data types (apart from DataContainers) that are compatible with the viewer
        #: DataContainers themselves already declare their compatible Viewers
        self.compatible_data_types = [str]
        #: Text to display
        self.text = ""
        super().__init__(data)

    def add(self, data):
        """Append text to the viewer"""
        self.check_data_compatibility(data)

        if isinstance(data, DataContainer):
            self.text += data.text

        elif isinstance(data, str):
            self.text += data

    def show(self):
        if viewer_backends.current_backend == "jupyter notebook":
            display(self.text)

        elif viewer_backends.current_backend == "streamlit":
            st.text(self.text)

        else:  # python
            print(self.text)