Skip to content

Commit

Permalink
WIP: going to wait until I have access to a panda web client for a be…
Browse files Browse the repository at this point in the history
…tter implementation
  • Loading branch information
evalott100 committed Dec 13, 2024
1 parent 4d6eea0 commit e50a2a7
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 21 deletions.
49 changes: 28 additions & 21 deletions src/pandablocks_ioc/ioc.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,17 +258,35 @@ async def introspect_panda(

values, all_values_dict = _create_dicts_from_changes(changes, block_dict)

panda_dict = {}
for (block_name, block_info), field_info in zip(
block_dict.items(), field_infos, strict=False
):
panda_dict[block_name] = _BlockAndFieldInfo(
block_info=block_info, fields=field_info, values=values[block_name]
panda_dict = {
block_name: _BlockAndFieldInfo(block_info, field_info, values[block_name])
for (block_name, block_info), field_info in zip(
block_dict.items(), field_infos, strict=False
)
}

return (panda_dict, all_values_dict)


def extract_label_from_metadata(block_name_number, field_name: str):
#
# Parse *METADATA.LABEL_<block><num> into "<block>" key and
# "<block><num>:LABEL" value
if block_name_number.startswith("*METADATA") and field_name.startswith("LABEL_"):
_, block_name_number = field_name.split("_", maxsplit=1)

# The block is fixed with metadata, it should end with a number
# "*METADATA.LABEL_SEQ2": "NewSeqMetadataLabel",
if not block_name_number[-1].isdigit():
raise ValueError(
f"Recieved metadata for a block name {block_name_number} that "
"didn't contain a number"
)

return block_name_number
return None


def _create_dicts_from_changes(
changes: Changes, block_info_dict: dict[str, BlockInfo]
) -> tuple[dict[str, dict[EpicsName, RecordValue]], dict[EpicsName, RecordValue]]:
Expand Down Expand Up @@ -298,22 +316,12 @@ def _store_values(

block_name_number, field_name = block_and_field_name.split(".", maxsplit=1)

# Parse *METADATA.LABEL_<block><num> into "<block>" key and
# "<block><num>:LABEL" value
if block_name_number.startswith("*METADATA") and field_name.startswith(
"LABEL_"
if label_block_name_number := extract_label_from_metadata(
block_name_number, field_name
):
_, block_name_number = field_name.split("_", maxsplit=1)

# The block is fixed with metadata, it should end with a number
# "*METADATA.LABEL_SEQ2": "NewSeqMetadataLabel",
if not block_name_number[-1].isdigit():
raise ValueError(
f"Recieved metadata for a block name {block_name_number} that "
"didn't contain a number"
)
block_name_number = label_block_name_number
block_name_no_number = re.sub(r"\d*$", "", label_block_name_number)

block_name_no_number = re.sub(r"\d*$", "", block_name_number)
number_of_blocks = block_info_dict[block_name_no_number].number

if number_of_blocks == 1:
Expand Down Expand Up @@ -2093,7 +2101,6 @@ async def update(

for field, value in changes.values.items():
field = PandAName(field)
field = panda_to_epics_name(field)

if field not in all_records:
logging.error(
Expand Down
1 change: 1 addition & 0 deletions tests/fixtures/mocked_panda.py
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,7 @@ def standard_responses(table_field_info, table_data_1, table_data_2):
values={
"PCAP.TRIG_EDGE": "Either",
"PULSE.DELAY.UNITS": "s",
"*METADATA.LABEL_PULSE1": "ANewLabel",
},
multiline_values={"SEQ.TABLE": table_data_2},
),
Expand Down

0 comments on commit e50a2a7

Please sign in to comment.