[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-checkins mailing list