Skip to content

Commit b7d6353

Browse files
committed
Flatten decoder status and config into one group on FRX screen
Remove FrameReceiverDecoderController
1 parent ca8454e commit b7d6353

File tree

4 files changed

+13
-41
lines changed

4 files changed

+13
-41
lines changed

src/fastcs_odin/frame_receiver.py

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,22 @@
11
from fastcs_odin.odin_data import OdinDataAdapterController
22
from fastcs_odin.odin_subcontroller import OdinSubController
3-
from fastcs_odin.util import (
4-
OdinParameter,
5-
create_attribute,
6-
partition,
7-
remove_metadata_fields_paths,
8-
)
3+
from fastcs_odin.util import create_attribute, remove_metadata_fields_paths
94

105

116
class FrameReceiverController(OdinSubController):
127
async def initialise(self):
13-
def __decoder_parameter(parameter: OdinParameter):
14-
return "decoder" in parameter.path[:-1]
15-
168
self.parameters = remove_metadata_fields_paths(self.parameters)
179

18-
decoder_parameters, self.parameters = partition(
19-
self.parameters, __decoder_parameter
20-
)
21-
decoder_controller = FrameReceiverDecoderController(
22-
self.connection, decoder_parameters, f"{self._api_prefix}", self._ios
23-
)
24-
self.add_sub_controller("DECODER", decoder_controller)
25-
await decoder_controller.initialise()
26-
2710
for parameter in self.parameters:
2811
# Remove duplicate index from uri
2912
parameter.uri = parameter.uri[1:]
3013
# Remove redundant status/config from parameter path
3114
parameter.set_path(parameter.uri[1:])
15+
16+
if len(parameter.path) > 1 and "decoder" in parameter.path[0]:
17+
# Combine "decoder" and "decoder_config"
18+
parameter.path[0] = "decoder"
19+
3220
self.add_attribute(
3321
parameter.name,
3422
create_attribute(parameter=parameter, api_prefix=self._api_prefix),
@@ -50,14 +38,3 @@ class FrameReceiverAdapterController(OdinDataAdapterController):
5038
"rx_address",
5139
"rx_ports",
5240
]
53-
54-
55-
class FrameReceiverDecoderController(OdinSubController):
56-
async def initialise(self):
57-
for parameter in self.parameters:
58-
# remove redundant status/decoder part from path
59-
parameter.set_path(parameter.uri[3:])
60-
self.add_attribute(
61-
parameter.name,
62-
create_attribute(parameter=parameter, api_prefix=self._api_prefix),
63-
)

src/fastcs_odin/util.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@
88
from fastcs.attributes import AttrR, AttrRW
99
from fastcs.controllers import BaseController
1010
from fastcs.datatypes import Bool, DataType, Float, Int, String
11+
from fastcs.logging import bind_logger
1112
from fastcs.transports.epics.util import snake_to_pascal
1213
from pydantic import BaseModel, ConfigDict, ValidationError
1314

1415
from fastcs_odin.io.parameter_attribute_io import ParameterTreeAttributeIORef
1516

17+
logger = bind_logger(logger_name=__name__)
18+
1619

1720
def is_metadata_object(v: Any) -> bool:
1821
return isinstance(v, dict) and "writeable" in v and "type" in v
@@ -276,6 +279,8 @@ def remove_metadata_fields_paths(parameters: list[OdinParameter]):
276279
)
277280
if invalid:
278281
invalid_names = ["/".join(param.uri) for param in invalid]
279-
logging.warning(f"Removing parameters with invalid names: {invalid_names}")
282+
logger.warning(
283+
"Removing parameters with invalid names", parameters=invalid_names
284+
)
280285

281286
return parameters

tests/test_controllers.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
from fastcs_odin.frame_receiver import (
1919
FrameReceiverAdapterController,
2020
FrameReceiverController,
21-
FrameReceiverDecoderController,
2221
)
2322
from fastcs_odin.http_connection import HTTPConnection
2423
from fastcs_odin.io.config_fan_sender_attribute_io import (
@@ -429,15 +428,7 @@ async def test_frame_reciever_controllers():
429428
await fr_controller.initialise()
430429
assert isinstance(fr_controller, FrameReceiverController)
431430
assert valid_non_decoder_parameter in fr_controller.parameters
432-
assert len(fr_controller.parameters) == 1
433-
assert "DECODER" in fr_controller.sub_controllers
434-
435-
decoder_controller = fr_controller.sub_controllers["DECODER"]
436-
assert isinstance(decoder_controller, FrameReceiverDecoderController)
437-
assert valid_decoder_parameter in decoder_controller.parameters
438-
assert invalid_decoder_parameter not in decoder_controller.parameters
439-
# index, status, decoder parts removed from path
440-
assert decoder_controller.parameters[0]._path == ["packets_dropped"]
431+
assert len(fr_controller.parameters) == 2
441432

442433

443434
@pytest.mark.asyncio

tests/test_introspection.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ async def test_fr_initialise(mocker: MockerFixture):
115115
isinstance(frx, FrameReceiverController)
116116
for frx in controller.sub_controllers.values()
117117
)
118-
assert "decoder_name" not in controller[0].DECODER.attributes # type: ignore
119118

120119

121120
def test_node_with_empty_list_is_correctly_counted():

0 commit comments

Comments
 (0)