Skip to content

Commit 7f77282

Browse files
committed
[TASK] added context proxy: so that .put has a timeout
If the variable the value shall be placed at does not exist, put will not timeout. Proxy uses asyncio.wait_for
1 parent a6076cc commit 7f77282

File tree

7 files changed

+27
-14
lines changed

7 files changed

+27
-14
lines changed

src/dt4acc/custom_epics/ioc/handlers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
from bact_twin_architecture.bl.command_rewriter import CommandRewriter
22
# from dt4acc.custom_epics.ioc.liasion_translation_manager import build_managers
3-
from p4p.client.asyncio import Context
43

54
from .liasion_translation_manager import build_managers
5+
from ..utils.context_proxy import ContextProxy
66
from ...core.accelerators.pyat_accelerator import setup_accelerator
77
from ...core.command import UpdateManager
88
from ...core.utils.logger import get_logger
99

1010
logger = get_logger()
1111

12-
ctx = Context("pva") # Create a context for EPICS PVA (PV Access)
12+
ctx = ContextProxy("pva") # Create a context for EPICS PVA (PV Access)
1313

1414
#: todo replace soon by database service
1515

src/dt4acc/custom_epics/ioc/tasks.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22
import getpass
33
from datetime import datetime
44

5-
from p4p.client.asyncio import Context
6-
5+
from ..utils.context_proxy import ContextProxy
76
from ...core.utils.logger import get_logger
87
from ...core.views.shared_view import get_view_instance
98

10-
ctx = Context("pva")
9+
ctx = ContextProxy("pva")
1110
logger = get_logger()
1211
view = get_view_instance()
1312
heartbeat_task = None # Global variable to store the heartbeat task reference
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import asyncio
2+
3+
from p4p.client.asyncio import Context
4+
5+
class ContextProxy:
6+
def __init__(self, context):
7+
assert context == "pva"
8+
self.context = Context(context)
9+
10+
async def put(self, *args, timeout=5, **kwargs):
11+
return await asyncio.wait_for(
12+
self.context.put(*args, **kwargs),
13+
timeout=timeout
14+
)

src/dt4acc/custom_epics/views/bpm_data.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
from typing import Sequence
33

44
import numpy as np
5-
from p4p.client.asyncio import Context
65

6+
from ..utils.context_proxy import ContextProxy
77
from ...core.utils.logger import get_logger
88

99
logger = get_logger()
1010

11-
ctx = Context("pva")
11+
ctx = ContextProxy("pva")
1212

1313

1414
class BeamPositionPVs:

src/dt4acc/custom_epics/views/calculation_result_view.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
import asyncio
1414

1515
import numpy as np
16-
from p4p.client.asyncio import Context
1716

17+
from ..utils.context_proxy import ContextProxy
1818
from ...core.model.element_upate import ElementUpdate
1919
from ...core.model.orbit import Orbit
2020
from ...core.model.twiss import TwissWithAggregatedKValues
@@ -23,7 +23,7 @@
2323

2424
logger = get_logger()
2525

26-
ctx = Context("pva")
26+
ctx = ContextProxy("pva")
2727

2828

2929
async def update_orbit_pv(pv_name, orbit_result):

src/dt4acc/custom_epics/views/create_or_update_pv.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
from p4p.client.asyncio import Context
2-
1+
from ..utils.context_proxy import ContextProxy
32
from ...core.utils.logger import get_logger
43
logger = get_logger()
54

6-
ctx = Context("pva")
5+
ctx = ContextProxy("pva")
76

87

98
async def update_or_create_pv(element, pv_name, value, value_type, initial_type):

src/dt4acc/custom_epics/views/repeated_publishing_view.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@
33
from datetime import datetime
44
import numpy as np
55

6+
from ..utils.context_proxy import ContextProxy
67
from ...core.interfaces.view_interface import ViewInterface
78
from ...core.model.orbit import Orbit
89
from ...core.model.twiss import TwissWithAggregatedKValues, TuneData
910
from ...core.utils.logger import get_logger
1011
from ...core.utils.periodic_publisher import PeriodicPublisher
1112
from ..data.constants import special_pvs
12-
from p4p.client.asyncio import Context
13+
1314

1415
logger = get_logger()
1516

16-
ctx = Context("pva")
17+
ctx = ContextProxy("pva")
1718

1819

1920
class ExtractBPMFromOrbitFilter:

0 commit comments

Comments
 (0)