@@ -26,13 +26,23 @@ def __init__(
26
26
27
27
for field_raw_name , field_info in raw_fields .items ():
28
28
field_panda_name = PandaName (field = field_raw_name )
29
- print (field_raw_name )
30
29
31
30
field = FIELD_TYPE_TO_FASTCS_TYPE [field_info .type ][field_info .subtype ](
32
- field_panda_name , field_info .description
31
+ # TODO make type safe after match statment
32
+ field_panda_name ,
33
+ field_info , # type: ignore
33
34
)
34
35
self .fields [field_raw_name ] = field
35
- self .register_sub_controller (field_panda_name .attribute_name , field )
36
+ if field .only_contains_subfields :
37
+ self .register_sub_controller (field_panda_name .attribute_name , field )
38
+ else :
39
+ assert field .attribute_name , field
40
+ setattr (
41
+ self ,
42
+ field_panda_name .attribute_name ,
43
+ getattr (field , field .attribute_name ),
44
+ )
45
+
36
46
37
47
class Blocks :
38
48
_blocks : dict [str , dict [int | None , Block ]]
@@ -51,11 +61,15 @@ def parse_introspected_data(
51
61
):
52
62
iterator = (
53
63
range (1 , block_info .number + 1 )
54
- if block_info .number > 1 else iter ([None ,])
64
+ if block_info .number > 1
65
+ else iter (
66
+ [
67
+ None ,
68
+ ]
69
+ )
55
70
)
56
71
self ._blocks [block_name ] = {
57
- number :
58
- Block (
72
+ number : Block (
59
73
PandaName (block = block_name , block_number = number ),
60
74
block_info .number ,
61
75
block_info .description ,
@@ -67,23 +81,20 @@ def parse_introspected_data(
67
81
async def update_field_value (self , panda_name : PandaName , value : str ):
68
82
assert panda_name .block
69
83
assert panda_name .field
70
- field = (
71
- self . _blocks [ panda_name .block ][ panda_name . block_number ]. fields [ panda_name . field ]
72
- )
84
+ field = self . _blocks [ panda_name . block ][ panda_name . block_number ]. fields [
85
+ panda_name .field
86
+ ]
73
87
if panda_name .sub_field :
74
88
field = field .sub_fields [panda_name .sub_field ]
75
89
await field .update_value (value )
76
90
77
- def flattened_attribute_tree (
78
- self
79
- ) -> Generator [tuple [str , Block ], None , None ]:
91
+ def flattened_attribute_tree (self ) -> Generator [tuple [str , Block ], None , None ]:
80
92
for blocks in self ._blocks .values ():
81
93
for block in blocks .values ():
82
94
yield (block .panda_name .attribute_name , block )
83
95
84
96
def __getitem__ (
85
- self ,
86
- name : EpicsName | PandaName
97
+ self , name : EpicsName | PandaName
87
98
) -> dict [int | None , Block ] | Block | FieldType :
88
99
if name .block is None :
89
100
raise ValueError (f"Cannot find block for name { name } ." )
0 commit comments