Re: [libgpiod v2][PATCH v2 0/5] bindings: implement python bindings for libgpiod v2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
>



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux