diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 42346a8bc..efd08cc78 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -14,7 +14,7 @@ streamingInterface = slsDetectorDefs.streamingInterface defs = slsDetectorDefs from .utils import element_if_equal, all_equal, get_set_bits, list_to_bitmask -from .utils import Geometry, to_geo, element, reduce_time, is_iterable +from .utils import Geometry, to_geo, element, reduce_time, is_iterable, hostname_list from _slsdet import xy from . import utils as ut from .proxy import JsonProxy, SlowAdcProxy, ClkDivProxy, MaxPhaseProxy, ClkFreqProxy, PatLoopProxy, PatNLoopProxy, PatWaitProxy, PatWaitTimeProxy @@ -162,12 +162,8 @@ class Detector(CppDetectorApi): @hostname.setter def hostname(self, hostnames): - if isinstance(hostnames, str): - hostnames = [hostnames] - if isinstance(hostnames, list): - self.setHostname(hostnames) - else: - raise ValueError("hostname needs to be string or list of strings") + args = hostname_list(hostnames) + self.setHostname(args) @property @@ -784,7 +780,8 @@ class Detector(CppDetectorApi): @rx_hostname.setter def rx_hostname(self, hostname): - self.setRxHostname(hostname) + args = hostname_list(hostname) + self.setRxHostname(args) @property @element diff --git a/python/slsdet/utils.py b/python/slsdet/utils.py index afa9f59a2..60bbbb2a7 100755 --- a/python/slsdet/utils.py +++ b/python/slsdet/utils.py @@ -260,4 +260,21 @@ def merge_args(*args): return (ret,) else: - raise ValueError("Multiple dictionaries passes cannot merge args") \ No newline at end of file + raise ValueError("Multiple dictionaries passes cannot merge args") + + +def hostname_list(args): + """ + Generates a list from a hostname string + * Lists are passed through + * as are tuples (conversion in pybind11 to vector) + * if + is found it splits the string + """ + if isinstance(args, (list, tuple)): + return args + elif(isinstance(args, str)): + hosts = args.split('+') + hosts = [it for it in hosts if len(it)] + return hosts + else: + raise ValueError("hostname needs to be string or list of strings") diff --git a/python/src/duration.cpp b/python/src/duration.cpp index e77daad2f..db6da3d06 100644 --- a/python/src/duration.cpp +++ b/python/src/duration.cpp @@ -12,6 +12,7 @@ void init_duration(py::module &m) { .def("total_seconds", &DurationWrapper::total_seconds) .def("count", &DurationWrapper::count) .def("set_count", &DurationWrapper::set_count) + .def("__eq__", &DurationWrapper::operator==) .def("__repr__", [](const DurationWrapper &self) { std::stringstream ss; ss << "sls::DurationWrapper(total_seconds: " << self.total_seconds() diff --git a/python/tests/test_utils.py b/python/tests/test_utils.py index 1dd8dd152..309ffa9a2 100755 --- a/python/tests/test_utils.py +++ b/python/tests/test_utils.py @@ -8,7 +8,7 @@ Testing functions from utils.py import pytest from slsdet.utils import * -from slsdet import IpAddr, MacAddr +from slsdet import IpAddr, MacAddr, DurationWrapper import datetime as dt import pathlib from pathlib import Path @@ -22,7 +22,11 @@ def test_iterable(): def test_reduce_time_to_single_value_from_list(): - t = 3 * [dt.timedelta(seconds=1)] + t = [dt.timedelta(seconds=1) for i in range(3)] + assert reduce_time(t) == 1 + +def test_reduce_time_to_single_value_from_list_DurationWrapper(): + t = [DurationWrapper(1) for i in range(3)] assert reduce_time(t) == 1 @@ -83,6 +87,12 @@ def test_all_equal_str_fails(): assert all_equal('aaab') == False +def test_all_equal_DurationWrapper(): + assert all_equal([DurationWrapper(1), DurationWrapper(1)]) + +def test_all_equal_DurationWrapper_fail(): + assert not all_equal([DurationWrapper(1), DurationWrapper(2)]) + def test_element_if_equal_int(): assert element_if_equal([5, 5]) == 5 @@ -341,4 +351,33 @@ def test_merge_args_tuple(): assert merge_args(*("a", "b"), 5) == ("a", "b", 5) def test_merge_args_dict_with_tuple(): - assert merge_args({0: (1,2)}, 3) == ({0: (1,2,3)},) \ No newline at end of file + assert merge_args({0: (1,2)}, 3) == ({0: (1,2,3)},) + + +def test_hostname_to_list(): + s = "localhost" + r = hostname_list(s) + assert r == [s] + +def test_hostname_to_list_passthrough(): + args = ["localhost"] + ret = hostname_list(args) + assert ret == args + + args = ("localhost",) + ret = hostname_list(args) + assert ret == args + +def test_splitting_hostname(): + args = 'apple+banana+pear+' + ret = hostname_list(args) + assert ret == ['apple', 'banana', 'pear'] + + #not sensitive to trailing + + args = 'apple+banana+pear' + ret = hostname_list(args) + assert ret == ['apple', 'banana', 'pear'] + +def test_hostame_throws_on_wrong_args(): + with pytest.raises(Exception) as e: + hostname_list(5) diff --git a/serverBin/mythen3DetectorServerv7.0.0.rc1 b/serverBin/mythen3DetectorServerv7.0.0.rc1 deleted file mode 120000 index fb3ca767e..000000000 --- a/serverBin/mythen3DetectorServerv7.0.0.rc1 +++ /dev/null @@ -1 +0,0 @@ -../slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.0.rc1 \ No newline at end of file diff --git a/serverBin/mythen3DetectorServerv7.0.0.rc2 b/serverBin/mythen3DetectorServerv7.0.0.rc2 new file mode 120000 index 000000000..bc96f3814 --- /dev/null +++ b/serverBin/mythen3DetectorServerv7.0.0.rc2 @@ -0,0 +1 @@ +../slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.0.rc2 \ No newline at end of file diff --git a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.0.rc1 b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.0.rc2 similarity index 77% rename from slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.0.rc1 rename to slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.0.rc2 index ec957aa31..064e120d5 100755 Binary files a/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.0.rc1 and b/slsDetectorServers/mythen3DetectorServer/bin/mythen3DetectorServerv7.0.0.rc2 differ diff --git a/slsDetectorServers/mythen3DetectorServer/mythen3.c b/slsDetectorServers/mythen3DetectorServer/mythen3.c index acb39b487..9f5b1d256 100644 --- a/slsDetectorServers/mythen3DetectorServer/mythen3.c +++ b/slsDetectorServers/mythen3DetectorServer/mythen3.c @@ -313,7 +313,7 @@ patternParameters *setChannelRegisterChip(int ichip, char *mask, chanReg, ichip * NCHAN + ich * NCOUNTERS, ichip * NCHAN_1_COUNTER + ich, ichip, ich)); } - for (int i = 0; i < 24; i++) { + for (int i = 1; i < 24; i++) { patword = clearBit(SIGNAL_clk, patword); pat->word[iaddr++] = patword; diff --git a/slsSupportLib/include/sls/versionAPI.h b/slsSupportLib/include/sls/versionAPI.h index 233526457..03f6659f3 100644 --- a/slsSupportLib/include/sls/versionAPI.h +++ b/slsSupportLib/include/sls/versionAPI.h @@ -8,6 +8,6 @@ #define APIGOTTHARD "7.0.0.rc1 0x221212" #define APIGOTTHARD2 "7.0.0.rc1 0x221212" #define APIJUNGFRAU "7.0.0.rc1 0x221212" -#define APIMYTHEN3 "7.0.0.rc1 0x221212" #define APIMOENCH "7.0.0.rc1 0x221212" #define APIEIGER "7.0.0.rc1 0x221212" +#define APIMYTHEN3 "7.0.0.rc2 0x230116"