bindings: implement python bindings for libgpiod v2
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v4 Latest4 patches 3 repliesIn review
- v34 patches 25 repliesSuperseded
- v2 posting 2/25 patches 29 repliesSuperseded
Earlier versions · 1
| Version | Posted | Patches | Replies | Status |
|---|---|---|---|---|
| v2 posting 1/2 | 5 patches | 12 replies | Superseded |
Changes in v4 from the cover letter
- use list and dict comprehensions where applicable
- add a helper for detecting GPIO devices in examples
- remove commented out code
- fix whitespace errors
- cache chip_info in the chip object
- rename Chip.map_line() to Chip.line_name_from_id()
- disallow repeating line offsets/names as well as offset-name conflicts in request configs
- don't modify python objects with GIL released (self->chip assignment)
- fix type conversion strings
- fix error check in request_offsets()
- fix type comparison warnings
Patches in v4 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/4 | bindings: python: remove old versionbindings/ bindings/ bindings/ +9 more | +0 | 0 replies | |
| 2/4 | bindings: python: add examplesbindings/ bindings/ bindings/ +5 more | +179 | 2 replies | |
| 3/4 | bindings: python: add testsbindings/ bindings/ bindings/ +13 more | +1895 | 0 replies | |
| 4/4 | bindings: python: implement python bindings for libgpiod v2bindings/ bindings/ bindings/ +21 more | +2390 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v4 yet.
Cover letter [libgpiod v2][PATCH v4 0/4] bindings: implement python bindings for libgpiod v2
This is the fourth iteration of python bindings for libgpiod v2.
The code has been split into high-level python and low-level C layers with the latter only doing the bare minimum.
The data model is mostly based on the C++ one with the main difference being utilizing dynamic typing and keyword arguments in place of the builder pattern. That allows us to reduce the number of methods and objects.
Because python doesn't have RAII, unlike C++, we provide a module-level request_lines() helper as gpiod.Chip(path).request_lines(...) one-liner could lead to the chip left dangling even after the last reference is dropped.
Because python forces us to dynamically allocate objects all the time even for fundamental types (which are also immutable) there's no point in trying to replicate the edge-event buffer. Instead LineRequest.read_edge_event() just returns a list of events.
v3 -> v4:
- use list and dict comprehensions where applicable
- add a helper for detecting GPIO devices in examples
- remove commented out code
- fix whitespace errors
- cache chip_info in the chip object
- rename Chip.map_line() to Chip.line_name_from_id()
- disallow repeating line offsets/names as well as offset-name conflicts in request configs
- don't modify python objects with GIL released (self->chip assignment)
- fix type conversion strings
- fix error check in request_offsets()
- fix type comparison warnings
Bartosz Golaszewski (4):
bindings: python: remove old version
bindings: python: add examples
bindings: python: add tests
bindings: python: implement python bindings for libgpiod v2
bindings/python/.gitignore | 8 + bindings/python/Makefile.am | 26 +- bindings/python/examples/Makefile.am | 16 +- bindings/python/examples/gpiodetect.py | 17 +- bindings/python/examples/gpiofind.py | 14 +- bindings/python/examples/gpioget.py | 32 +- bindings/python/examples/gpioinfo.py | 38 +- bindings/python/examples/gpiomon.py | 50 +- bindings/python/examples/gpioset.py | 45 +- bindings/python/examples/helpers.py | 15 + bindings/python/gpiod/Makefile.am | 17 + bindings/python/gpiod/__init__.py | 53 + bindings/python/gpiod/chip.py | 329 +++ bindings/python/gpiod/chip_info.py | 21 + bindings/python/gpiod/edge_event.py | 46 + bindings/python/gpiod/exception.py | 20 + bindings/python/gpiod/ext/Makefile.am | 11 + bindings/python/gpiod/ext/chip.c | 339 +++ bindings/python/gpiod/ext/common.c | 92 + bindings/python/gpiod/ext/internal.h | 21 + bindings/python/gpiod/ext/line-config.c | 133 + bindings/python/gpiod/ext/line-settings.c | 130 + bindings/python/gpiod/ext/module.c | 193 ++ bindings/python/gpiod/ext/request.c | 402 +++ bindings/python/gpiod/info_event.py | 33 + bindings/python/gpiod/internal.py | 19 + bindings/python/gpiod/line.py | 56 + bindings/python/gpiod/line_info.py | 73 + bindings/python/gpiod/line_request.py | 247 ++ bindings/python/gpiod/line_settings.py | 62 + bindings/python/gpiodmodule.c | 2662 ------------------ bindings/python/setup.py | 47 + bindings/python/tests/Makefile.am | 26 +- bindings/python/tests/__init__.py | 17 + bindings/python/tests/__main__.py | 16 + bindings/python/tests/gpiod_py_test.py | 832 ------ bindings/python/tests/gpiomockupmodule.c | 309 -- bindings/python/tests/gpiosim/Makefile.am | 7 + bindings/python/tests/gpiosim/__init__.py | 4 + bindings/python/tests/gpiosim/chip.py | 65 + bindings/python/tests/gpiosim/ext.c | 345 +++ bindings/python/tests/helpers.py | 16 + bindings/python/tests/tests_chip.py | 231 ++ bindings/python/tests/tests_chip_info.py | 52 + bindings/python/tests/tests_edge_event.py | 212 ++ bindings/python/tests/tests_info_event.py | 189 ++ bindings/python/tests/tests_line_info.py | 101 + bindings/python/tests/tests_line_request.py | 485 ++++ bindings/python/tests/tests_line_settings.py | 79 + bindings/python/tests/tests_module.py | 59 + configure.ac | 3 + 51 files changed, 4386 insertions(+), 3929 deletions(-) create mode 100644 bindings/python/.gitignore create mode 100644 bindings/python/examples/helpers.py create mode 100644 bindings/python/gpiod/Makefile.am create mode 100644 bindings/python/gpiod/__init__.py create mode 100644 bindings/python/gpiod/chip.py create mode 100644 bindings/python/gpiod/chip_info.py create mode 100644 bindings/python/gpiod/edge_event.py create mode 100644 bindings/python/gpiod/exception.py create mode 100644 bindings/python/gpiod/ext/Makefile.am create mode 100644 bindings/python/gpiod/ext/chip.c create mode 100644 bindings/python/gpiod/ext/common.c create mode 100644 bindings/python/gpiod/ext/internal.h create mode 100644 bindings/python/gpiod/ext/line-config.c create mode 100644 bindings/python/gpiod/ext/line-settings.c create mode 100644 bindings/python/gpiod/ext/module.c create mode 100644 bindings/python/gpiod/ext/request.c create mode 100644 bindings/python/gpiod/info_event.py create mode 100644 bindings/python/gpiod/internal.py create mode 100644 bindings/python/gpiod/line.py create mode 100644 bindings/python/gpiod/line_info.py create mode 100644 bindings/python/gpiod/line_request.py create mode 100644 bindings/python/gpiod/line_settings.py delete mode 100644 bindings/python/gpiodmodule.c create mode 100644 bindings/python/setup.py create mode 100644 bindings/python/tests/__init__.py create mode 100644 bindings/python/tests/__main__.py delete mode 100755 bindings/python/tests/gpiod_py_test.py delete mode 100644 bindings/python/tests/gpiomockupmodule.c create mode 100644 bindings/python/tests/gpiosim/Makefile.am create mode 100644 bindings/python/tests/gpiosim/__init__.py create mode 100644 bindings/python/tests/gpiosim/chip.py create mode 100644 bindings/python/tests/gpiosim/ext.c create mode 100644 bindings/python/tests/helpers.py create mode 100644 bindings/python/tests/tests_chip.py create mode 100644 bindings/python/tests/tests_chip_info.py create mode 100644 bindings/python/tests/tests_edge_event.py create mode 100644 bindings/python/tests/tests_info_event.py create mode 100644 bindings/python/tests/tests_line_info.py create mode 100644 bindings/python/tests/tests_line_request.py create mode 100644 bindings/python/tests/tests_line_settings.py create mode 100644 bindings/python/tests/tests_module.py
Signature · 1 line
2.34.1