Improve str-to-bool conversion and tidy seq conversions
Closes #762 (closed)
Two small improvements around device property parsing:
1. Stricter str-to-bool conversion (tango/utils.py)
Replaced the lax value_str.lower() == "true" lambda with a strtobool helper that accepts the standard truthy/falsy spellings (y/yes/t/true/on/1 and n/no/f/false/off/0) and raises ValueError on anything else. Previously, any non-"true" string — including typos like "ture" or "yse" — silently coerced to False, which masked configuration errors. Used from _seqStr_2_obj_from_type (DevBoolean, DevVarBooleanArray) and str_2_obj. Also collapsed the int/float/bool array branches to list comprehensions.
2. Actionable errors for bad property values (tango/device_class.py)
When seqStr_2_obj raises while parsing a device property (e.g. an int array property whose value is the literal string "1, 2"), the original traceback only mentioned the failing primitive cast — ValueError: invalid literal for int() with base 10: '1, 2' — which the C++ layer then re-wraps as a generic PyDs_PythonError. The exception is now wrapped with the device name, property name, raw value, and target type:
Failed to convert property 'MyProp' of device 'sys/mydev/1' (value=['1, 2']) to type DevVarLongArray: invalid literal for int() with base 10: '1, 2'
Tests:
- tests/test_properties.py::test_wrong_bool_property_raises covers the new error-message path for both scalar and array bool properties.
Breaking change
Removal of PropUtil.stringArray2values and PropUtil.values2string. However, PropUtil is marked as internal, so we never promised to keep it as it is.