|
| 1 | +from dataclasses import dataclass, field |
| 2 | + |
1 | 3 | from fastcs.backend import Backend
|
2 | 4 | from fastcs.controller import Controller
|
3 | 5 |
|
|
6 | 8 | from .ioc import EpicsIOC, EpicsIOCOptions
|
7 | 9 |
|
8 | 10 |
|
| 11 | +@dataclass |
| 12 | +class EpicsOptions: |
| 13 | + docs: EpicsDocsOptions = field(default_factory=EpicsDocsOptions) |
| 14 | + gui: EpicsGUIOptions = field(default_factory=EpicsGUIOptions) |
| 15 | + ioc: EpicsIOCOptions = field(default_factory=EpicsIOCOptions) |
| 16 | + |
| 17 | + |
9 | 18 | class EpicsBackend(Backend):
|
10 |
| - def __init__(self, controller: Controller, pv_prefix: str = "MY-DEVICE-PREFIX"): |
| 19 | + def __init__( |
| 20 | + self, controller: Controller, options: EpicsOptions | None = None |
| 21 | + ) -> None: |
11 | 22 | super().__init__(controller)
|
12 | 23 |
|
13 |
| - self._pv_prefix = pv_prefix |
14 |
| - self._ioc = EpicsIOC(pv_prefix, self._mapping) |
| 24 | + if options is None: |
| 25 | + self.options = EpicsOptions() |
| 26 | + else: |
| 27 | + self.options = options |
| 28 | + |
| 29 | + self._pv_prefix = self.options.ioc.pv_prefix |
| 30 | + self._ioc = EpicsIOC(self.options.ioc.pv_prefix, self._mapping) |
15 | 31 |
|
16 |
| - def create_docs(self, options: EpicsDocsOptions | None = None) -> None: |
17 |
| - EpicsDocs(self._mapping).create_docs(options) |
| 32 | + def _create_docs(self) -> None: |
| 33 | + EpicsDocs(self._mapping).create_docs(self.options.docs) |
18 | 34 |
|
19 |
| - def create_gui(self, options: EpicsGUIOptions | None = None) -> None: |
20 |
| - EpicsGUI(self._mapping, self._pv_prefix).create_gui(options) |
| 35 | + def _create_gui(self) -> None: |
| 36 | + EpicsGUI(self._mapping, self._pv_prefix).create_gui(self.options.gui) |
21 | 37 |
|
22 |
| - def _run(self, options: EpicsIOCOptions | None = None): |
23 |
| - self._ioc.run(self._dispatcher, self._context, options) |
| 38 | + def _run(self): |
| 39 | + self._ioc.run(self._dispatcher, self._context, self.options.ioc) |
0 commit comments