Обсуждение: postgresql test failure with Python 3.4.0 in plpython_do

Поиск
Список
Период
Сортировка

postgresql test failure with Python 3.4.0 in plpython_do

От
Honza Horak
Дата:
Hi guys,

Slavek is preparing Python 3.4 into Fedora and had some issues with
python3/plpython_do test. His analysis is below.

As for the fix, I'm not sure if the test suite is capable of being
flexible for such error messages, but if the purpose of the test was to
get any traceback, we might be fine with changing the error traceback to
e.g.

 >>> raise Exception('error occurred')
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
Exception: error occurred

If any assistance with testing or preparing a patch is required, just ask.

Regards,
Honza

-------- Original Message --------
Subject: postgresql test failure with Python 3.4.0 in plpython_do
Date: Tue, 20 May 2014 08:52:28 -0400 (EDT)
From: Bohuslav Kabrda <bkabrda@redhat.com>
To: Honza Horak <hhorak@redhat.com>

Diff of expected and actual result:

[bkabrda@zizalka plpython]$ diff -u expected/python3/plpython_do.out
results/python3/plpython_do.out
--- expected/python3/plpython_do.out    2014-05-20 14:09:44.118369434 +0200
+++ results/python3/plpython_do.out    2014-05-20 12:37:01.522028783 +0200
@@ -5,7 +5,7 @@
  NOTICE:  This is plpython2u.
  CONTEXT:  PL/Python anonymous code block
  DO $$ nonsense $$ LANGUAGE plpython3u;
-ERROR:  NameError: global name 'nonsense' is not defined
+ERROR:  NameError: name 'nonsense' is not defined
  CONTEXT:  Traceback (most recent call last):
    PL/Python anonymous code block, line 1, in <module>
      nonsense


IIUC the plpython postgresql extension takes the Python code, creates a
function of it and then executes it. This is problem, since the error
message for undefined names *inside functions* (not for undefined names
on global level) has changed (fixed actually, the new version makes more
sense IMO) in Python 3.4 compared to 3.3.
An example, first Python 3.3:

Python 3.3.2 (default, Mar  5 2014, 08:21:05)
[GCC 4.8.2 20131212 (Red Hat 4.8.2-7)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo():
...  nonsense
...
>>> foo()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "<stdin>", line 2, in foo
NameError: global name 'nonsense' is not defined



Now on Python 3.4:

Python 3.4.0 (default, May 18 2014, 22:59:00)
[GCC 4.9.0 20140514 (Red Hat 4.9.0-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo():
...  nonsense
...
>>> foo()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "<stdin>", line 2, in foo
NameError: name 'nonsense' is not defined


Note that in Python 3.4, the "global" word is missing, which causes the
failure. Perhaps the result file could contain a regexp that would match
both or a python3.4 variant of the result could be added?

Slavek

Re: postgresql test failure with Python 3.4.0 in plpython_do

От
Honza Horak
Дата:
On 05/20/2014 04:11 PM, Honza Horak wrote:
> Hi guys,
>
> Slavek is preparing Python 3.4 into Fedora and had some issues with
> python3/plpython_do test. His analysis is below.
>
> As for the fix, I'm not sure if the test suite is capable of being
> flexible for such error messages, but if the purpose of the test was to
> get any traceback, we might be fine with changing the error traceback to
> e.g.
>
>  >>> raise Exception('error occurred')
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> Exception: error occurred
>
> If any assistance with testing or preparing a patch is required, just ask.

The patch for the fix as mentioned above is attached. In case it is a
correct fix, feel free to apply.

Regards,
Honza

> -------- Original Message --------
> Subject: postgresql test failure with Python 3.4.0 in plpython_do
> Date: Tue, 20 May 2014 08:52:28 -0400 (EDT)
> From: Bohuslav Kabrda <bkabrda@redhat.com>
> To: Honza Horak <hhorak@redhat.com>
>
> Diff of expected and actual result:
>
> [bkabrda@zizalka plpython]$ diff -u expected/python3/plpython_do.out
> results/python3/plpython_do.out
> --- expected/python3/plpython_do.out    2014-05-20 14:09:44.118369434 +0200
> +++ results/python3/plpython_do.out    2014-05-20 12:37:01.522028783 +0200
> @@ -5,7 +5,7 @@
>   NOTICE:  This is plpython2u.
>   CONTEXT:  PL/Python anonymous code block
>   DO $$ nonsense $$ LANGUAGE plpython3u;
> -ERROR:  NameError: global name 'nonsense' is not defined
> +ERROR:  NameError: name 'nonsense' is not defined
>   CONTEXT:  Traceback (most recent call last):
>     PL/Python anonymous code block, line 1, in <module>
>       nonsense
>
>
> IIUC the plpython postgresql extension takes the Python code, creates a
> function of it and then executes it. This is problem, since the error
> message for undefined names *inside functions* (not for undefined names
> on global level) has changed (fixed actually, the new version makes more
> sense IMO) in Python 3.4 compared to 3.3.
> An example, first Python 3.3:
>
> Python 3.3.2 (default, Mar  5 2014, 08:21:05)
> [GCC 4.8.2 20131212 (Red Hat 4.8.2-7)] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>> def foo():
> ...  nonsense
> ...
>>>> foo()
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
>    File "<stdin>", line 2, in foo
> NameError: global name 'nonsense' is not defined
>
>
>
> Now on Python 3.4:
>
> Python 3.4.0 (default, May 18 2014, 22:59:00)
> [GCC 4.9.0 20140514 (Red Hat 4.9.0-4)] on linux
> Type "help", "copyright", "credits" or "license" for more information.
>>>> def foo():
> ...  nonsense
> ...
>>>> foo()
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
>    File "<stdin>", line 2, in foo
> NameError: name 'nonsense' is not defined
>
>
> Note that in Python 3.4, the "global" word is missing, which causes the
> failure. Perhaps the result file could contain a regexp that would match
> both or a python3.4 variant of the result could be added?
>
> Slavek
>
>


Вложения

Re: postgresql test failure with Python 3.4.0 in plpython_do

От
Tom Lane
Дата:
Honza Horak <hhorak@redhat.com> writes:
> On 05/20/2014 04:11 PM, Honza Horak wrote:
>> Slavek is preparing Python 3.4 into Fedora and had some issues with
>> python3/plpython_do test. His analysis is below.

> The patch for the fix as mentioned above is attached. In case it is a
> correct fix, feel free to apply.

Hi Honza!  Sorry about the slow response on this --- everybody was at
PGCon last week, and I think this sort of slipped through the cracks.

On looking into the sources I see that Peter already fixed this issue,
in a way substantially the same as yours, but only in HEAD:
http://git.postgresql.org/gitweb/?p=postgresql.git&a=commitdiff&h=d0765d50f
I dunno why he didn't back-patch that, but I will see to it.

            regards, tom lane

Re: postgresql test failure with Python 3.4.0 in plpython_do

От
Honza Horak
Дата:
On 06/01/2014 07:58 PM, Tom Lane wrote:
> Honza Horak <hhorak@redhat.com> writes:
>> On 05/20/2014 04:11 PM, Honza Horak wrote:
>>> Slavek is preparing Python 3.4 into Fedora and had some issues with
>>> python3/plpython_do test. His analysis is below.
>
>> The patch for the fix as mentioned above is attached. In case it is a
>> correct fix, feel free to apply.
>
> Hi Honza!  Sorry about the slow response on this --- everybody was at
> PGCon last week, and I think this sort of slipped through the cracks.

No problem, I hope you enjoyed the PgCon.

> On looking into the sources I see that Peter already fixed this issue,
> in a way substantially the same as yours, but only in HEAD:
> http://git.postgresql.org/gitweb/?p=postgresql.git&a=commitdiff&h=d0765d50f
> I dunno why he didn't back-patch that, but I will see to it.

Great, thanks a lot, Tom!

Honza