Spaces:
Running
Running
""" | |
The objects used by the site module to add custom builtins. | |
""" | |
# Those objects are almost immortal and they keep a reference to their module | |
# globals. Defining them in the site module would keep too many references | |
# alive. | |
# Note this means this module should also avoid keep things alive in its | |
# globals. | |
import sys | |
class Quitter(object): | |
def __init__(self, name, eof): | |
self.name = name | |
self.eof = eof | |
def __repr__(self): | |
return 'Use %s() or %s to exit' % (self.name, self.eof) | |
def __call__(self, code=None): | |
# Shells like IDLE catch the SystemExit, but listen when their | |
# stdin wrapper is closed. | |
try: | |
sys.stdin.close() | |
except: | |
pass | |
raise SystemExit(code) | |
class _Printer(object): | |
"""interactive prompt objects for printing the license text, a list of | |
contributors and the copyright notice.""" | |
MAXLINES = 23 | |
def __init__(self, name, data, files=(), dirs=()): | |
import os | |
self.__name = name | |
self.__data = data | |
self.__lines = None | |
self.__filenames = [os.path.join(dir, filename) | |
for dir in dirs | |
for filename in files] | |
def __setup(self): | |
if self.__lines: | |
return | |
data = None | |
for filename in self.__filenames: | |
try: | |
with open(filename, encoding='utf-8') as fp: | |
data = fp.read() | |
break | |
except OSError: | |
pass | |
if not data: | |
data = self.__data | |
self.__lines = data.split('\n') | |
self.__linecnt = len(self.__lines) | |
def __repr__(self): | |
self.__setup() | |
if len(self.__lines) <= self.MAXLINES: | |
return "\n".join(self.__lines) | |
else: | |
return "Type %s() to see the full %s text" % ((self.__name,)*2) | |
def __call__(self): | |
self.__setup() | |
prompt = 'Hit Return for more, or q (and Return) to quit: ' | |
lineno = 0 | |
while 1: | |
try: | |
for i in range(lineno, lineno + self.MAXLINES): | |
print(self.__lines[i]) | |
except IndexError: | |
break | |
else: | |
lineno += self.MAXLINES | |
key = None | |
while key is None: | |
key = input(prompt) | |
if key not in ('', 'q'): | |
key = None | |
if key == 'q': | |
break | |
class _Helper(object): | |
"""Define the builtin 'help'. | |
This is a wrapper around pydoc.help that provides a helpful message | |
when 'help' is typed at the Python interactive prompt. | |
Calling help() at the Python prompt starts an interactive help session. | |
Calling help(thing) prints help for the python object 'thing'. | |
""" | |
def __repr__(self): | |
return "Type help() for interactive help, " \ | |
"or help(object) for help about object." | |
def __call__(self, *args, **kwds): | |
import pydoc | |
return pydoc.help(*args, **kwds) | |