Server: appserver-7f0f8755-nginx-15961cad18524ec5a9db05f2a6a7e440
Current directory: /usr/lib/python3.11
Software: nginx/1.27.5
Shell Command
Create a new file
Upload file
File: rlcompleter.py
"""Word completion for GNU readline. The completer completes keywords, built-ins and globals in a selectable namespace (which defaults to __main__); when completing NAME.NAME..., it evaluates (!) the expression up to the last dot and completes its attributes. It's very cool to do "import sys" type "sys.", hit the completion key (twice), and see the list of names defined by the sys module! Tip: to use the tab key as the completion key, call readline.parse_and_bind("tab: complete") Notes: - Exceptions raised by the completer function are *ignored* (and generally cause the completion to fail). This is a feature -- since readline sets the tty device in raw (or cbreak) mode, printing a traceback wouldn't work well without some complicated hoopla to save, reset and restore the tty state. - The evaluation of the NAME.NAME... form may cause arbitrary application defined code to be executed if an object with a __getattr__ hook is found. Since it is the responsibility of the application (or the user) to enable this feature, I consider this an acceptable risk. More complicated expressions (e.g. function calls or indexing operations) are *not* evaluated. - When the original stdin is not a tty device, GNU readline is never used, and this module (and the readline module) are silently inactive. """ import atexit import builtins import inspect import keyword import re import __main__ __all__ = ["Completer"] class Completer: def __init__(self, namespace = None): """Create a new completer for the command line. Completer([namespace]) -> completer instance. If unspecified, the default namespace where completions are performed is __main__ (technically, __main__.__dict__). Namespaces should be given as dictionaries. Completer instances should be used as the completion mechanism of readline via the set_completer() call: readline.set_completer(Completer(my_namespace).complete) """ if namespace and not isinstance(namespace, dict): raise TypeError('namespace must be a dictionary') # Don't bind to namespace quite yet, but flag whether the user wants a # specific namespace or to use __main__.__dict__. This will allow us # to bind to __main__.__dict__ at completion time, not now. if namespace is None: self.use_main_ns = 1 else: self.use_main_ns = 0 self.namespace = namespace def complete(self, text, state): """Return the next possible completion for 'text'. This is called successively with state == 0, 1, 2, ... until it returns None. The completion should begin with 'text'. """ if self.use_main_ns: self.namespace = __main__.__dict__ if not text.strip(): if state == 0: if _readline_available: readline.insert_text('\t') readline.redisplay() return '' else: return '\t' else: return None if state == 0: if "." in text: self.matches = self.attr_matches(text) else: self.matches = self.global_matches(text) try: return self.matches[state] except IndexError: return None def _callable_postfix(self, val, word): if callable(val): word += "(" try: if not inspect.signature(val).parameters: word += ")" except ValueError: pass return word def global_matches(self, text): """Compute matches when text is a simple name. Return a list of all keywords, built-in functions and names currently defined in self.namespace that match. """ matches = [] seen = {"__builtins__"} n = len(text) for word in keyword.kwlist + keyword.softkwlist: if word[:n] == text: seen.add(word) if word in {'finally', 'try'}: word = word + ':' elif word not in {'False', 'None', 'True', 'break', 'continue', 'pass', 'else', '_'}: word = word + ' ' matches.append(word) for nspace in [self.namespace, builtins.__dict__]: for word, val in nspace.items(): if word[:n] == text and word not in seen: seen.add(word) matches.append(self._callable_postfix(val, word)) return matches def attr_matches(self, text): """Compute matches when text contains a dot. Assuming the text is of the form NAME.NAME....[NAME], and is evaluable in self.namespace, it will be evaluated and its attributes (as revealed by dir()) are used as possible completions. (For class instances, class members are also considered.) WARNING: this can still invoke arbitrary C code, if an object with a __getattr__ hook is evaluated. """ m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text) if not m: return [] expr, attr = m.group(1, 3) try: thisobject = eval(expr, self.namespace) except Exception: return [] # get the content of the object, except __builtins__ words = set(dir(thisobject)) words.discard("__builtins__") if hasattr(thisobject, '__class__'): words.add('__class__') words.update(get_class_members(thisobject.__class__)) matches = [] n = len(attr) if attr == '': noprefix = '_' elif attr == '_': noprefix = '__' else: noprefix = None while True: for word in words: if (word[:n] == attr and not (noprefix and word[:n+1] == noprefix)): match = "%s.%s" % (expr, word) if isinstance(getattr(type(thisobject), word, None), property): # bpo-44752: thisobject.word is a method decorated by # `@property`. What follows applies a postfix if # thisobject.word is callable, but know we know that # this is not callable (because it is a property). # Also, getattr(thisobject, word) will evaluate the # property method, which is not desirable. matches.append(match) continue if (value := getattr(thisobject, word, None)) is not None: matches.append(self._callable_postfix(value, match)) else: matches.append(match) if matches or not noprefix: break if noprefix == '_': noprefix = '__' else: noprefix = None matches.sort() return matches def get_class_members(klass): ret = dir(klass) if hasattr(klass,'__bases__'): for base in klass.__bases__: ret = ret + get_class_members(base) return ret try: import readline except ImportError: _readline_available = False else: readline.set_completer(Completer().complete) # Release references early at shutdown (the readline module's # contents are quasi-immortal, and the completer function holds a # reference to globals). atexit.register(lambda: readline.set_completer(None)) _readline_available = True
.
204 Items
Change directory
Remove directory
Rename directory
..
72 Items
Change directory
Remove directory
Rename directory
EXTERNALLY-MANAGED
0.63 KB
Edit
Delete
Copy
Move
Remame
LICENSE.txt
13.61 KB
Edit
Delete
Copy
Move
Remame
__future__.py
5.1 KB
Edit
Delete
Copy
Move
Remame
__hello__.py
0.22 KB
Edit
Delete
Copy
Move
Remame
__phello__
3 Items
Change directory
Remove directory
Rename directory
__pycache__
171 Items
Change directory
Remove directory
Rename directory
_aix_support.py
3.31 KB
Edit
Delete
Copy
Move
Remame
_bootsubprocess.py
2.61 KB
Edit
Delete
Copy
Move
Remame
_collections_abc.py
29.49 KB
Edit
Delete
Copy
Move
Remame
_compat_pickle.py
8.56 KB
Edit
Delete
Copy
Move
Remame
_compression.py
5.55 KB
Edit
Delete
Copy
Move
Remame
_distutils_system_mod.py
6.16 KB
Edit
Delete
Copy
Move
Remame
_markupbase.py
14.31 KB
Edit
Delete
Copy
Move
Remame
_osx_support.py
21.28 KB
Edit
Delete
Copy
Move
Remame
_py_abc.py
6.04 KB
Edit
Delete
Copy
Move
Remame
_pydecimal.py
223.83 KB
Edit
Delete
Copy
Move
Remame
_pyio.py
91.83 KB
Edit
Delete
Copy
Move
Remame
_sitebuiltins.py
3.05 KB
Edit
Delete
Copy
Move
Remame
_strptime.py
24.68 KB
Edit
Delete
Copy
Move
Remame
_sysconfigdata__linux_x86_64-linux-gnu.py
42.36 KB
Edit
Delete
Copy
Move
Remame
_sysconfigdata__x86_64-linux-gnu.py
42.36 KB
Edit
Delete
Copy
Move
Remame
_threading_local.py
7.05 KB
Edit
Delete
Copy
Move
Remame
_weakrefset.py
5.75 KB
Edit
Delete
Copy
Move
Remame
abc.py
6.37 KB
Edit
Delete
Copy
Move
Remame
aifc.py
33.41 KB
Edit
Delete
Copy
Move
Remame
antigravity.py
0.49 KB
Edit
Delete
Copy
Move
Remame
argparse.py
97.28 KB
Edit
Delete
Copy
Move
Remame
ast.py
59.25 KB
Edit
Delete
Copy
Move
Remame
asynchat.py
11.3 KB
Edit
Delete
Copy
Move
Remame
asyncio
34 Items
Change directory
Remove directory
Rename directory
asyncore.py
19.83 KB
Edit
Delete
Copy
Move
Remame
base64.py
20.53 KB
Edit
Delete
Copy
Move
Remame
bdb.py
31.59 KB
Edit
Delete
Copy
Move
Remame
bisect.py
3.06 KB
Edit
Delete
Copy
Move
Remame
bz2.py
11.57 KB
Edit
Delete
Copy
Move
Remame
cProfile.py
6.19 KB
Edit
Delete
Copy
Move
Remame
calendar.py
24.17 KB
Edit
Delete
Copy
Move
Remame
cgi.py
33.61 KB
Edit
Delete
Copy
Move
Remame
cgitb.py
12.13 KB
Edit
Delete
Copy
Move
Remame
chunk.py
5.37 KB
Edit
Delete
Copy
Move
Remame
cmd.py
14.52 KB
Edit
Delete
Copy
Move
Remame
code.py
10.37 KB
Edit
Delete
Copy
Move
Remame
codecs.py
35.85 KB
Edit
Delete
Copy
Move
Remame
codeop.py
5.47 KB
Edit
Delete
Copy
Move
Remame
collections
3 Items
Change directory
Remove directory
Rename directory
colorsys.py
3.93 KB
Edit
Delete
Copy
Move
Remame
compileall.py
19.78 KB
Edit
Delete
Copy
Move
Remame
concurrent
3 Items
Change directory
Remove directory
Rename directory
configparser.py
53.96 KB
Edit
Delete
Copy
Move
Remame
contextlib.py
26.44 KB
Edit
Delete
Copy
Move
Remame
contextvars.py
0.13 KB
Edit
Delete
Copy
Move
Remame
copy.py
8.48 KB
Edit
Delete
Copy
Move
Remame
copyreg.py
7.5 KB
Edit
Delete
Copy
Move
Remame
crypt.py
3.82 KB
Edit
Delete
Copy
Move
Remame
csv.py
15.65 KB
Edit
Delete
Copy
Move
Remame
ctypes
6 Items
Change directory
Remove directory
Rename directory
curses
6 Items
Change directory
Remove directory
Rename directory
dataclasses.py
56.5 KB
Edit
Delete
Copy
Move
Remame
datetime.py
89.85 KB
Edit
Delete
Copy
Move
Remame
dbm
5 Items
Change directory
Remove directory
Rename directory
decimal.py
0.31 KB
Edit
Delete
Copy
Move
Remame
difflib.py
81.36 KB
Edit
Delete
Copy
Move
Remame
dis.py
28.28 KB
Edit
Delete
Copy
Move
Remame
distutils
31 Items
Change directory
Remove directory
Rename directory
doctest.py
102.71 KB
Edit
Delete
Copy
Move
Remame
email
23 Items
Change directory
Remove directory
Rename directory
encodings
123 Items
Change directory
Remove directory
Rename directory
enum.py
76.81 KB
Edit
Delete
Copy
Move
Remame
filecmp.py
9.94 KB
Edit
Delete
Copy
Move
Remame
fileinput.py
15.33 KB
Edit
Delete
Copy
Move
Remame
fnmatch.py
5.86 KB
Edit
Delete
Copy
Move
Remame
fractions.py
28 KB
Edit
Delete
Copy
Move
Remame
ftplib.py
34.66 KB
Edit
Delete
Copy
Move
Remame
functools.py
37.51 KB
Edit
Delete
Copy
Move
Remame
genericpath.py
4.86 KB
Edit
Delete
Copy
Move
Remame
getopt.py
7.31 KB
Edit
Delete
Copy
Move
Remame
getpass.py
5.85 KB
Edit
Delete
Copy
Move
Remame
gettext.py
20.8 KB
Edit
Delete
Copy
Move
Remame
glob.py
8.48 KB
Edit
Delete
Copy
Move
Remame
graphlib.py
9.43 KB
Edit
Delete
Copy
Move
Remame
gzip.py
23.51 KB
Edit
Delete
Copy
Move
Remame
hashlib.py
11.49 KB
Edit
Delete
Copy
Move
Remame
heapq.py
22.48 KB
Edit
Delete
Copy
Move
Remame
hmac.py
7.54 KB
Edit
Delete
Copy
Move
Remame
html
4 Items
Change directory
Remove directory
Rename directory
http
6 Items
Change directory
Remove directory
Rename directory
imaplib.py
53.58 KB
Edit
Delete
Copy
Move
Remame
imghdr.py
3.86 KB
Edit
Delete
Copy
Move
Remame
imp.py
10.36 KB
Edit
Delete
Copy
Move
Remame
importlib
12 Items
Change directory
Remove directory
Rename directory
inspect.py
121.28 KB
Edit
Delete
Copy
Move
Remame
io.py
4.14 KB
Edit
Delete
Copy
Move
Remame
ipaddress.py
76.45 KB
Edit
Delete
Copy
Move
Remame
json
6 Items
Change directory
Remove directory
Rename directory
keyword.py
1.04 KB
Edit
Delete
Copy
Move
Remame
lib-dynload
46 Items
Change directory
Remove directory
Rename directory
lib2to3
16 Items
Change directory
Remove directory
Rename directory
linecache.py
5.56 KB
Edit
Delete
Copy
Move
Remame
locale.py
77.15 KB
Edit
Delete
Copy
Move
Remame
logging
4 Items
Change directory
Remove directory
Rename directory
lzma.py
12.97 KB
Edit
Delete
Copy
Move
Remame
mailbox.py
76.95 KB
Edit
Delete
Copy
Move
Remame
mailcap.py
9.15 KB
Edit
Delete
Copy
Move
Remame
mimetypes.py
22.26 KB
Edit
Delete
Copy
Move
Remame
modulefinder.py
23.14 KB
Edit
Delete
Copy
Move
Remame
multiprocessing
23 Items
Change directory
Remove directory
Rename directory
netrc.py
6.77 KB
Edit
Delete
Copy
Move
Remame
nntplib.py
40.12 KB
Edit
Delete
Copy
Move
Remame
ntpath.py
28.95 KB
Edit
Delete
Copy
Move
Remame
nturl2path.py
2.82 KB
Edit
Delete
Copy
Move
Remame
numbers.py
10.11 KB
Edit
Delete
Copy
Move
Remame
opcode.py
10.2 KB
Edit
Delete
Copy
Move
Remame
operator.py
10.71 KB
Edit
Delete
Copy
Move
Remame
optparse.py
58.95 KB
Edit
Delete
Copy
Move
Remame
os.py
38.58 KB
Edit
Delete
Copy
Move
Remame
pathlib.py
47.44 KB
Edit
Delete
Copy
Move
Remame
pdb.py
62.4 KB
Edit
Delete
Copy
Move
Remame
pickle.py
63.43 KB
Edit
Delete
Copy
Move
Remame
pickletools.py
91.29 KB
Edit
Delete
Copy
Move
Remame
pipes.py
8.77 KB
Edit
Delete
Copy
Move
Remame
pkgutil.py
24.04 KB
Edit
Delete
Copy
Move
Remame
platform.py
41.28 KB
Edit
Delete
Copy
Move
Remame
plistlib.py
27.59 KB
Edit
Delete
Copy
Move
Remame
poplib.py
14.84 KB
Edit
Delete
Copy
Move
Remame
posixpath.py
16.61 KB
Edit
Delete
Copy
Move
Remame
pprint.py
23.92 KB
Edit
Delete
Copy
Move
Remame
profile.py
22.33 KB
Edit
Delete
Copy
Move
Remame
pstats.py
28.67 KB
Edit
Delete
Copy
Move
Remame
pty.py
5.09 KB
Edit
Delete
Copy
Move
Remame
py_compile.py
7.69 KB
Edit
Delete
Copy
Move
Remame
pyclbr.py
11.13 KB
Edit
Delete
Copy
Move
Remame
pydoc.py
106.57 KB
Edit
Delete
Copy
Move
Remame
pydoc_data
4 Items
Change directory
Remove directory
Rename directory
queue.py
11.23 KB
Edit
Delete
Copy
Move
Remame
quopri.py
7.1 KB
Edit
Delete
Copy
Move
Remame
random.py
31.41 KB
Edit
Delete
Copy
Move
Remame
re
6 Items
Change directory
Remove directory
Rename directory
reprlib.py
5.31 KB
Edit
Delete
Copy
Move
Remame
rlcompleter.py
7.64 KB
Edit
Delete
Copy
Move
Remame
runpy.py
12.85 KB
Edit
Delete
Copy
Move
Remame
sched.py
6.2 KB
Edit
Delete
Copy
Move
Remame
secrets.py
1.98 KB
Edit
Delete
Copy
Move
Remame
selectors.py
19.03 KB
Edit
Delete
Copy
Move
Remame
shelve.py
8.36 KB
Edit
Delete
Copy
Move
Remame
shlex.py
13.18 KB
Edit
Delete
Copy
Move
Remame
shutil.py
53.58 KB
Edit
Delete
Copy
Move
Remame
signal.py
2.38 KB
Edit
Delete
Copy
Move
Remame
site.py
23.17 KB
Edit
Delete
Copy
Move
Remame
sitecustomize.py
0.15 KB
Edit
Delete
Copy
Move
Remame
smtpd.py
30.43 KB
Edit
Delete
Copy
Move
Remame
smtplib.py
44.35 KB
Edit
Delete
Copy
Move
Remame
sndhdr.py
7.27 KB
Edit
Delete
Copy
Move
Remame
socket.py
36.41 KB
Edit
Delete
Copy
Move
Remame
socketserver.py
26.94 KB
Edit
Delete
Copy
Move
Remame
sqlite3
4 Items
Change directory
Remove directory
Rename directory
sre_compile.py
0.23 KB
Edit
Delete
Copy
Move
Remame
sre_constants.py
0.23 KB
Edit
Delete
Copy
Move
Remame
sre_parse.py
0.22 KB
Edit
Delete
Copy
Move
Remame
ssl.py
52.71 KB
Edit
Delete
Copy
Move
Remame
stat.py
5.36 KB
Edit
Delete
Copy
Move
Remame
statistics.py
46.59 KB
Edit
Delete
Copy
Move
Remame
string.py
11.51 KB
Edit
Delete
Copy
Move
Remame
stringprep.py
12.61 KB
Edit
Delete
Copy
Move
Remame
struct.py
0.25 KB
Edit
Delete
Copy
Move
Remame
subprocess.py
83.74 KB
Edit
Delete
Copy
Move
Remame
sunau.py
18.05 KB
Edit
Delete
Copy
Move
Remame
symtable.py
10.13 KB
Edit
Delete
Copy
Move
Remame
sysconfig.py
31.35 KB
Edit
Delete
Copy
Move
Remame
tabnanny.py
11.03 KB
Edit
Delete
Copy
Move
Remame
tarfile.py
95.25 KB
Edit
Delete
Copy
Move
Remame
telnetlib.py
22.75 KB
Edit
Delete
Copy
Move
Remame
tempfile.py
34.66 KB
Edit
Delete
Copy
Move
Remame
test
10 Items
Change directory
Remove directory
Rename directory
textwrap.py
19.26 KB
Edit
Delete
Copy
Move
Remame
this.py
0.98 KB
Edit
Delete
Copy
Move
Remame
threading.py
56.46 KB
Edit
Delete
Copy
Move
Remame
timeit.py
13.18 KB
Edit
Delete
Copy
Move
Remame
token.py
2.33 KB
Edit
Delete
Copy
Move
Remame
tokenize.py
25.72 KB
Edit
Delete
Copy
Move
Remame
tomllib
5 Items
Change directory
Remove directory
Rename directory
trace.py
28.52 KB
Edit
Delete
Copy
Move
Remame
traceback.py
37.52 KB
Edit
Delete
Copy
Move
Remame
tracemalloc.py
17.62 KB
Edit
Delete
Copy
Move
Remame
tty.py
0.86 KB
Edit
Delete
Copy
Move
Remame
turtle.py
140.97 KB
Edit
Delete
Copy
Move
Remame
types.py
9.83 KB
Edit
Delete
Copy
Move
Remame
typing.py
114.35 KB
Edit
Delete
Copy
Move
Remame
unittest
14 Items
Change directory
Remove directory
Rename directory
urllib
7 Items
Change directory
Remove directory
Rename directory
uu.py
6.86 KB
Edit
Delete
Copy
Move
Remame
uuid.py
26.95 KB
Edit
Delete
Copy
Move
Remame
venv
4 Items
Change directory
Remove directory
Rename directory
warnings.py
20.53 KB
Edit
Delete
Copy
Move
Remame
wave.py
21.33 KB
Edit
Delete
Copy
Move
Remame
weakref.py
21.01 KB
Edit
Delete
Copy
Move
Remame
webbrowser.py
24.5 KB
Edit
Delete
Copy
Move
Remame
wsgiref
8 Items
Change directory
Remove directory
Rename directory
xdrlib.py
5.84 KB
Edit
Delete
Copy
Move
Remame
xml
6 Items
Change directory
Remove directory
Rename directory
xmlrpc
4 Items
Change directory
Remove directory
Rename directory
zipapp.py
7.36 KB
Edit
Delete
Copy
Move
Remame
zipfile.py
90.81 KB
Edit
Delete
Copy
Move
Remame
zipimport.py
30.17 KB
Edit
Delete
Copy
Move
Remame
zoneinfo
5 Items
Change directory
Remove directory
Rename directory