#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.
This commit is contained in:
R David Murray 2011-06-18 20:21:09 -04:00
parent 50ae84e727
commit afc9a5eaa1
3 changed files with 49 additions and 51 deletions

View File

@ -13,7 +13,6 @@ the package, and perhaps a particular module inside it.
__revision__ = "$Id$" __revision__ = "$Id$"
from _curses import * from _curses import *
from curses.wrapper import wrapper
import os as _os import os as _os
import sys as _sys import sys as _sys
@ -57,3 +56,48 @@ try:
has_key has_key
except NameError: except NameError:
from has_key import has_key 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()

View File

@ -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()

View File

@ -193,6 +193,10 @@ Core and Builtins
Library 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 - 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 passed to it is a Header object, and Header/make_header no longer fail
if given binary unknown-8bit input. if given binary unknown-8bit input.