Skip to content

Commit e50a2a7

Browse files
committed
WIP: going to wait until I have access to a panda web client for a better implementation
1 parent 4d6eea0 commit e50a2a7

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

src/pandablocks_ioc/ioc.py

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -258,17 +258,35 @@ async def introspect_panda(
258258

259259
values, all_values_dict = _create_dicts_from_changes(changes, block_dict)
260260

261-
panda_dict = {}
262-
for (block_name, block_info), field_info in zip(
263-
block_dict.items(), field_infos, strict=False
264-
):
265-
panda_dict[block_name] = _BlockAndFieldInfo(
266-
block_info=block_info, fields=field_info, values=values[block_name]
261+
panda_dict = {
262+
block_name: _BlockAndFieldInfo(block_info, field_info, values[block_name])
263+
for (block_name, block_info), field_info in zip(
264+
block_dict.items(), field_infos, strict=False
267265
)
266+
}
268267

269268
return (panda_dict, all_values_dict)
270269

271270

271+
def extract_label_from_metadata(block_name_number, field_name: str):
272+
#
273+
# Parse *METADATA.LABEL_<block><num> into "<block>" key and
274+
# "<block><num>:LABEL" value
275+
if block_name_number.startswith("*METADATA") and field_name.startswith("LABEL_"):
276+
_, block_name_number = field_name.split("_", maxsplit=1)
277+
278+
# The block is fixed with metadata, it should end with a number
279+
# "*METADATA.LABEL_SEQ2": "NewSeqMetadataLabel",
280+
if not block_name_number[-1].isdigit():
281+
raise ValueError(
282+
f"Recieved metadata for a block name {block_name_number} that "
283+
"didn't contain a number"
284+
)
285+
286+
return block_name_number
287+
return None
288+
289+
272290
def _create_dicts_from_changes(
273291
changes: Changes, block_info_dict: dict[str, BlockInfo]
274292
) -> tuple[dict[str, dict[EpicsName, RecordValue]], dict[EpicsName, RecordValue]]:
@@ -298,22 +316,12 @@ def _store_values(
298316

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

301-
# Parse *METADATA.LABEL_<block><num> into "<block>" key and
302-
# "<block><num>:LABEL" value
303-
if block_name_number.startswith("*METADATA") and field_name.startswith(
304-
"LABEL_"
319+
if label_block_name_number := extract_label_from_metadata(
320+
block_name_number, field_name
305321
):
306-
_, block_name_number = field_name.split("_", maxsplit=1)
307-
308-
# The block is fixed with metadata, it should end with a number
309-
# "*METADATA.LABEL_SEQ2": "NewSeqMetadataLabel",
310-
if not block_name_number[-1].isdigit():
311-
raise ValueError(
312-
f"Recieved metadata for a block name {block_name_number} that "
313-
"didn't contain a number"
314-
)
322+
block_name_number = label_block_name_number
323+
block_name_no_number = re.sub(r"\d*$", "", label_block_name_number)
315324

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

319327
if number_of_blocks == 1:
@@ -2093,7 +2101,6 @@ async def update(
20932101

20942102
for field, value in changes.values.items():
20952103
field = PandAName(field)
2096-
field = panda_to_epics_name(field)
20972104

20982105
if field not in all_records:
20992106
logging.error(

tests/fixtures/mocked_panda.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -871,6 +871,7 @@ def standard_responses(table_field_info, table_data_1, table_data_2):
871871
values={
872872
"PCAP.TRIG_EDGE": "Either",
873873
"PULSE.DELAY.UNITS": "s",
874+
"*METADATA.LABEL_PULSE1": "ANewLabel",
874875
},
875876
multiline_values={"SEQ.TABLE": table_data_2},
876877
),

0 commit comments

Comments
 (0)