aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>2024-01-30 16:04:48 +0100
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>2024-02-05 09:49:10 +0100
commit6d5d8afc9c7e9a7b47d54fe51f4cb8d7077cdb8b (patch)
tree7e8d5d217fd7a1c8326e6e9a74a726377c6c30bc
parentcfac97acb4392b3be317f1a18bdb12f2b7f0e2ca (diff)
downloadlibgpiod-6d5d8afc9c7e9a7b47d54fe51f4cb8d7077cdb8b.tar.gz
bindings: python: fix __repr__() implementations
The __repr__() function should - if possible - return a valid Python expression that can be used to instantiate a new object when evaluated. LineSettings.__repr__() is missing comas between arguments. Both Chip and LineSettings also don't prefix the returned string with 'gpiod.'. Fix both functions and add more test cases - including actually using the strings returned by __repr__() to create new objects and compare their contents. Reported-by: Robert Thomas <rob.thomas@raspberrypi.com> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
-rw-r--r--bindings/python/gpiod/chip.py2
-rw-r--r--bindings/python/gpiod/line_settings.py2
-rw-r--r--bindings/python/tests/tests_chip.py5
-rw-r--r--bindings/python/tests/tests_line_settings.py9
4 files changed, 12 insertions, 6 deletions
diff --git a/bindings/python/gpiod/chip.py b/bindings/python/gpiod/chip.py
index b3d8e614..19c62cda 100644
--- a/bindings/python/gpiod/chip.py
+++ b/bindings/python/gpiod/chip.py
@@ -333,7 +333,7 @@ class Chip:
if not self._chip:
return "<Chip CLOSED>"
- return 'Chip("{}")'.format(self.path)
+ return 'gpiod.Chip("{}")'.format(self.path)
def __str__(self) -> str:
"""
diff --git a/bindings/python/gpiod/line_settings.py b/bindings/python/gpiod/line_settings.py
index 458fd816..41712cc0 100644
--- a/bindings/python/gpiod/line_settings.py
+++ b/bindings/python/gpiod/line_settings.py
@@ -27,7 +27,7 @@ class LineSettings:
# __repr__ generated by @dataclass uses repr for enum members resulting in
# an unusable representation as those are of the form: <NAME: $value>
def __repr__(self):
- return "LineSettings(direction={}, edge_detection={} bias={} drive={} active_low={} debounce_period={} event_clock={} output_value={})".format(
+ return "gpiod.LineSettings(direction={}, edge_detection={}, bias={}, drive={}, active_low={}, debounce_period={}, event_clock={}, output_value={})".format(
str(self.direction),
str(self.edge_detection),
str(self.bias),
diff --git a/bindings/python/tests/tests_chip.py b/bindings/python/tests/tests_chip.py
index 8db4cdb7..bd4ae34c 100644
--- a/bindings/python/tests/tests_chip.py
+++ b/bindings/python/tests/tests_chip.py
@@ -202,7 +202,10 @@ class StringRepresentation(TestCase):
self.sim = None
def test_repr(self):
- self.assertEqual(repr(self.chip), 'Chip("{}")'.format(self.sim.dev_path))
+ self.assertEqual(repr(self.chip), 'gpiod.Chip("{}")'.format(self.sim.dev_path))
+
+ cmp = eval(repr(self.chip))
+ self.assertEqual(self.chip.path, cmp.path)
def test_str(self):
info = self.chip.get_info()
diff --git a/bindings/python/tests/tests_line_settings.py b/bindings/python/tests/tests_line_settings.py
index 36dda6dc..c6ca7200 100644
--- a/bindings/python/tests/tests_line_settings.py
+++ b/bindings/python/tests/tests_line_settings.py
@@ -1,10 +1,10 @@
# SPDX-License-Identifier: LGPL-2.1-or-later
# SPDX-FileCopyrightText: 2022 Bartosz Golaszewski <brgl@bgdev.pl>
+import datetime
import gpiod
from . import gpiosim
-from datetime import timedelta
from gpiod.line import Direction, Edge, Bias, Drive, Value, Clock
from unittest import TestCase
@@ -47,7 +47,7 @@ class LineSettingsAttributes(TestCase):
settings.direction = Direction.INPUT
settings.edge_detection = Edge.BOTH
settings.bias = Bias.DISABLED
- settings.debounce_period = timedelta(microseconds=3000)
+ settings.debounce_period = datetime.timedelta(microseconds=3000)
settings.event_clock = Clock.HTE
self.assertEqual(settings.direction, Direction.INPUT)
@@ -69,9 +69,12 @@ class LineSettingsStringRepresentation(TestCase):
def test_repr(self):
self.assertEqual(
repr(self.settings),
- "LineSettings(direction=Direction.OUTPUT, edge_detection=Edge.NONE bias=Bias.AS_IS drive=Drive.OPEN_SOURCE active_low=True debounce_period=datetime.timedelta(0) event_clock=Clock.MONOTONIC output_value=Value.INACTIVE)",
+ "gpiod.LineSettings(direction=Direction.OUTPUT, edge_detection=Edge.NONE, bias=Bias.AS_IS, drive=Drive.OPEN_SOURCE, active_low=True, debounce_period=datetime.timedelta(0), event_clock=Clock.MONOTONIC, output_value=Value.INACTIVE)",
)
+ cmp = eval(repr(self.settings))
+ self.assertEqual(self.settings, cmp)
+
def test_str(self):
self.assertEqual(
str(self.settings),