[Python-Dev] Hacking on the compiler in ways that break the frozen instance of importlib...

2012-05-27 Thread Nick Coghlan
So, I'm currently trying to fix the regression in handling __class__
references in 3.3. The first step in this is unwinding the name change
for the closure reference so it goes back to using "__class__"
(instead of "@__class__") before finding a different way to fix
#12370.

As near as I can tell, my efforts are getting killed by the frozen
instance of importlib: if I make the change in the straightforward
fashion, the frozen copy of FindLoader.load_module() uses
zero-argument super(), which tries to look up "@__class__", which
fails, which means initialisation goes pear-shaped.

I'm going to fix it in this case by tweaking importlib._bootstrap to
avoid using zero-argument super() (with an unmodified core) before
applying the changes, but yeah, be warned that you're in for some fun
when tinkering with any construct used by importlib._bootstrap and end
up doing something that involves changing the PYC magic number.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Hacking on the compiler in ways that break the frozen instance of importlib...

2012-05-27 Thread Benjamin Peterson
2012/5/27 Nick Coghlan :
> So, I'm currently trying to fix the regression in handling __class__
> references in 3.3. The first step in this is unwinding the name change
> for the closure reference so it goes back to using "__class__"
> (instead of "@__class__") before finding a different way to fix
> #12370.
>
> As near as I can tell, my efforts are getting killed by the frozen
> instance of importlib: if I make the change in the straightforward
> fashion, the frozen copy of FindLoader.load_module() uses
> zero-argument super(), which tries to look up "@__class__", which
> fails, which means initialisation goes pear-shaped.
>
> I'm going to fix it in this case by tweaking importlib._bootstrap to
> avoid using zero-argument super() (with an unmodified core) before
> applying the changes, but yeah, be warned that you're in for some fun
> when tinkering with any construct used by importlib._bootstrap and end
> up doing something that involves changing the PYC magic number.

Nasty! Perhaps freeze_importlib.py could be rewritten in C, so
importlib could be recompiled when the compiler changes?


-- 
Regards,
Benjamin
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Hacking on the compiler in ways that break the frozen instance of importlib...

2012-05-27 Thread martin

Nasty! Perhaps freeze_importlib.py could be rewritten in C, so
importlib could be recompiled when the compiler changes?


Or we support bootstrapping from the source file, e.g. with an
environment variable BOOTSTRAP_PY which points to the _bootstrap.py
source.

Regards,
Martin


___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposal for better SSL errors

2012-05-27 Thread Antoine Pitrou
On Sat, 26 May 2012 19:31:55 -0700
"Gregory P. Smith"  wrote:
> 
> There is a long term caveat to the overall approach: It still leaves the
> exception details being OpenSSL specific.  If someone wants to ditch
> OpenSSL and use something else such as NSS (for example) in a future _ssl
> implementation what would its exception error info story look like?

That's a general issue with the ssl module. Unless we come up with our
own API and abstraction layer (which has a cost in design effort and
risks), we're following the OpenSSL architecture (e.g. the SSLContext
idea).

Regards

Antoine.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposal for better SSL errors

2012-05-27 Thread Antoine Pitrou
On Sun, 27 May 2012 12:00:57 +1000
Cameron Simpson  wrote:
> On 26May2012 21:28, Antoine Pitrou  wrote:
> | Not only does the error string contain more valuable information (the
> | mnemonics "SSL" and "CERTIFICATE_VERIFY_FAILED" indicate, respectively,
> | in which subpart of OpenSSL and which precise error occurred), but they
> | are also introspectable:
> | 
> | >>> e = sys.last_value
> | >>> e.library
> | 'SSL'
> | >>> e.reason
> | 'CERTIFICATE_VERIFY_FAILED'
> | 
> | (these mnemonics correspond to OpenSSL's own #define'd numeric codes. I
> | find it more Pythonic to expose the mnemonics than the numbers, though.
> | Of course, the numbers <-> mnemnonics mappings can be separately
> | exposed)
> 
> Would you be inclined to exposed both? Eg add .ssl_errno (or whatever
> short name is conventionally used in the SSL library itself, just as
> "errno" matches the POSIX error code name).

OpenSSL has a diversity of error codes. In this case there's the result
code returned by OpenSSL's SSL_get_error(), which is 1 (SSL_ERROR_SSL)
and is already recorded as "errno" (see below). There's the reason,
as returned by OpenSSL's ERR_get_reason(), which is
SSL_R_CERTIFICATE_VERIFY_FAILED. And I'm sure other oddities are
lurking.

> | You'll note there is still a "Errno 5" in that error message; I don't
> | really know what to do with it. Hard-wiring the errno attribute to
> | something like None *might* break existing software, although that
> | would be unlikely since the current errno value is quite meaningless
> | and confusing (it has nothing to do with POSIX errnos).
> 
> It is EIO ("I/O error"), and not inappropriate for a communictions failure.

That's a nice coincidence, but it's actually an OpenSSL-specific code.
Also, there's a bug in the current patch, the right value should be 1
(SSL_ERROR_SSL) not 5.

That said, I remember there's legacy code doing things like:
except SSLError as e:
if e.args[0] == SSL_ERROR_WANT_READ: ...

so we can't ditch the errno, although in 3.3 you would write:
except SSLWantReadError: ...

Regards

Antoine.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Hacking on the compiler in ways that break the frozen instance of importlib...

2012-05-27 Thread Georg Brandl
Am 27.05.2012 09:43, schrieb Nick Coghlan:
> So, I'm currently trying to fix the regression in handling __class__
> references in 3.3. The first step in this is unwinding the name change
> for the closure reference so it goes back to using "__class__"
> (instead of "@__class__") before finding a different way to fix
> #12370.
> 
> As near as I can tell, my efforts are getting killed by the frozen
> instance of importlib: if I make the change in the straightforward
> fashion, the frozen copy of FindLoader.load_module() uses
> zero-argument super(), which tries to look up "@__class__", which
> fails, which means initialisation goes pear-shaped.
> 
> I'm going to fix it in this case by tweaking importlib._bootstrap to
> avoid using zero-argument super() (with an unmodified core) before
> applying the changes, but yeah, be warned that you're in for some fun
> when tinkering with any construct used by importlib._bootstrap and end
> up doing something that involves changing the PYC magic number.

I hate to say it, but: I told y'all so :)

http://mail.python.org/pipermail/python-dev/2012-April/118790.html

Georg

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Hacking on the compiler in ways that break the frozen instance of importlib...

2012-05-27 Thread Antoine Pitrou
On Sun, 27 May 2012 10:13:17 +0200
mar...@v.loewis.de wrote:
> > Nasty! Perhaps freeze_importlib.py could be rewritten in C, so
> > importlib could be recompiled when the compiler changes?
> 
> Or we support bootstrapping from the source file, e.g. with an
> environment variable BOOTSTRAP_PY which points to the _bootstrap.py
> source.

I've opened http://bugs.python.org/issue14928 and made it a release
blocker.

Regards

Antoine.


___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] Proposal for better SSL errors

2012-05-27 Thread Cameron Simpson
On 27May2012 11:29, Antoine Pitrou  wrote:
| On Sun, 27 May 2012 12:00:57 +1000
| Cameron Simpson  wrote:
| > On 26May2012 21:28, Antoine Pitrou  wrote:
| > | You'll note there is still a "Errno 5" in that error message; I don't
| > | really know what to do with it. Hard-wiring the errno attribute to
| > | something like None *might* break existing software, although that
| > | would be unlikely since the current errno value is quite meaningless
| > | and confusing (it has nothing to do with POSIX errnos).
| > 
| > It is EIO ("I/O error"), and not inappropriate for a communictions failure.
| 
| That's a nice coincidence, but it's actually an OpenSSL-specific code.

Oh.
-- 
Cameron Simpson  DoD#743
http://www.cskk.ezoshosting.com/cs/

Do not taunt Happy Fun Coder.
___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com


Re: [Python-Dev] cpython (3.2): Issue12510: Attempting to get invalid tooltip no longer closes Idle.

2012-05-27 Thread Georg Brandl
Am 28.05.2012 03:55, schrieb terry.reedy:
> http://hg.python.org/cpython/rev/4a7582866735
> changeset:   77195:4a7582866735
> branch:  3.2
> parent:  77189:6737c2ca98ee
> user:Terry Jan Reedy 
> date:Sun May 27 21:29:17 2012 -0400
> summary:
>   Issue12510: Attempting to get invalid tooltip no longer closes Idle.
> Original patch by Roger Serwy.
> 
> files:
>   Lib/idlelib/CallTips.py |  9 ++---
>   Misc/NEWS   |  3 +++
>   2 files changed, 9 insertions(+), 3 deletions(-)
> 
> 
> diff --git a/Lib/idlelib/CallTips.py b/Lib/idlelib/CallTips.py
> --- a/Lib/idlelib/CallTips.py
> +++ b/Lib/idlelib/CallTips.py
> @@ -110,7 +110,9 @@
>  namespace.update(__main__.__dict__)
>  try:
>  return eval(name, namespace)
> -except (NameError, AttributeError):
> +# any exception is possible if evalfuncs True in open_calltip
> +# at least Syntax, Name, Attribute, Index, and Key E. if not

Is something missing here?  The comment text seems cut off.

> +except:
>  return None

"except Exception" may be better here.

Georg

___
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com