[Python-Dev] [Python-checkins] cpython: #6771: Move wrapper function into __init__ and eliminate wrapper module
Jim Jewett
jimjjewett at gmail.com
Sun Jun 19 21:40:01 CEST 2011
Does this really need to be a bare except?
On Sat, Jun 18, 2011 at 8:21 PM, r.david.murray
<python-checkins at python.org> wrote:
> http://hg.python.org/cpython/rev/9c96c3adbcd1
> changeset: 70867:9c96c3adbcd1
> user: R David Murray <rdmurray at bitdance.com>
> date: Sat Jun 18 20:21:09 2011 -0400
> summary:
> #6771: Move wrapper function into __init__ and eliminate wrapper module
>
> Andrew agreed in the issue that eliminating the module file made sense.
> Wrapper has only been exposed as a function, and so there is no (easy)
> way to access the wrapper module, which in any case only had the one
> function in it. Since __init__ already contains a couple wrapper
> functions, it seems to make sense to just move wrapper there instead of
> importing it from a single function module.
>
> files:
> Lib/curses/__init__.py | 46 +++++++++++++++++++++++++++-
> Lib/curses/wrapper.py | 50 ------------------------------
> Misc/NEWS | 4 ++
> 3 files changed, 49 insertions(+), 51 deletions(-)
>
>
> diff --git a/Lib/curses/__init__.py b/Lib/curses/__init__.py
> --- a/Lib/curses/__init__.py
> +++ b/Lib/curses/__init__.py
> @@ -13,7 +13,6 @@
> __revision__ = "$Id$"
>
> from _curses import *
> -from curses.wrapper import wrapper
> import os as _os
> import sys as _sys
>
> @@ -57,3 +56,48 @@
> has_key
> except NameError:
> from has_key import has_key
> +
> +# Wrapper for the entire curses-based application. Runs a function which
> +# should be the rest of your curses-based application. If the application
> +# raises an exception, wrapper() will restore the terminal to a sane state so
> +# you can read the resulting traceback.
> +
> +def wrapper(func, *args, **kwds):
> + """Wrapper function that initializes curses and calls another function,
> + restoring normal keyboard/screen behavior on error.
> + The callable object 'func' is then passed the main window 'stdscr'
> + as its first argument, followed by any other arguments passed to
> + wrapper().
> + """
> +
> + try:
> + # Initialize curses
> + stdscr = initscr()
> +
> + # Turn off echoing of keys, and enter cbreak mode,
> + # where no buffering is performed on keyboard input
> + noecho()
> + cbreak()
> +
> + # In keypad mode, escape sequences for special keys
> + # (like the cursor keys) will be interpreted and
> + # a special value like curses.KEY_LEFT will be returned
> + stdscr.keypad(1)
> +
> + # Start color, too. Harmless if the terminal doesn't have
> + # color; user can test with has_color() later on. The try/catch
> + # works around a minor bit of over-conscientiousness in the curses
> + # module -- the error return from C start_color() is ignorable.
> + try:
> + start_color()
> + except:
> + pass
> +
> + return func(stdscr, *args, **kwds)
> + finally:
> + # Set everything back to normal
> + if 'stdscr' in locals():
> + stdscr.keypad(0)
> + echo()
> + nocbreak()
> + endwin()
> diff --git a/Lib/curses/wrapper.py b/Lib/curses/wrapper.py
> deleted file mode 100644
> --- a/Lib/curses/wrapper.py
> +++ /dev/null
> @@ -1,50 +0,0 @@
> -"""curses.wrapper
> -
> -Contains one function, wrapper(), which runs another function which
> -should be the rest of your curses-based application. If the
> -application raises an exception, wrapper() will restore the terminal
> -to a sane state so you can read the resulting traceback.
> -
> -"""
> -
> -import curses
> -
> -def wrapper(func, *args, **kwds):
> - """Wrapper function that initializes curses and calls another function,
> - restoring normal keyboard/screen behavior on error.
> - The callable object 'func' is then passed the main window 'stdscr'
> - as its first argument, followed by any other arguments passed to
> - wrapper().
> - """
> -
> - try:
> - # Initialize curses
> - stdscr = curses.initscr()
> -
> - # Turn off echoing of keys, and enter cbreak mode,
> - # where no buffering is performed on keyboard input
> - curses.noecho()
> - curses.cbreak()
> -
> - # In keypad mode, escape sequences for special keys
> - # (like the cursor keys) will be interpreted and
> - # a special value like curses.KEY_LEFT will be returned
> - stdscr.keypad(1)
> -
> - # Start color, too. Harmless if the terminal doesn't have
> - # color; user can test with has_color() later on. The try/catch
> - # works around a minor bit of over-conscientiousness in the curses
> - # module -- the error return from C start_color() is ignorable.
> - try:
> - curses.start_color()
> - except:
> - pass
> -
> - return func(stdscr, *args, **kwds)
> - finally:
> - # Set everything back to normal
> - if 'stdscr' in locals():
> - stdscr.keypad(0)
> - curses.echo()
> - curses.nocbreak()
> - curses.endwin()
> diff --git a/Misc/NEWS b/Misc/NEWS
> --- a/Misc/NEWS
> +++ b/Misc/NEWS
> @@ -193,6 +193,10 @@
> Library
> -------
>
> +- Issue #6771: moved the curses.wrapper function from the single-function
> + wrapper module into __init__, eliminating the module. Since __init__ was
> + already importing the function to curses.wrapper, there is no API change.
> +
> - Issue #11584: email.header.decode_header no longer fails if the header
> passed to it is a Header object, and Header/make_header no longer fail
> if given binary unknown-8bit input.
>
> --
> Repository URL: http://hg.python.org/cpython
>
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>
>
More information about the Python-Dev
mailing list