How-to guide for the UI API

Overview

There are two distinct intended users for this API:

../_images/terminal-icon.png

Model developers can select which variables to “export” to the UI for each component of the model, and provide extra metadata (display name, description) for them. For flowsheets, they also should specify how to build and solve the flowsheets.

../_images/menu-icon.png

User interface developers can “discover” flowsheets for inclusion in the UI, and use the API to serialize and update from serialized data.

The rest of this page will provide more detail on how to do tasks for each type of user.

See also: the UI flowsheet API reference section.

Model Developers

../_images/terminal-icon.png

Add an interface to your flowsheet

In some Python module, define the function export_to_ui, which will look similar to this:

def export_to_ui():
    return FlowsheetInterface(
        do_build=build_flowsheet,
        do_export=export_variables,
        do_solve=solve_flowsheet,
        name="My Flowsheet")

See FlowsheetInterface for details on the arguments.

User Interface Developers

../_images/menu-icon.png

Find flowsheets

Use the method FlowsheetInterface.find() to get a mapping of module names to functions that, when called, will create the flowsheet interface:

results = fsapi.FlowsheetInterface.find("watertap")

Note that the returned interface will not create the flowsheet object and export the variables until the build method is invoked:

first_module = list(results.keys())[0]
interface = results[first_module]
# at this point the name and description of the flowsheet are available
interface.build()
# at this point the flowsheet is built and all variables exported
../_images/menu-icon.png

Serialize flowsheet

Use the dict() method to serialize the flowsheet:

data = flowsheet.dict()
../_images/menu-icon.png

Load a serialized flowsheet

Use the load() method to load values from a serialized flowsheet. This will raise a MissingObjectError if any of the incoming values are not found in the target flowsheet:

try:
    flowsheet.load(data)
except fsapi.MissingObjectError as err:
    print(f"Error loading data: {err}")
    # print contents of list of missing items (key and variable name)
    for item in err.missing:
        print(f"Missing item: key={item.key}, name={item.name}")