Skip to content

Commit

Permalink
added a method to format qsrv groups
Browse files Browse the repository at this point in the history
Can easily change from `.value` to `.pvi`.
  • Loading branch information
evalott100 committed Oct 14, 2024
1 parent 7e1f1cb commit dec9033
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 46 deletions.
63 changes: 38 additions & 25 deletions src/pandablocks_ioc/_pvi.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from enum import Enum
from os import remove
from pathlib import Path
from typing import Callable, Dict, List, Optional, Union
from typing import Callable, Dict, List, Literal, Optional, Union

from epicsdbbuilder import RecordName
from pvi._format.dls import DLSFormatter
Expand Down Expand Up @@ -30,6 +30,28 @@
from ._types import OUT_RECORD_FUNCTIONS, EpicsName, epics_to_pvi_name


def q_group_formatter(
panda_field: str | None,
access: str,
channel: Literal["VAL", "NAME"],
pvi_field: Literal["value", "pvi"] = "value",
other_fields: dict[str, str] | None = None,
) -> dict:
other_fields = other_fields or {}
panda_field_with_seperator = (
f".{panda_field.lower().replace(':', '_')}." if panda_field else "."
)
block_name_suffixed = f"{pvi_field}{panda_field_with_seperator}{access}"
return {
block_name_suffixed: {
"+channel": channel,
"+type": "plain",
"+trigger": block_name_suffixed,
**other_fields,
}
}


class PviGroup(Enum):
"""Categories to group record display widgets"""

Expand Down Expand Up @@ -61,17 +83,14 @@ def add_pvi_info_to_record(
):
block, field = record_name.split(":", maxsplit=1)
pvi_pv = RecordName(f"{block}:PVI")
block_name_suffixed = f"value.{field.lower().replace(':', '_')}.{access}"
record.add_info(
"Q:group",
{
pvi_pv: {
block_name_suffixed: {
"+channel": "NAME",
"+type": "plain",
"+trigger": block_name_suffixed,
}
}
pvi_pv: q_group_formatter(
field,
access,
"NAME",
)
},
)

Expand Down Expand Up @@ -350,17 +369,14 @@ def create_pvi_records(record_prefix: str):
pvi_record_name + "_PV",
initial_value=RecordName(pvi_record_name),
)
block_name_suffixed = f"value.{block_name.lower()}.d"
block_pvi.add_info(
"Q:group",
{
RecordName("PVI"): {
block_name_suffixed: {
"+channel": "VAL",
"+type": "plain",
"+trigger": block_name_suffixed,
}
}
RecordName("PVI"): q_group_formatter(
block_name,
"d",
"VAL",
)
},
)

Expand All @@ -385,17 +401,14 @@ def create_pvi_records(record_prefix: str):
top_level_pvi_record_name + "_PV",
initial_value=RecordName(top_level_pvi_record_name),
)
top_level_block_name_suffixed = "value.d"
top_level_block_pvi.add_info(
"Q:group",
{
RecordName("PVI"): {
top_level_block_name_suffixed: {
"+channel": "VAL",
"+type": "plain",
"+trigger": top_level_block_name_suffixed,
}
}
RecordName("PVI"): q_group_formatter(
None,
"d",
"VAL",
)
},
)

Expand Down
38 changes: 17 additions & 21 deletions src/pandablocks_ioc/_tables.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from softioc import alarm, builder
from softioc.pythonSoftIoc import RecordWrapper

from ._pvi import Pvi, PviGroup
from ._pvi import Pvi, PviGroup, q_group_formatter
from ._types import (
EpicsName,
InErrorException,
Expand Down Expand Up @@ -106,12 +106,11 @@ def __init__(
pv_rec.add_info(
"Q:group",
{
RecordName(f"{block}:PVI"): {
f"value.{field.lower().replace(':', '_')}.r": {
"+channel": "VAL",
"+type": "plain",
}
},
RecordName(f"{block}:PVI"): q_group_formatter(
field,
"r",
"VAL",
)
},
)

Expand All @@ -135,17 +134,15 @@ def set_rows(
length=length or len(initial_value),
)

field_pva_info = {
"+type": "plain",
"+channel": "VAL",
"+trigger": "*" if idx == len(row_names) - 1 else "",
}

pva_info = {f"value.{pva_row_name.lower()}": field_pva_info}
trigger = {"+trigger": "*" if idx == len(row_names) - 1 else ""}

field_record.add_info(
"Q:group",
{self.pva_table_name: pva_info},
{
self.pva_table_name: q_group_formatter(
pva_row_name, "r", "VAL", other_fields=trigger
)
},
)
self.rows[row_name] = field_record

Expand Down Expand Up @@ -212,12 +209,11 @@ def __init__(
pv_rec.add_info(
"Q:group",
{
RecordName(f"{block}:PVI"): {
f"value.{field.lower().replace(':', '_')}.rw": {
"+channel": "VAL",
"+type": "plain",
}
},
RecordName(f"{block}:PVI"): q_group_formatter(
field,
"rw",
"VAL",
)
},
)

Expand Down

0 comments on commit dec9033

Please sign in to comment.