From 09d50a6bac220f90c82e8a11a8ad9166e2654654 Mon Sep 17 00:00:00 2001 From: Ivan Sinkarenko Date: Fri, 28 Feb 2020 14:01:34 +0100 Subject: [PATCH 1/2] Added support for setStamp in the header --- pyjapc/pyjapc.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyjapc/pyjapc.py b/pyjapc/pyjapc.py index 4bfc8c8..469c64b 100644 --- a/pyjapc/pyjapc.py +++ b/pyjapc/pyjapc.py @@ -1460,6 +1460,7 @@ class PyJapc(object): if unixtime: headerDict["acqStamp"] = valueHeader.getAcqStamp() / 1e9 headerDict["cycleStamp"] = valueHeader.getCycleStamp() / 1e9 + headerDict["setStamp"] = valueHeader.getSetStamp() / 1e9 else: headerDict["acqStamp"] = datetime.datetime.fromtimestamp(valueHeader.getAcqStamp() / 1e9, tz=self._selectedTimezone) @@ -1467,6 +1468,9 @@ class PyJapc(object): headerDict["cycleStamp"] = datetime.datetime.fromtimestamp(valueHeader.getCycleStamp() / 1e9, tz=self._selectedTimezone) # headerDict["cycleStampMillis"] = valueHeader.getCycleStampMillis() + headerDict["setStamp"] = datetime.datetime.fromtimestamp(valueHeader.getSetStamp() / 1e9, + tz=self._selectedTimezone) + # headerDict["setStampMillis"] = valueHeader.getSetStampMillis() headerDict["isFirstUpdate"] = bool(valueHeader.isFirstUpdate()) headerDict["isImmediateUpdate"] = bool(valueHeader.isImmediateUpdate()) -- GitLab From 85e9eefc6797eeb51b02cc0159d0cea1449b845f Mon Sep 17 00:00:00 2001 From: Phil Elson Date: Fri, 28 Feb 2020 16:47:10 +0100 Subject: [PATCH 2/2] Add test coverage for getParam with getHeader=True. --- pyjapc/pyjapc.py | 9 ++++++--- pyjapc/tests/test_pyjapc.py | 20 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/pyjapc/pyjapc.py b/pyjapc/pyjapc.py index 469c64b..1f3fce9 100644 --- a/pyjapc/pyjapc.py +++ b/pyjapc/pyjapc.py @@ -551,7 +551,7 @@ class PyJapc(object): noPyConversion is set to True, the JAPC ParameterValue object is returned and has to be converted manually to a Python type. - An example for getting a Parameter with header informations:: + An example for getting a Parameter with header information:: value, header = japc.getParam("LHC.BQS.SCTL/BunchSelector#BunchSelControl", getHeader=True) print(value) @@ -559,8 +559,11 @@ class PyJapc(object): print(header) {'acqStamp': datetime.datetime(2016, 3, 11, 13, 10, 25, 515000, tzinfo=), 'cycleStamp': datetime.datetime(1970, 1, 1, 0, 0, tzinfo=), - 'isFirstUpdate': 0, - 'isImmediateUpdate': 0} + 'isFirstUpdate': False, + 'isImmediateUpdate': False, + 'selector': "no-selector", + 'setStamp': datetime.datetime(1970, 1, 1, 0, 0, tzinfo=), + } An example for getting a ParameterGroup:: diff --git a/pyjapc/tests/test_pyjapc.py b/pyjapc/tests/test_pyjapc.py index 187ebc4..ea818a9 100644 --- a/pyjapc/tests/test_pyjapc.py +++ b/pyjapc/tests/test_pyjapc.py @@ -7,6 +7,7 @@ Created on Wed May 20 08:59:32 2015 # see https://gitlab.cern.ch/acc-co/japc/japc-core/blob/develop/japc-ext-mockito2/src/java/cern/japc/ext/mockito/demo/Demo.java """ +import datetime import jpype as jp import time import pytest @@ -136,6 +137,25 @@ def test_get_value(): assert japc.getParam('TEST/TestProperty') == 42 +def test_get_value_header(): + param = 'TEST/TestProperty' + mock = mockParameter(param) + whenGetValueThen(mock, sel('LHC.USER.TEST'), acqVal(param, 42, 0)) + japc.setSelector('LHC.USER.TEST') + values, headers = japc.getParam('TEST/TestProperty', getHeader=True) + assert values == 42 + assert isinstance(headers, dict) + assert isinstance(headers.pop('acqStamp'), datetime.datetime) + assert isinstance(headers.pop('cycleStamp'), datetime.datetime) + assert isinstance(headers.pop('setStamp'), datetime.datetime) + assert headers == dict( + isFirstUpdate=False, + isImmediateUpdate=False, + # TODO: The selector looks wrong. Bug in mockito implementation? + selector='no-selector', + ) + + def test_async_get(): param = 'TEST/TestProperty' callback = unittest_mock.Mock() -- GitLab