From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> Provide a wrapper around gpiod_line_request_get_chip_name() for Python bindings and update the tests. Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> --- bindings/python/gpiod/chip.py | 1 + bindings/python/gpiod/ext/request.c | 11 +++++++++++ bindings/python/gpiod/line_request.py | 12 ++++++++++-- bindings/python/tests/tests_line_request.py | 13 ++++++++----- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/bindings/python/gpiod/chip.py b/bindings/python/gpiod/chip.py index da93370..b3d8e61 100644 --- a/bindings/python/gpiod/chip.py +++ b/bindings/python/gpiod/chip.py @@ -315,6 +315,7 @@ class Chip: req_internal = self._chip.request_lines(line_cfg, consumer, event_buffer_size) request = LineRequest(req_internal) + request._chip_name = req_internal.chip_name request._offsets = req_internal.offsets request._name_map = name_map request._offset_map = offset_map diff --git a/bindings/python/gpiod/ext/request.c b/bindings/python/gpiod/ext/request.c index a32ff8f..5db69fe 100644 --- a/bindings/python/gpiod/ext/request.c +++ b/bindings/python/gpiod/ext/request.c @@ -37,6 +37,13 @@ static void request_finalize(request_object *self) gpiod_edge_event_buffer_free(self->buffer); } +static PyObject * +request_chip_name(request_object *self, void *Py_UNUSED(ignored)) +{ + return PyUnicode_FromString( + gpiod_line_request_get_chip_name(self->request)); +} + static PyObject * request_num_lines(request_object *self, void *Py_UNUSED(ignored)) { @@ -92,6 +99,10 @@ static PyObject *request_fd(request_object *self, void *Py_UNUSED(ignored)) } static PyGetSetDef request_getset[] = { + { + .name = "chip_name", + .get = (getter)request_chip_name, + }, { .name = "num_lines", .get = (getter)request_num_lines, diff --git a/bindings/python/gpiod/line_request.py b/bindings/python/gpiod/line_request.py index 096bf18..cde298f 100644 --- a/bindings/python/gpiod/line_request.py +++ b/bindings/python/gpiod/line_request.py @@ -212,10 +212,18 @@ class LineRequest: if not self._req: return "<LineRequest RELEASED>" - return "<LineRequest num_lines={} offsets={} fd={}>".format( - self.num_lines, self.offsets, self.fd + return '<LineRequest chip="{}" num_lines={} offsets={} fd={}>'.format( + self.chip_name, self.num_lines, self.offsets, self.fd ) + @property + def chip_name(self) -> str: + """ + Name of the chip this request was made on. + """ + self._check_released() + return self._chip_name + @property def num_lines(self) -> int: """ diff --git a/bindings/python/tests/tests_line_request.py b/bindings/python/tests/tests_line_request.py index aa84b9a..f99b93d 100644 --- a/bindings/python/tests/tests_line_request.py +++ b/bindings/python/tests/tests_line_request.py @@ -529,11 +529,14 @@ class LineRequestStringRepresentation(TestCase): del self.sim def test_str(self): - with gpiod.request_lines(self.sim.dev_path, config={(2, 6, 4, 1): None}) as req: - self.assertEqual( - str(req), - "<LineRequest num_lines=4 offsets=[2, 6, 4, 1] fd={}>".format(req.fd), - ) + with gpiod.Chip(self.sim.dev_path) as chip: + with chip.request_lines(config={(2, 6, 4, 1): None}) as req: + self.assertEqual( + str(req), + '<LineRequest chip="{}" num_lines=4 offsets=[2, 6, 4, 1] fd={}>'.format( + self.sim.name, req.fd + ), + ) def test_str_released(self): req = gpiod.request_lines(self.sim.dev_path, config={(2, 6, 4, 1): None}) -- 2.39.2