diff --git a/pyjapc/pyjapc.py b/pyjapc/pyjapc.py index ac9534fb06386df82d5fdbec145524a0583bf414..6ebd9dbd2f0a1530cba75ba1a37c655cf247c4d6 100644 --- a/pyjapc/pyjapc.py +++ b/pyjapc/pyjapc.py @@ -541,7 +541,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) @@ -549,8 +549,11 @@ class PyJapc(object): print(header) {'acqStamp': datetime.datetime(2016, 3, 11, 13, 10, 25, 515000, tzinfo=<UTC>), 'cycleStamp': datetime.datetime(1970, 1, 1, 0, 0, tzinfo=<UTC>), - 'isFirstUpdate': 0, - 'isImmediateUpdate': 0} + 'isFirstUpdate': False, + 'isImmediateUpdate': False, + 'selector': "no-selector", + 'setStamp': datetime.datetime(1970, 1, 1, 0, 0, tzinfo=<UTC>), + } An example for getting a ParameterGroup:: @@ -1454,6 +1457,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) @@ -1461,6 +1465,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()) diff --git a/pyjapc/tests/test_pyjapc.py b/pyjapc/tests/test_pyjapc.py index f480e7786cf18208e3b7bbfed7f838a13333e2b7..126ee8e85cafa243d645e694b792f82efbc2ce7a 100644 --- a/pyjapc/tests/test_pyjapc.py +++ b/pyjapc/tests/test_pyjapc.py @@ -8,6 +8,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 gc +import datetime import time from unittest import mock as unittest_mock @@ -139,6 +140,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()