diff mbox series

[libgpiod] bindings: python: change the interpretation of None in event wait

Message ID 20230523133427.194558-1-brgl@bgdev.pl
State New
Headers show
Series [libgpiod] bindings: python: change the interpretation of None in event wait | expand

Commit Message

Bartosz Golaszewski May 23, 2023, 1:34 p.m. UTC
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

The docs don't mention it but currently passing None as the timeout to
one of the event wait methods works like passing 0 to select() - the wait
method returns immediately. Change it to a more standard behavior - None
makes the method block indefinitely until an even becomes available for
reading.

This is a slight change in the behavior but let's hope nobody complains
as libgpiod v2 is still pretty recent and its adoption is (hopegully)
not wide-spread yet.

Suggested-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
 bindings/python/gpiod/chip.py         | 3 ++-
 bindings/python/gpiod/internal.py     | 3 ---
 bindings/python/gpiod/line_request.py | 3 ++-
 3 files changed, 4 insertions(+), 5 deletions(-)

Comments

Bartosz Golaszewski May 23, 2023, 1:35 p.m. UTC | #1
On Tue, May 23, 2023 at 3:34 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>
> From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
>
> The docs don't mention it but currently passing None as the timeout to
> one of the event wait methods works like passing 0 to select() - the wait
> method returns immediately. Change it to a more standard behavior - None
> makes the method block indefinitely until an even becomes available for
> reading.
>
> This is a slight change in the behavior but let's hope nobody complains
> as libgpiod v2 is still pretty recent and its adoption is (hopegully)
> not wide-spread yet.
>
> Suggested-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>

Cr*p, it was supposed to be Kent who suggested it and Nicolas who
Reported it. I can change it when applying if the patch is fine.

Bart

> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
> ---
>  bindings/python/gpiod/chip.py         | 3 ++-
>  bindings/python/gpiod/internal.py     | 3 ---
>  bindings/python/gpiod/line_request.py | 3 ++-
>  3 files changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/bindings/python/gpiod/chip.py b/bindings/python/gpiod/chip.py
> index 97ff340..52d0757 100644
> --- a/bindings/python/gpiod/chip.py
> +++ b/bindings/python/gpiod/chip.py
> @@ -195,7 +195,8 @@ class Chip:
>          Args:
>            timeout:
>              Wait time limit represented as either a datetime.timedelta object
> -            or the number of seconds stored in a float.
> +            or the number of seconds stored in a float. If set to 0, the
> +            method returns immediately, if set to None it blocks indefinitely.
>
>          Returns:
>            True if an info event is ready to be read from the chip, False if the
> diff --git a/bindings/python/gpiod/internal.py b/bindings/python/gpiod/internal.py
> index 37e8b62..7b4598c 100644
> --- a/bindings/python/gpiod/internal.py
> +++ b/bindings/python/gpiod/internal.py
> @@ -7,9 +7,6 @@ from typing import Optional, Union
>
>
>  def poll_fd(fd: int, timeout: Optional[Union[timedelta, float]] = None) -> bool:
> -    if timeout is None:
> -        timeout = 0.0
> -
>      if isinstance(timeout, timedelta):
>          sec = timeout.total_seconds()
>      else:
> diff --git a/bindings/python/gpiod/line_request.py b/bindings/python/gpiod/line_request.py
> index a0f97b7..090467c 100644
> --- a/bindings/python/gpiod/line_request.py
> +++ b/bindings/python/gpiod/line_request.py
> @@ -178,7 +178,8 @@ class LineRequest:
>          Args:
>            timeout:
>              Wait time limit expressed as either a datetime.timedelta object
> -            or the number of seconds stored in a float.
> +            or the number of seconds stored in a float. If set to 0, the
> +            method returns immediately, if set to None it blocks indefinitely.
>
>          Returns:
>            True if events are ready to be read. False on timeout.
> --
> 2.39.2
>
Kent Gibson May 23, 2023, 1:42 p.m. UTC | #2
On Tue, May 23, 2023 at 03:35:30PM +0200, Bartosz Golaszewski wrote:
> On Tue, May 23, 2023 at 3:34 PM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> >
> > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
> >
> > The docs don't mention it but currently passing None as the timeout to
> > one of the event wait methods works like passing 0 to select() - the wait
> > method returns immediately. Change it to a more standard behavior - None
> > makes the method block indefinitely until an even becomes available for
> > reading.
> >
> > This is a slight change in the behavior but let's hope nobody complains
> > as libgpiod v2 is still pretty recent and its adoption is (hopegully)
> > not wide-spread yet.
> >
> > Suggested-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
> 
> Cr*p, it was supposed to be Kent who suggested it and Nicolas who
> Reported it. I can change it when applying if the patch is fine.
> 
> Bart
> 

Man, wish I could get away with that little sleep.

Anyway, that works for me.

Reviewed-by: Kent Gibson <warthog618@gmail.com>
Alexander Stein May 24, 2023, 7 a.m. UTC | #3
Am Dienstag, 23. Mai 2023, 15:34:27 CEST schrieb Bartosz Golaszewski:
> From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
> 
> The docs don't mention it but currently passing None as the timeout to
> one of the event wait methods works like passing 0 to select() - the wait
> method returns immediately. Change it to a more standard behavior - None
> makes the method block indefinitely until an even becomes available for

Small typo: 'an event becomes'

Regards,
Alexander

> reading.
> 
> This is a slight change in the behavior but let's hope nobody complains
> as libgpiod v2 is still pretty recent and its adoption is (hopegully)
> not wide-spread yet.
> 
> Suggested-by: Nicolas Frattaroli <frattaroli.nicolas@gmail.com>
> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
> ---
>  bindings/python/gpiod/chip.py         | 3 ++-
>  bindings/python/gpiod/internal.py     | 3 ---
>  bindings/python/gpiod/line_request.py | 3 ++-
>  3 files changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/bindings/python/gpiod/chip.py b/bindings/python/gpiod/chip.py
> index 97ff340..52d0757 100644
> --- a/bindings/python/gpiod/chip.py
> +++ b/bindings/python/gpiod/chip.py
> @@ -195,7 +195,8 @@ class Chip:
>          Args:
>            timeout:
>              Wait time limit represented as either a datetime.timedelta
> object -            or the number of seconds stored in a float.
> +            or the number of seconds stored in a float. If set to 0, the
> +            method returns immediately, if set to None it blocks
> indefinitely.
> 
>          Returns:
>            True if an info event is ready to be read from the chip, False if
> the diff --git a/bindings/python/gpiod/internal.py
> b/bindings/python/gpiod/internal.py index 37e8b62..7b4598c 100644
> --- a/bindings/python/gpiod/internal.py
> +++ b/bindings/python/gpiod/internal.py
> @@ -7,9 +7,6 @@ from typing import Optional, Union
> 
> 
>  def poll_fd(fd: int, timeout: Optional[Union[timedelta, float]] = None) ->
> bool: -    if timeout is None:
> -        timeout = 0.0
> -
>      if isinstance(timeout, timedelta):
>          sec = timeout.total_seconds()
>      else:
> diff --git a/bindings/python/gpiod/line_request.py
> b/bindings/python/gpiod/line_request.py index a0f97b7..090467c 100644
> --- a/bindings/python/gpiod/line_request.py
> +++ b/bindings/python/gpiod/line_request.py
> @@ -178,7 +178,8 @@ class LineRequest:
>          Args:
>            timeout:
>              Wait time limit expressed as either a datetime.timedelta object
> -            or the number of seconds stored in a float.
> +            or the number of seconds stored in a float. If set to 0, the
> +            method returns immediately, if set to None it blocks
> indefinitely.
> 
>          Returns:
>            True if events are ready to be read. False on timeout.
Bartosz Golaszewski May 24, 2023, 3:01 p.m. UTC | #4
On Wed, May 24, 2023 at 9:00 AM Alexander Stein
<alexander.stein@ew.tq-group.com> wrote:
>
> Am Dienstag, 23. Mai 2023, 15:34:27 CEST schrieb Bartosz Golaszewski:
> > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
> >
> > The docs don't mention it but currently passing None as the timeout to
> > one of the event wait methods works like passing 0 to select() - the wait
> > method returns immediately. Change it to a more standard behavior - None
> > makes the method block indefinitely until an even becomes available for
>
> Small typo: 'an event becomes'

Thanks, applied with that fixed.

Bart
diff mbox series

Patch

diff --git a/bindings/python/gpiod/chip.py b/bindings/python/gpiod/chip.py
index 97ff340..52d0757 100644
--- a/bindings/python/gpiod/chip.py
+++ b/bindings/python/gpiod/chip.py
@@ -195,7 +195,8 @@  class Chip:
         Args:
           timeout:
             Wait time limit represented as either a datetime.timedelta object
-            or the number of seconds stored in a float.
+            or the number of seconds stored in a float. If set to 0, the
+            method returns immediately, if set to None it blocks indefinitely.
 
         Returns:
           True if an info event is ready to be read from the chip, False if the
diff --git a/bindings/python/gpiod/internal.py b/bindings/python/gpiod/internal.py
index 37e8b62..7b4598c 100644
--- a/bindings/python/gpiod/internal.py
+++ b/bindings/python/gpiod/internal.py
@@ -7,9 +7,6 @@  from typing import Optional, Union
 
 
 def poll_fd(fd: int, timeout: Optional[Union[timedelta, float]] = None) -> bool:
-    if timeout is None:
-        timeout = 0.0
-
     if isinstance(timeout, timedelta):
         sec = timeout.total_seconds()
     else:
diff --git a/bindings/python/gpiod/line_request.py b/bindings/python/gpiod/line_request.py
index a0f97b7..090467c 100644
--- a/bindings/python/gpiod/line_request.py
+++ b/bindings/python/gpiod/line_request.py
@@ -178,7 +178,8 @@  class LineRequest:
         Args:
           timeout:
             Wait time limit expressed as either a datetime.timedelta object
-            or the number of seconds stored in a float.
+            or the number of seconds stored in a float. If set to 0, the
+            method returns immediately, if set to None it blocks indefinitely.
 
         Returns:
           True if events are ready to be read. False on timeout.