Re: [Python-Dev] [Python-checkins] cpython: #6771: Move wrapper function into __init__ and eliminate wrapper module
Does this really need to be a bare except? On Sat, Jun 18, 2011 at 8:21 PM, r.david.murray <python-checkins@python.org> wrote:
http://hg.python.org/cpython/rev/9c96c3adbcd1 changeset: 70867:9c96c3adbcd1 user: R David Murray <rdmurray@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@python.org http://mail.python.org/mailman/listinfo/python-checkins
On Sun, 19 Jun 2011 15:40:01 -0400, Jim Jewett <jimjjewett@gmail.com> wrote:
Does this really need to be a bare except?
No, but that's a separate bug report, which you are welcome to file. The issue I closed was about moving the existing code. -- R. David Murray http://www.bitdance.com
participants (2)
-
Jim Jewett
-
R. David Murray