Using PVI as a library#

All subcommands in the CLI are also available as an API by importing pvi into a python application. In addition, Device instances can be created dynamically to then use with any of these APIs. Here is a trivial example:

from pathlib import Path

from pvi.device import Device, SignalR, SignalRW, SignalX
from pvi._format.template import format_template
from pvi._format.dls import DLSFormatter

signals = [
    SignalR(name="Status", read_pv="Status_RBV"),
    SignalRW(name="Config", write_pv="Config", read_pv="Config_RBV"),
    SignalX(name="Command", write_pv="Go", value="1"),
]
device = Device(label="Simple Device", children=signals)

format_template(device, "PREFIX", Path("pvi.template"))
DLSFormatter().format(device, Path("simple.bob"))

which will create the pvi.template and simple.bob in the current working directory.

See the tests in the pvi repo for further example usage of this API.