Source code for ophyd_async.tango.core._utils
import re
from ophyd_async.core import StrictEnum
[docs]
class DevStateEnum(StrictEnum):
ON = "ON"
OFF = "OFF"
CLOSE = "CLOSE"
OPEN = "OPEN"
INSERT = "INSERT"
EXTRACT = "EXTRACT"
MOVING = "MOVING"
STANDBY = "STANDBY"
FAULT = "FAULT"
INIT = "INIT"
RUNNING = "RUNNING"
ALARM = "ALARM"
DISABLE = "DISABLE"
UNKNOWN = "UNKNOWN"
[docs]
def get_full_attr_trl(device_trl: str, attr_name: str):
device_parts = device_trl.split("#", 1)
# my/device/name#dbase=no splits into my/device/name and dbase=no
full_trl = device_parts[0] + "/" + attr_name
if len(device_parts) > 1:
full_trl += "#" + device_parts[1]
return full_trl
[docs]
def get_device_trl_and_attr(name: str):
# trl can have form:
# <protocol://><server:host/>domain/family/member/attr_name<#dbase=no>
# e.g. tango://127.0.0.1:8888/test/nodb/test#dbase=no
re_str = (
r"([\.a-zA-Z0-9_-]*://)?([\.a-zA-Z0-9_-]+:[0-9]+/)?"
r"([^#/]+/[^#/]+/[^#/]+/)([^#/]+)(#dbase=[a-z]+)?"
)
search = re.search(re_str, name)
if not search:
raise ValueError(f"Could not parse device and attribute from trl {name}")
groups = [part if part else "" for part in search.groups()]
attr = groups.pop(3) # extract attr name from groups
groups[2] = groups[2].removesuffix("/") # remove trailing slash from device name
device = "".join(groups)
return device, attr