Skip to content

Commit

Permalink
Simplified PviTree and made review changes.
Browse files Browse the repository at this point in the history
* General fixes.
* Use `buildType` directly on `NTScalar`. This necessitates passing a
wrap into the `SharedPV` instead of an `nt`.
* Made `EpicsPVAOptions` and `EpicsCAOptions` (containing the same
suboptions).
* Renamed instances of `softioc` with `ca` and `p4p` with `pva` in the
public API.
  • Loading branch information
evalott100 committed Feb 19, 2025
1 parent 3e84ef2 commit 91bda8b
Show file tree
Hide file tree
Showing 26 changed files with 474 additions and 404 deletions.
17 changes: 12 additions & 5 deletions src/fastcs/datatypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,14 @@
from numpy.typing import DTypeLike

T = TypeVar(
"T", int, float, bool, str, enum.Enum, np.ndarray, list[tuple[str, DTypeLike]]
"T",
int, # Int
float, # Float
bool, # Bool
str, # String
enum.Enum, # Enum
np.ndarray, # Waveform
list[tuple[str, DTypeLike]], # Table
)

ATTRIBUTE_TYPES: tuple[type] = T.__constraints__ # type: ignore
Expand Down Expand Up @@ -48,10 +55,10 @@ def initial_value(self) -> T:
@dataclass(frozen=True)
class _Numerical(DataType[T_Numerical]):
units: str | None = None
min: float | None = None
max: float | None = None
min_alarm: float | None = None
max_alarm: float | None = None
min: T_Numerical | None = None
max: T_Numerical | None = None
min_alarm: T_Numerical | None = None
max_alarm: T_Numerical | None = None

def validate(self, value: T_Numerical) -> T_Numerical:
super().validate(value)
Expand Down
37 changes: 18 additions & 19 deletions src/fastcs/launch.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,15 @@
from .controller import Controller
from .exceptions import LaunchError
from .transport.adapter import TransportAdapter
from .transport.epics.options import EpicsBackend, EpicsOptions
from .transport.epics.ca.options import EpicsCAOptions
from .transport.epics.pva.options import EpicsPVAOptions
from .transport.graphQL.options import GraphQLOptions
from .transport.rest.options import RestOptions
from .transport.tango.options import TangoOptions

# Define a type alias for transport options
TransportOptions: TypeAlias = list[
EpicsOptions | TangoOptions | RestOptions | GraphQLOptions
EpicsPVAOptions | EpicsCAOptions | TangoOptions | RestOptions | GraphQLOptions
]


Expand All @@ -39,23 +40,21 @@ def __init__(
self._transports: list[TransportAdapter] = []
for option in transport_options:
match option:
case EpicsOptions(backend=backend):
match backend:
case EpicsBackend.SOFT_IOC:
from .transport.epics.softioc.adapter import EpicsTransport

transport = EpicsTransport(
controller,
self._loop,
option,
)
case EpicsBackend.P4P:
from .transport.epics.p4p.adapter import P4PTransport

transport = P4PTransport(
controller,
option,
)
case EpicsPVAOptions():
from .transport.epics.pva.adapter import EpicsPVATransport

transport = EpicsPVATransport(
controller,
option,
)
case EpicsCAOptions():
from .transport.epics.ca.adapter import EpicsCATransport

transport = EpicsCATransport(
controller,
self._loop,
option,
)
case TangoOptions():
from .transport.tango.adapter import TangoTransport

Expand Down
4 changes: 2 additions & 2 deletions src/fastcs/transport/__init__.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from .epics.options import EpicsBackend as EpicsBackend
from .epics.ca.options import EpicsCAOptions as EpicsCAOptions
from .epics.options import EpicsDocsOptions as EpicsDocsOptions
from .epics.options import EpicsGUIOptions as EpicsGUIOptions
from .epics.options import EpicsIOCOptions as EpicsIOCOptions
from .epics.options import EpicsOptions as EpicsOptions
from .epics.pva.options import EpicsPVAOptions as EpicsPVAOptions
from .graphQL.options import GraphQLOptions as GraphQLOptions
from .graphQL.options import GraphQLServerOptions as GraphQLServerOptions
from .rest.options import RestOptions as RestOptions
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@

from fastcs.controller import Controller
from fastcs.transport.adapter import TransportAdapter
from fastcs.transport.epics.ca.ioc import EpicsIOC
from fastcs.transport.epics.ca.options import EpicsCAOptions
from fastcs.transport.epics.docs import EpicsDocs
from fastcs.transport.epics.gui import EpicsGUI
from fastcs.transport.epics.options import EpicsOptions
from fastcs.transport.epics.softioc.ioc import EpicsIOC


class EpicsTransport(TransportAdapter):
class EpicsCATransport(TransportAdapter):
def __init__(
self,
controller: Controller,
loop: asyncio.AbstractEventLoop,
options: EpicsOptions | None = None,
options: EpicsCAOptions | None = None,
) -> None:
self._controller = controller
self._loop = loop
self._options = options or EpicsOptions()
self._options = options or EpicsCAOptions()
self._pv_prefix = self.options.ioc.pv_prefix
self._ioc = EpicsIOC(
self.options.ioc.pv_prefix,
Expand All @@ -26,7 +26,7 @@ def __init__(
)

@property
def options(self) -> EpicsOptions:
def options(self) -> EpicsCAOptions:
return self._options

def create_docs(self) -> None:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
from fastcs.attributes import AttrR, AttrRW, AttrW
from fastcs.controller import BaseController, Controller
from fastcs.datatypes import DataType, T
from fastcs.transport.epics.options import EpicsIOCOptions
from fastcs.transport.epics.softioc.util import (
from fastcs.transport.epics.ca.util import (
builder_callable_from_attribute,
cast_from_epics_type,
cast_to_epics_type,
record_metadata_from_attribute,
record_metadata_from_datatype,
)
from fastcs.transport.epics.options import EpicsIOCOptions

EPICS_MAX_NAME_LENGTH = 60

Expand Down
14 changes: 14 additions & 0 deletions src/fastcs/transport/epics/ca/options.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from dataclasses import dataclass, field

from ..options import (
EpicsDocsOptions,
EpicsGUIOptions,
EpicsIOCOptions,
)


@dataclass
class EpicsCAOptions:
docs: EpicsDocsOptions = field(default_factory=EpicsDocsOptions)
gui: EpicsGUIOptions = field(default_factory=EpicsGUIOptions)
ioc: EpicsIOCOptions = field(default_factory=EpicsIOCOptions)
File renamed without changes.
15 changes: 1 addition & 14 deletions src/fastcs/transport/epics/options.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from dataclasses import dataclass, field
from dataclasses import dataclass
from enum import Enum
from pathlib import Path

Expand All @@ -24,16 +24,3 @@ class EpicsGUIOptions:
@dataclass
class EpicsIOCOptions:
pv_prefix: str = "MY-DEVICE-PREFIX"


class EpicsBackend(Enum):
SOFT_IOC = "softioc"
P4P = "p4p"


@dataclass
class EpicsOptions:
docs: EpicsDocsOptions = field(default_factory=EpicsDocsOptions)
gui: EpicsGUIOptions = field(default_factory=EpicsGUIOptions)
ioc: EpicsIOCOptions = field(default_factory=EpicsIOCOptions)
backend: EpicsBackend = EpicsBackend.SOFT_IOC
197 changes: 0 additions & 197 deletions src/fastcs/transport/epics/p4p/pvi_tree.py

This file was deleted.

File renamed without changes.
Loading

0 comments on commit 91bda8b

Please sign in to comment.