On Tue, Jun 28, 2022 at 10:42 AM Bartosz Golaszewski <brgl@xxxxxxxx> wrote: > > This series adds python bindings for libgpiod v2. The series is split > into several patches for easier review. > > In general the python bindings follow what we did for C++ in terms of class > layout except that we leverage python's flexibility to reduce the number of > method variants by allowing different types of arguments. > > 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 make the EdgeEventBuffer avoid copying the events like we did in C++ > for better performance. Python simply isn't designed around speed. > > v1 -> v2: > - all methods now accept keyword arguments even for mandatory positional ones > - added a global request_lines() function that enables easy one-liner liner > requests > - improve and unify the pydoc format > - many smaller tweaks and fixes One more thing I forgot: one can now read edge-events without the need to instantiate the buffer first - it will be created automatically and returned from gpiod.LineRequest.read_edge_event(). That allows users to do: for event in req.read_edge_event(): do_something(event) Bart > > Bartosz Golaszewski (5): > bindings: python: remove old version > bindings: python: enum: add a piece of common code for using python's > enums from C > bindings: python: add examples for v2 API > bindings: python: add tests for v2 API > bindings: python: add the implementation for v2 API > > bindings/python/.gitignore | 1 + > bindings/python/Makefile.am | 19 +- > bindings/python/chip-info.c | 126 + > bindings/python/chip.c | 606 ++++ > bindings/python/edge-event-buffer.c | 330 ++ > bindings/python/edge-event.c | 191 ++ > bindings/python/enum/Makefile.am | 9 + > bindings/python/enum/enum.c | 208 ++ > bindings/python/enum/enum.h | 24 + > bindings/python/examples/gpiodetect.py | 13 +- > bindings/python/examples/gpiofind.py | 12 +- > bindings/python/examples/gpioget.py | 28 +- > bindings/python/examples/gpioinfo.py | 39 +- > bindings/python/examples/gpiomon.py | 53 +- > bindings/python/examples/gpioset.py | 36 +- > bindings/python/exception.c | 182 ++ > bindings/python/gpiodmodule.c | 2662 ----------------- > bindings/python/info-event.c | 175 ++ > bindings/python/line-config.c | 1373 +++++++++ > bindings/python/line-info.c | 286 ++ > bindings/python/line-request.c | 803 +++++ > bindings/python/line.c | 239 ++ > bindings/python/module.c | 557 ++++ > bindings/python/module.h | 58 + > bindings/python/request-config.c | 320 ++ > bindings/python/tests/Makefile.am | 15 +- > bindings/python/tests/cases/__init__.py | 12 + > bindings/python/tests/cases/tests_chip.py | 157 + > .../python/tests/cases/tests_chip_info.py | 59 + > .../python/tests/cases/tests_edge_event.py | 279 ++ > .../python/tests/cases/tests_info_event.py | 135 + > .../python/tests/cases/tests_line_config.py | 254 ++ > .../python/tests/cases/tests_line_info.py | 90 + > .../python/tests/cases/tests_line_request.py | 345 +++ > bindings/python/tests/cases/tests_misc.py | 53 + > .../tests/cases/tests_request_config.py | 77 + > bindings/python/tests/gpiod_py_test.py | 827 +---- > bindings/python/tests/gpiomockupmodule.c | 309 -- > bindings/python/tests/gpiosimmodule.c | 434 +++ > configure.ac | 3 +- > 40 files changed, 7517 insertions(+), 3882 deletions(-) > create mode 100644 bindings/python/.gitignore > create mode 100644 bindings/python/chip-info.c > create mode 100644 bindings/python/chip.c > create mode 100644 bindings/python/edge-event-buffer.c > create mode 100644 bindings/python/edge-event.c > create mode 100644 bindings/python/enum/Makefile.am > create mode 100644 bindings/python/enum/enum.c > create mode 100644 bindings/python/enum/enum.h > create mode 100644 bindings/python/exception.c > delete mode 100644 bindings/python/gpiodmodule.c > create mode 100644 bindings/python/info-event.c > create mode 100644 bindings/python/line-config.c > create mode 100644 bindings/python/line-info.c > create mode 100644 bindings/python/line-request.c > create mode 100644 bindings/python/line.c > create mode 100644 bindings/python/module.c > create mode 100644 bindings/python/module.h > create mode 100644 bindings/python/request-config.c > create mode 100644 bindings/python/tests/cases/__init__.py > create mode 100644 bindings/python/tests/cases/tests_chip.py > create mode 100644 bindings/python/tests/cases/tests_chip_info.py > create mode 100644 bindings/python/tests/cases/tests_edge_event.py > create mode 100644 bindings/python/tests/cases/tests_info_event.py > create mode 100644 bindings/python/tests/cases/tests_line_config.py > create mode 100644 bindings/python/tests/cases/tests_line_info.py > create mode 100644 bindings/python/tests/cases/tests_line_request.py > create mode 100644 bindings/python/tests/cases/tests_misc.py > create mode 100644 bindings/python/tests/cases/tests_request_config.py > delete mode 100644 bindings/python/tests/gpiomockupmodule.c > create mode 100644 bindings/python/tests/gpiosimmodule.c > > -- > 2.34.1 >