@@ -94,12 +94,9 @@ class LineRequest:
def _line_to_offset(self, line: Union[int, str]) -> int:
if isinstance(line, int):
return line
- else:
- _line: Union[int, None]
- if (_line := self._name_map.get(line)) is None:
- raise ValueError(f"unknown line name: {line}")
- else:
- return _line
+ if (_line := self._name_map.get(line)) is None:
+ raise ValueError(f"unknown line name: {line}")
+ return _line
def get_values(
self, lines: Optional[Iterable[Union[int, str]]] = None
@@ -174,8 +171,14 @@ class LineRequest:
line_settings = {}
for line, settings in config_iter(config):
- offset = self._line_to_offset(line)
- line_settings[offset] = settings
+ try:
+ offset = self._line_to_offset(line)
+ line_settings[offset] = settings
+ except ValueError:
+ # _line_to_offset will raise a ValueError when it encounters
+ # an unrecognized line name. Ignore these like we do offsets
+ # that were not in the original request.
+ pass
for offset in self.offsets:
settings = line_settings.get(offset) or LineSettings()
@@ -596,6 +596,19 @@ class ReconfigureRequestedLines(TestCase):
info = self.chip.get_line_info(2)
self.assertEqual(info.direction, Direction.INPUT)
+ def test_reconfigure_extra_names(self) -> None:
+ info = self.chip.get_line_info(2)
+ self.assertEqual(info.direction, Direction.OUTPUT)
+ self.req.reconfigure_lines(
+ {
+ (0, 2, "foo", "baz", "buzz"): gpiod.LineSettings(
+ direction=Direction.INPUT
+ )
+ }
+ )
+ info = self.chip.get_line_info(2)
+ self.assertEqual(info.direction, Direction.INPUT)
+
class ReleasedLineRequestCannotBeUsed(TestCase):
def test_using_released_line_request(self) -> None:
Previously, calling `reconfigure_lines` with line identifiers that were not included in the original request produced different behaviors depending on the identifier type. If the identifier was an integer, it would be silently ignored. If the identifier was a string, it would raise a `ValueError`. To be consistent, invalid line names are now silently ignored. Signed-off-by: Vincent Fazio <vfazio@gmail.com> --- bindings/python/gpiod/line_request.py | 19 +++++++++++-------- bindings/python/tests/tests_line_request.py | 13 +++++++++++++ 2 files changed, 24 insertions(+), 8 deletions(-)