ophyd-async 0.8.0a2__py3-none-any.whl → 0.8.0a4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ophyd_async/_version.py +1 -1
- ophyd_async/core/__init__.py +9 -1
- ophyd_async/core/_device.py +71 -49
- ophyd_async/core/_device_filler.py +208 -130
- ophyd_async/core/_mock_signal_backend.py +10 -7
- ophyd_async/core/_mock_signal_utils.py +14 -11
- ophyd_async/core/_readable.py +128 -129
- ophyd_async/core/_signal.py +22 -24
- ophyd_async/core/_soft_signal_backend.py +2 -0
- ophyd_async/core/_utils.py +64 -11
- ophyd_async/epics/adaravis/_aravis_io.py +1 -1
- ophyd_async/epics/adcore/_core_io.py +1 -1
- ophyd_async/epics/adcore/_single_trigger.py +6 -10
- ophyd_async/epics/adkinetix/_kinetix_io.py +1 -1
- ophyd_async/epics/adpilatus/_pilatus_io.py +1 -1
- ophyd_async/epics/advimba/_vimba_io.py +1 -1
- ophyd_async/epics/core/__init__.py +26 -0
- ophyd_async/epics/{signal → core}/_aioca.py +3 -6
- ophyd_async/epics/core/_epics_connector.py +53 -0
- ophyd_async/epics/core/_epics_device.py +13 -0
- ophyd_async/epics/{signal → core}/_p4p.py +3 -6
- ophyd_async/epics/core/_pvi_connector.py +91 -0
- ophyd_async/epics/{signal → core}/_signal.py +31 -16
- ophyd_async/epics/{signal/_common.py → core/_util.py} +19 -1
- ophyd_async/epics/demo/_mover.py +4 -5
- ophyd_async/epics/demo/_sensor.py +9 -12
- ophyd_async/epics/eiger/_eiger_io.py +1 -1
- ophyd_async/epics/eiger/_odin_io.py +1 -1
- ophyd_async/epics/motor.py +4 -5
- ophyd_async/epics/signal.py +11 -0
- ophyd_async/fastcs/core.py +2 -2
- ophyd_async/plan_stubs/_ensure_connected.py +2 -4
- ophyd_async/sim/demo/_sim_motor.py +3 -4
- ophyd_async/tango/base_devices/_base_device.py +48 -48
- ophyd_async/tango/demo/_counter.py +6 -16
- ophyd_async/tango/demo/_mover.py +3 -4
- {ophyd_async-0.8.0a2.dist-info → ophyd_async-0.8.0a4.dist-info}/METADATA +1 -1
- {ophyd_async-0.8.0a2.dist-info → ophyd_async-0.8.0a4.dist-info}/RECORD +42 -40
- {ophyd_async-0.8.0a2.dist-info → ophyd_async-0.8.0a4.dist-info}/WHEEL +1 -1
- ophyd_async/epics/pvi/__init__.py +0 -3
- ophyd_async/epics/pvi/_pvi.py +0 -73
- ophyd_async/epics/signal/__init__.py +0 -20
- {ophyd_async-0.8.0a2.dist-info → ophyd_async-0.8.0a4.dist-info}/LICENSE +0 -0
- {ophyd_async-0.8.0a2.dist-info → ophyd_async-0.8.0a4.dist-info}/entry_points.txt +0 -0
- {ophyd_async-0.8.0a2.dist-info → ophyd_async-0.8.0a4.dist-info}/top_level.txt +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from typing import TypeVar
|
|
4
|
-
from unittest.mock import Mock
|
|
5
4
|
|
|
6
5
|
from ophyd_async.core import Device, DeviceConnector, DeviceFiller
|
|
6
|
+
from ophyd_async.core._utils import LazyMock
|
|
7
7
|
from ophyd_async.tango.signal import (
|
|
8
8
|
TangoSignalBackend,
|
|
9
9
|
infer_python_type,
|
|
@@ -48,7 +48,6 @@ class TangoDevice(Device):
|
|
|
48
48
|
polling=self._polling,
|
|
49
49
|
signal_polling=self._signal_polling,
|
|
50
50
|
)
|
|
51
|
-
connector.create_children_from_annotations(self)
|
|
52
51
|
super().__init__(name=name, connector=connector)
|
|
53
52
|
|
|
54
53
|
|
|
@@ -106,53 +105,54 @@ class TangoDeviceConnector(DeviceConnector):
|
|
|
106
105
|
self._signal_polling = signal_polling
|
|
107
106
|
|
|
108
107
|
def create_children_from_annotations(self, device: Device):
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
108
|
+
if not hasattr(self, "filler"):
|
|
109
|
+
self.filler = DeviceFiller(
|
|
110
|
+
device=device,
|
|
111
|
+
signal_backend_factory=TangoSignalBackend,
|
|
112
|
+
device_connector_factory=lambda: TangoDeviceConnector(
|
|
113
|
+
None, None, (False, 0.1, None, None), {}
|
|
114
|
+
),
|
|
115
|
+
)
|
|
116
|
+
list(self.filler.create_devices_from_annotations(filled=False))
|
|
117
|
+
list(self.filler.create_signals_from_annotations(filled=False))
|
|
118
|
+
self.filler.check_created()
|
|
116
119
|
|
|
117
|
-
async def
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
async def connect_mock(self, device: Device, mock: LazyMock):
|
|
121
|
+
# Make 2 entries for each DeviceVector
|
|
122
|
+
self.filler.create_device_vector_entries_to_mock(2)
|
|
123
|
+
# Set the name of the device to name all children
|
|
124
|
+
device.set_name(device.name)
|
|
125
|
+
return await super().connect_mock(device, mock)
|
|
126
|
+
|
|
127
|
+
async def connect_real(self, device: Device, timeout: float, force_reconnect: bool):
|
|
128
|
+
if self.trl and self.proxy is None:
|
|
129
|
+
self.proxy = await AsyncDeviceProxy(self.trl)
|
|
130
|
+
elif self.proxy and not self.trl:
|
|
131
|
+
self.trl = self.proxy.name()
|
|
123
132
|
else:
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
full_trl
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
backend
|
|
142
|
-
|
|
143
|
-
backend.
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
elif self._polling[0]:
|
|
148
|
-
backend.set_polling(*self._polling)
|
|
149
|
-
backend.allow_events(False)
|
|
150
|
-
# Check that all the requested children have been created
|
|
151
|
-
if unfilled := self._filler.unfilled():
|
|
152
|
-
raise RuntimeError(
|
|
153
|
-
f"{device.name}: cannot provision {unfilled} from "
|
|
154
|
-
f"{self.trl}: {children}"
|
|
155
|
-
)
|
|
133
|
+
raise TypeError("Neither proxy nor trl supplied")
|
|
134
|
+
|
|
135
|
+
children = sorted(
|
|
136
|
+
set()
|
|
137
|
+
.union(self.proxy.get_attribute_list())
|
|
138
|
+
.union(self.proxy.get_command_list())
|
|
139
|
+
)
|
|
140
|
+
for name in children:
|
|
141
|
+
# TODO: strip attribute name
|
|
142
|
+
full_trl = f"{self.trl}/{name}"
|
|
143
|
+
signal_type = await infer_signal_type(full_trl, self.proxy)
|
|
144
|
+
if signal_type:
|
|
145
|
+
backend = self.filler.fill_child_signal(name, signal_type)
|
|
146
|
+
backend.datatype = await infer_python_type(full_trl, self.proxy)
|
|
147
|
+
backend.set_trl(full_trl)
|
|
148
|
+
if polling := self._signal_polling.get(name, ()):
|
|
149
|
+
backend.set_polling(*polling)
|
|
150
|
+
backend.allow_events(False)
|
|
151
|
+
elif self._polling[0]:
|
|
152
|
+
backend.set_polling(*self._polling)
|
|
153
|
+
backend.allow_events(False)
|
|
154
|
+
# Check that all the requested children have been filled
|
|
155
|
+
self.filler.check_filled(f"{self.trl}: {children}")
|
|
156
156
|
# Set the name of the device to name all children
|
|
157
157
|
device.set_name(device.name)
|
|
158
|
-
return await super().
|
|
158
|
+
return await super().connect_real(device, timeout, force_reconnect)
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
HintedSignal,
|
|
6
|
-
SignalR,
|
|
7
|
-
SignalRW,
|
|
8
|
-
SignalX,
|
|
9
|
-
)
|
|
1
|
+
from typing import Annotated as A
|
|
2
|
+
|
|
3
|
+
from ophyd_async.core import DEFAULT_TIMEOUT, AsyncStatus, SignalR, SignalRW, SignalX
|
|
4
|
+
from ophyd_async.core import StandardReadableFormat as Format
|
|
10
5
|
from ophyd_async.tango import TangoReadable, tango_polling
|
|
11
6
|
|
|
12
7
|
|
|
@@ -16,16 +11,11 @@ from ophyd_async.tango import TangoReadable, tango_polling
|
|
|
16
11
|
class TangoCounter(TangoReadable):
|
|
17
12
|
# Enter the name and type of the signals you want to use
|
|
18
13
|
# If type is None or Signal, the type will be inferred from the Tango device
|
|
19
|
-
counts: SignalR[int]
|
|
20
|
-
sample_time: SignalRW[float]
|
|
14
|
+
counts: A[SignalR[int], Format.HINTED_SIGNAL]
|
|
15
|
+
sample_time: A[SignalRW[float], Format.CONFIG_SIGNAL]
|
|
21
16
|
start: SignalX
|
|
22
17
|
reset_: SignalX
|
|
23
18
|
|
|
24
|
-
def __init__(self, trl: str | None = "", name=""):
|
|
25
|
-
super().__init__(trl, name=name)
|
|
26
|
-
self.add_readables([self.counts], HintedSignal)
|
|
27
|
-
self.add_readables([self.sample_time], ConfigSignal)
|
|
28
|
-
|
|
29
19
|
@AsyncStatus.wrap
|
|
30
20
|
async def trigger(self) -> None:
|
|
31
21
|
sample_time = await self.sample_time.get_value()
|
ophyd_async/tango/demo/_mover.py
CHANGED
|
@@ -7,8 +7,6 @@ from ophyd_async.core import (
|
|
|
7
7
|
DEFAULT_TIMEOUT,
|
|
8
8
|
AsyncStatus,
|
|
9
9
|
CalculatableTimeout,
|
|
10
|
-
ConfigSignal,
|
|
11
|
-
HintedSignal,
|
|
12
10
|
SignalR,
|
|
13
11
|
SignalRW,
|
|
14
12
|
SignalX,
|
|
@@ -17,6 +15,7 @@ from ophyd_async.core import (
|
|
|
17
15
|
observe_value,
|
|
18
16
|
wait_for_value,
|
|
19
17
|
)
|
|
18
|
+
from ophyd_async.core import StandardReadableFormat as Format
|
|
20
19
|
from ophyd_async.tango import TangoReadable, tango_polling
|
|
21
20
|
from tango import DevState
|
|
22
21
|
|
|
@@ -33,8 +32,8 @@ class TangoMover(TangoReadable, Movable, Stoppable):
|
|
|
33
32
|
|
|
34
33
|
def __init__(self, trl: str | None = "", name=""):
|
|
35
34
|
super().__init__(trl, name=name)
|
|
36
|
-
self.add_readables([self.position],
|
|
37
|
-
self.add_readables([self.velocity],
|
|
35
|
+
self.add_readables([self.position], Format.HINTED_SIGNAL)
|
|
36
|
+
self.add_readables([self.velocity], Format.CONFIG_SIGNAL)
|
|
38
37
|
self._set_success = True
|
|
39
38
|
|
|
40
39
|
@WatchableAsyncStatus.wrap
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.0a4
|
|
4
4
|
Summary: Asynchronous Bluesky hardware abstraction code, compatible with control systems like EPICS and Tango
|
|
5
5
|
Author-email: Tom Cobb <tom.cobb@diamond.ac.uk>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -1,72 +1,74 @@
|
|
|
1
1
|
ophyd_async/__init__.py,sha256=tEfgj45lRItQ-_u8SRFPM-mpBh3gWvHXr3emhiJJG_M,225
|
|
2
2
|
ophyd_async/__main__.py,sha256=n_U4O9bgm97OuboUB_9eK7eFiwy8BZSgXJ0OzbE0DqU,481
|
|
3
|
-
ophyd_async/_version.py,sha256=
|
|
3
|
+
ophyd_async/_version.py,sha256=_oysVx3AtIs7YHDdNWu47vFG8nzgweLVt7KUik2-u0Q,413
|
|
4
4
|
ophyd_async/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
ophyd_async/core/__init__.py,sha256=
|
|
5
|
+
ophyd_async/core/__init__.py,sha256=JBKq2w50jBjxg_2KRL1jXnIzETaj8dPOD47_prgtotU,4283
|
|
6
6
|
ophyd_async/core/_detector.py,sha256=bKLekM2J3GzLXsKwe8qXQjNP_sAVsa8EtwFEWD-8MeA,14307
|
|
7
|
-
ophyd_async/core/_device.py,sha256=
|
|
8
|
-
ophyd_async/core/_device_filler.py,sha256=
|
|
7
|
+
ophyd_async/core/_device.py,sha256=AMuYtsWtce5rebeHvb5bntZkNLpfnJV9XgQLp0zd5Ks,11802
|
|
8
|
+
ophyd_async/core/_device_filler.py,sha256=Nw-DUyuXYpvt4mmCAQaNVA0LFBBaPK84ubZo3bR39Ak,11407
|
|
9
9
|
ophyd_async/core/_device_save_loader.py,sha256=OViN9_LWNOLuajzrHDKYEqd5I47u5npQACdGceKcIGY,8375
|
|
10
10
|
ophyd_async/core/_flyer.py,sha256=us5z6MNGCvIfgPDTmFTxNERSP37g0WVRkRD0Z2JiMgM,1701
|
|
11
11
|
ophyd_async/core/_hdf_dataset.py,sha256=wW_OL8OYLGOsE01ny3hGaapOrxK7BzhWTxKgz8CIXK0,2492
|
|
12
12
|
ophyd_async/core/_log.py,sha256=UbL9AtnHVUg7r9LofzgmuKEtBESy03usCp7ejmDltG4,3679
|
|
13
|
-
ophyd_async/core/_mock_signal_backend.py,sha256=
|
|
14
|
-
ophyd_async/core/_mock_signal_utils.py,sha256=
|
|
13
|
+
ophyd_async/core/_mock_signal_backend.py,sha256=8Upnz6QrSigeDXemjZ-jB4sV2yIPUzid-6GOfTZ-7Io,2805
|
|
14
|
+
ophyd_async/core/_mock_signal_utils.py,sha256=YeKjStClwp1etlmHMx1tb_VV1GjeFPg83Hkq7-YPkpg,5306
|
|
15
15
|
ophyd_async/core/_protocol.py,sha256=MuYRqSfakdry9RllX7G9UTzp4lw3eDjtkdGPpnbNb34,4040
|
|
16
16
|
ophyd_async/core/_providers.py,sha256=ff9ZT5-PZ6rhTTdE-q8w9l_k9DuZqLWLebsKZLeJ0Ds,7112
|
|
17
|
-
ophyd_async/core/_readable.py,sha256=
|
|
18
|
-
ophyd_async/core/_signal.py,sha256=
|
|
17
|
+
ophyd_async/core/_readable.py,sha256=7FxqxhAT1wBQqOEivgnY731zA9QoK1Tt-ZGcH7GBOXM,10623
|
|
18
|
+
ophyd_async/core/_signal.py,sha256=HO3XkSvs_5t6yJcZAHCaxOfGy8AE0B9c9sDwlG4x21g,19847
|
|
19
19
|
ophyd_async/core/_signal_backend.py,sha256=YWPgLSPbfPnWIUDHvP1ArCVK8zKXJxzzbloqQe_ucCI,5040
|
|
20
|
-
ophyd_async/core/_soft_signal_backend.py,sha256=
|
|
20
|
+
ophyd_async/core/_soft_signal_backend.py,sha256=d74wML22E3H81W6xsPIj44ghw3jP51Jph4vCLGFwB2k,5706
|
|
21
21
|
ophyd_async/core/_status.py,sha256=OUKhblRQ4KU5PDsWbpvYduM7G60JMk1NqeV4eqyPtKc,5131
|
|
22
22
|
ophyd_async/core/_table.py,sha256=ZToBVmAPDmhrVDgjx0f8SErxVdKhvGdGwQ-fXxGCtN8,5386
|
|
23
|
-
ophyd_async/core/_utils.py,sha256=
|
|
23
|
+
ophyd_async/core/_utils.py,sha256=230vayCyT1xsZDjpr7JRcax8zYTxImsf9gm5GiZtnZ8,9132
|
|
24
24
|
ophyd_async/epics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
-
ophyd_async/epics/motor.py,sha256=
|
|
25
|
+
ophyd_async/epics/motor.py,sha256=pujJXV_vslvo3AxsVySTAEoFuduuv5Hp6sz8aRvIbeQ,8792
|
|
26
|
+
ophyd_async/epics/signal.py,sha256=hJCGIIWjRVhjEHkeL1I_oPEaaN7dDFKmm7G7ZmgoTYQ,219
|
|
26
27
|
ophyd_async/epics/adaravis/__init__.py,sha256=u979_9nQTYB0TvDOTXFN4qMrbDP8-xQFfXYMGzLVBo4,207
|
|
27
28
|
ophyd_async/epics/adaravis/_aravis.py,sha256=XBuLQBZYj2tptY39bVzXjl6t-ZpPwqrUOwpR54l-hSo,1952
|
|
28
29
|
ophyd_async/epics/adaravis/_aravis_controller.py,sha256=t4vuMsQ_67tNsAYPFFtBKq3YIHhRnK08DwPzi8Am_-k,2831
|
|
29
|
-
ophyd_async/epics/adaravis/_aravis_io.py,sha256=
|
|
30
|
+
ophyd_async/epics/adaravis/_aravis_io.py,sha256=KCfylSNGN7rC6W4uJDCVtaQ4-o5_FR_bTyTDXnhmMt4,1603
|
|
30
31
|
ophyd_async/epics/adcore/__init__.py,sha256=3wMOyFGaq1X61LqK4iY4pq-m_BjhOgYZD2-mNCAjpzk,1086
|
|
31
|
-
ophyd_async/epics/adcore/_core_io.py,sha256=
|
|
32
|
+
ophyd_async/epics/adcore/_core_io.py,sha256=ZQjRLdpFMVS9kwEm5LAh60pxiy7XWyYtc2TzEvCEVYM,6076
|
|
32
33
|
ophyd_async/epics/adcore/_core_logic.py,sha256=JjrSmKErRFSv1C98or1Upwi01k3NWDRMi2fPHVWMmWw,3561
|
|
33
34
|
ophyd_async/epics/adcore/_hdf_writer.py,sha256=eWT9SH7uegf9rpCWRmVCZTsOxF1drPaOAMmoXm99mVk,7215
|
|
34
|
-
ophyd_async/epics/adcore/_single_trigger.py,sha256=
|
|
35
|
+
ophyd_async/epics/adcore/_single_trigger.py,sha256=7SzmadatWk4zXIweRIhVX5odc__ZZKuGicL7vlW0JbY,1208
|
|
35
36
|
ophyd_async/epics/adcore/_utils.py,sha256=MZBKeSPIRzyo6f84MpzPp28KwOLa9qgrkMIFc618wOE,3932
|
|
36
37
|
ophyd_async/epics/adkinetix/__init__.py,sha256=cvnwOqbvEENf70eFp6bPGwayP0u14UTIhs3WiZEcF_Q,262
|
|
37
38
|
ophyd_async/epics/adkinetix/_kinetix.py,sha256=JsQVc4d7lRCnVObJlM775hHLfp3rYRSRgOoIyRvrSek,1184
|
|
38
39
|
ophyd_async/epics/adkinetix/_kinetix_controller.py,sha256=LyK-CWkEV1l_RVhCOHf2lLgo1FRIkDCa4P8JnAGZ4us,1701
|
|
39
|
-
ophyd_async/epics/adkinetix/_kinetix_io.py,sha256=
|
|
40
|
+
ophyd_async/epics/adkinetix/_kinetix_io.py,sha256=D72HNtob74SnhBa3Zsbp37MhqS6kdrCPac7pnTlm0PQ,910
|
|
40
41
|
ophyd_async/epics/adpilatus/__init__.py,sha256=daimScOCCMHR2eb8VbezHOcGOkd6uIRZQiyeTQsaAx4,308
|
|
41
42
|
ophyd_async/epics/adpilatus/_pilatus.py,sha256=AbWfxEds8ESB73kRXz56FzRPYqy67Ue0m11HRaNUqZY,1751
|
|
42
43
|
ophyd_async/epics/adpilatus/_pilatus_controller.py,sha256=eBZnNPHJosYAMdD-efLNgAmTYaqONLJ3qKX-2RW13fg,2676
|
|
43
|
-
ophyd_async/epics/adpilatus/_pilatus_io.py,sha256=
|
|
44
|
+
ophyd_async/epics/adpilatus/_pilatus_io.py,sha256=upIc5mr8RMmPjQMZcG7-Y8C9a5nPl91OTDjZ5JYDVIc,738
|
|
44
45
|
ophyd_async/epics/adsimdetector/__init__.py,sha256=t3crUgTEvVJGI8o6FsfN42k0A-l4v9ZBwXIYtixoE-M,128
|
|
45
46
|
ophyd_async/epics/adsimdetector/_sim.py,sha256=jzsPJdcwdciR2mVPbvg9KhGHWWGNDQwK5TwPcS7_tco,1009
|
|
46
47
|
ophyd_async/epics/adsimdetector/_sim_controller.py,sha256=lxBCJtREDOySrpLNl7_9DbuIw2IhRpSOBK_CvJ5XBs4,1677
|
|
47
48
|
ophyd_async/epics/advimba/__init__.py,sha256=l0ElP3Zyff_pzrTRdj9oUO9xigCfmzo3pMVjstlVsJY,320
|
|
48
49
|
ophyd_async/epics/advimba/_vimba.py,sha256=E_RJ0uJQt-RWAY7uFTNkHaOdGYS5sa7ZbRgAe6ngXTA,1125
|
|
49
50
|
ophyd_async/epics/advimba/_vimba_controller.py,sha256=Ej7irxTab9cfjmqz4G4Zxv3CjhJw_eRmIb3E62YWh6g,2226
|
|
50
|
-
ophyd_async/epics/advimba/_vimba_io.py,sha256=
|
|
51
|
+
ophyd_async/epics/advimba/_vimba_io.py,sha256=F3KUzMN-GMe637za-iRVGGTt8v9F1a79fRcl3MCkfXA,1864
|
|
52
|
+
ophyd_async/epics/core/__init__.py,sha256=8NoQxEEc2Ny_L9nrD2fnGSf_2gJr1wCR1LwUeLNcIJo,588
|
|
53
|
+
ophyd_async/epics/core/_aioca.py,sha256=318lw_dGWnckgyQ1f4K8QeX_KVOD4idzWX8sx2jbnyk,11625
|
|
54
|
+
ophyd_async/epics/core/_epics_connector.py,sha256=n1FlQYui8HdobPxaX3VAflrzi2UT7QCe3cFasssmVLw,1789
|
|
55
|
+
ophyd_async/epics/core/_epics_device.py,sha256=kshNiKQhevsL2OZXa-r093L_sQGvGK_0J4PWVLg3Eqw,437
|
|
56
|
+
ophyd_async/epics/core/_p4p.py,sha256=Ap_WVWCa4Eb44i50bxjy8qS-n8AUKTaLbFNq5eZZk0w,14619
|
|
57
|
+
ophyd_async/epics/core/_pvi_connector.py,sha256=Rjc8g3Rdny_O-4JxhoCpD4L7XWIRq-lnGHXKpsIUrSU,3621
|
|
58
|
+
ophyd_async/epics/core/_signal.py,sha256=jHdMXV1-0bd7PC8XV32Sso1xgubZVDhWFNsWV-UuamQ,4642
|
|
59
|
+
ophyd_async/epics/core/_util.py,sha256=6CCWDfp54WeBIJdGjg_YBVZTKoNjponWyykMmLPrj7U,1820
|
|
51
60
|
ophyd_async/epics/demo/__init__.py,sha256=wCrgemEo-zR4TTvaqCKnQ-AIUHorotV5jhftbq1tXz0,1368
|
|
52
|
-
ophyd_async/epics/demo/_mover.py,sha256=
|
|
53
|
-
ophyd_async/epics/demo/_sensor.py,sha256=
|
|
61
|
+
ophyd_async/epics/demo/_mover.py,sha256=uyg60SlL7k2C3KA_05EUFOlDe6RB5QBbw7QGs969ItQ,3571
|
|
62
|
+
ophyd_async/epics/demo/_sensor.py,sha256=ATlS5jejoHzpgjHhEienEmRguTzZ7DGvzZkuPCHY49U,1040
|
|
54
63
|
ophyd_async/epics/demo/mover.db,sha256=RFz0rxZue689Wh1sWTZwWeFMUrH04ttPq2u5xJH_Fp4,998
|
|
55
64
|
ophyd_async/epics/demo/sensor.db,sha256=AstyG9E0R4KZBz2FZQSrV_QlrfLoU6M2cvYc15Lf548,553
|
|
56
65
|
ophyd_async/epics/eiger/__init__.py,sha256=b3Tt4pVLk23Giyj50R4e94d2MxWDDmNHWhWwNq2jlaw,221
|
|
57
66
|
ophyd_async/epics/eiger/_eiger.py,sha256=hkMsjVwrzDcE1u5BRIQtn8RSR2e0b1JMpDvuIONoNaI,1133
|
|
58
67
|
ophyd_async/epics/eiger/_eiger_controller.py,sha256=GCoZ40BGCFkxDUrgYk9_CwzSr86l-CALw9nUILJVaZA,2251
|
|
59
|
-
ophyd_async/epics/eiger/_eiger_io.py,sha256=
|
|
60
|
-
ophyd_async/epics/eiger/_odin_io.py,sha256=
|
|
61
|
-
ophyd_async/epics/pvi/__init__.py,sha256=cTt0ixrEPUTXyOs7A_yscsVOvWUEDKwU94BOvhjxVy0,71
|
|
62
|
-
ophyd_async/epics/pvi/_pvi.py,sha256=2gAuujZyAW5KiSXJrlbs-YokW_sgZJrtKi9sfBNr3-k,2697
|
|
63
|
-
ophyd_async/epics/signal/__init__.py,sha256=e6CVNlEhxXPzruTItHFALk2JyHc5a1zJYCzoFFeqd5o,437
|
|
64
|
-
ophyd_async/epics/signal/_aioca.py,sha256=zOIF6ca9ombRLS0QghPSheHF_lC_mxp0bShFll8bLfs,11666
|
|
65
|
-
ophyd_async/epics/signal/_common.py,sha256=xQBoZQs1lPmocpBokxFle-BxVGq2mVjtRoe7TYZMZNw,1462
|
|
66
|
-
ophyd_async/epics/signal/_p4p.py,sha256=eHVl7ifjdOu55K701d_Gf2TlFgJ9tDCnJQhp2ag98HA,14660
|
|
67
|
-
ophyd_async/epics/signal/_signal.py,sha256=h8iUqXOInhJ6M-xw3KJlU3srRPFwmfdHqlohy-uHRS8,4148
|
|
68
|
+
ophyd_async/epics/eiger/_eiger_io.py,sha256=0iimpsa8TI2mJ8hTolQByIhdeKltUGcg6aEkY5GwIyQ,1806
|
|
69
|
+
ophyd_async/epics/eiger/_odin_io.py,sha256=3E33ysvMlf8t0bbSVPnzUrvPgUwA7491uoViWpivpf8,4153
|
|
68
70
|
ophyd_async/fastcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
|
-
ophyd_async/fastcs/core.py,sha256=
|
|
71
|
+
ophyd_async/fastcs/core.py,sha256=kykwmblZfj9xfakL8FTAqmPmPA8qRbQ90OS3d8WLyto,342
|
|
70
72
|
ophyd_async/fastcs/odin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
71
73
|
ophyd_async/fastcs/panda/__init__.py,sha256=_o7n7ckoTM6hTRHpLphpL7r_9sADE59MRNM0gq_ut2o,980
|
|
72
74
|
ophyd_async/fastcs/panda/_block.py,sha256=STQo6NJAqIVfxyMf-2pxINPyr9_nKtXSdicp92a25xo,1709
|
|
@@ -77,12 +79,12 @@ ophyd_async/fastcs/panda/_trigger.py,sha256=forImtdnDnaZ0KKhqSxCqwHWXq13SJ4mn9wd
|
|
|
77
79
|
ophyd_async/fastcs/panda/_utils.py,sha256=NdvzdKy0SOG1eCVMQo_nwRXpBo0wyi6lM5Xw3HvssOw,508
|
|
78
80
|
ophyd_async/fastcs/panda/_writer.py,sha256=wDN6uWX1ENofmI3JBXJ7_CGooI7WsZP-JJQrRiSc6sM,6000
|
|
79
81
|
ophyd_async/plan_stubs/__init__.py,sha256=wjpEj_BoBZJ9x2fhUPY6BzWMqyYH96JrBlJvV7frdN4,524
|
|
80
|
-
ophyd_async/plan_stubs/_ensure_connected.py,sha256=
|
|
82
|
+
ophyd_async/plan_stubs/_ensure_connected.py,sha256=ofMDgOLc7SyR8SVA1hY_zvfkNLo1g5jbRU27W3ICSS0,732
|
|
81
83
|
ophyd_async/plan_stubs/_fly.py,sha256=WxghBAHsF-8xFrILCm44jeHIu9udLhm-tj4JXd9kZjY,6208
|
|
82
84
|
ophyd_async/plan_stubs/_nd_attributes.py,sha256=TVfy3bhnrLFBXZ6b2bREBj0LzEviEGzuGvgWK3I7tII,2198
|
|
83
85
|
ophyd_async/sim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
86
|
ophyd_async/sim/demo/__init__.py,sha256=JKWFnHqmFuRRMvvU0aBuclke3OdF0iq89yvHEd4J7Bg,371
|
|
85
|
-
ophyd_async/sim/demo/_sim_motor.py,sha256=
|
|
87
|
+
ophyd_async/sim/demo/_sim_motor.py,sha256=hZAoZniLd-Fh5Ru9v6TyFNJHrQB_l9ljM04vByuz_Ls,3665
|
|
86
88
|
ophyd_async/sim/demo/_pattern_detector/__init__.py,sha256=o_dSZDIl_CyS3YPSNKpGiQiR9UaC4cNzZ8_ByEN9dIk,402
|
|
87
89
|
ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py,sha256=R-UbcxHLFfCK9tBryKZN5Dit0IjYeJGP-QKV2ssKFoQ,1275
|
|
88
90
|
ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py,sha256=HqlKNgjd_9pjy6pc74xdJ7JtV1Iko6cNxB2aZReJozw,1999
|
|
@@ -91,20 +93,20 @@ ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py,sha256=gP0Q1-1p_3KO
|
|
|
91
93
|
ophyd_async/sim/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
92
94
|
ophyd_async/tango/__init__.py,sha256=2XxSpJWvvAlCs0GLPv6sEnUUD40fWq9OzKuiBEZ_MEs,861
|
|
93
95
|
ophyd_async/tango/base_devices/__init__.py,sha256=fbn1-rfK8MCErpSmjAJuQioDikbjOobd4sDvAB9Xupw,157
|
|
94
|
-
ophyd_async/tango/base_devices/_base_device.py,sha256=
|
|
96
|
+
ophyd_async/tango/base_devices/_base_device.py,sha256=3GIkU1bUyunA9uTBsEtANmlJBo4WCgQmAWYbCRcjoXM,6016
|
|
95
97
|
ophyd_async/tango/base_devices/_tango_readable.py,sha256=J-XeR2fmQU5RTdsNhRvzNPJD8xZRVJ6-qXt09vfpVtI,951
|
|
96
98
|
ophyd_async/tango/demo/__init__.py,sha256=_j-UicTnckuIBp8PnieFMOMnLFGivnaKdmo9o0hYtzc,256
|
|
97
|
-
ophyd_async/tango/demo/_counter.py,sha256=
|
|
99
|
+
ophyd_async/tango/demo/_counter.py,sha256=neKkuepWfpBxMOPnnHJ79SHgwepymG4gTDVacuHE6fA,1134
|
|
98
100
|
ophyd_async/tango/demo/_detector.py,sha256=0wwk7Y-Dl9QF1YsCIU_BxqI6-PQ40qN_0gknrYBkxsY,1292
|
|
99
|
-
ophyd_async/tango/demo/_mover.py,sha256=
|
|
101
|
+
ophyd_async/tango/demo/_mover.py,sha256=hlg0IeR6_1m7ZeavQ1HS_ZFA_MdE0c1kAso6H1Ntz-w,2701
|
|
100
102
|
ophyd_async/tango/demo/_tango/__init__.py,sha256=FfONT7vM49nNo3a1Lv-LcMZO9EHv6bv91yY-RnxIib4,85
|
|
101
103
|
ophyd_async/tango/demo/_tango/_servers.py,sha256=MwkkoZWJQm_cgafCBBXeQfwyAiOgU8cE90_uNfcdcGA,2916
|
|
102
104
|
ophyd_async/tango/signal/__init__.py,sha256=-_wBvhSPb58h_XSeGVaJ6gMFOY8TQNsVYfZxQuxGB1c,750
|
|
103
105
|
ophyd_async/tango/signal/_signal.py,sha256=72iOxCt6HkyaYPgE402h5fd1KryyVUarR0exV2A3UbU,6277
|
|
104
106
|
ophyd_async/tango/signal/_tango_transport.py,sha256=DVTdLu8C19k-QzYaKUzFK2WMbaSd6dIO77k99ugD8U4,28990
|
|
105
|
-
ophyd_async-0.8.
|
|
106
|
-
ophyd_async-0.8.
|
|
107
|
-
ophyd_async-0.8.
|
|
108
|
-
ophyd_async-0.8.
|
|
109
|
-
ophyd_async-0.8.
|
|
110
|
-
ophyd_async-0.8.
|
|
107
|
+
ophyd_async-0.8.0a4.dist-info/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
|
|
108
|
+
ophyd_async-0.8.0a4.dist-info/METADATA,sha256=W1JjO8G4VcMybLwHqOkiySyWLZ_f_TCwTLA54Hf64Sg,6708
|
|
109
|
+
ophyd_async-0.8.0a4.dist-info/WHEEL,sha256=a7TGlA-5DaHMRrarXjVbQagU3Man_dCnGIWMJr5kRWo,91
|
|
110
|
+
ophyd_async-0.8.0a4.dist-info/entry_points.txt,sha256=O0YNJTEufO0w9BozXi-JurTy2U1_o0ypeCgJLQ727Jk,58
|
|
111
|
+
ophyd_async-0.8.0a4.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
|
|
112
|
+
ophyd_async-0.8.0a4.dist-info/RECORD,,
|
ophyd_async/epics/pvi/_pvi.py
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from unittest.mock import Mock
|
|
4
|
-
|
|
5
|
-
from ophyd_async.core import (
|
|
6
|
-
Device,
|
|
7
|
-
DeviceConnector,
|
|
8
|
-
DeviceFiller,
|
|
9
|
-
Signal,
|
|
10
|
-
SignalR,
|
|
11
|
-
SignalRW,
|
|
12
|
-
SignalX,
|
|
13
|
-
)
|
|
14
|
-
from ophyd_async.epics.signal import (
|
|
15
|
-
PvaSignalBackend,
|
|
16
|
-
pvget_with_timeout,
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def _get_signal_details(entry: dict[str, str]) -> tuple[type[Signal], str, str]:
|
|
21
|
-
match entry:
|
|
22
|
-
case {"r": read_pv}:
|
|
23
|
-
return SignalR, read_pv, read_pv
|
|
24
|
-
case {"r": read_pv, "w": write_pv}:
|
|
25
|
-
return SignalRW, read_pv, write_pv
|
|
26
|
-
case {"rw": read_write_pv}:
|
|
27
|
-
return SignalRW, read_write_pv, read_write_pv
|
|
28
|
-
case {"x": execute_pv}:
|
|
29
|
-
return SignalX, execute_pv, execute_pv
|
|
30
|
-
case _:
|
|
31
|
-
raise TypeError(f"Can't process entry {entry}")
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class PviDeviceConnector(DeviceConnector):
|
|
35
|
-
def __init__(self, pvi_pv: str = "") -> None:
|
|
36
|
-
self.pvi_pv = pvi_pv
|
|
37
|
-
|
|
38
|
-
def create_children_from_annotations(self, device: Device):
|
|
39
|
-
self._filler = DeviceFiller(
|
|
40
|
-
device=device,
|
|
41
|
-
signal_backend_factory=PvaSignalBackend,
|
|
42
|
-
device_connector_factory=PviDeviceConnector,
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
async def connect(
|
|
46
|
-
self, device: Device, mock: bool | Mock, timeout: float, force_reconnect: bool
|
|
47
|
-
) -> None:
|
|
48
|
-
if mock:
|
|
49
|
-
# Make 2 entries for each DeviceVector
|
|
50
|
-
self._filler.make_soft_device_vector_entries(2)
|
|
51
|
-
else:
|
|
52
|
-
pvi_structure = await pvget_with_timeout(self.pvi_pv, timeout)
|
|
53
|
-
entries: dict[str, dict[str, str]] = pvi_structure["value"].todict()
|
|
54
|
-
# Ensure we have device vectors for everything that should be there
|
|
55
|
-
self._filler.make_device_vectors(list(entries))
|
|
56
|
-
for name, entry in entries.items():
|
|
57
|
-
if set(entry) == {"d"}:
|
|
58
|
-
connector = self._filler.make_child_device(name)
|
|
59
|
-
connector.pvi_pv = entry["d"]
|
|
60
|
-
else:
|
|
61
|
-
signal_type, read_pv, write_pv = _get_signal_details(entry)
|
|
62
|
-
backend = self._filler.make_child_signal(name, signal_type)
|
|
63
|
-
backend.read_pv = read_pv
|
|
64
|
-
backend.write_pv = write_pv
|
|
65
|
-
# Check that all the requested children have been created
|
|
66
|
-
if unfilled := self._filler.unfilled():
|
|
67
|
-
raise RuntimeError(
|
|
68
|
-
f"{device.name}: cannot provision {unfilled} from "
|
|
69
|
-
f"{self.pvi_pv}: {entries}"
|
|
70
|
-
)
|
|
71
|
-
# Set the name of the device to name all children
|
|
72
|
-
device.set_name(device.name)
|
|
73
|
-
return await super().connect(device, mock, timeout, force_reconnect)
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
from ._common import get_supported_values
|
|
2
|
-
from ._p4p import PvaSignalBackend, pvget_with_timeout
|
|
3
|
-
from ._signal import (
|
|
4
|
-
epics_signal_r,
|
|
5
|
-
epics_signal_rw,
|
|
6
|
-
epics_signal_rw_rbv,
|
|
7
|
-
epics_signal_w,
|
|
8
|
-
epics_signal_x,
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
__all__ = [
|
|
12
|
-
"get_supported_values",
|
|
13
|
-
"PvaSignalBackend",
|
|
14
|
-
"pvget_with_timeout",
|
|
15
|
-
"epics_signal_r",
|
|
16
|
-
"epics_signal_rw",
|
|
17
|
-
"epics_signal_rw_rbv",
|
|
18
|
-
"epics_signal_w",
|
|
19
|
-
"epics_signal_x",
|
|
20
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|