Previously, `Chip.request_lines` and `LineRequest.reconfigure_lines`
were typed to accept a config argument that was either an int, a str,
or a tuple[int | str].
This had two downsides, namely:
* The tuple was typed as having only a single element and not a variable
number of elements. The examples and test suite relied on a variable
length tuple.
* The tuple type itself was overly restictive. The function
implementations had no requirement that the value be a tuple, only
that it was iterable if it was not a str or an int.
Now, these functions accept an Iterable[int | str] instead of tuples to
offer greater flexibility to callers.
This change does not break compatibility for existing users.
Closes: https://github.com/brgl/libgpiod/issues/102
Signed-off-by: Vincent Fazio <vfazio@xes-inc.com>
Link: https://lore.kernel.org/r/20241114145116.2123714-4-vfazio@xes-inc.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
from .line_settings import LineSettings, _line_settings_to_ext
if TYPE_CHECKING:
+ from collections.abc import Iterable
from datetime import timedelta
from .chip_info import ChipInfo
def request_lines(
self,
- config: dict[tuple[Union[int, str]], Optional[LineSettings]],
+ config: dict[
+ Union[Iterable[Union[int, str]], int, str], Optional[LineSettings]
+ ],
consumer: Optional[str] = None,
event_buffer_size: Optional[int] = None,
output_values: Optional[dict[Union[int, str], Value]] = None,
self._req.set_values(mapped)
def reconfigure_lines(
- self, config: dict[tuple[Union[int, str]], LineSettings]
+ self,
+ config: dict[
+ Union[Iterable[Union[int, str]], int, str], Optional[LineSettings]
+ ],
) -> None:
"""
Reconfigure requested lines.