Message ID | 20240522004643.96863-1-warthog618@gmail.com |
---|---|
Headers | show |
Series | support casting line.Value to bool | expand |
On Wed, 22 May 2024 02:46:41 +0200, Kent Gibson <warthog618@gmail.com> said: > While writing a gpiod plugin for gpiozero (Python), I had to map line.Value > to its bool equivalent. Casting seemed the obvious way to go, as it is > essentially a boolean, but that didn't work as I expected - it always > returned True. This is the case for any Python type that does not provide > a suitable conversion operator. > > This series adds support for casting line.Value to bool. > Ha! Interesting. Do you think we may need it anywhere else too? > Patch 1 adds a test that comfirms the existing behaviour. > Patch 2 adds the __bool__() operator to make the Value behave as one > might expect. > > As an aside, I couldn't for the life of me work out how to run the complete > python test suite. There are no hints in the documentation. > > There is a python-tests-run target in the Makefile, but that didn't work: > > ~/libgpiod/bindings/python$ make python-tests-run > PYTHONPATH=/home/kent/libgpiod/bindings/python > LD_LIBRARY_PATH=/home/kent/libgpiod/lib/.libs/:\ > /home/kent/libgpiod/tests/gpiosim/.libs/ \ > python3 -B -m tests > /bin/bash: line 2: /home/kent/libgpiod/tests/gpiosim/.libs/: Is a directory > make: *** [Makefile:677: python-tests-run] Error 126 > > I tried fixing that but I still couldn't satisfy ld wrt the gpiosim > (I don't have libgpiod installed - just using the local build), > so gave up and called this particular test directly with > I typically run it like this: PYTHONPATH=./bindings/python LD_LIBRARY_PATH=./lib/.libs/:./tests/gpiosim/.libs/:bindings/python/ python -B -m tests Bart > $ python -m unittest tests_line.py > > While that passes, I can't guarantee it hasn't caused some other > breakage, though it seems very unlikely. > > Kent Gibson (2): > bindings: python: tests: add test for casting line.Value to bool > bindings: python: support casting line.Value to bool > > bindings/python/gpiod/line.py | 3 +++ > bindings/python/tests/Makefile.am | 1 + > bindings/python/tests/tests_line.py | 11 +++++++++++ > 3 files changed, 15 insertions(+) > create mode 100644 bindings/python/tests/tests_line.py > > -- > 2.39.2 > >
On Wed, May 22, 2024 at 09:22:50AM -0700, brgl@bgdev.pl wrote: > On Wed, 22 May 2024 02:46:41 +0200, Kent Gibson <warthog618@gmail.com> said: > > While writing a gpiod plugin for gpiozero (Python), I had to map line.Value > > to its bool equivalent. Casting seemed the obvious way to go, as it is > > essentially a boolean, but that didn't work as I expected - it always > > returned True. This is the case for any Python type that does not provide > > a suitable conversion operator. > > > > This series adds support for casting line.Value to bool. > > > > Ha! Interesting. Do you think we may need it anywhere else too? > I guess the same applies to the C++ and Rust bindings - I'll have to check. > > Patch 1 adds a test that comfirms the existing behaviour. > > Patch 2 adds the __bool__() operator to make the Value behave as one > > might expect. > > > > As an aside, I couldn't for the life of me work out how to run the complete > > python test suite. There are no hints in the documentation. > > > > There is a python-tests-run target in the Makefile, but that didn't work: > > > > ~/libgpiod/bindings/python$ make python-tests-run > > PYTHONPATH=/home/kent/libgpiod/bindings/python > > LD_LIBRARY_PATH=/home/kent/libgpiod/lib/.libs/:\ > > /home/kent/libgpiod/tests/gpiosim/.libs/ \ > > python3 -B -m tests > > /bin/bash: line 2: /home/kent/libgpiod/tests/gpiosim/.libs/: Is a directory > > make: *** [Makefile:677: python-tests-run] Error 126 > > > > I tried fixing that but I still couldn't satisfy ld wrt the gpiosim > > (I don't have libgpiod installed - just using the local build), > > so gave up and called this particular test directly with > > > > I typically run it like this: > > PYTHONPATH=./bindings/python > LD_LIBRARY_PATH=./lib/.libs/:./tests/gpiosim/.libs/:bindings/python/ > python -B -m tests > So a one-liner? That gives me: $ PYTHONPATH=./bindings/python LD_LIBRARY_PATH=./lib/.libs/:./tests/gpiosim/.libs/:bindings/python/ python3 -B -m tests Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "/home/kent/libgpiod/bindings/python/tests/__main__.py", line 7, in <module> from .tests_chip import * File "/home/kent/libgpiod/bindings/python/tests/tests_chip.py", line 8, in <module> from . import gpiosim File "/home/kent/libgpiod/bindings/python/tests/gpiosim/__init__.py", line 4, in <module> from .chip import Chip File "/home/kent/libgpiod/bindings/python/tests/gpiosim/chip.py", line 4, in <module> from . import _ext FileNotFoundError: [Errno 2] No such file or directory That might also be as far as I got previously - I may've been mis-remembering that the final hurdle was an import error, not an ld issue, though both are looking for a module they can't find, so basically the same thing. Cheers, Kent.
On Thu, May 23, 2024 at 07:57:12AM +0800, Kent Gibson wrote: > On Wed, May 22, 2024 at 09:22:50AM -0700, brgl@bgdev.pl wrote: > > On Wed, 22 May 2024 02:46:41 +0200, Kent Gibson <warthog618@gmail.com> said: > > > While writing a gpiod plugin for gpiozero (Python), I had to map line.Value > > > to its bool equivalent. Casting seemed the obvious way to go, as it is > > > essentially a boolean, but that didn't work as I expected - it always > > > returned True. This is the case for any Python type that does not provide > > > a suitable conversion operator. > > > > > > This series adds support for casting line.Value to bool. > > > > > > > Ha! Interesting. Do you think we may need it anywhere else too? > > > > I guess the same applies to the C++ and Rust bindings - I'll have to > check. > Or do you mean other fields? There wasn't anything in line.py - all the other enums are non-binary. And nothing else springs to mind. Cheers, Kent.
On Thu, May 23, 2024 at 2:32 AM Kent Gibson <warthog618@gmail.com> wrote: > > On Thu, May 23, 2024 at 07:57:12AM +0800, Kent Gibson wrote: > > On Wed, May 22, 2024 at 09:22:50AM -0700, brgl@bgdev.pl wrote: > > > On Wed, 22 May 2024 02:46:41 +0200, Kent Gibson <warthog618@gmail.com> said: > > > > While writing a gpiod plugin for gpiozero (Python), I had to map line.Value > > > > to its bool equivalent. Casting seemed the obvious way to go, as it is > > > > essentially a boolean, but that didn't work as I expected - it always > > > > returned True. This is the case for any Python type that does not provide > > > > a suitable conversion operator. > > > > > > > > This series adds support for casting line.Value to bool. > > > > > > > > > > Ha! Interesting. Do you think we may need it anywhere else too? > > > > > > > I guess the same applies to the C++ and Rust bindings - I'll have to > > check. > > > > Or do you mean other fields? There wasn't anything in line.py - all the > other enums are non-binary. And nothing else springs to mind. Yeah, I meant other Python classes. C++ is fine, the cast from enum to int is unambiguous. For Rust I don't know but I'm seeing things like IntMap<Value> in the code, I suppose, enums map fine if nobody complained yet (given rust would most likely not build at all if it didn't handle this case). Bart
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> On Wed, 22 May 2024 08:46:41 +0800, Kent Gibson wrote: > While writing a gpiod plugin for gpiozero (Python), I had to map line.Value > to its bool equivalent. Casting seemed the obvious way to go, as it is > essentially a boolean, but that didn't work as I expected - it always > returned True. This is the case for any Python type that does not provide > a suitable conversion operator. > > This series adds support for casting line.Value to bool. > > [...] Applied, thanks! [1/2] bindings: python: tests: add test for casting line.Value to bool commit: c8e3ae0499c800955cd77d8959be0f14e4b514cc [2/2] bindings: python: support casting line.Value to bool commit: 5f9152b0ca8ad7ac8a8591553931b38dc10c5db0 Best regards,