Linux premium71.web-hosting.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64
LiteSpeed
Server IP : 198.187.29.8 & Your IP : 216.73.216.206
Domains :
Cant Read [ /etc/named.conf ]
User : cleahvkv
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
opt /
alt /
python312 /
lib64 /
python3.12 /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
asyncio
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
collections
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
concurrent
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
config-3.12-x86_64-linux-gnu
[ DIR ]
drwxr-xr-x
2025-05-13 10:39
ctypes
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
curses
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
dbm
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
email
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
encodings
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
ensurepip
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
html
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
http
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
importlib
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
json
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
lib-dynload
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
lib2to3
[ DIR ]
drwxr-xr-x
2025-05-13 10:41
logging
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
multiprocessing
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
pydoc_data
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
re
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
site-packages
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
sqlite3
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
tomllib
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
unittest
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
urllib
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
venv
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
wsgiref
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
xml
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
xmlrpc
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
zipfile
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
zoneinfo
[ DIR ]
drwxr-xr-x
2025-05-13 10:37
LICENSE.txt
13.61
KB
-rw-r--r--
2025-04-08 11:35
__future__.py
5.1
KB
-rw-r--r--
2025-04-25 20:47
__hello__.py
227
B
-rw-r--r--
2025-04-25 20:47
_aix_support.py
3.93
KB
-rw-r--r--
2025-04-25 20:47
_collections_abc.py
31.34
KB
-rw-r--r--
2025-04-25 20:47
_compat_pickle.py
8.56
KB
-rw-r--r--
2025-04-25 20:47
_compression.py
5.55
KB
-rw-r--r--
2025-04-25 20:47
_markupbase.py
14.31
KB
-rw-r--r--
2025-04-25 20:47
_osx_support.py
21.51
KB
-rw-r--r--
2025-04-25 20:47
_py_abc.py
6.04
KB
-rw-r--r--
2025-04-25 20:47
_pydatetime.py
89.93
KB
-rw-r--r--
2025-04-25 20:47
_pydecimal.py
221.96
KB
-rw-r--r--
2025-04-25 20:47
_pyio.py
91.4
KB
-rw-r--r--
2025-04-25 20:47
_pylong.py
10.54
KB
-rw-r--r--
2025-04-25 20:47
_sitebuiltins.py
3.05
KB
-rw-r--r--
2025-04-25 20:47
_strptime.py
27.73
KB
-rw-r--r--
2025-04-25 20:47
_sysconfigdata__linux_x86_64-linux-gnu.py
74.76
KB
-rw-r--r--
2025-04-25 20:53
_sysconfigdata_d_linux_x86_64-linux-gnu.py
74.75
KB
-rw-r--r--
2025-04-25 20:48
_threading_local.py
7.05
KB
-rw-r--r--
2025-04-25 20:47
_weakrefset.py
5.75
KB
-rw-r--r--
2025-04-25 20:47
abc.py
6.38
KB
-rw-r--r--
2025-04-25 20:47
aifc.py
33.41
KB
-rw-r--r--
2025-04-25 20:47
antigravity.py
500
B
-rw-r--r--
2025-04-25 20:47
argparse.py
98.78
KB
-rw-r--r--
2025-04-25 20:47
ast.py
62.94
KB
-rw-r--r--
2025-04-25 20:47
base64.py
20.16
KB
-rwxr-xr-x
2025-04-25 20:47
bdb.py
32.79
KB
-rw-r--r--
2025-04-25 20:47
bisect.py
3.34
KB
-rw-r--r--
2025-04-25 20:47
bz2.py
11.57
KB
-rw-r--r--
2025-04-25 20:47
cProfile.py
6.42
KB
-rwxr-xr-x
2025-04-25 20:47
calendar.py
25.26
KB
-rw-r--r--
2025-04-25 20:47
cgi.py
33.63
KB
-rwxr-xr-x
2025-04-25 20:47
cgitb.py
12.13
KB
-rw-r--r--
2025-04-25 20:47
chunk.py
5.37
KB
-rw-r--r--
2025-04-25 20:47
cmd.py
14.52
KB
-rw-r--r--
2025-04-25 20:47
code.py
10.71
KB
-rw-r--r--
2025-04-25 20:47
codecs.py
36.01
KB
-rw-r--r--
2025-04-25 20:47
codeop.py
5.77
KB
-rw-r--r--
2025-04-25 20:47
colorsys.py
3.97
KB
-rw-r--r--
2025-04-25 20:47
compileall.py
20.03
KB
-rw-r--r--
2025-04-25 20:47
configparser.py
52.53
KB
-rw-r--r--
2025-04-25 20:47
contextlib.py
26.99
KB
-rw-r--r--
2025-04-25 20:47
contextvars.py
129
B
-rw-r--r--
2025-04-25 20:47
copy.py
8.21
KB
-rw-r--r--
2025-04-25 20:47
copyreg.py
7.44
KB
-rw-r--r--
2025-04-25 20:47
crypt.py
3.82
KB
-rw-r--r--
2025-04-25 20:47
csv.py
16
KB
-rw-r--r--
2025-04-25 20:47
dataclasses.py
60.63
KB
-rw-r--r--
2025-04-25 20:47
datetime.py
268
B
-rw-r--r--
2025-04-25 20:47
decimal.py
2.74
KB
-rw-r--r--
2025-04-25 20:47
difflib.py
81.41
KB
-rw-r--r--
2025-04-25 20:47
dis.py
29.52
KB
-rw-r--r--
2025-04-25 20:47
doctest.py
104.25
KB
-rw-r--r--
2025-04-25 20:47
enum.py
79.63
KB
-rw-r--r--
2025-04-25 20:47
filecmp.py
10.14
KB
-rw-r--r--
2025-04-25 20:47
fileinput.py
15.35
KB
-rw-r--r--
2025-04-25 20:47
fnmatch.py
5.86
KB
-rw-r--r--
2025-04-25 20:47
fractions.py
37.25
KB
-rw-r--r--
2025-04-25 20:47
ftplib.py
33.92
KB
-rw-r--r--
2025-04-25 20:47
functools.py
37.05
KB
-rw-r--r--
2025-04-25 20:47
genericpath.py
5.18
KB
-rw-r--r--
2025-04-25 20:47
getopt.py
7.31
KB
-rw-r--r--
2025-04-25 20:47
getpass.py
5.85
KB
-rw-r--r--
2025-04-25 20:47
gettext.py
20.82
KB
-rw-r--r--
2025-04-25 20:47
glob.py
8.53
KB
-rw-r--r--
2025-04-25 20:47
graphlib.py
9.42
KB
-rw-r--r--
2025-04-25 20:47
gzip.py
24.81
KB
-rw-r--r--
2025-04-25 20:47
hashlib.py
9.13
KB
-rw-r--r--
2025-04-25 20:47
heapq.py
22.48
KB
-rw-r--r--
2025-04-25 20:47
hmac.py
7.54
KB
-rw-r--r--
2025-04-25 20:47
imaplib.py
52.77
KB
-rw-r--r--
2025-04-25 20:47
imghdr.py
4.29
KB
-rw-r--r--
2025-04-25 20:47
inspect.py
124.15
KB
-rw-r--r--
2025-04-25 20:47
io.py
3.5
KB
-rw-r--r--
2025-04-25 20:47
ipaddress.py
77.27
KB
-rw-r--r--
2025-04-25 20:47
keyword.py
1.05
KB
-rw-r--r--
2025-04-25 20:47
linecache.py
5.66
KB
-rw-r--r--
2025-04-25 20:47
locale.py
76.76
KB
-rw-r--r--
2025-04-25 20:47
lzma.py
12.97
KB
-rw-r--r--
2025-04-25 20:47
mailbox.py
77.06
KB
-rw-r--r--
2025-04-25 20:47
mailcap.py
9.11
KB
-rw-r--r--
2025-04-25 20:47
mimetypes.py
22.5
KB
-rw-r--r--
2025-04-25 20:47
modulefinder.py
23.14
KB
-rw-r--r--
2025-04-25 20:47
netrc.py
6.76
KB
-rw-r--r--
2025-04-25 20:47
nntplib.py
40.12
KB
-rw-r--r--
2025-04-25 20:47
ntpath.py
31.11
KB
-rw-r--r--
2025-04-25 20:47
nturl2path.py
2.32
KB
-rw-r--r--
2025-04-25 20:47
numbers.py
11.2
KB
-rw-r--r--
2025-04-25 20:47
opcode.py
12.87
KB
-rw-r--r--
2025-04-25 20:47
operator.py
10.71
KB
-rw-r--r--
2025-04-25 20:47
optparse.py
58.95
KB
-rw-r--r--
2025-04-25 20:47
os.py
39.86
KB
-rw-r--r--
2025-04-25 20:47
pathlib.py
49.86
KB
-rw-r--r--
2025-04-25 20:47
pdb.py
68.66
KB
-rwxr-xr-x
2025-04-25 20:47
pickle.py
65.34
KB
-rw-r--r--
2025-04-25 20:47
pickletools.py
91.85
KB
-rw-r--r--
2025-04-25 20:47
pipes.py
8.77
KB
-rw-r--r--
2025-04-25 20:47
pkgutil.py
17.85
KB
-rw-r--r--
2025-04-25 20:47
platform.py
42.38
KB
-rwxr-xr-x
2025-04-25 20:47
plistlib.py
27.68
KB
-rw-r--r--
2025-04-25 20:47
poplib.py
14.28
KB
-rw-r--r--
2025-04-25 20:47
posixpath.py
16.89
KB
-rw-r--r--
2025-04-25 20:47
pprint.py
23.59
KB
-rw-r--r--
2025-04-25 20:47
profile.py
22.56
KB
-rwxr-xr-x
2025-04-25 20:47
pstats.py
28.6
KB
-rw-r--r--
2025-04-25 20:47
pty.py
5.99
KB
-rw-r--r--
2025-04-25 20:47
py_compile.py
7.65
KB
-rw-r--r--
2025-04-25 20:47
pyclbr.py
11.13
KB
-rw-r--r--
2025-04-25 20:47
pydoc.py
110.86
KB
-rwxr-xr-x
2025-04-25 20:47
queue.py
11.23
KB
-rw-r--r--
2025-04-25 20:47
quopri.py
7.03
KB
-rwxr-xr-x
2025-04-25 20:47
random.py
33.88
KB
-rw-r--r--
2025-04-25 20:47
reprlib.py
6.98
KB
-rw-r--r--
2025-04-25 20:47
rlcompleter.py
7.64
KB
-rw-r--r--
2025-04-25 20:47
runpy.py
12.58
KB
-rw-r--r--
2025-04-25 20:47
sched.py
6.2
KB
-rw-r--r--
2025-04-25 20:47
secrets.py
1.94
KB
-rw-r--r--
2025-04-25 20:47
selectors.py
19.21
KB
-rw-r--r--
2025-04-25 20:47
shelve.py
8.36
KB
-rw-r--r--
2025-04-25 20:47
shlex.py
13.04
KB
-rw-r--r--
2025-04-25 20:47
shutil.py
55.43
KB
-rw-r--r--
2025-04-25 20:47
signal.py
2.44
KB
-rw-r--r--
2025-04-25 20:47
site.py
22.65
KB
-rw-r--r--
2025-04-25 20:47
smtplib.py
42.52
KB
-rwxr-xr-x
2025-04-25 20:47
sndhdr.py
7.27
KB
-rw-r--r--
2025-04-25 20:47
socket.py
36.93
KB
-rw-r--r--
2025-04-25 20:47
socketserver.py
27.41
KB
-rw-r--r--
2025-04-25 20:47
sre_compile.py
231
B
-rw-r--r--
2025-04-25 20:47
sre_constants.py
232
B
-rw-r--r--
2025-04-25 20:47
sre_parse.py
229
B
-rw-r--r--
2025-04-25 20:47
ssl.py
49.71
KB
-rw-r--r--
2025-04-25 20:47
stat.py
5.36
KB
-rw-r--r--
2025-04-25 20:47
statistics.py
49.05
KB
-rw-r--r--
2025-04-25 20:47
string.py
11.51
KB
-rw-r--r--
2025-04-25 20:47
stringprep.py
12.61
KB
-rw-r--r--
2025-04-25 20:47
struct.py
257
B
-rw-r--r--
2025-04-25 20:47
subprocess.py
86.67
KB
-rw-r--r--
2025-04-25 20:47
sunau.py
18.04
KB
-rw-r--r--
2025-04-25 20:47
symtable.py
12.18
KB
-rw-r--r--
2025-04-25 20:47
sysconfig.py
31.1
KB
-rw-r--r--
2025-04-25 20:47
tabnanny.py
11.27
KB
-rwxr-xr-x
2025-04-25 20:47
tarfile.py
105.96
KB
-rwxr-xr-x
2025-04-25 20:47
telnetlib.py
22.79
KB
-rw-r--r--
2025-04-25 20:47
tempfile.py
31.63
KB
-rw-r--r--
2025-04-25 20:47
textwrap.py
19.26
KB
-rw-r--r--
2025-04-25 20:47
this.py
1003
B
-rw-r--r--
2025-04-25 20:47
threading.py
58.79
KB
-rw-r--r--
2025-04-25 20:47
timeit.py
13.16
KB
-rwxr-xr-x
2025-04-25 20:47
token.py
2.45
KB
-rw-r--r--
2025-04-25 20:47
tokenize.py
21.06
KB
-rw-r--r--
2025-04-25 20:47
trace.py
28.68
KB
-rwxr-xr-x
2025-04-25 20:47
traceback.py
45.31
KB
-rw-r--r--
2025-04-25 20:47
tracemalloc.py
17.62
KB
-rw-r--r--
2025-04-25 20:47
tty.py
1.99
KB
-rw-r--r--
2025-04-25 20:47
types.py
10.74
KB
-rw-r--r--
2025-04-25 20:47
typing.py
116.05
KB
-rw-r--r--
2025-04-25 20:47
uu.py
7.17
KB
-rw-r--r--
2025-04-25 20:54
uuid.py
28.96
KB
-rw-r--r--
2025-04-25 20:47
warnings.py
21.4
KB
-rw-r--r--
2025-04-25 20:47
wave.py
22.24
KB
-rw-r--r--
2025-04-25 20:47
weakref.py
21.01
KB
-rw-r--r--
2025-04-25 20:47
webbrowser.py
23.19
KB
-rwxr-xr-x
2025-04-25 20:47
xdrlib.py
5.8
KB
-rw-r--r--
2025-04-25 20:47
zipapp.py
7.37
KB
-rw-r--r--
2025-04-25 20:47
zipimport.py
27.19
KB
-rw-r--r--
2025-04-25 20:47
Save
Rename
"""Interface to the compiler's internal symbol tables""" import _symtable from _symtable import (USE, DEF_GLOBAL, DEF_NONLOCAL, DEF_LOCAL, DEF_PARAM, DEF_IMPORT, DEF_BOUND, DEF_ANNOT, SCOPE_OFF, SCOPE_MASK, FREE, LOCAL, GLOBAL_IMPLICIT, GLOBAL_EXPLICIT, CELL) import weakref __all__ = ["symtable", "SymbolTable", "Class", "Function", "Symbol"] def symtable(code, filename, compile_type): """ Return the toplevel *SymbolTable* for the source code. *filename* is the name of the file with the code and *compile_type* is the *compile()* mode argument. """ top = _symtable.symtable(code, filename, compile_type) return _newSymbolTable(top, filename) class SymbolTableFactory: def __init__(self): self.__memo = weakref.WeakValueDictionary() def new(self, table, filename): if table.type == _symtable.TYPE_FUNCTION: return Function(table, filename) if table.type == _symtable.TYPE_CLASS: return Class(table, filename) return SymbolTable(table, filename) def __call__(self, table, filename): key = table, filename obj = self.__memo.get(key, None) if obj is None: obj = self.__memo[key] = self.new(table, filename) return obj _newSymbolTable = SymbolTableFactory() class SymbolTable: def __init__(self, raw_table, filename): self._table = raw_table self._filename = filename self._symbols = {} def __repr__(self): if self.__class__ == SymbolTable: kind = "" else: kind = "%s " % self.__class__.__name__ if self._table.name == "top": return "<{0}SymbolTable for module {1}>".format(kind, self._filename) else: return "<{0}SymbolTable for {1} in {2}>".format(kind, self._table.name, self._filename) def get_type(self): """Return the type of the symbol table. The values returned are 'class', 'module', 'function', 'annotation', 'TypeVar bound', 'type alias', and 'type parameter'. """ if self._table.type == _symtable.TYPE_MODULE: return "module" if self._table.type == _symtable.TYPE_FUNCTION: return "function" if self._table.type == _symtable.TYPE_CLASS: return "class" if self._table.type == _symtable.TYPE_ANNOTATION: return "annotation" if self._table.type == _symtable.TYPE_TYPE_VAR_BOUND: return "TypeVar bound" if self._table.type == _symtable.TYPE_TYPE_ALIAS: return "type alias" if self._table.type == _symtable.TYPE_TYPE_PARAM: return "type parameter" assert False, f"unexpected type: {self._table.type}" def get_id(self): """Return an identifier for the table. """ return self._table.id def get_name(self): """Return the table's name. This corresponds to the name of the class, function or 'top' if the table is for a class, function or global respectively. """ return self._table.name def get_lineno(self): """Return the number of the first line in the block for the table. """ return self._table.lineno def is_optimized(self): """Return *True* if the locals in the table are optimizable. """ return bool(self._table.type == _symtable.TYPE_FUNCTION) def is_nested(self): """Return *True* if the block is a nested class or function.""" return bool(self._table.nested) def has_children(self): """Return *True* if the block has nested namespaces. """ return bool(self._table.children) def get_identifiers(self): """Return a view object containing the names of symbols in the table. """ return self._table.symbols.keys() def lookup(self, name): """Lookup a *name* in the table. Returns a *Symbol* instance. """ sym = self._symbols.get(name) if sym is None: flags = self._table.symbols[name] namespaces = self.__check_children(name) module_scope = (self._table.name == "top") sym = self._symbols[name] = Symbol(name, flags, namespaces, module_scope=module_scope) return sym def get_symbols(self): """Return a list of *Symbol* instances for names in the table. """ return [self.lookup(ident) for ident in self.get_identifiers()] def __check_children(self, name): return [_newSymbolTable(st, self._filename) for st in self._table.children if st.name == name] def get_children(self): """Return a list of the nested symbol tables. """ return [_newSymbolTable(st, self._filename) for st in self._table.children] class Function(SymbolTable): # Default values for instance variables __params = None __locals = None __frees = None __globals = None __nonlocals = None def __idents_matching(self, test_func): return tuple(ident for ident in self.get_identifiers() if test_func(self._table.symbols[ident])) def get_parameters(self): """Return a tuple of parameters to the function. """ if self.__params is None: self.__params = self.__idents_matching(lambda x:x & DEF_PARAM) return self.__params def get_locals(self): """Return a tuple of locals in the function. """ if self.__locals is None: locs = (LOCAL, CELL) test = lambda x: ((x >> SCOPE_OFF) & SCOPE_MASK) in locs self.__locals = self.__idents_matching(test) return self.__locals def get_globals(self): """Return a tuple of globals in the function. """ if self.__globals is None: glob = (GLOBAL_IMPLICIT, GLOBAL_EXPLICIT) test = lambda x:((x >> SCOPE_OFF) & SCOPE_MASK) in glob self.__globals = self.__idents_matching(test) return self.__globals def get_nonlocals(self): """Return a tuple of nonlocals in the function. """ if self.__nonlocals is None: self.__nonlocals = self.__idents_matching(lambda x:x & DEF_NONLOCAL) return self.__nonlocals def get_frees(self): """Return a tuple of free variables in the function. """ if self.__frees is None: is_free = lambda x:((x >> SCOPE_OFF) & SCOPE_MASK) == FREE self.__frees = self.__idents_matching(is_free) return self.__frees class Class(SymbolTable): __methods = None def get_methods(self): """Return a tuple of methods declared in the class. """ if self.__methods is None: d = {} def is_local_symbol(ident): flags = self._table.symbols.get(ident, 0) return ((flags >> SCOPE_OFF) & SCOPE_MASK) == LOCAL for st in self._table.children: # pick the function-like symbols that are local identifiers if is_local_symbol(st.name): match st.type: case _symtable.TYPE_FUNCTION: # generators are of type TYPE_FUNCTION with a ".0" # parameter as a first parameter (which makes them # distinguishable from a function named 'genexpr') if st.name == 'genexpr' and '.0' in st.varnames: continue d[st.name] = 1 case _symtable.TYPE_TYPE_PARAM: # Get the function-def block in the annotation # scope 'st' with the same identifier, if any. scope_name = st.name for c in st.children: if c.name == scope_name and c.type == _symtable.TYPE_FUNCTION: # A generic generator of type TYPE_FUNCTION # cannot be a direct child of 'st' (but it # can be a descendant), e.g.: # # class A: # type genexpr[genexpr] = (x for x in []) assert scope_name != 'genexpr' or '.0' not in c.varnames d[scope_name] = 1 break self.__methods = tuple(d) return self.__methods class Symbol: def __init__(self, name, flags, namespaces=None, *, module_scope=False): self.__name = name self.__flags = flags self.__scope = (flags >> SCOPE_OFF) & SCOPE_MASK # like PyST_GetScope() self.__namespaces = namespaces or () self.__module_scope = module_scope def __repr__(self): return "<symbol {0!r}>".format(self.__name) def get_name(self): """Return a name of a symbol. """ return self.__name def is_referenced(self): """Return *True* if the symbol is used in its block. """ return bool(self.__flags & _symtable.USE) def is_parameter(self): """Return *True* if the symbol is a parameter. """ return bool(self.__flags & DEF_PARAM) def is_global(self): """Return *True* if the symbol is global. """ return bool(self.__scope in (GLOBAL_IMPLICIT, GLOBAL_EXPLICIT) or (self.__module_scope and self.__flags & DEF_BOUND)) def is_nonlocal(self): """Return *True* if the symbol is nonlocal.""" return bool(self.__flags & DEF_NONLOCAL) def is_declared_global(self): """Return *True* if the symbol is declared global with a global statement.""" return bool(self.__scope == GLOBAL_EXPLICIT) def is_local(self): """Return *True* if the symbol is local. """ return bool(self.__scope in (LOCAL, CELL) or (self.__module_scope and self.__flags & DEF_BOUND)) def is_annotated(self): """Return *True* if the symbol is annotated. """ return bool(self.__flags & DEF_ANNOT) def is_free(self): """Return *True* if a referenced symbol is not assigned to. """ return bool(self.__scope == FREE) def is_imported(self): """Return *True* if the symbol is created from an import statement. """ return bool(self.__flags & DEF_IMPORT) def is_assigned(self): """Return *True* if a symbol is assigned to.""" return bool(self.__flags & DEF_LOCAL) def is_namespace(self): """Returns *True* if name binding introduces new namespace. If the name is used as the target of a function or class statement, this will be true. Note that a single name can be bound to multiple objects. If is_namespace() is true, the name may also be bound to other objects, like an int or list, that does not introduce a new namespace. """ return bool(self.__namespaces) def get_namespaces(self): """Return a list of namespaces bound to this name""" return self.__namespaces def get_namespace(self): """Return the single namespace bound to this name. Raises ValueError if the name is bound to multiple namespaces or no namespace. """ if len(self.__namespaces) == 0: raise ValueError("name is not bound to any namespaces") elif len(self.__namespaces) > 1: raise ValueError("name is bound to multiple namespaces") else: return self.__namespaces[0] if __name__ == "__main__": import os, sys with open(sys.argv[0]) as f: src = f.read() mod = symtable(src, os.path.split(sys.argv[0])[1], "exec") for ident in mod.get_identifiers(): info = mod.lookup(ident) print(info, info.is_local(), info.is_namespace())