123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- """
- 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)
|