- Notifications
You must be signed in to change notification settings - Fork 31.7k
/
Copy path_sitebuiltins.py
103 lines (88 loc) · 3.04 KB
/
_sitebuiltins.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
"""
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.
importsys
classQuitter(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
raiseSystemExit(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=()):
importos
self.__name=name
self.__data=data
self.__lines=None
self.__filenames= [os.path.join(dir, filename)
fordirindirs
forfilenameinfiles]
def__setup(self):
ifself.__lines:
return
data=None
forfilenameinself.__filenames:
try:
withopen(filename, "r") asfp:
data=fp.read()
break
exceptOSError:
pass
ifnotdata:
data=self.__data
self.__lines=data.split('\n')
self.__linecnt=len(self.__lines)
def__repr__(self):
self.__setup()
iflen(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
while1:
try:
foriinrange(lineno, lineno+self.MAXLINES):
print(self.__lines[i])
exceptIndexError:
break
else:
lineno+=self.MAXLINES
key=None
whilekeyisNone:
key=input(prompt)
ifkeynotin ('', 'q'):
key=None
ifkey=='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):
importpydoc
returnpydoc.help(*args, **kwds)