Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ classifiers = [
description = "FastCS support for the Odin detector software framework"
dependencies = [
"aiohttp",
"fastcs[epicsca]~=0.11.1",
"fastcs[epicsca]~=0.11.2",
]
dynamic = ["version"]
license.file = "LICENSE"
Expand Down
2 changes: 1 addition & 1 deletion src/fastcs_odin/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from fastcs.transports.epics.ca.ioc import EpicsIOCOptions
from fastcs.transports.epics.ca.transport import EpicsCATransport, EpicsGUIOptions

from fastcs_odin.odin_controller import OdinController
from fastcs_odin.controllers import OdinController

from . import __version__

Expand Down
25 changes: 25 additions & 0 deletions src/fastcs_odin/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from .odin_controller import OdinController as OdinController
from .odin_controller import OdinParameter as OdinParameter
from .odin_data.frame_processor import (
FrameProcessorAdapterController as FrameProcessorAdapterController,
)
from .odin_data.frame_processor import (
FrameProcessorController as FrameProcessorController,
)
from .odin_data.frame_processor import (
FrameProcessorDatasetController as FrameProcessorDatasetController,
)
from .odin_data.frame_processor import (
FrameProcessorPluginController as FrameProcessorPluginController,
)
from .odin_data.frame_receiver import (
FrameReceiverAdapterController as FrameReceiverAdapterController,
)
from .odin_data.frame_receiver import FrameReceiverController as FrameReceiverController
from .odin_data.meta_writer import (
MetaWriterAdapterController as MetaWriterAdapterController,
)
from .odin_data.odin_data_adapter import (
OdinDataAdapterController as OdinDataAdapterController,
)
from .odin_subcontroller import OdinSubController as OdinSubController
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,27 @@
from fastcs.connections.ip_connection import IPConnectionSettings
from fastcs.controllers import BaseController, Controller

from fastcs_odin.frame_processor import FrameProcessorAdapterController
from fastcs_odin.frame_receiver import FrameReceiverAdapterController
from fastcs_odin.controllers.odin_data.frame_processor import (
FrameProcessorAdapterController,
)
from fastcs_odin.controllers.odin_data.frame_receiver import (
FrameReceiverAdapterController,
)
from fastcs_odin.controllers.odin_data.meta_writer import MetaWriterAdapterController
from fastcs_odin.controllers.odin_subcontroller import OdinSubController
from fastcs_odin.http_connection import HTTPConnection
from fastcs_odin.io.config_fan_sender_attribute_io import ConfigFanAttributeIO
from fastcs_odin.io.parameter_attribute_io import ParameterTreeAttributeIO
from fastcs_odin.io.status_summary_attribute_io import (
StatusSummaryAttributeIO,
initialise_summary_attributes,
)
from fastcs_odin.meta_writer import MetaWriterAdapterController
from fastcs_odin.odin_subcontroller import OdinSubController
from fastcs_odin.util import AdapterType, OdinParameter, create_odin_parameters

REQUEST_METADATA_HEADER = {"Accept": "application/json;metadata=true"}
from fastcs_odin.util import (
REQUEST_METADATA_HEADER,
AdapterType,
OdinParameter,
create_odin_parameters,
)


class OdinController(Controller):
Expand Down
Empty file.
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,14 @@
from fastcs.methods import Command, command
from pydantic import ValidationError

from fastcs_odin.controllers.odin_data.odin_data_adapter import (
OdinDataAdapterController,
)
from fastcs_odin.controllers.odin_subcontroller import OdinSubController
from fastcs_odin.io.status_summary_attribute_io import (
StatusSummaryAttributeIORef,
_filter_sub_controllers,
)
from fastcs_odin.odin_data import OdinDataAdapterController
from fastcs_odin.odin_subcontroller import OdinSubController
from fastcs_odin.util import (
AllowedCommandsResponse,
OdinParameter,
Expand Down Expand Up @@ -80,6 +82,8 @@ def __parameter_in_plugin(


class FrameProcessorAdapterController(OdinDataAdapterController):
"""Controller for a frame processor adapter"""

frames_written: AttrR = AttrR(
Int(),
io_ref=StatusSummaryAttributeIORef(
Expand Down Expand Up @@ -145,7 +149,7 @@ async def stop_writing(self) -> None:


class FrameProcessorPluginController(OdinSubController):
"""SubController for a plugin in a frameProcessor application."""
"""Controller for a plugin in a frameProcessor application."""

async def initialise(self):
await self._create_commands()
Expand Down Expand Up @@ -208,6 +212,8 @@ async def submit_command() -> None:


class FrameProcessorDatasetController(OdinSubController):
"""Controller for datasets in the HDF plugin of a frameProcessor application"""

async def initialise(self):
for parameter in self.parameters:
parameter.set_path(parameter.uri[3:])
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
from fastcs_odin.odin_data import OdinDataAdapterController
from fastcs_odin.odin_subcontroller import OdinSubController
from fastcs_odin.controllers.odin_data.odin_data_adapter import (
OdinDataAdapterController,
)
from fastcs_odin.controllers.odin_subcontroller import OdinSubController
from fastcs_odin.util import create_attribute, remove_metadata_fields_paths


class FrameReceiverController(OdinSubController):
"""Controller for a frameReceiver application"""

async def initialise(self):
self.parameters = remove_metadata_fields_paths(self.parameters)

Expand All @@ -24,6 +28,8 @@ async def initialise(self):


class FrameReceiverAdapterController(OdinDataAdapterController):
"""Controller for a frame receiver adapter in an odin control serve."""

_subcontroller_label = "FR"
_subcontroller_cls = FrameReceiverController
_unique_config = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
from fastcs.datatypes import Bool, Int, String
from fastcs.methods import command

from fastcs_odin.io.parameter_attribute_io import ParameterTreeAttributeIORef
from fastcs_odin.odin_subcontroller import OdinSubController
from fastcs_odin.util import create_attribute
from fastcs_odin.controllers.odin_subcontroller import OdinSubController
from fastcs_odin.util import ParameterTreeAttributeIORef, create_attribute


class MetaWriterAdapterController(OdinSubController):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@
from fastcs.controllers import ControllerVector
from fastcs.datatypes import DType_T

from fastcs_odin.controllers.odin_subcontroller import OdinSubController
from fastcs_odin.http_connection import HTTPConnection
from fastcs_odin.io.config_fan_sender_attribute_io import ConfigFanAttributeIORef
from fastcs_odin.io.status_summary_attribute_io import initialise_summary_attributes
from fastcs_odin.odin_subcontroller import OdinSubController
from fastcs_odin.io import ConfigFanAttributeIORef, initialise_summary_attributes
from fastcs_odin.util import (
OdinParameter,
create_attribute,
Expand All @@ -18,7 +17,7 @@


class OdinDataAdapterController(ControllerVector):
"""Sub controller for the frame processor adapter in an odin control server."""
"""Base class for frame processor and frame receiver adapter controllers"""

_unique_config: list[str] = []
_subcontroller_label: str = "OD"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@


class OdinSubController(Controller):
"""Base class for exposing parameters from an odin control adapter."""
"""Base sub controller for exposing parameters from an odin control server"""

def __init__(
self,
Expand Down
17 changes: 17 additions & 0 deletions src/fastcs_odin/io/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from .config_fan_sender_attribute_io import ConfigFanAttributeIO as ConfigFanAttributeIO
from .config_fan_sender_attribute_io import (
ConfigFanAttributeIORef as ConfigFanAttributeIORef,
)
from .parameter_attribute_io import ParameterTreeAttributeIO as ParameterTreeAttributeIO
from .parameter_attribute_io import (
ParameterTreeAttributeIORef as ParameterTreeAttributeIORef,
)
from .status_summary_attribute_io import (
StatusSummaryAttributeIO as StatusSummaryAttributeIO,
)
from .status_summary_attribute_io import (
StatusSummaryAttributeIORef as StatusSummaryAttributeIORef,
)
from .status_summary_attribute_io import (
initialise_summary_attributes as initialise_summary_attributes,
)
4 changes: 3 additions & 1 deletion src/fastcs_odin/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@
from fastcs.controllers import BaseController
from fastcs.datatypes import Bool, DataType, Float, Int, String
from fastcs.logging import bind_logger
from fastcs.transports.epics.util import snake_to_pascal
from fastcs.util import snake_to_pascal
from pydantic import BaseModel, ConfigDict, ValidationError

from fastcs_odin.io.parameter_attribute_io import ParameterTreeAttributeIORef

logger = bind_logger(logger_name=__name__)

REQUEST_METADATA_HEADER = {"Accept": "application/json;metadata=true"}


def is_metadata_object(v: Any) -> bool:
return isinstance(v, dict) and "writeable" in v and "type" in v
Expand Down
2 changes: 1 addition & 1 deletion tests/dump_server_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import requests
import typer

from fastcs_odin.odin_controller import REQUEST_METADATA_HEADER
from fastcs_odin.util import REQUEST_METADATA_HEADER

HERE = Path(__file__).parent

Expand Down
16 changes: 10 additions & 6 deletions tests/test_controllers.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,17 @@
from fastcs.datatypes import Bool, Float, Int
from pytest_mock import MockerFixture

from fastcs_odin.frame_processor import (
from fastcs_odin.controllers.odin_controller import OdinController, OdinSubController
from fastcs_odin.controllers.odin_data.frame_processor import (
FrameProcessorAdapterController,
FrameProcessorController,
FrameProcessorPluginController,
)
from fastcs_odin.frame_receiver import (
from fastcs_odin.controllers.odin_data.frame_receiver import (
FrameReceiverAdapterController,
FrameReceiverController,
)
from fastcs_odin.controllers.odin_data.meta_writer import MetaWriterAdapterController
from fastcs_odin.http_connection import HTTPConnection
from fastcs_odin.io.config_fan_sender_attribute_io import (
ConfigFanAttributeIO,
Expand All @@ -34,8 +36,6 @@
StatusSummaryAttributeIORef,
initialise_summary_attributes,
)
from fastcs_odin.meta_writer import MetaWriterAdapterController
from fastcs_odin.odin_controller import OdinController, OdinSubController
from fastcs_odin.util import (
AdapterType,
OdinParameter,
Expand Down Expand Up @@ -191,8 +191,12 @@ async def test_controller_initialise(
mocker: MockerFixture, mock_get, expected_controller
):
# Status summary attributes won't work without real sub controllers
mocker.patch("fastcs_odin.odin_controller.initialise_summary_attributes")
mocker.patch("fastcs_odin.odin_data.initialise_summary_attributes")
mocker.patch(
"fastcs_odin.controllers.odin_controller.initialise_summary_attributes"
)
mocker.patch(
"fastcs_odin.controllers.odin_data.odin_data_adapter.initialise_summary_attributes"
)

controller = OdinController(IPConnectionSettings("", 0))

Expand Down
6 changes: 3 additions & 3 deletions tests/test_introspection.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
from pydantic import ValidationError
from pytest_mock import MockerFixture

from fastcs_odin.frame_processor import (
from fastcs_odin.controllers.odin_data.frame_processor import (
FrameProcessorAdapterController,
FrameProcessorController,
)
from fastcs_odin.frame_receiver import (
from fastcs_odin.controllers.odin_data.frame_receiver import (
FrameReceiverAdapterController,
FrameReceiverController,
)
from fastcs_odin.meta_writer import MetaWriterAdapterController
from fastcs_odin.controllers.odin_data.meta_writer import MetaWriterAdapterController
from fastcs_odin.util import (
OdinParameter,
OdinParameterMetadata,
Expand Down
Loading