Linux server1.dn-server.com 4.18.0-553.89.1.lve.el8.x86_64 #1 SMP Wed Dec 10 13:58:50 UTC 2025 x86_64
LiteSpeed
Server IP : 195.201.204.189 & Your IP : 216.73.216.58
Domains :
Cant Read [ /etc/named.conf ]
User : beriska1
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
opt /
alt /
python313 /
lib64 /
python3.13 /
test /
Delete
Unzip
Name
Size
Permission
Date
Action
__pycache__
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
archivetestdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
audiodata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
certdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
cjkencodings
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
configdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
crashers
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
data
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
decimaltestdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
dtracedata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
encoded_modules
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
leakers
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
libregrtest
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
mathdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
regrtestdata
[ DIR ]
drwxr-xr-x
2026-03-26 17:37
subprocessdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
support
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_ast
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_asyncio
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_capi
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_cext
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_concurrent_futures
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_cppext
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_ctypes
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_dataclasses
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_doctest
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_email
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_free_threading
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_future_stmt
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_gdb
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_import
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_importlib
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_inspect
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_interpreters
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_json
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_module
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_multiprocessing_fork
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_multiprocessing_forkserver
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_multiprocessing_spawn
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_pathlib
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_peg_generator
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_pydoc
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_pyrepl
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_sqlite3
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_tkinter
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_tomllib
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_tools
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_ttk
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_unittest
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_warnings
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_zipfile
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
test_zoneinfo
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
tkinterdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
tokenizedata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
tracedmodules
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
translationdata
[ DIR ]
drwxr-xr-x
2026-03-26 17:37
typinganndata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
wheeldata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
xmltestdata
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
zipimport_data
[ DIR ]
drwxr-xr-x
2026-05-05 23:06
NormalizationTest-3.2.0.txt
1.93
MB
-rw-r--r--
2026-02-03 21:23
__init__.py
47
B
-rw-r--r--
2026-03-26 17:22
__main__.py
67
B
-rw-r--r--
2026-03-26 17:22
_test_atexit.py
5.32
KB
-rw-r--r--
2026-03-26 17:22
_test_eintr.py
17.83
KB
-rw-r--r--
2026-03-26 17:22
_test_embed_set_config.py
9.32
KB
-rw-r--r--
2026-03-26 17:22
_test_embed_structseq.py
1.99
KB
-rw-r--r--
2026-03-26 17:22
_test_monitoring_shutdown.py
704
B
-rw-r--r--
2026-03-26 17:39
_test_multiprocessing.py
228.26
KB
-rw-r--r--
2026-03-26 17:22
_test_venv_multiprocessing.py
796
B
-rw-r--r--
2026-03-26 17:22
archiver_tests.py
7.06
KB
-rw-r--r--
2026-03-26 17:22
audiotests.py
12.13
KB
-rw-r--r--
2026-03-26 17:22
audit-tests.py
14.81
KB
-rw-r--r--
2026-03-26 17:22
autotest.py
214
B
-rw-r--r--
2026-03-26 17:22
bisect_cmd.py
5.36
KB
-rwxr-xr-x
2026-03-26 17:22
clinic.test.c
161.63
KB
-rw-r--r--
2026-02-03 21:23
cov.py
1.26
KB
-rw-r--r--
2026-03-26 17:22
curses_tests.py
1.23
KB
-rwxr-xr-x
2026-03-26 17:22
datetimetester.py
274.67
KB
-rw-r--r--
2026-03-26 17:22
dis_module.py
76
B
-rw-r--r--
2026-03-26 17:22
empty.vbs
70
B
-rw-r--r--
2026-02-03 21:23
exception_hierarchy.txt
2.38
KB
-rw-r--r--
2026-02-03 21:23
fork_wait.py
2.29
KB
-rw-r--r--
2026-03-26 17:22
levenshtein_examples.json
406.44
KB
-rw-r--r--
2026-02-03 21:23
list_tests.py
17.11
KB
-rw-r--r--
2026-03-26 17:22
lock_tests.py
35.64
KB
-rw-r--r--
2026-03-26 17:22
mapping_tests.py
21.87
KB
-rw-r--r--
2026-03-26 17:22
memory_watchdog.py
711
B
-rw-r--r--
2026-03-26 17:22
mime.types
47.37
KB
-rw-r--r--
2026-02-03 21:23
mock_socket.py
3.69
KB
-rw-r--r--
2026-03-26 17:22
mp_fork_bomb.py
448
B
-rw-r--r--
2026-03-26 17:22
mp_preload.py
351
B
-rw-r--r--
2026-03-26 17:22
mp_preload_flush.py
291
B
-rw-r--r--
2026-03-26 17:22
mp_preload_main.py
287
B
-rw-r--r--
2026-03-26 17:22
mp_preload_sysargv.py
567
B
-rw-r--r--
2026-03-26 17:22
multibytecodec_support.py
14.91
KB
-rw-r--r--
2026-03-26 17:22
picklecommon.py
9.4
KB
-rw-r--r--
2026-03-26 17:22
pickletester.py
179.95
KB
-rw-r--r--
2026-03-26 17:22
profilee.py
2.97
KB
-rw-r--r--
2026-03-26 17:22
pstats.pck
65.05
KB
-rw-r--r--
2026-02-03 21:23
pyclbr_input.py
1.63
KB
-rw-r--r--
2026-03-26 17:22
pythoninfo.py
28.65
KB
-rw-r--r--
2026-03-26 17:22
randv2_32.pck
7.34
KB
-rw-r--r--
2026-02-03 21:23
randv2_64.pck
7.19
KB
-rw-r--r--
2026-02-03 21:23
randv3.pck
7.82
KB
-rw-r--r--
2026-02-03 21:23
re_tests.py
25.94
KB
-rwxr-xr-x
2026-03-26 17:22
regrtest.py
1.28
KB
-rwxr-xr-x
2026-03-26 17:22
relimport.py
27
B
-rw-r--r--
2026-03-26 17:22
reperf.py
538
B
-rw-r--r--
2026-03-26 17:22
seq_tests.py
15
KB
-rw-r--r--
2026-03-26 17:22
signalinterproctester.py
3.12
KB
-rw-r--r--
2026-03-26 17:22
ssl_servers.py
7.12
KB
-rw-r--r--
2026-03-26 17:22
ssltests.py
1.01
KB
-rw-r--r--
2026-03-26 17:22
string_tests.py
72.29
KB
-rw-r--r--
2026-03-26 17:22
test___all__.py
4.89
KB
-rw-r--r--
2026-03-26 17:22
test__colorize.py
6.51
KB
-rw-r--r--
2026-03-26 17:22
test__interpchannels.py
61.88
KB
-rw-r--r--
2026-03-26 17:22
test__interpreters.py
36.56
KB
-rw-r--r--
2026-03-26 17:22
test__locale.py
12.52
KB
-rw-r--r--
2026-03-26 17:22
test__opcode.py
5.82
KB
-rw-r--r--
2026-03-26 17:22
test__osx_support.py
13.53
KB
-rw-r--r--
2026-03-26 17:22
test_abc.py
23.81
KB
-rw-r--r--
2026-03-26 17:22
test_abstract_numbers.py
5.81
KB
-rw-r--r--
2026-03-26 17:22
test_android.py
18.37
KB
-rw-r--r--
2026-03-26 17:22
test_apple.py
4.66
KB
-rw-r--r--
2026-03-26 17:22
test_argparse.py
233.02
KB
-rw-r--r--
2026-03-26 17:22
test_array.py
58.79
KB
-rw-r--r--
2026-03-26 17:22
test_asdl_parser.py
4.44
KB
-rw-r--r--
2026-03-26 17:22
test_asyncgen.py
58.05
KB
-rw-r--r--
2026-03-26 17:22
test_atexit.py
3.2
KB
-rw-r--r--
2026-03-26 17:22
test_audit.py
10.24
KB
-rw-r--r--
2026-03-26 17:22
test_augassign.py
7.68
KB
-rw-r--r--
2026-03-26 17:22
test_base64.py
40.3
KB
-rw-r--r--
2026-03-26 17:22
test_baseexception.py
7.92
KB
-rw-r--r--
2026-03-26 17:22
test_bdb.py
44.6
KB
-rw-r--r--
2026-03-26 17:22
test_bigaddrspace.py
2.83
KB
-rw-r--r--
2026-03-26 17:22
test_bigmem.py
45.01
KB
-rw-r--r--
2026-03-26 17:22
test_binascii.py
22.16
KB
-rw-r--r--
2026-03-26 17:22
test_binop.py
14.14
KB
-rw-r--r--
2026-03-26 17:22
test_bisect.py
16.63
KB
-rw-r--r--
2026-03-26 17:22
test_bool.py
14.25
KB
-rw-r--r--
2026-03-26 17:22
test_buffer.py
173.64
KB
-rw-r--r--
2026-03-26 17:22
test_bufio.py
2.56
KB
-rw-r--r--
2026-03-26 17:22
test_builtin.py
101.42
KB
-rw-r--r--
2026-03-26 17:22
test_bytes.py
88.54
KB
-rw-r--r--
2026-03-26 17:22
test_bz2.py
45.25
KB
-rw-r--r--
2026-03-26 17:22
test_c_locale_coercion.py
20.96
KB
-rw-r--r--
2026-03-26 17:22
test_calendar.py
57.9
KB
-rw-r--r--
2026-03-26 17:22
test_call.py
39.54
KB
-rw-r--r--
2026-03-26 17:22
test_charmapcodec.py
1.77
KB
-rw-r--r--
2026-03-26 17:22
test_class.py
28.72
KB
-rw-r--r--
2026-03-26 17:22
test_clinic.py
146.98
KB
-rw-r--r--
2026-03-26 17:22
test_cmath.py
22.47
KB
-rw-r--r--
2026-03-26 17:22
test_cmd.py
7.82
KB
-rw-r--r--
2026-03-26 17:22
test_cmd_line.py
43.25
KB
-rw-r--r--
2026-03-26 17:22
test_cmd_line_script.py
36.12
KB
-rw-r--r--
2026-03-26 17:22
test_code.py
28.35
KB
-rw-r--r--
2026-03-26 17:22
test_code_module.py
13.46
KB
-rw-r--r--
2026-03-26 17:22
test_codeccallbacks.py
49.23
KB
-rw-r--r--
2026-03-26 17:22
test_codecencodings_cn.py
3.86
KB
-rw-r--r--
2026-03-26 17:22
test_codecencodings_hk.py
701
B
-rw-r--r--
2026-03-26 17:22
test_codecencodings_iso2022.py
3.65
KB
-rw-r--r--
2026-03-26 17:22
test_codecencodings_jp.py
4.79
KB
-rw-r--r--
2026-03-26 17:22
test_codecencodings_kr.py
2.96
KB
-rw-r--r--
2026-03-26 17:22
test_codecencodings_tw.py
681
B
-rw-r--r--
2026-03-26 17:22
test_codecmaps_cn.py
746
B
-rw-r--r--
2026-03-26 17:22
test_codecmaps_hk.py
386
B
-rw-r--r--
2026-03-26 17:22
test_codecmaps_jp.py
1.7
KB
-rw-r--r--
2026-03-26 17:22
test_codecmaps_kr.py
1.16
KB
-rw-r--r--
2026-03-26 17:22
test_codecmaps_tw.py
705
B
-rw-r--r--
2026-03-26 17:22
test_codecs.py
147.37
KB
-rw-r--r--
2026-03-26 17:22
test_codeop.py
8.68
KB
-rw-r--r--
2026-03-26 17:22
test_collections.py
93.72
KB
-rw-r--r--
2026-03-26 17:22
test_colorsys.py
4.27
KB
-rw-r--r--
2026-03-26 17:22
test_compare.py
17.46
KB
-rw-r--r--
2026-03-26 17:22
test_compile.py
95.51
KB
-rw-r--r--
2026-03-26 17:22
test_compileall.py
49.53
KB
-rw-r--r--
2026-03-26 17:22
test_compiler_assemble.py
4.79
KB
-rw-r--r--
2026-03-26 17:22
test_compiler_codegen.py
5.24
KB
-rw-r--r--
2026-03-26 17:22
test_complex.py
35.29
KB
-rw-r--r--
2026-03-26 17:22
test_configparser.py
87.21
KB
-rw-r--r--
2026-03-26 17:22
test_contains.py
3.35
KB
-rw-r--r--
2026-03-26 17:22
test_context.py
32.03
KB
-rw-r--r--
2026-03-26 17:22
test_contextlib.py
43.35
KB
-rw-r--r--
2026-03-26 17:22
test_contextlib_async.py
23.45
KB
-rw-r--r--
2026-03-26 17:22
test_copy.py
29.45
KB
-rw-r--r--
2026-03-26 17:22
test_copyreg.py
4.36
KB
-rw-r--r--
2026-03-26 17:22
test_coroutines.py
67.59
KB
-rw-r--r--
2026-03-26 17:22
test_cprofile.py
9.74
KB
-rw-r--r--
2026-03-26 17:22
test_csv.py
64.09
KB
-rw-r--r--
2026-03-26 17:22
test_curses.py
50.42
KB
-rw-r--r--
2026-03-26 17:22
test_datetime.py
2.67
KB
-rw-r--r--
2026-03-26 17:22
test_dbm.py
8.26
KB
-rw-r--r--
2026-03-26 17:22
test_dbm_dumb.py
14.29
KB
-rw-r--r--
2026-03-26 17:22
test_dbm_gnu.py
8.03
KB
-rw-r--r--
2026-03-26 17:22
test_dbm_ndbm.py
6.3
KB
-rw-r--r--
2026-03-26 17:22
test_dbm_sqlite3.py
10.84
KB
-rw-r--r--
2026-03-26 17:22
test_decimal.py
216.81
KB
-rw-r--r--
2026-03-26 17:22
test_decorators.py
10.73
KB
-rw-r--r--
2026-03-26 17:22
test_defaultdict.py
6.56
KB
-rw-r--r--
2026-03-26 17:22
test_deque.py
33.16
KB
-rw-r--r--
2026-03-26 17:22
test_descr.py
197.53
KB
-rw-r--r--
2026-03-26 17:22
test_descrtut.py
11.02
KB
-rw-r--r--
2026-03-26 17:22
test_devpoll.py
4.44
KB
-rw-r--r--
2026-03-26 17:22
test_dict.py
55.39
KB
-rw-r--r--
2026-03-26 17:22
test_dict_version.py
6.1
KB
-rw-r--r--
2026-03-26 17:22
test_dictcomps.py
6.55
KB
-rw-r--r--
2026-03-26 17:22
test_dictviews.py
14.82
KB
-rw-r--r--
2026-03-26 17:22
test_difflib.py
22.99
KB
-rw-r--r--
2026-03-26 17:22
test_difflib_expect.html
100.9
KB
-rw-r--r--
2026-02-03 21:23
test_dis.py
105.91
KB
-rw-r--r--
2026-03-26 17:22
test_docxmlrpc.py
9.1
KB
-rw-r--r--
2026-03-26 17:22
test_dtrace.py
7.98
KB
-rw-r--r--
2026-03-26 17:22
test_dynamic.py
6.08
KB
-rw-r--r--
2026-03-26 17:22
test_dynamicclassattribute.py
9.57
KB
-rw-r--r--
2026-03-26 17:22
test_eintr.py
627
B
-rw-r--r--
2026-03-26 17:22
test_embed.py
74.88
KB
-rw-r--r--
2026-03-26 17:22
test_ensurepip.py
11.49
KB
-rw-r--r--
2026-03-26 17:22
test_enum.py
196.11
KB
-rw-r--r--
2026-03-26 17:22
test_enumerate.py
9.14
KB
-rw-r--r--
2026-03-26 17:22
test_eof.py
8.01
KB
-rw-r--r--
2026-03-26 17:22
test_epoll.py
9.4
KB
-rw-r--r--
2026-03-26 17:22
test_errno.py
1.04
KB
-rw-r--r--
2026-03-26 17:22
test_except_star.py
39.7
KB
-rw-r--r--
2026-03-26 17:22
test_exception_group.py
37.06
KB
-rw-r--r--
2026-03-26 17:22
test_exception_hierarchy.py
7.54
KB
-rw-r--r--
2026-03-26 17:22
test_exception_variations.py
13.74
KB
-rw-r--r--
2026-03-26 17:22
test_exceptions.py
87.23
KB
-rw-r--r--
2026-03-26 17:22
test_extcall.py
14.69
KB
-rw-r--r--
2026-03-26 17:22
test_external_inspection.py
2.96
KB
-rw-r--r--
2026-03-26 17:22
test_faulthandler.py
31.47
KB
-rw-r--r--
2026-03-26 17:22
test_fcntl.py
8.59
KB
-rw-r--r--
2026-03-26 17:22
test_file.py
11.78
KB
-rw-r--r--
2026-03-26 17:22
test_file_eintr.py
10.74
KB
-rw-r--r--
2026-03-26 17:22
test_filecmp.py
15.66
KB
-rw-r--r--
2026-03-26 17:22
test_fileinput.py
37.86
KB
-rw-r--r--
2026-03-26 17:22
test_fileio.py
20.72
KB
-rw-r--r--
2026-03-26 17:22
test_fileutils.py
951
B
-rw-r--r--
2026-03-26 17:22
test_finalization.py
14.67
KB
-rw-r--r--
2026-03-26 17:22
test_float.py
65.38
KB
-rw-r--r--
2026-03-26 17:22
test_flufl.py
2.81
KB
-rw-r--r--
2026-03-26 17:22
test_fnmatch.py
10.68
KB
-rw-r--r--
2026-03-26 17:22
test_fork1.py
3.3
KB
-rw-r--r--
2026-03-26 17:22
test_format.py
28.54
KB
-rw-r--r--
2026-03-26 17:22
test_fractions.py
67.44
KB
-rw-r--r--
2026-03-26 17:22
test_frame.py
23.28
KB
-rw-r--r--
2026-03-26 17:22
test_frozen.py
2.2
KB
-rw-r--r--
2026-03-26 17:22
test_fstring.py
70.92
KB
-rw-r--r--
2026-03-26 17:22
test_ftplib.py
42.06
KB
-rw-r--r--
2026-03-26 17:22
test_funcattrs.py
17.29
KB
-rw-r--r--
2026-03-26 17:22
test_functools.py
118.41
KB
-rw-r--r--
2026-03-26 17:22
test_gc.py
52.16
KB
-rw-r--r--
2026-03-26 17:22
test_generated_cases.py
27.14
KB
-rw-r--r--
2026-03-26 17:22
test_generator_stop.py
943
B
-rw-r--r--
2026-03-26 17:22
test_generators.py
74.12
KB
-rw-r--r--
2026-03-26 17:22
test_genericalias.py
20
KB
-rw-r--r--
2026-03-26 17:22
test_genericclass.py
9.57
KB
-rw-r--r--
2026-03-26 17:22
test_genericpath.py
23.37
KB
-rw-r--r--
2026-03-26 17:22
test_genexps.py
7.3
KB
-rw-r--r--
2026-03-26 17:22
test_getopt.py
6.94
KB
-rw-r--r--
2026-03-26 17:22
test_getpass.py
6.36
KB
-rw-r--r--
2026-03-26 17:22
test_getpath.py
44.84
KB
-rw-r--r--
2026-03-26 17:22
test_gettext.py
45.41
KB
-rw-r--r--
2026-03-26 17:22
test_glob.py
24.29
KB
-rw-r--r--
2026-03-26 17:22
test_global.py
1.2
KB
-rw-r--r--
2026-03-26 17:22
test_grammar.py
64.9
KB
-rw-r--r--
2026-03-26 17:22
test_graphlib.py
8.31
KB
-rw-r--r--
2026-03-26 17:22
test_grp.py
3.67
KB
-rw-r--r--
2026-03-26 17:22
test_gzip.py
41.97
KB
-rw-r--r--
2026-03-26 17:22
test_hash.py
12.11
KB
-rw-r--r--
2026-03-26 17:22
test_hashlib.py
50.69
KB
-rw-r--r--
2026-03-26 17:22
test_heapq.py
16.42
KB
-rw-r--r--
2026-03-26 17:22
test_hmac.py
26.49
KB
-rw-r--r--
2026-03-26 17:22
test_html.py
4.23
KB
-rw-r--r--
2026-03-26 17:22
test_htmlparser.py
51.09
KB
-rw-r--r--
2026-03-26 17:22
test_http_cookiejar.py
81.84
KB
-rw-r--r--
2026-03-26 17:22
test_http_cookies.py
23.65
KB
-rw-r--r--
2026-03-26 17:22
test_httplib.py
99.32
KB
-rw-r--r--
2026-03-26 17:22
test_httpservers.py
62.86
KB
-rw-r--r--
2026-03-26 17:22
test_idle.py
862
B
-rw-r--r--
2026-03-26 17:22
test_imaplib.py
39.24
KB
-rw-r--r--
2026-03-26 17:22
test_index.py
8.37
KB
-rw-r--r--
2026-03-26 17:22
test_int.py
34.84
KB
-rw-r--r--
2026-03-26 17:22
test_int_literal.py
6.89
KB
-rw-r--r--
2026-03-26 17:22
test_io.py
186.35
KB
-rw-r--r--
2026-03-26 17:22
test_ioctl.py
8.42
KB
-rw-r--r--
2026-03-26 17:22
test_ipaddress.py
128.86
KB
-rw-r--r--
2026-03-26 17:22
test_isinstance.py
12.96
KB
-rw-r--r--
2026-03-26 17:22
test_iter.py
38.22
KB
-rw-r--r--
2026-03-26 17:22
test_iterlen.py
7.1
KB
-rw-r--r--
2026-03-26 17:22
test_itertools.py
114.87
KB
-rw-r--r--
2026-03-26 17:22
test_keyword.py
2
KB
-rw-r--r--
2026-03-26 17:22
test_keywordonlyarg.py
6.89
KB
-rw-r--r--
2026-03-26 17:22
test_kqueue.py
9.36
KB
-rw-r--r--
2026-03-26 17:22
test_largefile.py
11.02
KB
-rw-r--r--
2026-03-26 17:22
test_launcher.py
30.61
KB
-rw-r--r--
2026-03-26 17:22
test_linecache.py
14.18
KB
-rw-r--r--
2026-03-26 17:22
test_list.py
10.94
KB
-rw-r--r--
2026-03-26 17:22
test_listcomps.py
23.53
KB
-rw-r--r--
2026-03-26 17:22
test_lltrace.py
3.71
KB
-rw-r--r--
2026-03-26 17:22
test_locale.py
26.37
KB
-rw-r--r--
2026-03-26 17:22
test_logging.py
261.1
KB
-rw-r--r--
2026-03-26 17:22
test_long.py
64.49
KB
-rw-r--r--
2026-03-26 17:22
test_longexp.py
233
B
-rw-r--r--
2026-03-26 17:22
test_lzma.py
95.71
KB
-rw-r--r--
2026-03-26 17:22
test_mailbox.py
99.06
KB
-rw-r--r--
2026-03-26 17:22
test_marshal.py
25.23
KB
-rw-r--r--
2026-03-26 17:22
test_math.py
120.29
KB
-rw-r--r--
2026-03-26 17:22
test_math_property.py
1.15
KB
-rw-r--r--
2026-03-26 17:22
test_memoryio.py
35.23
KB
-rw-r--r--
2026-03-26 17:22
test_memoryview.py
24.12
KB
-rw-r--r--
2026-03-26 17:22
test_metaclass.py
6.97
KB
-rw-r--r--
2026-03-26 17:22
test_mimetypes.py
17.91
KB
-rw-r--r--
2026-03-26 17:22
test_minidom.py
72.31
KB
-rw-r--r--
2026-03-26 17:22
test_mmap.py
45.55
KB
-rw-r--r--
2026-03-26 17:22
test_modulefinder.py
12.21
KB
-rw-r--r--
2026-03-26 17:22
test_monitoring.py
69.38
KB
-rw-r--r--
2026-03-26 17:22
test_msvcrt.py
3.39
KB
-rw-r--r--
2026-03-26 17:22
test_multibytecodec.py
15.87
KB
-rw-r--r--
2026-03-26 17:22
test_multiprocessing_main_handling.py
11.48
KB
-rw-r--r--
2026-03-26 17:22
test_named_expressions.py
29.62
KB
-rw-r--r--
2026-03-26 17:22
test_netrc.py
12.09
KB
-rw-r--r--
2026-03-26 17:22
test_ntpath.py
75.9
KB
-rw-r--r--
2026-03-26 17:22
test_numeric_tower.py
8
KB
-rw-r--r--
2026-03-26 17:22
test_opcache.py
29.7
KB
-rw-r--r--
2026-03-26 17:22
test_opcodes.py
3.62
KB
-rw-r--r--
2026-03-26 17:22
test_openpty.py
600
B
-rw-r--r--
2026-03-26 17:22
test_operator.py
27.71
KB
-rw-r--r--
2026-03-26 17:22
test_optimizer.py
2.61
KB
-rw-r--r--
2026-03-26 17:22
test_optparse.py
61.39
KB
-rw-r--r--
2026-03-26 17:22
test_ordered_dict.py
40.01
KB
-rw-r--r--
2026-03-26 17:22
test_os.py
202.8
KB
-rw-r--r--
2026-03-26 17:22
test_osx_env.py
1.31
KB
-rw-r--r--
2026-03-26 17:22
test_patma.py
94.55
KB
-rw-r--r--
2026-03-26 17:22
test_pdb.py
133.58
KB
-rw-r--r--
2026-03-26 17:22
test_peepholer.py
43.65
KB
-rw-r--r--
2026-03-26 17:22
test_pep646_syntax.py
7.79
KB
-rw-r--r--
2026-03-26 17:22
test_perf_profiler.py
18.83
KB
-rw-r--r--
2026-03-26 17:22
test_perfmaps.py
773
B
-rw-r--r--
2026-03-26 17:22
test_pickle.py
27.61
KB
-rw-r--r--
2026-03-26 17:22
test_picklebuffer.py
4.99
KB
-rw-r--r--
2026-03-26 17:22
test_pickletools.py
16.78
KB
-rw-r--r--
2026-03-26 17:22
test_pkg.py
9.58
KB
-rw-r--r--
2026-03-26 17:22
test_pkgutil.py
26.22
KB
-rw-r--r--
2026-03-26 17:22
test_platform.py
26.69
KB
-rw-r--r--
2026-03-26 17:22
test_plistlib.py
48.91
KB
-rw-r--r--
2026-03-26 17:22
test_poll.py
7.49
KB
-rw-r--r--
2026-03-26 17:22
test_popen.py
2.36
KB
-rw-r--r--
2026-03-26 17:22
test_poplib.py
18.07
KB
-rw-r--r--
2026-03-26 17:22
test_positional_only_arg.py
18.44
KB
-rw-r--r--
2026-03-26 17:22
test_posix.py
99.63
KB
-rw-r--r--
2026-03-26 17:22
test_posixpath.py
51.64
KB
-rw-r--r--
2026-03-26 17:22
test_pow.py
6.38
KB
-rw-r--r--
2026-03-26 17:22
test_pprint.py
39.08
KB
-rw-r--r--
2026-03-26 17:22
test_print.py
8.05
KB
-rw-r--r--
2026-03-26 17:22
test_profile.py
8.95
KB
-rw-r--r--
2026-03-26 17:22
test_property.py
20.12
KB
-rw-r--r--
2026-03-26 17:22
test_pstats.py
5.38
KB
-rw-r--r--
2026-03-26 17:22
test_pty.py
16.18
KB
-rw-r--r--
2026-03-26 17:22
test_pulldom.py
12.33
KB
-rw-r--r--
2026-03-26 17:22
test_pwd.py
4.32
KB
-rw-r--r--
2026-03-26 17:22
test_py_compile.py
11.93
KB
-rw-r--r--
2026-03-26 17:22
test_pyclbr.py
10.11
KB
-rw-r--r--
2026-03-26 17:22
test_pyexpat.py
39.85
KB
-rw-r--r--
2026-03-26 17:22
test_queue.py
33.55
KB
-rw-r--r--
2026-03-26 17:22
test_quopri.py
7.87
KB
-rw-r--r--
2026-03-26 17:22
test_raise.py
13.85
KB
-rw-r--r--
2026-03-26 17:22
test_random.py
60.35
KB
-rw-r--r--
2026-03-26 17:22
test_range.py
26.99
KB
-rw-r--r--
2026-03-26 17:22
test_re.py
147.27
KB
-rw-r--r--
2026-03-26 17:22
test_readline.py
16.15
KB
-rw-r--r--
2026-03-26 17:22
test_regrtest.py
98.35
KB
-rw-r--r--
2026-03-26 17:22
test_repl.py
14.52
KB
-rw-r--r--
2026-03-26 17:22
test_reprlib.py
30.43
KB
-rw-r--r--
2026-03-26 17:22
test_resource.py
11.12
KB
-rw-r--r--
2026-03-26 17:22
test_richcmp.py
11.95
KB
-rw-r--r--
2026-03-26 17:22
test_rlcompleter.py
7.96
KB
-rw-r--r--
2026-03-26 17:22
test_robotparser.py
15.6
KB
-rw-r--r--
2026-03-26 17:22
test_runpy.py
34.12
KB
-rw-r--r--
2026-03-26 17:22
test_sax.py
54.63
KB
-rw-r--r--
2026-03-26 17:22
test_sched.py
7.38
KB
-rw-r--r--
2026-03-26 17:22
test_scope.py
21.94
KB
-rw-r--r--
2026-03-26 17:22
test_script_helper.py
5.82
KB
-rw-r--r--
2026-03-26 17:22
test_secrets.py
4.28
KB
-rw-r--r--
2026-03-26 17:22
test_select.py
3.42
KB
-rw-r--r--
2026-03-26 17:22
test_selectors.py
19.87
KB
-rw-r--r--
2026-03-26 17:22
test_set.py
73.22
KB
-rw-r--r--
2026-03-26 17:22
test_setcomps.py
5.24
KB
-rw-r--r--
2026-03-26 17:22
test_shelve.py
6.42
KB
-rw-r--r--
2026-03-26 17:22
test_shlex.py
13.39
KB
-rw-r--r--
2026-03-26 17:22
test_shutil.py
140.16
KB
-rw-r--r--
2026-03-26 17:22
test_signal.py
52.78
KB
-rw-r--r--
2026-03-26 17:22
test_site.py
36.06
KB
-rw-r--r--
2026-03-26 17:22
test_slice.py
9.46
KB
-rw-r--r--
2026-03-26 17:22
test_smtplib.py
62.33
KB
-rw-r--r--
2026-03-26 17:22
test_smtpnet.py
3.11
KB
-rw-r--r--
2026-03-26 17:22
test_socket.py
271.05
KB
-rw-r--r--
2026-03-26 17:22
test_socketserver.py
17.39
KB
-rw-r--r--
2026-03-26 17:22
test_sort.py
14.48
KB
-rw-r--r--
2026-03-26 17:22
test_source_encoding.py
15.94
KB
-rw-r--r--
2026-03-26 17:22
test_ssl.py
229.41
KB
-rw-r--r--
2026-03-26 17:22
test_stable_abi_ctypes.py
26.22
KB
-rw-r--r--
2026-03-26 17:22
test_startfile.py
1.7
KB
-rw-r--r--
2026-03-26 17:22
test_stat.py
13.25
KB
-rw-r--r--
2026-03-26 17:22
test_statistics.py
131.36
KB
-rw-r--r--
2026-03-26 17:22
test_str.py
126.35
KB
-rw-r--r--
2026-03-26 17:22
test_strftime.py
7.87
KB
-rw-r--r--
2026-03-26 17:22
test_string.py
21.86
KB
-rw-r--r--
2026-03-26 17:22
test_string_literals.py
14.1
KB
-rw-r--r--
2026-03-26 17:22
test_stringprep.py
3.04
KB
-rw-r--r--
2026-03-26 17:22
test_strptime.py
42.79
KB
-rw-r--r--
2026-03-26 17:22
test_strtod.py
20.06
KB
-rw-r--r--
2026-03-26 17:22
test_struct.py
40.47
KB
-rw-r--r--
2026-03-26 17:22
test_structseq.py
14.19
KB
-rw-r--r--
2026-03-26 17:22
test_subclassinit.py
8.04
KB
-rw-r--r--
2026-03-26 17:22
test_subprocess.py
172.83
KB
-rw-r--r--
2026-03-26 17:22
test_sundry.py
1.02
KB
-rw-r--r--
2026-03-26 17:22
test_super.py
15.68
KB
-rw-r--r--
2026-03-26 17:22
test_support.py
27.95
KB
-rw-r--r--
2026-03-26 17:22
test_symtable.py
20.65
KB
-rw-r--r--
2026-03-26 17:22
test_syntax.py
80.5
KB
-rw-r--r--
2026-03-26 17:22
test_sys.py
74.12
KB
-rw-r--r--
2026-03-26 17:22
test_sys_setprofile.py
14.77
KB
-rw-r--r--
2026-03-26 17:22
test_sys_settrace.py
86.74
KB
-rw-r--r--
2026-03-26 17:22
test_sysconfig.py
29.64
KB
-rw-r--r--
2026-03-26 17:22
test_syslog.py
4.7
KB
-rw-r--r--
2026-03-26 17:22
test_tabnanny.py
13.9
KB
-rw-r--r--
2026-03-26 17:22
test_tarfile.py
187.4
KB
-rw-r--r--
2026-03-26 17:22
test_tcl.py
31.6
KB
-rw-r--r--
2026-03-26 17:22
test_tempfile.py
75.5
KB
-rw-r--r--
2026-03-26 17:22
test_termios.py
13.02
KB
-rw-r--r--
2026-03-26 17:22
test_textwrap.py
41.88
KB
-rw-r--r--
2026-03-26 17:22
test_thread.py
14.35
KB
-rw-r--r--
2026-03-26 17:22
test_threadedtempfile.py
2.03
KB
-rw-r--r--
2026-03-26 17:22
test_threading.py
79.5
KB
-rw-r--r--
2026-03-26 17:22
test_threading_local.py
7.01
KB
-rw-r--r--
2026-03-26 17:22
test_threadsignals.py
9.87
KB
-rw-r--r--
2026-03-26 17:22
test_time.py
45.07
KB
-rw-r--r--
2026-03-26 17:22
test_timeit.py
15.2
KB
-rw-r--r--
2026-03-26 17:22
test_timeout.py
10.65
KB
-rw-r--r--
2026-03-26 17:22
test_tokenize.py
121.49
KB
-rw-r--r--
2026-03-26 17:22
test_trace.py
21.72
KB
-rw-r--r--
2026-03-26 17:22
test_traceback.py
187.96
KB
-rw-r--r--
2026-03-26 17:22
test_tracemalloc.py
41.3
KB
-rw-r--r--
2026-03-26 17:22
test_ttk_textonly.py
17.45
KB
-rw-r--r--
2026-03-26 17:22
test_tty.py
3.63
KB
-rw-r--r--
2026-03-26 17:22
test_tuple.py
19.8
KB
-rw-r--r--
2026-03-26 17:22
test_turtle.py
16.42
KB
-rw-r--r--
2026-03-26 17:22
test_type_aliases.py
12.74
KB
-rw-r--r--
2026-03-26 17:22
test_type_annotations.py
6.23
KB
-rw-r--r--
2026-03-26 17:22
test_type_cache.py
7.58
KB
-rw-r--r--
2026-03-26 17:22
test_type_comments.py
11.01
KB
-rw-r--r--
2026-03-26 17:22
test_type_params.py
44.45
KB
-rw-r--r--
2026-03-26 17:22
test_typechecks.py
2.55
KB
-rw-r--r--
2026-03-26 17:22
test_types.py
87.9
KB
-rw-r--r--
2026-03-26 17:22
test_typing.py
373.85
KB
-rw-r--r--
2026-03-26 17:22
test_ucn.py
9.71
KB
-rw-r--r--
2026-03-26 17:22
test_unary.py
1.52
KB
-rw-r--r--
2026-03-26 17:22
test_unicode_file.py
5.72
KB
-rw-r--r--
2026-03-26 17:22
test_unicode_file_functions.py
6.91
KB
-rw-r--r--
2026-03-26 17:22
test_unicode_identifiers.py
997
B
-rw-r--r--
2026-03-26 17:22
test_unicodedata.py
32.39
KB
-rw-r--r--
2026-03-26 17:22
test_univnewlines.py
3.85
KB
-rw-r--r--
2026-03-26 17:22
test_unpack.py
3.51
KB
-rw-r--r--
2026-03-26 17:22
test_unpack_ex.py
9.98
KB
-rw-r--r--
2026-03-26 17:22
test_unparse.py
30
KB
-rw-r--r--
2026-03-26 17:22
test_urllib.py
72.58
KB
-rw-r--r--
2026-03-26 17:22
test_urllib2.py
81.34
KB
-rw-r--r--
2026-03-26 17:22
test_urllib2_localnet.py
24.22
KB
-rw-r--r--
2026-03-26 17:22
test_urllib2net.py
15.6
KB
-rw-r--r--
2026-03-26 17:22
test_urllib_response.py
2.04
KB
-rw-r--r--
2026-03-26 17:22
test_urllibnet.py
9.37
KB
-rw-r--r--
2026-03-26 17:22
test_urlparse.py
79.89
KB
-rw-r--r--
2026-03-26 17:22
test_userdict.py
7.82
KB
-rw-r--r--
2026-03-26 17:22
test_userlist.py
2.23
KB
-rw-r--r--
2026-03-26 17:22
test_userstring.py
2.48
KB
-rw-r--r--
2026-03-26 17:22
test_utf8_mode.py
10.31
KB
-rw-r--r--
2026-03-26 17:22
test_utf8source.py
1.08
KB
-rw-r--r--
2026-03-26 17:22
test_uuid.py
45.51
KB
-rw-r--r--
2026-03-26 17:22
test_venv.py
43.4
KB
-rw-r--r--
2026-03-26 17:22
test_wait3.py
1.74
KB
-rw-r--r--
2026-03-26 17:22
test_wait4.py
1.14
KB
-rw-r--r--
2026-03-26 17:22
test_wave.py
9.12
KB
-rw-r--r--
2026-03-26 17:22
test_weakref.py
78.11
KB
-rw-r--r--
2026-03-26 17:22
test_weakset.py
16.28
KB
-rw-r--r--
2026-03-26 17:22
test_webbrowser.py
17.31
KB
-rw-r--r--
2026-03-26 17:22
test_winapi.py
5.8
KB
-rw-r--r--
2026-03-26 17:22
test_winconsoleio.py
8.06
KB
-rw-r--r--
2026-03-26 17:22
test_winreg.py
23.71
KB
-rw-r--r--
2026-03-26 17:22
test_winsound.py
5.17
KB
-rw-r--r--
2026-03-26 17:22
test_with.py
27.77
KB
-rw-r--r--
2026-03-26 17:22
test_wmi.py
3.31
KB
-rw-r--r--
2026-03-26 17:22
test_wsgiref.py
29.89
KB
-rw-r--r--
2026-03-26 17:22
test_xml_dom_minicompat.py
4.18
KB
-rw-r--r--
2026-03-26 17:22
test_xml_dom_xmlbuilder.py
3.1
KB
-rw-r--r--
2026-03-26 17:22
test_xml_etree.py
176.35
KB
-rw-r--r--
2026-03-26 17:22
test_xml_etree_c.py
9.34
KB
-rw-r--r--
2026-03-26 17:22
test_xmlrpc.py
58.32
KB
-rw-r--r--
2026-03-26 17:22
test_xpickle.py
9.9
KB
-rw-r--r--
2026-03-26 17:22
test_xxlimited.py
2.46
KB
-rw-r--r--
2026-03-26 17:22
test_xxtestfuzz.py
690
B
-rw-r--r--
2026-03-26 17:22
test_yield_from.py
50.36
KB
-rw-r--r--
2026-03-26 17:22
test_zipapp.py
17.58
KB
-rw-r--r--
2026-03-26 17:22
test_zipfile64.py
5.78
KB
-rw-r--r--
2026-03-26 17:22
test_zipimport.py
39.21
KB
-rw-r--r--
2026-03-26 17:22
test_zipimport_support.py
10.61
KB
-rw-r--r--
2026-03-26 17:22
test_zlib.py
41.65
KB
-rw-r--r--
2026-03-26 17:22
testcodec.py
1.02
KB
-rw-r--r--
2026-03-26 17:22
tf_inherit_check.py
714
B
-rw-r--r--
2026-03-26 17:22
win_console_handler.py
1.38
KB
-rw-r--r--
2026-03-26 17:22
xmltests.py
435
B
-rw-r--r--
2026-03-26 17:22
xpickle_worker.py
2.06
KB
-rw-r--r--
2026-03-26 17:22
Save
Rename
# -*- coding: utf-8 -*- import collections import contextlib import dataclasses import io import itertools import pprint import random import re import test.support import types import unittest # list, tuple and dict subclasses that do or don't overwrite __repr__ class list2(list): pass class list3(list): def __repr__(self): return list.__repr__(self) class list_custom_repr(list): def __repr__(self): return '*'*len(list.__repr__(self)) class tuple2(tuple): pass class tuple3(tuple): def __repr__(self): return tuple.__repr__(self) class tuple_custom_repr(tuple): def __repr__(self): return '*'*len(tuple.__repr__(self)) class set2(set): pass class set3(set): def __repr__(self): return set.__repr__(self) class set_custom_repr(set): def __repr__(self): return '*'*len(set.__repr__(self)) class frozenset2(frozenset): pass class frozenset3(frozenset): def __repr__(self): return frozenset.__repr__(self) class frozenset_custom_repr(frozenset): def __repr__(self): return '*'*len(frozenset.__repr__(self)) class dict2(dict): pass class dict3(dict): def __repr__(self): return dict.__repr__(self) class dict_custom_repr(dict): def __repr__(self): return '*'*len(dict.__repr__(self)) @dataclasses.dataclass class dataclass1: field1: str field2: int field3: bool = False field4: int = dataclasses.field(default=1, repr=False) @dataclasses.dataclass class dataclass2: a: int = 1 def __repr__(self): return "custom repr that doesn't fit within pprint width" @dataclasses.dataclass(repr=False) class dataclass3: a: int = 1 @dataclasses.dataclass class dataclass4: a: "dataclass4" b: int = 1 @dataclasses.dataclass class dataclass5: a: "dataclass6" b: int = 1 @dataclasses.dataclass class dataclass6: c: "dataclass5" d: int = 1 class Unorderable: def __repr__(self): return str(id(self)) # Class Orderable is orderable with any type class Orderable: def __init__(self, hash): self._hash = hash def __lt__(self, other): return False def __gt__(self, other): return self != other def __le__(self, other): return self == other def __ge__(self, other): return True def __eq__(self, other): return self is other def __ne__(self, other): return self is not other def __hash__(self): return self._hash class QueryTestCase(unittest.TestCase): def setUp(self): self.a = list(range(100)) self.b = list(range(200)) self.a[-12] = self.b def test_init(self): pp = pprint.PrettyPrinter() pp = pprint.PrettyPrinter(indent=4, width=40, depth=5, stream=io.StringIO(), compact=True) pp = pprint.PrettyPrinter(4, 40, 5, io.StringIO()) pp = pprint.PrettyPrinter(sort_dicts=False) with self.assertRaises(TypeError): pp = pprint.PrettyPrinter(4, 40, 5, io.StringIO(), True) self.assertRaises(ValueError, pprint.PrettyPrinter, indent=-1) self.assertRaises(ValueError, pprint.PrettyPrinter, depth=0) self.assertRaises(ValueError, pprint.PrettyPrinter, depth=-1) self.assertRaises(ValueError, pprint.PrettyPrinter, width=0) def test_basic(self): # Verify .isrecursive() and .isreadable() w/o recursion pp = pprint.PrettyPrinter() for safe in (2, 2.0, 2j, "abc", [3], (2,2), {3: 3}, b"def", bytearray(b"ghi"), True, False, None, ..., self.a, self.b): # module-level convenience functions self.assertFalse(pprint.isrecursive(safe), "expected not isrecursive for %r" % (safe,)) self.assertTrue(pprint.isreadable(safe), "expected isreadable for %r" % (safe,)) # PrettyPrinter methods self.assertFalse(pp.isrecursive(safe), "expected not isrecursive for %r" % (safe,)) self.assertTrue(pp.isreadable(safe), "expected isreadable for %r" % (safe,)) def test_stdout_is_None(self): with contextlib.redirect_stdout(None): # smoke test - there is no output to check value = 'this should not fail' pprint.pprint(value) pprint.PrettyPrinter().pprint(value) def test_knotted(self): # Verify .isrecursive() and .isreadable() w/ recursion # Tie a knot. self.b[67] = self.a # Messy dict. self.d = {} self.d[0] = self.d[1] = self.d[2] = self.d pp = pprint.PrettyPrinter() for icky in self.a, self.b, self.d, (self.d, self.d): self.assertTrue(pprint.isrecursive(icky), "expected isrecursive") self.assertFalse(pprint.isreadable(icky), "expected not isreadable") self.assertTrue(pp.isrecursive(icky), "expected isrecursive") self.assertFalse(pp.isreadable(icky), "expected not isreadable") # Break the cycles. self.d.clear() del self.a[:] del self.b[:] for safe in self.a, self.b, self.d, (self.d, self.d): # module-level convenience functions self.assertFalse(pprint.isrecursive(safe), "expected not isrecursive for %r" % (safe,)) self.assertTrue(pprint.isreadable(safe), "expected isreadable for %r" % (safe,)) # PrettyPrinter methods self.assertFalse(pp.isrecursive(safe), "expected not isrecursive for %r" % (safe,)) self.assertTrue(pp.isreadable(safe), "expected isreadable for %r" % (safe,)) def test_unreadable(self): # Not recursive but not readable anyway pp = pprint.PrettyPrinter() for unreadable in object(), int, pprint, pprint.isrecursive: # module-level convenience functions self.assertFalse(pprint.isrecursive(unreadable), "expected not isrecursive for %r" % (unreadable,)) self.assertFalse(pprint.isreadable(unreadable), "expected not isreadable for %r" % (unreadable,)) # PrettyPrinter methods self.assertFalse(pp.isrecursive(unreadable), "expected not isrecursive for %r" % (unreadable,)) self.assertFalse(pp.isreadable(unreadable), "expected not isreadable for %r" % (unreadable,)) def test_same_as_repr(self): # Simple objects, small containers and classes that override __repr__ # to directly call super's __repr__. # For those the result should be the same as repr(). # Ahem. The docs don't say anything about that -- this appears to # be testing an implementation quirk. Starting in Python 2.5, it's # not true for dicts: pprint always sorts dicts by key now; before, # it sorted a dict display if and only if the display required # multiple lines. For that reason, dicts with more than one element # aren't tested here. for simple in (0, 0, 0+0j, 0.0, "", b"", bytearray(), (), tuple2(), tuple3(), [], list2(), list3(), set(), set2(), set3(), frozenset(), frozenset2(), frozenset3(), {}, dict2(), dict3(), self.assertTrue, pprint, -6, -6, -6-6j, -1.5, "x", b"x", bytearray(b"x"), (3,), [3], {3: 6}, (1,2), [3,4], {5: 6}, tuple2((1,2)), tuple3((1,2)), tuple3(range(100)), [3,4], list2([3,4]), list3([3,4]), list3(range(100)), set({7}), set2({7}), set3({7}), frozenset({8}), frozenset2({8}), frozenset3({8}), dict2({5: 6}), dict3({5: 6}), range(10, -11, -1), True, False, None, ..., ): native = repr(simple) self.assertEqual(pprint.pformat(simple), native) self.assertEqual(pprint.pformat(simple, width=1, indent=0) .replace('\n', ' '), native) self.assertEqual(pprint.pformat(simple, underscore_numbers=True), native) self.assertEqual(pprint.saferepr(simple), native) def test_container_repr_override_called(self): N = 1000 # Ensure that __repr__ override is called for subclasses of containers for cont in (list_custom_repr(), list_custom_repr([1,2,3]), list_custom_repr(range(N)), tuple_custom_repr(), tuple_custom_repr([1,2,3]), tuple_custom_repr(range(N)), set_custom_repr(), set_custom_repr([1,2,3]), set_custom_repr(range(N)), frozenset_custom_repr(), frozenset_custom_repr([1,2,3]), frozenset_custom_repr(range(N)), dict_custom_repr(), dict_custom_repr({5: 6}), dict_custom_repr(zip(range(N),range(N))), ): native = repr(cont) expected = '*' * len(native) self.assertEqual(pprint.pformat(cont), expected) self.assertEqual(pprint.pformat(cont, width=1, indent=0), expected) self.assertEqual(pprint.saferepr(cont), expected) def test_basic_line_wrap(self): # verify basic line-wrapping operation o = {'RPM_cal': 0, 'RPM_cal2': 48059, 'Speed_cal': 0, 'controldesk_runtime_us': 0, 'main_code_runtime_us': 0, 'read_io_runtime_us': 0, 'write_io_runtime_us': 43690} exp = """\ {'RPM_cal': 0, 'RPM_cal2': 48059, 'Speed_cal': 0, 'controldesk_runtime_us': 0, 'main_code_runtime_us': 0, 'read_io_runtime_us': 0, 'write_io_runtime_us': 43690}""" for type in [dict, dict2]: self.assertEqual(pprint.pformat(type(o)), exp) o = range(100) exp = '[%s]' % ',\n '.join(map(str, o)) for type in [list, list2]: self.assertEqual(pprint.pformat(type(o)), exp) o = tuple(range(100)) exp = '(%s)' % ',\n '.join(map(str, o)) for type in [tuple, tuple2]: self.assertEqual(pprint.pformat(type(o)), exp) # indent parameter o = range(100) exp = '[ %s]' % ',\n '.join(map(str, o)) for type in [list, list2]: self.assertEqual(pprint.pformat(type(o), indent=4), exp) def test_nested_indentations(self): o1 = list(range(10)) o2 = dict(first=1, second=2, third=3) o = [o1, o2] expected = """\ [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], {'first': 1, 'second': 2, 'third': 3}]""" self.assertEqual(pprint.pformat(o, indent=4, width=42), expected) expected = """\ [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], { 'first': 1, 'second': 2, 'third': 3}]""" self.assertEqual(pprint.pformat(o, indent=4, width=41), expected) def test_width(self): expected = """\ [[[[[[1, 2, 3], '1 2']]]], {1: [1, 2, 3], 2: [12, 34]}, 'abc def ghi', ('ab cd ef',), set2({1, 23}), [[[[[1, 2, 3], '1 2']]]]]""" o = eval(expected) self.assertEqual(pprint.pformat(o, width=15), expected) self.assertEqual(pprint.pformat(o, width=16), expected) self.assertEqual(pprint.pformat(o, width=25), expected) self.assertEqual(pprint.pformat(o, width=14), """\ [[[[[[1, 2, 3], '1 ' '2']]]], {1: [1, 2, 3], 2: [12, 34]}, 'abc def ' 'ghi', ('ab cd ' 'ef',), set2({1, 23}), [[[[[1, 2, 3], '1 ' '2']]]]]""") def test_integer(self): self.assertEqual(pprint.pformat(1234567), '1234567') self.assertEqual(pprint.pformat(1234567, underscore_numbers=True), '1_234_567') class Temperature(int): def __new__(cls, celsius_degrees): return super().__new__(Temperature, celsius_degrees) def __repr__(self): kelvin_degrees = self + 273.15 return f"{kelvin_degrees:.2f}°K" self.assertEqual(pprint.pformat(Temperature(1000)), '1273.15°K') def test_sorted_dict(self): # Starting in Python 2.5, pprint sorts dict displays by key regardless # of how small the dictionary may be. # Before the change, on 32-bit Windows pformat() gave order # 'a', 'c', 'b' here, so this test failed. d = {'a': 1, 'b': 1, 'c': 1} self.assertEqual(pprint.pformat(d), "{'a': 1, 'b': 1, 'c': 1}") self.assertEqual(pprint.pformat([d, d]), "[{'a': 1, 'b': 1, 'c': 1}, {'a': 1, 'b': 1, 'c': 1}]") # The next one is kind of goofy. The sorted order depends on the # alphabetic order of type names: "int" < "str" < "tuple". Before # Python 2.5, this was in the test_same_as_repr() test. It's worth # keeping around for now because it's one of few tests of pprint # against a crazy mix of types. self.assertEqual(pprint.pformat({"xy\tab\n": (3,), 5: [[]], (): {}}), r"{5: [[]], 'xy\tab\n': (3,), (): {}}") def test_sort_dict(self): d = dict.fromkeys('cba') self.assertEqual(pprint.pformat(d, sort_dicts=False), "{'c': None, 'b': None, 'a': None}") self.assertEqual(pprint.pformat([d, d], sort_dicts=False), "[{'c': None, 'b': None, 'a': None}, {'c': None, 'b': None, 'a': None}]") def test_ordered_dict(self): d = collections.OrderedDict() self.assertEqual(pprint.pformat(d, width=1), 'OrderedDict()') d = collections.OrderedDict([]) self.assertEqual(pprint.pformat(d, width=1), 'OrderedDict()') words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.OrderedDict(zip(words, itertools.count())) self.assertEqual(pprint.pformat(d), """\ OrderedDict([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), ('dog', 8)])""") def test_mapping_proxy(self): words = 'the quick brown fox jumped over a lazy dog'.split() d = dict(zip(words, itertools.count())) m = types.MappingProxyType(d) self.assertEqual(pprint.pformat(m), """\ mappingproxy({'a': 6, 'brown': 2, 'dog': 8, 'fox': 3, 'jumped': 4, 'lazy': 7, 'over': 5, 'quick': 1, 'the': 0})""") d = collections.OrderedDict(zip(words, itertools.count())) m = types.MappingProxyType(d) self.assertEqual(pprint.pformat(m), """\ mappingproxy(OrderedDict([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), ('dog', 8)]))""") def test_empty_simple_namespace(self): ns = types.SimpleNamespace() formatted = pprint.pformat(ns) self.assertEqual(formatted, "namespace()") def test_small_simple_namespace(self): ns = types.SimpleNamespace(a=1, b=2) formatted = pprint.pformat(ns) self.assertEqual(formatted, "namespace(a=1, b=2)") def test_simple_namespace(self): ns = types.SimpleNamespace( the=0, quick=1, brown=2, fox=3, jumped=4, over=5, a=6, lazy=7, dog=8, ) formatted = pprint.pformat(ns, width=60, indent=4) self.assertEqual(formatted, """\ namespace(the=0, quick=1, brown=2, fox=3, jumped=4, over=5, a=6, lazy=7, dog=8)""") def test_simple_namespace_subclass(self): class AdvancedNamespace(types.SimpleNamespace): pass ns = AdvancedNamespace( the=0, quick=1, brown=2, fox=3, jumped=4, over=5, a=6, lazy=7, dog=8, ) formatted = pprint.pformat(ns, width=60) self.assertEqual(formatted, """\ AdvancedNamespace(the=0, quick=1, brown=2, fox=3, jumped=4, over=5, a=6, lazy=7, dog=8)""") def test_empty_dataclass(self): dc = dataclasses.make_dataclass("MyDataclass", ())() formatted = pprint.pformat(dc) self.assertEqual(formatted, "MyDataclass()") def test_small_dataclass(self): dc = dataclass1("text", 123) formatted = pprint.pformat(dc) self.assertEqual(formatted, "dataclass1(field1='text', field2=123, field3=False)") def test_larger_dataclass(self): dc = dataclass1("some fairly long text", int(1e10), True) formatted = pprint.pformat([dc, dc], width=60, indent=4) self.assertEqual(formatted, """\ [ dataclass1(field1='some fairly long text', field2=10000000000, field3=True), dataclass1(field1='some fairly long text', field2=10000000000, field3=True)]""") def test_dataclass_with_repr(self): dc = dataclass2() formatted = pprint.pformat(dc, width=20) self.assertEqual(formatted, "custom repr that doesn't fit within pprint width") def test_dataclass_no_repr(self): dc = dataclass3() formatted = pprint.pformat(dc, width=10) self.assertRegex( formatted, fr"<{re.escape(__name__)}.dataclass3 object at \w+>", ) def test_recursive_dataclass(self): dc = dataclass4(None) dc.a = dc formatted = pprint.pformat(dc, width=10) self.assertEqual(formatted, """\ dataclass4(a=..., b=1)""") def test_cyclic_dataclass(self): dc5 = dataclass5(None) dc6 = dataclass6(None) dc5.a = dc6 dc6.c = dc5 formatted = pprint.pformat(dc5, width=10) self.assertEqual(formatted, """\ dataclass5(a=dataclass6(c=..., d=1), b=1)""") def test_subclassing(self): # length(repr(obj)) > width o = {'names with spaces': 'should be presented using repr()', 'others.should.not.be': 'like.this'} exp = """\ {'names with spaces': 'should be presented using repr()', others.should.not.be: like.this}""" dotted_printer = DottedPrettyPrinter() self.assertEqual(dotted_printer.pformat(o), exp) # length(repr(obj)) < width o1 = ['with space'] exp1 = "['with space']" self.assertEqual(dotted_printer.pformat(o1), exp1) o2 = ['without.space'] exp2 = "[without.space]" self.assertEqual(dotted_printer.pformat(o2), exp2) def test_set_reprs(self): self.assertEqual(pprint.pformat(set()), 'set()') self.assertEqual(pprint.pformat(set(range(3))), '{0, 1, 2}') self.assertEqual(pprint.pformat(set(range(7)), width=20), '''\ {0, 1, 2, 3, 4, 5, 6}''') self.assertEqual(pprint.pformat(set2(range(7)), width=20), '''\ set2({0, 1, 2, 3, 4, 5, 6})''') self.assertEqual(pprint.pformat(set3(range(7)), width=20), 'set3({0, 1, 2, 3, 4, 5, 6})') self.assertEqual(pprint.pformat(frozenset()), 'frozenset()') self.assertEqual(pprint.pformat(frozenset(range(3))), 'frozenset({0, 1, 2})') self.assertEqual(pprint.pformat(frozenset(range(7)), width=20), '''\ frozenset({0, 1, 2, 3, 4, 5, 6})''') self.assertEqual(pprint.pformat(frozenset2(range(7)), width=20), '''\ frozenset2({0, 1, 2, 3, 4, 5, 6})''') self.assertEqual(pprint.pformat(frozenset3(range(7)), width=20), 'frozenset3({0, 1, 2, 3, 4, 5, 6})') def test_set_of_sets_reprs(self): # This test creates a complex arrangement of frozensets and # compares the pretty-printed repr against a string hard-coded in # the test. The hard-coded repr depends on the sort order of # frozensets. # # However, as the docs point out: "Since sets only define # partial ordering (subset relationships), the output of the # list.sort() method is undefined for lists of sets." # # >>> frozenset({0}) < frozenset({1}) # False # >>> frozenset({1}) < frozenset({0}) # False # # In this test we list all possible invariants of the result # for unordered frozensets. # # This test has a long history, see: # - https://github.com/python/cpython/commit/969fe57baa0eb80332990f9cda936a33e13fabef # - https://github.com/python/cpython/issues/58115 # - https://github.com/python/cpython/issues/111147 import textwrap # Single-line, always ordered: fs0 = frozenset() fs1 = frozenset(('abc', 'xyz')) data = frozenset((fs0, fs1)) self.assertEqual(pprint.pformat(data), 'frozenset({%r, %r})' % (fs0, fs1)) self.assertEqual(pprint.pformat(data), repr(data)) fs2 = frozenset(('one', 'two')) data = {fs2: frozenset((fs0, fs1))} self.assertEqual(pprint.pformat(data), "{%r: frozenset({%r, %r})}" % (fs2, fs0, fs1)) self.assertEqual(pprint.pformat(data), repr(data)) # Single-line, unordered: fs1 = frozenset(("xyz", "qwerty")) fs2 = frozenset(("abcd", "spam")) fs = frozenset((fs1, fs2)) self.assertEqual(pprint.pformat(fs), repr(fs)) # Multiline, unordered: def check(res, invariants): self.assertIn(res, [textwrap.dedent(i).strip() for i in invariants]) # Inner-most frozensets are singleline, result is multiline, unordered: fs1 = frozenset(('regular string', 'other string')) fs2 = frozenset(('third string', 'one more string')) check( pprint.pformat(frozenset((fs1, fs2))), [ """ frozenset({%r, %r}) """ % (fs1, fs2), """ frozenset({%r, %r}) """ % (fs2, fs1), ], ) # Everything is multiline, unordered: check( pprint.pformat( frozenset(( frozenset(( "xyz very-very long string", "qwerty is also absurdly long", )), frozenset(( "abcd is even longer that before", "spam is not so long", )), )), ), [ """ frozenset({frozenset({'abcd is even longer that before', 'spam is not so long'}), frozenset({'qwerty is also absurdly long', 'xyz very-very long string'})}) """, """ frozenset({frozenset({'abcd is even longer that before', 'spam is not so long'}), frozenset({'xyz very-very long string', 'qwerty is also absurdly long'})}) """, """ frozenset({frozenset({'qwerty is also absurdly long', 'xyz very-very long string'}), frozenset({'abcd is even longer that before', 'spam is not so long'})}) """, """ frozenset({frozenset({'qwerty is also absurdly long', 'xyz very-very long string'}), frozenset({'spam is not so long', 'abcd is even longer that before'})}) """, ], ) def test_depth(self): nested_tuple = (1, (2, (3, (4, (5, 6))))) nested_dict = {1: {2: {3: {4: {5: {6: 6}}}}}} nested_list = [1, [2, [3, [4, [5, [6, []]]]]]] self.assertEqual(pprint.pformat(nested_tuple), repr(nested_tuple)) self.assertEqual(pprint.pformat(nested_dict), repr(nested_dict)) self.assertEqual(pprint.pformat(nested_list), repr(nested_list)) lv1_tuple = '(1, (...))' lv1_dict = '{1: {...}}' lv1_list = '[1, [...]]' self.assertEqual(pprint.pformat(nested_tuple, depth=1), lv1_tuple) self.assertEqual(pprint.pformat(nested_dict, depth=1), lv1_dict) self.assertEqual(pprint.pformat(nested_list, depth=1), lv1_list) def test_sort_unorderable_values(self): # Issue 3976: sorted pprints fail for unorderable values. n = 20 keys = [Unorderable() for i in range(n)] random.shuffle(keys) skeys = sorted(keys, key=id) clean = lambda s: s.replace(' ', '').replace('\n','') self.assertEqual(clean(pprint.pformat(set(keys))), '{' + ','.join(map(repr, skeys)) + '}') self.assertEqual(clean(pprint.pformat(frozenset(keys))), 'frozenset({' + ','.join(map(repr, skeys)) + '})') self.assertEqual(clean(pprint.pformat(dict.fromkeys(keys))), '{' + ','.join('%r:None' % k for k in skeys) + '}') # Issue 10017: TypeError on user-defined types as dict keys. self.assertEqual(pprint.pformat({Unorderable: 0, 1: 0}), '{1: 0, ' + repr(Unorderable) +': 0}') # Issue 14998: TypeError on tuples with NoneTypes as dict keys. keys = [(1,), (None,)] self.assertEqual(pprint.pformat(dict.fromkeys(keys, 0)), '{%r: 0, %r: 0}' % tuple(sorted(keys, key=id))) def test_sort_orderable_and_unorderable_values(self): # Issue 22721: sorted pprints is not stable a = Unorderable() b = Orderable(hash(a)) # should have the same hash value # self-test self.assertLess(a, b) self.assertLess(str(type(b)), str(type(a))) self.assertEqual(sorted([b, a]), [a, b]) self.assertEqual(sorted([a, b]), [a, b]) # set self.assertEqual(pprint.pformat(set([b, a]), width=1), '{%r,\n %r}' % (a, b)) self.assertEqual(pprint.pformat(set([a, b]), width=1), '{%r,\n %r}' % (a, b)) # dict self.assertEqual(pprint.pformat(dict.fromkeys([b, a]), width=1), '{%r: None,\n %r: None}' % (a, b)) self.assertEqual(pprint.pformat(dict.fromkeys([a, b]), width=1), '{%r: None,\n %r: None}' % (a, b)) def test_str_wrap(self): # pprint tries to wrap strings intelligently fox = 'the quick brown fox jumped over a lazy dog' self.assertEqual(pprint.pformat(fox, width=19), """\ ('the quick brown ' 'fox jumped over ' 'a lazy dog')""") self.assertEqual(pprint.pformat({'a': 1, 'b': fox, 'c': 2}, width=25), """\ {'a': 1, 'b': 'the quick brown ' 'fox jumped over ' 'a lazy dog', 'c': 2}""") # With some special characters # - \n always triggers a new line in the pprint # - \t and \n are escaped # - non-ASCII is allowed # - an apostrophe doesn't disrupt the pprint special = "Portons dix bons \"whiskys\"\nà l'avocat goujat\t qui fumait au zoo" self.assertEqual(pprint.pformat(special, width=68), repr(special)) self.assertEqual(pprint.pformat(special, width=31), """\ ('Portons dix bons "whiskys"\\n' "à l'avocat goujat\\t qui " 'fumait au zoo')""") self.assertEqual(pprint.pformat(special, width=20), """\ ('Portons dix bons ' '"whiskys"\\n' "à l'avocat " 'goujat\\t qui ' 'fumait au zoo')""") self.assertEqual(pprint.pformat([[[[[special]]]]], width=35), """\ [[[[['Portons dix bons "whiskys"\\n' "à l'avocat goujat\\t qui " 'fumait au zoo']]]]]""") self.assertEqual(pprint.pformat([[[[[special]]]]], width=25), """\ [[[[['Portons dix bons ' '"whiskys"\\n' "à l'avocat " 'goujat\\t qui ' 'fumait au zoo']]]]]""") self.assertEqual(pprint.pformat([[[[[special]]]]], width=23), """\ [[[[['Portons dix ' 'bons "whiskys"\\n' "à l'avocat " 'goujat\\t qui ' 'fumait au ' 'zoo']]]]]""") # An unwrappable string is formatted as its repr unwrappable = "x" * 100 self.assertEqual(pprint.pformat(unwrappable, width=80), repr(unwrappable)) self.assertEqual(pprint.pformat(''), "''") # Check that the pprint is a usable repr special *= 10 for width in range(3, 40): formatted = pprint.pformat(special, width=width) self.assertEqual(eval(formatted), special) formatted = pprint.pformat([special] * 2, width=width) self.assertEqual(eval(formatted), [special] * 2) def test_compact(self): o = ([list(range(i * i)) for i in range(5)] + [list(range(i)) for i in range(6)]) expected = """\ [[], [0], [0, 1, 2, 3], [0, 1, 2, 3, 4, 5, 6, 7, 8], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]""" self.assertEqual(pprint.pformat(o, width=47, compact=True), expected) def test_compact_width(self): levels = 20 number = 10 o = [0] * number for i in range(levels - 1): o = [o] for w in range(levels * 2 + 1, levels + 3 * number - 1): lines = pprint.pformat(o, width=w, compact=True).splitlines() maxwidth = max(map(len, lines)) self.assertLessEqual(maxwidth, w) self.assertGreater(maxwidth, w - 3) def test_bytes_wrap(self): self.assertEqual(pprint.pformat(b'', width=1), "b''") self.assertEqual(pprint.pformat(b'abcd', width=1), "b'abcd'") letters = b'abcdefghijklmnopqrstuvwxyz' self.assertEqual(pprint.pformat(letters, width=29), repr(letters)) self.assertEqual(pprint.pformat(letters, width=19), """\ (b'abcdefghijkl' b'mnopqrstuvwxyz')""") self.assertEqual(pprint.pformat(letters, width=18), """\ (b'abcdefghijkl' b'mnopqrstuvwx' b'yz')""") self.assertEqual(pprint.pformat(letters, width=16), """\ (b'abcdefghijkl' b'mnopqrstuvwx' b'yz')""") special = bytes(range(16)) self.assertEqual(pprint.pformat(special, width=61), repr(special)) self.assertEqual(pprint.pformat(special, width=48), """\ (b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") self.assertEqual(pprint.pformat(special, width=32), """\ (b'\\x00\\x01\\x02\\x03' b'\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") self.assertEqual(pprint.pformat(special, width=1), """\ (b'\\x00\\x01\\x02\\x03' b'\\x04\\x05\\x06\\x07' b'\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") self.assertEqual(pprint.pformat({'a': 1, 'b': letters, 'c': 2}, width=21), """\ {'a': 1, 'b': b'abcdefghijkl' b'mnopqrstuvwx' b'yz', 'c': 2}""") self.assertEqual(pprint.pformat({'a': 1, 'b': letters, 'c': 2}, width=20), """\ {'a': 1, 'b': b'abcdefgh' b'ijklmnop' b'qrstuvwxyz', 'c': 2}""") self.assertEqual(pprint.pformat([[[[[[letters]]]]]], width=25), """\ [[[[[[b'abcdefghijklmnop' b'qrstuvwxyz']]]]]]""") self.assertEqual(pprint.pformat([[[[[[special]]]]]], width=41), """\ [[[[[[b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07' b'\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f']]]]]]""") # Check that the pprint is a usable repr for width in range(1, 64): formatted = pprint.pformat(special, width=width) self.assertEqual(eval(formatted), special) formatted = pprint.pformat([special] * 2, width=width) self.assertEqual(eval(formatted), [special] * 2) def test_bytearray_wrap(self): self.assertEqual(pprint.pformat(bytearray(), width=1), "bytearray(b'')") letters = bytearray(b'abcdefghijklmnopqrstuvwxyz') self.assertEqual(pprint.pformat(letters, width=40), repr(letters)) self.assertEqual(pprint.pformat(letters, width=28), """\ bytearray(b'abcdefghijkl' b'mnopqrstuvwxyz')""") self.assertEqual(pprint.pformat(letters, width=27), """\ bytearray(b'abcdefghijkl' b'mnopqrstuvwx' b'yz')""") self.assertEqual(pprint.pformat(letters, width=25), """\ bytearray(b'abcdefghijkl' b'mnopqrstuvwx' b'yz')""") special = bytearray(range(16)) self.assertEqual(pprint.pformat(special, width=72), repr(special)) self.assertEqual(pprint.pformat(special, width=57), """\ bytearray(b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") self.assertEqual(pprint.pformat(special, width=41), """\ bytearray(b'\\x00\\x01\\x02\\x03' b'\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") self.assertEqual(pprint.pformat(special, width=1), """\ bytearray(b'\\x00\\x01\\x02\\x03' b'\\x04\\x05\\x06\\x07' b'\\x08\\t\\n\\x0b' b'\\x0c\\r\\x0e\\x0f')""") self.assertEqual(pprint.pformat({'a': 1, 'b': letters, 'c': 2}, width=31), """\ {'a': 1, 'b': bytearray(b'abcdefghijkl' b'mnopqrstuvwx' b'yz'), 'c': 2}""") self.assertEqual(pprint.pformat([[[[[letters]]]]], width=37), """\ [[[[[bytearray(b'abcdefghijklmnop' b'qrstuvwxyz')]]]]]""") self.assertEqual(pprint.pformat([[[[[special]]]]], width=50), """\ [[[[[bytearray(b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07' b'\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f')]]]]]""") def test_default_dict(self): d = collections.defaultdict(int) self.assertEqual(pprint.pformat(d, width=1), "defaultdict(<class 'int'>, {})") words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.defaultdict(int, zip(words, itertools.count())) self.assertEqual(pprint.pformat(d), """\ defaultdict(<class 'int'>, {'a': 6, 'brown': 2, 'dog': 8, 'fox': 3, 'jumped': 4, 'lazy': 7, 'over': 5, 'quick': 1, 'the': 0})""") def test_counter(self): d = collections.Counter() self.assertEqual(pprint.pformat(d, width=1), "Counter()") d = collections.Counter('senselessness') self.assertEqual(pprint.pformat(d, width=40), """\ Counter({'s': 6, 'e': 4, 'n': 2, 'l': 1})""") def test_chainmap(self): d = collections.ChainMap() self.assertEqual(pprint.pformat(d, width=1), "ChainMap({})") words = 'the quick brown fox jumped over a lazy dog'.split() items = list(zip(words, itertools.count())) d = collections.ChainMap(dict(items)) self.assertEqual(pprint.pformat(d), """\ ChainMap({'a': 6, 'brown': 2, 'dog': 8, 'fox': 3, 'jumped': 4, 'lazy': 7, 'over': 5, 'quick': 1, 'the': 0})""") d = collections.ChainMap(dict(items), collections.OrderedDict(items)) self.assertEqual(pprint.pformat(d), """\ ChainMap({'a': 6, 'brown': 2, 'dog': 8, 'fox': 3, 'jumped': 4, 'lazy': 7, 'over': 5, 'quick': 1, 'the': 0}, OrderedDict([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), ('dog', 8)]))""") def test_deque(self): d = collections.deque() self.assertEqual(pprint.pformat(d, width=1), "deque([])") d = collections.deque(maxlen=7) self.assertEqual(pprint.pformat(d, width=1), "deque([], maxlen=7)") words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.deque(zip(words, itertools.count())) self.assertEqual(pprint.pformat(d), """\ deque([('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), ('dog', 8)])""") d = collections.deque(zip(words, itertools.count()), maxlen=7) self.assertEqual(pprint.pformat(d), """\ deque([('brown', 2), ('fox', 3), ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), ('dog', 8)], maxlen=7)""") def test_user_dict(self): d = collections.UserDict() self.assertEqual(pprint.pformat(d, width=1), "{}") words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.UserDict(zip(words, itertools.count())) self.assertEqual(pprint.pformat(d), """\ {'a': 6, 'brown': 2, 'dog': 8, 'fox': 3, 'jumped': 4, 'lazy': 7, 'over': 5, 'quick': 1, 'the': 0}""") def test_user_list(self): d = collections.UserList() self.assertEqual(pprint.pformat(d, width=1), "[]") words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.UserList(zip(words, itertools.count())) self.assertEqual(pprint.pformat(d), """\ [('the', 0), ('quick', 1), ('brown', 2), ('fox', 3), ('jumped', 4), ('over', 5), ('a', 6), ('lazy', 7), ('dog', 8)]""") def test_user_string(self): d = collections.UserString('') self.assertEqual(pprint.pformat(d, width=1), "''") d = collections.UserString('the quick brown fox jumped over a lazy dog') self.assertEqual(pprint.pformat(d, width=20), """\ ('the quick brown ' 'fox jumped over ' 'a lazy dog')""") self.assertEqual(pprint.pformat({1: d}, width=20), """\ {1: 'the quick ' 'brown fox ' 'jumped over a ' 'lazy dog'}""") class DottedPrettyPrinter(pprint.PrettyPrinter): def format(self, object, context, maxlevels, level): if isinstance(object, str): if ' ' in object: return repr(object), 1, 0 else: return object, 0, 0 else: return pprint.PrettyPrinter.format( self, object, context, maxlevels, level) if __name__ == "__main__": unittest.main()