[Python-Dev] [Python-checkins] cpython: #6771: Move wrapper function into init and eliminate wrapper module (original) (raw)

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 @@ haskey  except NameError: from haskey import haskey + +# 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.KEYLEFT will be returned +        stdscr.keypad(1) + +        # Start color, too.  Harmless if the terminal doesn't have +        # color; user can test with hascolor() later on.  The try/catch +        # works around a minor bit of over-conscientiousness in the curses +        # module -- the error return from C startcolor() is ignorable. +        try: +            startcolor() +        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.KEYLEFT will be returned -        stdscr.keypad(1) - -        # Start color, too.  Harmless if the terminal doesn't have -        # color; user can test with hascolor() later on.  The try/catch -        # works around a minor bit of over-conscientiousness in the curses -        # module -- the error return from C startcolor() is ignorable. -        try: -            curses.startcolor() -        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.decodeheader no longer fails if the header passed to it is a Header object, and Header/makeheader 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