src.jupyter_process_manager.widget API documentation
Description: Module with functions to handle all ipywidget stuff

# Module `src.jupyter_process_manager.widget`

Module with functions to handle all ipywidget stuff

Expand source code

    """Module with functions to handle all ipywidget stuff"""
    # Standard library imports
    import os
    import sys
    import logging
    from collections import OrderedDict
    from time import sleep
    import datetime

    # Third party imports
    import ipywidgets
    from ipywidgets import HBox, VBox
    from char import char
    from IPython.display import clear_output
    from IPython.display import display
    from tqdm.auto import tqdm
    from tabulate import tabulate
    from yaspin import yaspin

    # Local imports
    from .class_one_process import OneProcess
    from .other import timedelta_nice_format

    MAIN_VBOX_LAYOUT = dict(
        # display="flex",
        width="100%",
        justify_content="center",
        align_self="center",
        # border='dashed 1px',
        padding="0px 0px 10px 0px"

    )

    HBOX_LAYOUT = dict(
        # display="flex", # Items will be put one after another
        flex_wrap="wrap",
            flex="1 1 auto",
        width="80%",
        justify_content="center",
        align_self="center",
    )

    VBOX_APP_GUI = ipywidgets.VBox()
    VBOX_MAIN_GUI = ipywidgets.VBox(layout=MAIN_VBOX_LAYOUT)
    VBOX_CHOOSE_OUTPUT = ipywidgets.VBox()

    VBOX_CHOOSE_OUTPUT_TYPE = ipywidgets.VBox()

    VBOX_ONE_PROCESS_CHOOSE_OUTPUT = ipywidgets.VBox()
    OUTPUT_PROCESSES_CONDITIONS = ipywidgets.Output()
    OUTPUT = ipywidgets.Output()
    BUTTONS_CHOOSE_PROCESS = ipywidgets.ToggleButtons()
    BUTTONS_CHOOSE_OUTPUT_TYPE = ipywidgets.ToggleButtons(
        options=["STDOUT", "STDERR"])
    BUTTON_CLEAR_OUTPUT = ipywidgets.Button(
        description='clear',
        button_style='info', # 'success', 'info', 'warning', 'danger' or ''
    )
    WIDGET_LAST_LINES_TO_GET = ipywidgets.IntText(100)

    # Create global events
    BUTTON_CLEAR_OUTPUT.on_click(lambda _: OUTPUT.clear_output())
    BUTTONS_CHOOSE_OUTPUT_TYPE.observe(
        lambda _:update_vbox_choose_output_type(), names='value')

    def update_vbox_choose_output_type():
        """"""
        list_hboxes = []
        if BUTTONS_CHOOSE_OUTPUT_TYPE.value == "STDOUT":
            WIDGET_LAST_LINES_TO_GET.disabled = False
        else:
            WIDGET_LAST_LINES_TO_GET.disabled = True
        list_hboxes.append(HBox([
            ipywidgets.HTML("<h3>Choose output type:</h3>")],
            layout=HBOX_LAYOUT))
        list_hboxes.append(HBox([BUTTONS_CHOOSE_OUTPUT_TYPE], layout=HBOX_LAYOUT))
        wid_label = ipywidgets.Label("Last lines to get:")
        list_hboxes.append(
            HBox([wid_label, WIDGET_LAST_LINES_TO_GET], layout=HBOX_LAYOUT))
        VBOX_CHOOSE_OUTPUT_TYPE.children = list_hboxes

    def update_one_process_choose_output(process_manager_obj):
        """"""
        list_hboxes = []

        update_vbox_choose_output_type()
        list_hboxes.append(VBOX_CHOOSE_OUTPUT_TYPE)

        int_chosen_process = BUTTONS_CHOOSE_PROCESS.value
        process_obj = process_manager_obj.dict_all_processes_by_id[int_chosen_process]

        button_show_output = ipywidgets.Button(
            description='Show output',
            button_style='success', # 'success', 'info', 'warning', 'danger' or ''
        )
        list_hboxes.append(HBox([ipywidgets.HTML("<br>")]))
        list_hboxes.append(HBox(
            [button_show_output, BUTTON_CLEAR_OUTPUT], layout=HBOX_LAYOUT))

        def on_click(_):
            """"""
            OUTPUT.clear_output()
            if BUTTONS_CHOOSE_OUTPUT_TYPE.value == "STDOUT":
                str_output = process_obj.get_last_n_lines_of_stdout(
                    int_last_lines=WIDGET_LAST_LINES_TO_GET.value)
            else:
                str_output = process_obj.get_last_error_msg()
            with OUTPUT:
                print(str_output)

        button_show_output.on_click(on_click)
        VBOX_ONE_PROCESS_CHOOSE_OUTPUT.children = list_hboxes

    def create_choose_process(process_manager_obj):
        """"""
        list_hboxes = []

        list_hboxes.append(HBox([
            ipywidgets.HTML("<h3>Choose process to show:</h3>")],
            layout=HBOX_LAYOUT))
        BUTTONS_CHOOSE_PROCESS.options = list(
            process_manager_obj.dict_all_processes_by_id)
        list_hboxes.append(HBox([BUTTONS_CHOOSE_PROCESS], layout=HBOX_LAYOUT))
        BUTTONS_CHOOSE_PROCESS.observe(
            lambda _:update_one_process_choose_output(process_manager_obj), names='value')
        # # Choose which output to show
        update_one_process_choose_output(process_manager_obj)
        list_hboxes.append(VBOX_ONE_PROCESS_CHOOSE_OUTPUT)
        VBOX_CHOOSE_OUTPUT.children = list_hboxes

    def create_jupyter_widget(process_manager_obj):
        """"""
        list_hboxes_main = []
        # OUTPUT_PROCESSES_CONDITIONS
        # list_hboxes_main.append(HBox([ipywidgets.HTML("<h2>Processes conditions:</h2>")], layout=HBOX_LAYOUT))
        list_hboxes_main.append(HBox([OUTPUT_PROCESSES_CONDITIONS], layout=HBOX_LAYOUT))
        # Choose which output to show
        create_choose_process(process_manager_obj)
        list_hboxes_main.append(VBOX_CHOOSE_OUTPUT)
        VBOX_MAIN_GUI.children = list_hboxes_main
        #####
        # Add output to application
        list_hboxes = [VBOX_MAIN_GUI]
        # Output to show
        # list_hboxes.append(HBox([ipywidgets.HTML("<hr>")], layout=HBOX_LAYOUT))
        # list_hboxes.append(HBox([ipywidgets.HTML("<hr>")], layout=HBOX_LAYOUT))
        # list_hboxes.append(HBox([ipywidgets.HTML("<hr>")], layout=HBOX_LAYOUT))
        list_hboxes.append(HBox([ipywidgets.HTML("<h2>Output:</h2>")]))
        list_hboxes.append(HBox([OUTPUT]))
        list_hboxes.append(HBox([ipywidgets.HTML("<br>")]))
        VBOX_APP_GUI.children = list_hboxes
        #####
        return VBOX_APP_GUI

## Functions

`def create_choose_process(process_manager_obj)`
  Expand source code

      def create_choose_process(process_manager_obj):
          """"""
          list_hboxes = []

          list_hboxes.append(HBox([
              ipywidgets.HTML("<h3>Choose process to show:</h3>")],
              layout=HBOX_LAYOUT))
          BUTTONS_CHOOSE_PROCESS.options = list(
              process_manager_obj.dict_all_processes_by_id)
          list_hboxes.append(HBox([BUTTONS_CHOOSE_PROCESS], layout=HBOX_LAYOUT))
          BUTTONS_CHOOSE_PROCESS.observe(
              lambda _:update_one_process_choose_output(process_manager_obj), names='value')
          # # Choose which output to show
          update_one_process_choose_output(process_manager_obj)
          list_hboxes.append(VBOX_ONE_PROCESS_CHOOSE_OUTPUT)
          VBOX_CHOOSE_OUTPUT.children = list_hboxes

`def create_jupyter_widget(process_manager_obj)`
  Expand source code

      def create_jupyter_widget(process_manager_obj):
          """"""
          list_hboxes_main = []
          # OUTPUT_PROCESSES_CONDITIONS
          # list_hboxes_main.append(HBox([ipywidgets.HTML("<h2>Processes conditions:</h2>")], layout=HBOX_LAYOUT))
          list_hboxes_main.append(HBox([OUTPUT_PROCESSES_CONDITIONS], layout=HBOX_LAYOUT))
          # Choose which output to show
          create_choose_process(process_manager_obj)
          list_hboxes_main.append(VBOX_CHOOSE_OUTPUT)
          VBOX_MAIN_GUI.children = list_hboxes_main
          #####
          # Add output to application
          list_hboxes = [VBOX_MAIN_GUI]
          # Output to show
          # list_hboxes.append(HBox([ipywidgets.HTML("<hr>")], layout=HBOX_LAYOUT))
          # list_hboxes.append(HBox([ipywidgets.HTML("<hr>")], layout=HBOX_LAYOUT))
          # list_hboxes.append(HBox([ipywidgets.HTML("<hr>")], layout=HBOX_LAYOUT))
          list_hboxes.append(HBox([ipywidgets.HTML("<h2>Output:</h2>")]))
          list_hboxes.append(HBox([OUTPUT]))
          list_hboxes.append(HBox([ipywidgets.HTML("<br>")]))
          VBOX_APP_GUI.children = list_hboxes
          #####
          return VBOX_APP_GUI

`def update_one_process_choose_output(process_manager_obj)`
  Expand source code

      def update_one_process_choose_output(process_manager_obj):
          """"""
          list_hboxes = []

          update_vbox_choose_output_type()
          list_hboxes.append(VBOX_CHOOSE_OUTPUT_TYPE)

          int_chosen_process = BUTTONS_CHOOSE_PROCESS.value
          process_obj = process_manager_obj.dict_all_processes_by_id[int_chosen_process]

          button_show_output = ipywidgets.Button(
              description='Show output',
              button_style='success', # 'success', 'info', 'warning', 'danger' or ''
          )
          list_hboxes.append(HBox([ipywidgets.HTML("<br>")]))
          list_hboxes.append(HBox(
              [button_show_output, BUTTON_CLEAR_OUTPUT], layout=HBOX_LAYOUT))

          def on_click(_):
              """"""
              OUTPUT.clear_output()
              if BUTTONS_CHOOSE_OUTPUT_TYPE.value == "STDOUT":
                  str_output = process_obj.get_last_n_lines_of_stdout(
                      int_last_lines=WIDGET_LAST_LINES_TO_GET.value)
              else:
                  str_output = process_obj.get_last_error_msg()
              with OUTPUT:
                  print(str_output)

          button_show_output.on_click(on_click)
          VBOX_ONE_PROCESS_CHOOSE_OUTPUT.children = list_hboxes

`def update_vbox_choose_output_type()`
  Expand source code

      def update_vbox_choose_output_type():
          """"""
          list_hboxes = []
          if BUTTONS_CHOOSE_OUTPUT_TYPE.value == "STDOUT":
              WIDGET_LAST_LINES_TO_GET.disabled = False
          else:
              WIDGET_LAST_LINES_TO_GET.disabled = True
          list_hboxes.append(HBox([
              ipywidgets.HTML("<h3>Choose output type:</h3>")],
              layout=HBOX_LAYOUT))
          list_hboxes.append(HBox([BUTTONS_CHOOSE_OUTPUT_TYPE], layout=HBOX_LAYOUT))
          wid_label = ipywidgets.Label("Last lines to get:")
          list_hboxes.append(
              HBox([wid_label, WIDGET_LAST_LINES_TO_GET], layout=HBOX_LAYOUT))
          VBOX_CHOOSE_OUTPUT_TYPE.children = list_hboxes