diff mbox series

test: correct entry point to pytest

Message ID 20210128114611.128865-1-xypron.glpk@gmx.de
State Accepted
Commit 89d52afa5d0b643bddbedd840cea98ea7cba84f9
Delegated to: Tom Rini
Headers show
Series test: correct entry point to pytest | expand

Commit Message

Heinrich Schuchardt Jan. 28, 2021, 11:46 a.m. UTC
With Pytest 6.0.2 'make tests' fails:

sandbox: Traceback (most recent call last):
  File "./test/py/test.py", line 20, in <module>
    sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
TypeError: console_main() takes 0 positional arguments but 1 was given

The definition of console_scripts has changed as follows:

Pytest 4.6.1:

[options.entry_points]
console_scripts =
        pytest=pytest:main
        py.test=pytest:main
        
Pytest 6.0.2:
        
[options.entry_points]
console_scripts =
    pytest=pytest:console_main
    py.test=pytest:console_main

The new function console_main() has a comment:
"This function is not meant for programmable use; use `main()`"

Hence let's call pytest.main() directly.
Move args processing into the __main__ paragraph.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
 test/py/test.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

--
2.29.2

Comments

Tom Rini Jan. 28, 2021, 12:58 p.m. UTC | #1
On Thu, Jan 28, 2021 at 12:46:11PM +0100, Heinrich Schuchardt wrote:

> With Pytest 6.0.2 'make tests' fails:
> 
> sandbox: Traceback (most recent call last):
>   File "./test/py/test.py", line 20, in <module>
>     sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
> TypeError: console_main() takes 0 positional arguments but 1 was given
> 
> The definition of console_scripts has changed as follows:
> 
> Pytest 4.6.1:
> 
> [options.entry_points]
> console_scripts =
>         pytest=pytest:main
>         py.test=pytest:main
>         
> Pytest 6.0.2:
>         
> [options.entry_points]
> console_scripts =
>     pytest=pytest:console_main
>     py.test=pytest:console_main
> 
> The new function console_main() has a comment:
> "This function is not meant for programmable use; use `main()`"
> 
> Hence let's call pytest.main() directly.
> Move args processing into the __main__ paragraph.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  test/py/test.py | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

So the last round of "newer pytest means we need to ..." was part of why
we have test/py/requirements.txt right now.  That was over a year ago.
So, for after v2021.04 it would be good to update pytest to current and
deal with any updating that needs updating in our tests and related
code.  Thanks!
Heinrich Schuchardt Jan. 28, 2021, 1:28 p.m. UTC | #2
On 28.01.21 13:58, Tom Rini wrote:
> On Thu, Jan 28, 2021 at 12:46:11PM +0100, Heinrich Schuchardt wrote:
>
>> With Pytest 6.0.2 'make tests' fails:
>>
>> sandbox: Traceback (most recent call last):
>>   File "./test/py/test.py", line 20, in <module>
>>     sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
>> TypeError: console_main() takes 0 positional arguments but 1 was given
>>
>> The definition of console_scripts has changed as follows:
>>
>> Pytest 4.6.1:
>>
>> [options.entry_points]
>> console_scripts =
>>         pytest=pytest:main
>>         py.test=pytest:main
>>         
>> Pytest 6.0.2:
>>         
>> [options.entry_points]
>> console_scripts =
>>     pytest=pytest:console_main
>>     py.test=pytest:console_main
>>
>> The new function console_main() has a comment:
>> "This function is not meant for programmable use; use `main()`"
>>
>> Hence let's call pytest.main() directly.
>> Move args processing into the __main__ paragraph.
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>>  test/py/test.py | 10 +++++-----
>>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> So the last round of "newer pytest means we need to ..." was part of why
> we have test/py/requirements.txt right now.  That was over a year ago.
> So, for after v2021.04 it would be good to update pytest to current and
> deal with any updating that needs updating in our tests and related
> code.  Thanks!
>

This patch is not about making new requirements. It is about increasing
the compatibility of our Python script with a larger range of Pytest
revisions.

So I do not see the show-stopper for the current release.

Best regards

Heinrich
Tom Rini Jan. 28, 2021, 4:17 p.m. UTC | #3
On Thu, Jan 28, 2021 at 02:28:03PM +0100, Heinrich Schuchardt wrote:
> On 28.01.21 13:58, Tom Rini wrote:
> > On Thu, Jan 28, 2021 at 12:46:11PM +0100, Heinrich Schuchardt wrote:
> >
> >> With Pytest 6.0.2 'make tests' fails:
> >>
> >> sandbox: Traceback (most recent call last):
> >>   File "./test/py/test.py", line 20, in <module>
> >>     sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
> >> TypeError: console_main() takes 0 positional arguments but 1 was given
> >>
> >> The definition of console_scripts has changed as follows:
> >>
> >> Pytest 4.6.1:
> >>
> >> [options.entry_points]
> >> console_scripts =
> >>         pytest=pytest:main
> >>         py.test=pytest:main
> >>         
> >> Pytest 6.0.2:
> >>         
> >> [options.entry_points]
> >> console_scripts =
> >>     pytest=pytest:console_main
> >>     py.test=pytest:console_main
> >>
> >> The new function console_main() has a comment:
> >> "This function is not meant for programmable use; use `main()`"
> >>
> >> Hence let's call pytest.main() directly.
> >> Move args processing into the __main__ paragraph.
> >>
> >> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> >> ---
> >>  test/py/test.py | 10 +++++-----
> >>  1 file changed, 5 insertions(+), 5 deletions(-)
> >
> > So the last round of "newer pytest means we need to ..." was part of why
> > we have test/py/requirements.txt right now.  That was over a year ago.
> > So, for after v2021.04 it would be good to update pytest to current and
> > deal with any updating that needs updating in our tests and related
> > code.  Thanks!
> >
> 
> This patch is not about making new requirements. It is about increasing
> the compatibility of our Python script with a larger range of Pytest
> revisions.
> 
> So I do not see the show-stopper for the current release.

I bring up the last time because we support using "pip install -r
test/py/requirements.txt" as how to create the supported test
environment.  This is based on my understanding of the time of the best
practices of dealing with python modules.
Andy Shevchenko Jan. 28, 2021, 6:23 p.m. UTC | #4
On Thu, Jan 28, 2021 at 1:46 PM Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>
> With Pytest 6.0.2 'make tests' fails:
>
> sandbox: Traceback (most recent call last):
>   File "./test/py/test.py", line 20, in <module>
>     sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
> TypeError: console_main() takes 0 positional arguments but 1 was given
>
> The definition of console_scripts has changed as follows:
>
> Pytest 4.6.1:
>
> [options.entry_points]
> console_scripts =
>         pytest=pytest:main
>         py.test=pytest:main
>
> Pytest 6.0.2:
>
> [options.entry_points]
> console_scripts =
>     pytest=pytest:console_main
>     py.test=pytest:console_main
>
> The new function console_main() has a comment:
> "This function is not meant for programmable use; use `main()`"
>
> Hence let's call pytest.main() directly.
> Move args processing into the __main__ paragraph.
>

Thanks for the patch!

And +1 that we shouldn't avoid the package == version as much as
possible. Distros provide a version and if Python doesn't have a
capability to provide a way how to do above conditionally to the
version, then probably we have to drop Python crap and use better
language for the test cases that must be robust.

> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  test/py/test.py | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/test/py/test.py b/test/py/test.py
> index bee88d96bc..285fda5425 100755
> --- a/test/py/test.py
> +++ b/test/py/test.py
> @@ -10,11 +10,11 @@
>  import os
>  import os.path
>  import sys
> +import pytest
>  from pkg_resources import load_entry_point
>
> -# argv; py.test test_directory_name user-supplied-arguments
> -args = [os.path.dirname(__file__) + '/tests']
> -args.extend(sys.argv)
> -
>  if __name__ == '__main__':
> -    sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
> +    # argv; py.test test_directory_name user-supplied-arguments
> +    args = [os.path.dirname(__file__) + '/tests']
> +    args.extend(sys.argv)
> +    sys.exit(pytest.main(args))
> --
> 2.29.2
>
Heinrich Schuchardt Jan. 28, 2021, 6:36 p.m. UTC | #5
On 1/28/21 5:17 PM, Tom Rini wrote:
> On Thu, Jan 28, 2021 at 02:28:03PM +0100, Heinrich Schuchardt wrote:
>> On 28.01.21 13:58, Tom Rini wrote:
>>> On Thu, Jan 28, 2021 at 12:46:11PM +0100, Heinrich Schuchardt wrote:
>>>
>>>> With Pytest 6.0.2 'make tests' fails:
>>>>
>>>> sandbox: Traceback (most recent call last):
>>>>    File "./test/py/test.py", line 20, in <module>
>>>>      sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
>>>> TypeError: console_main() takes 0 positional arguments but 1 was given
>>>>
>>>> The definition of console_scripts has changed as follows:
>>>>
>>>> Pytest 4.6.1:
>>>>
>>>> [options.entry_points]
>>>> console_scripts =
>>>>          pytest=pytest:main
>>>>          py.test=pytest:main
>>>>
>>>> Pytest 6.0.2:
>>>>
>>>> [options.entry_points]
>>>> console_scripts =
>>>>      pytest=pytest:console_main
>>>>      py.test=pytest:console_main
>>>>
>>>> The new function console_main() has a comment:
>>>> "This function is not meant for programmable use; use `main()`"
>>>>
>>>> Hence let's call pytest.main() directly.
>>>> Move args processing into the __main__ paragraph.
>>>>
>>>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>>>> ---
>>>>   test/py/test.py | 10 +++++-----
>>>>   1 file changed, 5 insertions(+), 5 deletions(-)
>>>
>>> So the last round of "newer pytest means we need to ..." was part of why
>>> we have test/py/requirements.txt right now.  That was over a year ago.
>>> So, for after v2021.04 it would be good to update pytest to current and
>>> deal with any updating that needs updating in our tests and related
>>> code.  Thanks!
>>>
>>
>> This patch is not about making new requirements. It is about increasing
>> the compatibility of our Python script with a larger range of Pytest
>> revisions.
>>
>> So I do not see the show-stopper for the current release.
>
> I bring up the last time because we support using "pip install -r
> test/py/requirements.txt" as how to create the supported test
> environment.  This is based on my understanding of the time of the best
> practices of dealing with python modules.

As you have read in the replies to that discussion it is not only me who
due to security considerations will not run pip on his private computer
but wants to use the packages from the distro.

This patch does not break anything. Hence I would appreciate if you
could consider it for inclusion.

This does not stop you or Gitlab to use pip with your favorite Pytest
version.

Best regards

Heinrich
Andy Shevchenko Jan. 28, 2021, 7:36 p.m. UTC | #6
On Thu, Jan 28, 2021 at 1:46 PM Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>
> With Pytest 6.0.2 'make tests' fails:
>
> sandbox: Traceback (most recent call last):
>   File "./test/py/test.py", line 20, in <module>
>     sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
> TypeError: console_main() takes 0 positional arguments but 1 was given
>
> The definition of console_scripts has changed as follows:
>
> Pytest 4.6.1:
>
> [options.entry_points]
> console_scripts =
>         pytest=pytest:main
>         py.test=pytest:main
>
> Pytest 6.0.2:
>
> [options.entry_points]
> console_scripts =
>     pytest=pytest:console_main
>     py.test=pytest:console_main
>
> The new function console_main() has a comment:
> "This function is not meant for programmable use; use `main()`"
>
> Hence let's call pytest.main() directly.
> Move args processing into the __main__ paragraph.

Tested-by: Andy Shevchenko <andy.shevchenko@gmail.com>

> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  test/py/test.py | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/test/py/test.py b/test/py/test.py
> index bee88d96bc..285fda5425 100755
> --- a/test/py/test.py
> +++ b/test/py/test.py
> @@ -10,11 +10,11 @@
>  import os
>  import os.path
>  import sys
> +import pytest
>  from pkg_resources import load_entry_point
>
> -# argv; py.test test_directory_name user-supplied-arguments
> -args = [os.path.dirname(__file__) + '/tests']
> -args.extend(sys.argv)
> -
>  if __name__ == '__main__':
> -    sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
> +    # argv; py.test test_directory_name user-supplied-arguments
> +    args = [os.path.dirname(__file__) + '/tests']
> +    args.extend(sys.argv)
> +    sys.exit(pytest.main(args))
> --
> 2.29.2
>
Tom Rini Jan. 28, 2021, 11:56 p.m. UTC | #7
On Thu, Jan 28, 2021 at 07:36:53PM +0100, Heinrich Schuchardt wrote:
> On 1/28/21 5:17 PM, Tom Rini wrote:
> > On Thu, Jan 28, 2021 at 02:28:03PM +0100, Heinrich Schuchardt wrote:
> > > On 28.01.21 13:58, Tom Rini wrote:
> > > > On Thu, Jan 28, 2021 at 12:46:11PM +0100, Heinrich Schuchardt wrote:
> > > > 
> > > > > With Pytest 6.0.2 'make tests' fails:
> > > > > 
> > > > > sandbox: Traceback (most recent call last):
> > > > >    File "./test/py/test.py", line 20, in <module>
> > > > >      sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
> > > > > TypeError: console_main() takes 0 positional arguments but 1 was given
> > > > > 
> > > > > The definition of console_scripts has changed as follows:
> > > > > 
> > > > > Pytest 4.6.1:
> > > > > 
> > > > > [options.entry_points]
> > > > > console_scripts =
> > > > >          pytest=pytest:main
> > > > >          py.test=pytest:main
> > > > > 
> > > > > Pytest 6.0.2:
> > > > > 
> > > > > [options.entry_points]
> > > > > console_scripts =
> > > > >      pytest=pytest:console_main
> > > > >      py.test=pytest:console_main
> > > > > 
> > > > > The new function console_main() has a comment:
> > > > > "This function is not meant for programmable use; use `main()`"
> > > > > 
> > > > > Hence let's call pytest.main() directly.
> > > > > Move args processing into the __main__ paragraph.
> > > > > 
> > > > > Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> > > > > ---
> > > > >   test/py/test.py | 10 +++++-----
> > > > >   1 file changed, 5 insertions(+), 5 deletions(-)
> > > > 
> > > > So the last round of "newer pytest means we need to ..." was part of why
> > > > we have test/py/requirements.txt right now.  That was over a year ago.
> > > > So, for after v2021.04 it would be good to update pytest to current and
> > > > deal with any updating that needs updating in our tests and related
> > > > code.  Thanks!
> > > > 
> > > 
> > > This patch is not about making new requirements. It is about increasing
> > > the compatibility of our Python script with a larger range of Pytest
> > > revisions.
> > > 
> > > So I do not see the show-stopper for the current release.
> > 
> > I bring up the last time because we support using "pip install -r
> > test/py/requirements.txt" as how to create the supported test
> > environment.  This is based on my understanding of the time of the best
> > practices of dealing with python modules.
> 
> As you have read in the replies to that discussion it is not only me who
> due to security considerations will not run pip on his private computer
> but wants to use the packages from the distro.
> 
> This patch does not break anything. Hence I would appreciate if you
> could consider it for inclusion.
> 
> This does not stop you or Gitlab to use pip with your favorite Pytest
> version.

In that this does not lead to a backwards incompatible change (like we
had previously), this falls in to the category of changes that fix
problems some people see, even if it's not the default case.  So yes, I
will pick this up as part of picking up general fixes.

And as I've thrown this at everything-new (to see what happens there) +
sandbox, as well as my regular lab of testing with the old version and
everything is fine:

Tested-by: Tom Rini <trini@konsulko.com>
Andy Shevchenko Jan. 29, 2021, 9:59 a.m. UTC | #8
On Fri, Jan 29, 2021 at 1:56 AM Tom Rini <trini@konsulko.com> wrote:
> On Thu, Jan 28, 2021 at 07:36:53PM +0100, Heinrich Schuchardt wrote:
> > On 1/28/21 5:17 PM, Tom Rini wrote:

...

> > As you have read in the replies to that discussion it is not only me who
> > due to security considerations will not run pip on his private computer
> > but wants to use the packages from the distro.
> >
> > This patch does not break anything. Hence I would appreciate if you
> > could consider it for inclusion.
> >
> > This does not stop you or Gitlab to use pip with your favorite Pytest
> > version.
>
> In that this does not lead to a backwards incompatible change (like we
> had previously), this falls in to the category of changes that fix
> problems some people see, even if it's not the default case.  So yes, I
> will pick this up as part of picking up general fixes.

Thanks, Tom!

> And as I've thrown this at everything-new (to see what happens there) +
> sandbox, as well as my regular lab of testing with the old version and
> everything is fine:
>
> Tested-by: Tom Rini <trini@konsulko.com>
Tom Rini Jan. 30, 2021, 7:21 p.m. UTC | #9
On Thu, Jan 28, 2021 at 12:46:11PM +0100, Heinrich Schuchardt wrote:

> With Pytest 6.0.2 'make tests' fails:
> 
> sandbox: Traceback (most recent call last):
>   File "./test/py/test.py", line 20, in <module>
>     sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
> TypeError: console_main() takes 0 positional arguments but 1 was given
> 
> The definition of console_scripts has changed as follows:
> 
> Pytest 4.6.1:
> 
> [options.entry_points]
> console_scripts =
>         pytest=pytest:main
>         py.test=pytest:main
>         
> Pytest 6.0.2:
>         
> [options.entry_points]
> console_scripts =
>     pytest=pytest:console_main
>     py.test=pytest:console_main
> 
> The new function console_main() has a comment:
> "This function is not meant for programmable use; use `main()`"
> 
> Hence let's call pytest.main() directly.
> Move args processing into the __main__ paragraph.
> 
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> Tested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> Tested-by: Tom Rini <trini@konsulko.com>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/test/py/test.py b/test/py/test.py
index bee88d96bc..285fda5425 100755
--- a/test/py/test.py
+++ b/test/py/test.py
@@ -10,11 +10,11 @@ 
 import os
 import os.path
 import sys
+import pytest
 from pkg_resources import load_entry_point

-# argv; py.test test_directory_name user-supplied-arguments
-args = [os.path.dirname(__file__) + '/tests']
-args.extend(sys.argv)
-
 if __name__ == '__main__':
-    sys.exit(load_entry_point('pytest', 'console_scripts', 'pytest')(args))
+    # argv; py.test test_directory_name user-supplied-arguments
+    args = [os.path.dirname(__file__) + '/tests']
+    args.extend(sys.argv)
+    sys.exit(pytest.main(args))