Linux vps-61133.fhnet.fr 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64
Apache/2.4.25 (Debian)
Server IP : 93.113.207.21 & Your IP : 216.73.216.119
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
src /
Python-3.10.14 /
Lib /
test /
Delete
Unzip
Name
Size
Permission
Date
Action
audiodata
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
capath
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
cjkencodings
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
crashers
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
data
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
decimaltestdata
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
dtracedata
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
encoded_modules
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
imghdrdata
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
leakers
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
libregrtest
[ DIR ]
drwxr-xr-x
2025-06-04 09:21
sndhdrdata
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
subprocessdata
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
support
[ DIR ]
drwxr-xr-x
2025-06-04 09:21
test_asyncio
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
test_capi
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
test_email
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
test_import
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
test_importlib
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
test_json
[ DIR ]
drwxr-xr-x
2025-06-04 09:21
test_peg_generator
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
test_tools
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
test_warnings
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
test_zoneinfo
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
tracedmodules
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
typinganndata
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
xmltestdata
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
ziptestdata
[ DIR ]
drwxr-xr-x
2024-03-19 22:46
Sine-1000Hz-300ms.aif
60.25
KB
-rw-r--r--
2024-03-19 22:46
__init__.py
47
B
-rw-r--r--
2024-03-19 22:46
__main__.py
41
B
-rw-r--r--
2024-03-19 22:46
_test_atexit.py
3.61
KB
-rw-r--r--
2024-03-19 22:46
_test_eintr.py
17.65
KB
-rw-r--r--
2024-03-19 22:46
_test_embed_set_config.py
8.55
KB
-rw-r--r--
2024-03-19 22:46
_test_multiprocessing.py
193.64
KB
-rw-r--r--
2024-03-19 22:46
_typed_dict_helper.py
494
B
-rw-r--r--
2024-03-19 22:46
allsans.pem
9.87
KB
-rw-r--r--
2024-03-19 22:46
ann_module.py
1.09
KB
-rw-r--r--
2024-03-19 22:46
ann_module2.py
519
B
-rw-r--r--
2024-03-19 22:46
ann_module3.py
448
B
-rw-r--r--
2024-03-19 22:46
ann_module4.py
81
B
-rw-r--r--
2024-03-19 22:46
ann_module5.py
202
B
-rw-r--r--
2024-03-19 22:46
ann_module6.py
138
B
-rw-r--r--
2024-03-19 22:46
ann_module7.py
295
B
-rw-r--r--
2024-03-19 22:46
audiotest.au
27.48
KB
-rw-r--r--
2024-03-19 22:46
audiotests.py
12.13
KB
-rw-r--r--
2024-03-19 22:46
audit-tests.py
11.35
KB
-rw-r--r--
2024-03-19 22:46
autotest.py
209
B
-rw-r--r--
2024-03-19 22:46
bad_coding.py
24
B
-rw-r--r--
2024-03-19 22:46
bad_coding2.py
30
B
-rw-r--r--
2024-03-19 22:46
bad_getattr.py
61
B
-rw-r--r--
2024-03-19 22:46
bad_getattr2.py
77
B
-rw-r--r--
2024-03-19 22:46
bad_getattr3.py
139
B
-rw-r--r--
2024-03-19 22:46
badcert.pem
1.88
KB
-rw-r--r--
2024-03-19 22:46
badkey.pem
2.11
KB
-rw-r--r--
2024-03-19 22:46
badsyntax_3131.py
32
B
-rw-r--r--
2024-03-19 22:46
badsyntax_future10.py
95
B
-rw-r--r--
2024-03-19 22:46
badsyntax_future3.py
172
B
-rw-r--r--
2024-03-19 22:46
badsyntax_future4.py
153
B
-rw-r--r--
2024-03-19 22:46
badsyntax_future5.py
184
B
-rw-r--r--
2024-03-19 22:46
badsyntax_future6.py
161
B
-rw-r--r--
2024-03-19 22:46
badsyntax_future7.py
196
B
-rw-r--r--
2024-03-19 22:46
badsyntax_future8.py
122
B
-rw-r--r--
2024-03-19 22:46
badsyntax_future9.py
142
B
-rw-r--r--
2024-03-19 22:46
badsyntax_pep3120.py
14
B
-rw-r--r--
2024-03-19 22:46
bisect_cmd.py
5.21
KB
-rwxr-xr-x
2024-03-19 22:46
cfgparser.1
67
B
-rw-r--r--
2024-03-19 22:46
cfgparser.2
19.02
KB
-rw-r--r--
2024-03-19 22:46
cfgparser.3
1.55
KB
-rw-r--r--
2024-03-19 22:46
clinic.test
94.05
KB
-rw-r--r--
2024-03-19 22:46
cmath_testcases.txt
141.05
KB
-rw-r--r--
2024-03-19 22:46
coding20731.py
22
B
-rw-r--r--
2024-03-19 22:46
curses_tests.py
1.21
KB
-rwxr-xr-x
2024-03-19 22:46
dataclass_module_1.py
837
B
-rw-r--r--
2024-03-19 22:46
dataclass_module_1_str.py
835
B
-rw-r--r--
2024-03-19 22:46
dataclass_module_2.py
756
B
-rw-r--r--
2024-03-19 22:46
dataclass_module_2_str.py
754
B
-rw-r--r--
2024-03-19 22:46
dataclass_textanno.py
126
B
-rw-r--r--
2024-03-19 22:46
datetimetester.py
245.16
KB
-rw-r--r--
2024-03-19 22:46
dis_module.py
76
B
-rw-r--r--
2024-03-19 22:46
doctest_aliases.py
240
B
-rw-r--r--
2024-03-19 22:46
doctest_lineno.py
914
B
-rw-r--r--
2024-03-19 22:46
double_const.py
1.18
KB
-rw-r--r--
2024-03-19 22:46
empty.vbs
70
B
-rw-r--r--
2024-03-19 22:46
exception_hierarchy.txt
1.81
KB
-rw-r--r--
2024-03-19 22:46
ffdh3072.pem
2.16
KB
-rw-r--r--
2024-03-19 22:46
final_a.py
411
B
-rw-r--r--
2024-03-19 22:46
final_b.py
411
B
-rw-r--r--
2024-03-19 22:46
floating_points.txt
15.92
KB
-rw-r--r--
2024-03-19 22:46
fork_wait.py
2.23
KB
-rw-r--r--
2024-03-19 22:46
formatfloat_testcases.txt
7.45
KB
-rw-r--r--
2024-03-19 22:46
future_test1.py
229
B
-rw-r--r--
2024-03-19 22:46
future_test2.py
149
B
-rw-r--r--
2024-03-19 22:46
gdb_sample.py
153
B
-rw-r--r--
2024-03-19 22:46
good_getattr.py
198
B
-rw-r--r--
2024-03-19 22:46
idnsans.pem
9.71
KB
-rw-r--r--
2024-03-19 22:46
ieee754.txt
3.21
KB
-rw-r--r--
2024-03-19 22:46
imp_dummy.py
63
B
-rw-r--r--
2024-03-19 22:46
inspect_fodder.py
1.88
KB
-rw-r--r--
2024-03-19 22:46
inspect_fodder2.py
3.69
KB
-rw-r--r--
2024-03-19 22:46
inspect_stock_annotations.py
509
B
-rw-r--r--
2024-03-19 22:46
inspect_stringized_annotations.py
612
B
-rw-r--r--
2024-03-19 22:46
inspect_stringized_annotations_2.py
60
B
-rw-r--r--
2024-03-19 22:46
keycert.passwd.pem
4.13
KB
-rw-r--r--
2024-03-19 22:46
keycert.pem
3.96
KB
-rw-r--r--
2024-03-19 22:46
keycert2.pem
3.98
KB
-rw-r--r--
2024-03-19 22:46
keycert3.pem
9.23
KB
-rw-r--r--
2024-03-19 22:46
keycert4.pem
9.24
KB
-rw-r--r--
2024-03-19 22:46
keycertecc.pem
5.5
KB
-rw-r--r--
2024-03-19 22:46
list_tests.py
16.65
KB
-rw-r--r--
2024-03-19 22:46
lock_tests.py
30.15
KB
-rw-r--r--
2024-03-19 22:46
mailcap.txt
1.24
KB
-rw-r--r--
2024-03-19 22:46
make_ssl_certs.py
9.25
KB
-rw-r--r--
2024-03-19 22:46
mapping_tests.py
21.83
KB
-rw-r--r--
2024-03-19 22:46
math_testcases.txt
23.19
KB
-rw-r--r--
2024-03-19 22:46
memory_watchdog.py
859
B
-rw-r--r--
2024-03-19 22:46
mime.types
47.37
KB
-rw-r--r--
2024-03-19 22:46
mock_socket.py
3.7
KB
-rw-r--r--
2024-03-19 22:46
mod_generics_cache.py
1.13
KB
-rw-r--r--
2024-03-19 22:46
mp_fork_bomb.py
448
B
-rw-r--r--
2024-03-19 22:46
mp_preload.py
351
B
-rw-r--r--
2024-03-19 22:46
multibytecodec_support.py
14.19
KB
-rw-r--r--
2024-03-19 22:46
nokia.pem
1.88
KB
-rw-r--r--
2024-03-19 22:46
nosan.pem
7.54
KB
-rw-r--r--
2024-03-19 22:46
nullbytecert.pem
5.31
KB
-rw-r--r--
2024-03-19 22:46
nullcert.pem
0
B
-rw-r--r--
2024-03-19 22:46
pickletester.py
141.12
KB
-rw-r--r--
2024-03-19 22:46
profilee.py
2.97
KB
-rw-r--r--
2024-03-19 22:46
pstats.pck
65.05
KB
-rw-r--r--
2024-03-19 22:46
pycacert.pem
5.53
KB
-rw-r--r--
2024-03-19 22:46
pycakey.pem
2.43
KB
-rw-r--r--
2024-03-19 22:46
pyclbr_input.py
648
B
-rw-r--r--
2024-03-19 22:46
pydoc_mod.py
961
B
-rw-r--r--
2024-03-19 22:46
pydocfodder.py
6.18
KB
-rw-r--r--
2024-03-19 22:46
pythoninfo.py
23.52
KB
-rw-r--r--
2024-03-19 22:46
randv2_32.pck
7.34
KB
-rw-r--r--
2024-03-19 22:46
randv2_64.pck
7.19
KB
-rw-r--r--
2024-03-19 22:46
randv3.pck
7.82
KB
-rw-r--r--
2024-03-19 22:46
re_tests.py
25.93
KB
-rwxr-xr-x
2024-03-19 22:46
recursion.tar
516
B
-rw-r--r--
2024-03-19 22:46
regrtest.py
1.26
KB
-rwxr-xr-x
2024-03-19 22:46
relimport.py
27
B
-rw-r--r--
2024-03-19 22:46
reperf.py
538
B
-rw-r--r--
2024-03-19 22:46
revocation.crl
800
B
-rw-r--r--
2024-03-19 22:46
sample_doctest.py
1.02
KB
-rw-r--r--
2024-03-19 22:46
sample_doctest_no_docstrings.py
227
B
-rw-r--r--
2024-03-19 22:46
sample_doctest_no_doctests.py
269
B
-rw-r--r--
2024-03-19 22:46
secp384r1.pem
256
B
-rw-r--r--
2024-03-19 22:46
selfsigned_pythontestdotnet.pem
2.08
KB
-rw-r--r--
2024-03-19 22:46
seq_tests.py
14.87
KB
-rw-r--r--
2024-03-19 22:46
sgml_input.html
8.1
KB
-rw-r--r--
2024-03-19 22:46
signalinterproctester.py
2.74
KB
-rw-r--r--
2024-03-19 22:46
sortperf.py
4.69
KB
-rw-r--r--
2024-03-19 22:46
ssl_cert.pem
1.53
KB
-rw-r--r--
2024-03-19 22:46
ssl_key.passwd.pem
2.59
KB
-rw-r--r--
2024-03-19 22:46
ssl_key.pem
2.43
KB
-rw-r--r--
2024-03-19 22:46
ssl_servers.py
7.11
KB
-rw-r--r--
2024-03-19 22:46
ssltests.py
1.03
KB
-rw-r--r--
2024-03-19 22:46
string_tests.py
68.03
KB
-rw-r--r--
2024-03-19 22:46
talos-2019-0758.pem
1.3
KB
-rw-r--r--
2024-03-19 22:46
test___all__.py
4.54
KB
-rw-r--r--
2024-03-19 22:46
test___future__.py
2.36
KB
-rw-r--r--
2024-03-19 22:46
test__locale.py
7.83
KB
-rw-r--r--
2024-03-19 22:46
test__opcode.py
3.05
KB
-rw-r--r--
2024-03-19 22:46
test__osx_support.py
13.64
KB
-rw-r--r--
2024-03-19 22:46
test__xxsubinterpreters.py
78.94
KB
-rw-r--r--
2024-03-19 22:46
test_abc.py
23.19
KB
-rw-r--r--
2024-03-19 22:46
test_abstract_numbers.py
1.49
KB
-rw-r--r--
2024-03-19 22:46
test_aifc.py
17.77
KB
-rw-r--r--
2024-03-19 22:46
test_argparse.py
181.08
KB
-rw-r--r--
2024-03-19 22:46
test_array.py
55.21
KB
-rwxr-xr-x
2024-03-19 22:46
test_asdl_parser.py
4.44
KB
-rw-r--r--
2024-03-19 22:46
test_ast.py
107.27
KB
-rw-r--r--
2024-03-19 22:46
test_asyncgen.py
46.8
KB
-rw-r--r--
2024-03-19 22:46
test_asynchat.py
9.4
KB
-rw-r--r--
2024-03-19 22:46
test_asyncore.py
26.13
KB
-rw-r--r--
2024-03-19 22:46
test_atexit.py
3.14
KB
-rw-r--r--
2024-03-19 22:46
test_audioop.py
28.24
KB
-rw-r--r--
2024-03-19 22:46
test_audit.py
6.46
KB
-rw-r--r--
2024-03-19 22:46
test_augassign.py
7.68
KB
-rw-r--r--
2024-03-19 22:46
test_base64.py
34.51
KB
-rw-r--r--
2024-03-19 22:46
test_baseexception.py
7.77
KB
-rw-r--r--
2024-03-19 22:46
test_bdb.py
43.63
KB
-rw-r--r--
2024-03-19 22:46
test_bigaddrspace.py
2.83
KB
-rw-r--r--
2024-03-19 22:46
test_bigmem.py
44.78
KB
-rw-r--r--
2024-03-19 22:46
test_binascii.py
19.27
KB
-rw-r--r--
2024-03-19 22:46
test_binhex.py
2.1
KB
-rw-r--r--
2024-03-19 22:46
test_binop.py
14.14
KB
-rw-r--r--
2024-03-19 22:46
test_bisect.py
15.71
KB
-rw-r--r--
2024-03-19 22:46
test_bool.py
12.73
KB
-rw-r--r--
2024-03-19 22:46
test_buffer.py
160.31
KB
-rw-r--r--
2024-03-19 22:46
test_bufio.py
2.58
KB
-rw-r--r--
2024-03-19 22:46
test_builtin.py
85.98
KB
-rw-r--r--
2024-03-19 22:46
test_bytes.py
76.03
KB
-rw-r--r--
2024-03-19 22:46
test_bz2.py
37.23
KB
-rw-r--r--
2024-03-19 22:46
test_c_locale_coercion.py
18.92
KB
-rw-r--r--
2024-03-19 22:46
test_calendar.py
51.02
KB
-rw-r--r--
2024-03-19 22:46
test_call.py
26.23
KB
-rw-r--r--
2024-03-19 22:46
test_cgi.py
22.26
KB
-rw-r--r--
2024-03-19 22:46
test_cgitb.py
2.54
KB
-rw-r--r--
2024-03-19 22:46
test_charmapcodec.py
1.77
KB
-rw-r--r--
2024-03-19 22:46
test_check_c_globals.py
1.02
KB
-rw-r--r--
2024-03-19 22:46
test_class.py
17.41
KB
-rw-r--r--
2024-03-19 22:46
test_clinic.py
43.03
KB
-rw-r--r--
2024-03-19 22:46
test_cmath.py
24.08
KB
-rw-r--r--
2024-03-19 22:46
test_cmd.py
6.1
KB
-rw-r--r--
2024-03-19 22:46
test_cmd_line.py
37.59
KB
-rw-r--r--
2024-03-19 22:46
test_cmd_line_script.py
33.43
KB
-rw-r--r--
2024-03-19 22:46
test_code.py
12.67
KB
-rw-r--r--
2024-03-19 22:46
test_code_module.py
5.53
KB
-rw-r--r--
2024-03-19 22:46
test_codeccallbacks.py
47.43
KB
-rw-r--r--
2024-03-19 22:46
test_codecencodings_cn.py
3.86
KB
-rw-r--r--
2024-03-19 22:46
test_codecencodings_hk.py
701
B
-rw-r--r--
2024-03-19 22:46
test_codecencodings_iso2022.py
3.65
KB
-rw-r--r--
2024-03-19 22:46
test_codecencodings_jp.py
4.79
KB
-rw-r--r--
2024-03-19 22:46
test_codecencodings_kr.py
2.96
KB
-rw-r--r--
2024-03-19 22:46
test_codecencodings_tw.py
681
B
-rw-r--r--
2024-03-19 22:46
test_codecmaps_cn.py
746
B
-rw-r--r--
2024-03-19 22:46
test_codecmaps_hk.py
386
B
-rw-r--r--
2024-03-19 22:46
test_codecmaps_jp.py
1.7
KB
-rw-r--r--
2024-03-19 22:46
test_codecmaps_kr.py
1.16
KB
-rw-r--r--
2024-03-19 22:46
test_codecmaps_tw.py
705
B
-rw-r--r--
2024-03-19 22:46
test_codecs.py
133.35
KB
-rw-r--r--
2024-03-19 22:46
test_codeop.py
9.18
KB
-rw-r--r--
2024-03-19 22:46
test_collections.py
92.15
KB
-rw-r--r--
2024-03-19 22:46
test_colorsys.py
3.83
KB
-rw-r--r--
2024-03-19 22:46
test_compare.py
3.74
KB
-rw-r--r--
2024-03-19 22:46
test_compile.py
46.33
KB
-rw-r--r--
2024-03-19 22:46
test_compileall.py
47.55
KB
-rw-r--r--
2024-03-19 22:46
test_complex.py
32.54
KB
-rw-r--r--
2024-03-19 22:46
test_concurrent_futures.py
56.63
KB
-rw-r--r--
2024-03-19 22:46
test_configparser.py
85.4
KB
-rw-r--r--
2024-03-19 22:46
test_contains.py
3.35
KB
-rw-r--r--
2024-03-19 22:46
test_context.py
30.63
KB
-rw-r--r--
2024-03-19 22:46
test_contextlib.py
36.9
KB
-rw-r--r--
2024-03-19 22:46
test_contextlib_async.py
20.67
KB
-rw-r--r--
2024-03-19 22:46
test_copy.py
26.63
KB
-rw-r--r--
2024-03-19 22:46
test_copyreg.py
4.39
KB
-rw-r--r--
2024-03-19 22:46
test_coroutines.py
63.79
KB
-rw-r--r--
2024-03-19 22:46
test_cprofile.py
6.33
KB
-rw-r--r--
2024-03-19 22:46
test_crashers.py
1.17
KB
-rw-r--r--
2024-03-19 22:46
test_crypt.py
4.14
KB
-rw-r--r--
2024-03-19 22:46
test_csv.py
52.99
KB
-rw-r--r--
2024-03-19 22:46
test_ctypes.py
199
B
-rw-r--r--
2024-03-19 22:46
test_curses.py
46.58
KB
-rw-r--r--
2024-03-19 22:46
test_dataclasses.py
126.75
KB
-rw-r--r--
2024-03-19 22:46
test_datetime.py
2.31
KB
-rw-r--r--
2024-03-19 22:46
test_dbm.py
6.11
KB
-rw-r--r--
2024-03-19 22:46
test_dbm_dumb.py
10.68
KB
-rw-r--r--
2024-03-19 22:46
test_dbm_gnu.py
6.51
KB
-rw-r--r--
2024-03-19 22:46
test_dbm_ndbm.py
5.12
KB
-rw-r--r--
2024-03-19 22:46
test_decimal.py
209.81
KB
-rw-r--r--
2024-03-19 22:46
test_decorators.py
14.42
KB
-rw-r--r--
2024-03-19 22:46
test_defaultdict.py
6.13
KB
-rw-r--r--
2024-03-19 22:46
test_deque.py
33.63
KB
-rw-r--r--
2024-03-19 22:46
test_descr.py
192.65
KB
-rw-r--r--
2024-03-19 22:46
test_descrtut.py
11.57
KB
-rw-r--r--
2024-03-19 22:46
test_devpoll.py
4.44
KB
-rw-r--r--
2024-03-19 22:46
test_dict.py
50.72
KB
-rw-r--r--
2024-03-19 22:46
test_dict_version.py
6.1
KB
-rw-r--r--
2024-03-19 22:46
test_dictcomps.py
5.15
KB
-rw-r--r--
2024-03-19 22:46
test_dictviews.py
13.69
KB
-rw-r--r--
2024-03-19 22:46
test_difflib.py
21.47
KB
-rw-r--r--
2024-03-19 22:46
test_difflib_expect.html
100.85
KB
-rw-r--r--
2024-03-19 22:46
test_dis.py
56.47
KB
-rw-r--r--
2024-03-19 22:46
test_distutils.py
587
B
-rw-r--r--
2024-03-19 22:46
test_doctest.py
101.1
KB
-rw-r--r--
2024-03-19 22:46
test_doctest.txt
300
B
-rw-r--r--
2024-03-19 22:46
test_doctest2.py
2.36
KB
-rw-r--r--
2024-03-19 22:46
test_doctest2.txt
392
B
-rw-r--r--
2024-03-19 22:46
test_doctest3.txt
82
B
-rw-r--r--
2024-03-19 22:46
test_doctest4.txt
244
B
-rw-r--r--
2024-03-19 22:46
test_docxmlrpc.py
8.67
KB
-rw-r--r--
2024-03-19 22:46
test_dtrace.py
5.14
KB
-rw-r--r--
2024-03-19 22:46
test_dynamic.py
4.29
KB
-rw-r--r--
2024-03-19 22:46
test_dynamicclassattribute.py
9.57
KB
-rw-r--r--
2024-03-19 22:46
test_eintr.py
584
B
-rw-r--r--
2024-03-19 22:46
test_embed.py
55.88
KB
-rw-r--r--
2024-03-19 22:46
test_ensurepip.py
12.2
KB
-rw-r--r--
2024-03-19 22:46
test_enum.py
121.13
KB
-rw-r--r--
2024-03-19 22:46
test_enumerate.py
8.46
KB
-rw-r--r--
2024-03-19 22:46
test_eof.py
3.02
KB
-rw-r--r--
2024-03-19 22:46
test_epoll.py
9.14
KB
-rw-r--r--
2024-03-19 22:46
test_errno.py
1.04
KB
-rw-r--r--
2024-03-19 22:46
test_exception_hierarchy.py
7.43
KB
-rw-r--r--
2024-03-19 22:46
test_exception_variations.py
3.86
KB
-rw-r--r--
2024-03-19 22:46
test_exceptions.py
90.94
KB
-rw-r--r--
2024-03-19 22:46
test_extcall.py
14.05
KB
-rw-r--r--
2024-03-19 22:46
test_faulthandler.py
30.11
KB
-rw-r--r--
2024-03-19 22:46
test_fcntl.py
7.43
KB
-rw-r--r--
2024-03-19 22:46
test_file.py
11.78
KB
-rw-r--r--
2024-03-19 22:46
test_file_eintr.py
10.61
KB
-rw-r--r--
2024-03-19 22:46
test_filecmp.py
10.33
KB
-rw-r--r--
2024-03-19 22:46
test_fileinput.py
40.18
KB
-rw-r--r--
2024-03-19 22:46
test_fileio.py
19.93
KB
-rw-r--r--
2024-03-19 22:46
test_finalization.py
14.66
KB
-rw-r--r--
2024-03-19 22:46
test_float.py
66.39
KB
-rw-r--r--
2024-03-19 22:46
test_flufl.py
1.55
KB
-rw-r--r--
2024-03-19 22:46
test_fnmatch.py
11.1
KB
-rw-r--r--
2024-03-19 22:46
test_fork1.py
3.24
KB
-rw-r--r--
2024-03-19 22:46
test_format.py
23.91
KB
-rw-r--r--
2024-03-19 22:46
test_fractions.py
29.7
KB
-rw-r--r--
2024-03-19 22:46
test_frame.py
6.22
KB
-rw-r--r--
2024-03-19 22:46
test_frozen.py
943
B
-rw-r--r--
2024-03-19 22:46
test_fstring.py
52.54
KB
-rw-r--r--
2024-03-19 22:46
test_ftplib.py
41.99
KB
-rw-r--r--
2024-03-19 22:46
test_funcattrs.py
14.86
KB
-rw-r--r--
2024-03-19 22:46
test_functools.py
102.67
KB
-rw-r--r--
2024-03-19 22:46
test_future.py
14.88
KB
-rw-r--r--
2024-03-19 22:46
test_future3.py
490
B
-rw-r--r--
2024-03-19 22:46
test_future4.py
222
B
-rw-r--r--
2024-03-19 22:46
test_future5.py
510
B
-rw-r--r--
2024-03-19 22:46
test_gc.py
45.92
KB
-rw-r--r--
2024-03-19 22:46
test_gdb.py
41.71
KB
-rw-r--r--
2024-03-19 22:46
test_generator_stop.py
943
B
-rw-r--r--
2024-03-19 22:46
test_generators.py
63.77
KB
-rw-r--r--
2024-03-19 22:46
test_genericalias.py
12.77
KB
-rw-r--r--
2024-03-19 22:46
test_genericclass.py
9.28
KB
-rw-r--r--
2024-03-19 22:46
test_genericpath.py
21.84
KB
-rw-r--r--
2024-03-19 22:46
test_genexps.py
7.63
KB
-rw-r--r--
2024-03-19 22:46
test_getopt.py
6.78
KB
-rw-r--r--
2024-03-19 22:46
test_getpass.py
6.29
KB
-rw-r--r--
2024-03-19 22:46
test_gettext.py
41.42
KB
-rw-r--r--
2024-03-19 22:46
test_glob.py
15.35
KB
-rw-r--r--
2024-03-19 22:46
test_global.py
1.38
KB
-rw-r--r--
2024-03-19 22:46
test_grammar.py
63.22
KB
-rw-r--r--
2024-03-19 22:46
test_graphlib.py
8.34
KB
-rw-r--r--
2024-03-19 22:46
test_grp.py
3.67
KB
-rw-r--r--
2024-03-19 22:46
test_gzip.py
30.63
KB
-rw-r--r--
2024-03-19 22:46
test_hash.py
11.45
KB
-rw-r--r--
2024-03-19 22:46
test_hashlib.py
44.92
KB
-rw-r--r--
2024-03-19 22:46
test_heapq.py
16.45
KB
-rw-r--r--
2024-03-19 22:46
test_hmac.py
25.41
KB
-rw-r--r--
2024-03-19 22:46
test_html.py
4.23
KB
-rw-r--r--
2024-03-19 22:46
test_htmlparser.py
32.93
KB
-rw-r--r--
2024-03-19 22:46
test_http_cookiejar.py
78.4
KB
-rw-r--r--
2024-03-19 22:46
test_http_cookies.py
18.71
KB
-rw-r--r--
2024-03-19 22:46
test_httplib.py
79.14
KB
-rw-r--r--
2024-03-19 22:46
test_httpservers.py
55.11
KB
-rw-r--r--
2024-03-19 22:46
test_idle.py
1014
B
-rw-r--r--
2024-03-19 22:46
test_imaplib.py
42.13
KB
-rw-r--r--
2024-03-19 22:46
test_imghdr.py
4.69
KB
-rw-r--r--
2024-03-19 22:46
test_imp.py
18.93
KB
-rw-r--r--
2024-03-19 22:46
test_index.py
8.37
KB
-rw-r--r--
2024-03-19 22:46
test_inspect.py
172.66
KB
-rw-r--r--
2024-03-19 22:46
test_int.py
28.32
KB
-rw-r--r--
2024-03-19 22:46
test_int_literal.py
6.89
KB
-rw-r--r--
2024-03-19 22:46
test_interpreters.py
22.48
KB
-rw-r--r--
2024-03-19 22:46
test_io.py
171.42
KB
-rw-r--r--
2024-03-19 22:46
test_ioctl.py
3.24
KB
-rw-r--r--
2024-03-19 22:46
test_ipaddress.py
116.78
KB
-rw-r--r--
2024-03-19 22:46
test_isinstance.py
12.96
KB
-rw-r--r--
2024-03-19 22:46
test_iter.py
36.76
KB
-rw-r--r--
2024-03-19 22:46
test_iterlen.py
7.1
KB
-rw-r--r--
2024-03-19 22:46
test_itertools.py
108.43
KB
-rw-r--r--
2024-03-19 22:46
test_keyword.py
1.97
KB
-rw-r--r--
2024-03-19 22:46
test_keywordonlyarg.py
6.89
KB
-rw-r--r--
2024-03-19 22:46
test_kqueue.py
8.76
KB
-rw-r--r--
2024-03-19 22:46
test_largefile.py
9.98
KB
-rw-r--r--
2024-03-19 22:46
test_lib2to3.py
318
B
-rw-r--r--
2024-03-19 22:46
test_linecache.py
9.64
KB
-rw-r--r--
2024-03-19 22:46
test_list.py
7.98
KB
-rw-r--r--
2024-03-19 22:46
test_listcomps.py
4.17
KB
-rw-r--r--
2024-03-19 22:46
test_lltrace.py
3.13
KB
-rw-r--r--
2024-03-19 22:46
test_locale.py
24.64
KB
-rw-r--r--
2024-03-19 22:46
test_logging.py
196.58
KB
-rw-r--r--
2024-03-19 22:46
test_long.py
54.55
KB
-rw-r--r--
2024-03-19 22:46
test_longexp.py
233
B
-rw-r--r--
2024-03-19 22:46
test_lzma.py
88.18
KB
-rw-r--r--
2024-03-19 22:46
test_mailbox.py
91.79
KB
-rw-r--r--
2024-03-19 22:46
test_mailcap.py
10.16
KB
-rw-r--r--
2024-03-19 22:46
test_marshal.py
20.46
KB
-rw-r--r--
2024-03-19 22:46
test_math.py
90.7
KB
-rw-r--r--
2024-03-19 22:46
test_memoryio.py
31.48
KB
-rw-r--r--
2024-03-19 22:46
test_memoryview.py
21.37
KB
-rw-r--r--
2024-03-19 22:46
test_metaclass.py
6.21
KB
-rw-r--r--
2024-03-19 22:46
test_mimetypes.py
13.85
KB
-rw-r--r--
2024-03-19 22:46
test_minidom.py
68.81
KB
-rw-r--r--
2024-03-19 22:46
test_mmap.py
31.06
KB
-rw-r--r--
2024-03-19 22:46
test_module.py
12.37
KB
-rw-r--r--
2024-03-19 22:46
test_modulefinder.py
12.2
KB
-rw-r--r--
2024-03-19 22:46
test_msilib.py
5.41
KB
-rw-r--r--
2024-03-19 22:46
test_multibytecodec.py
15.76
KB
-rw-r--r--
2024-03-19 22:46
test_multiprocessing_fork.py
477
B
-rw-r--r--
2024-03-19 22:46
test_multiprocessing_forkserver.py
392
B
-rw-r--r--
2024-03-19 22:46
test_multiprocessing_main_handling.py
11.57
KB
-rw-r--r--
2024-03-19 22:46
test_multiprocessing_spawn.py
277
B
-rw-r--r--
2024-03-19 22:46
test_named_expressions.py
20.62
KB
-rw-r--r--
2024-03-19 22:46
test_netrc.py
6.01
KB
-rw-r--r--
2024-03-19 22:46
test_nis.py
1.17
KB
-rw-r--r--
2024-03-19 22:46
test_nntplib.py
62.68
KB
-rw-r--r--
2024-03-19 22:46
test_ntpath.py
38.67
KB
-rw-r--r--
2024-03-19 22:46
test_numeric_tower.py
8
KB
-rw-r--r--
2024-03-19 22:46
test_opcache.py
529
B
-rw-r--r--
2024-03-19 22:46
test_opcodes.py
3.59
KB
-rw-r--r--
2024-03-19 22:46
test_openpty.py
600
B
-rw-r--r--
2024-03-19 22:46
test_operator.py
24.05
KB
-rw-r--r--
2024-03-19 22:46
test_optparse.py
61.02
KB
-rw-r--r--
2024-03-19 22:46
test_ordered_dict.py
31.61
KB
-rw-r--r--
2024-03-19 22:46
test_os.py
167.95
KB
-rw-r--r--
2024-03-19 22:46
test_ossaudiodev.py
7.07
KB
-rw-r--r--
2024-03-19 22:46
test_osx_env.py
1.31
KB
-rw-r--r--
2024-03-19 22:46
test_pathlib.py
109.86
KB
-rw-r--r--
2024-03-19 22:46
test_patma.py
84.78
KB
-rw-r--r--
2024-03-19 22:46
test_pdb.py
68.89
KB
-rw-r--r--
2024-03-19 22:46
test_peepholer.py
19.77
KB
-rw-r--r--
2024-03-19 22:46
test_pickle.py
19.71
KB
-rw-r--r--
2024-03-19 22:46
test_picklebuffer.py
4.99
KB
-rw-r--r--
2024-03-19 22:46
test_pickletools.py
4.13
KB
-rw-r--r--
2024-03-19 22:46
test_pipes.py
6.71
KB
-rw-r--r--
2024-03-19 22:46
test_pkg.py
9.59
KB
-rw-r--r--
2024-03-19 22:46
test_pkgutil.py
21.21
KB
-rw-r--r--
2024-03-19 22:46
test_platform.py
19.98
KB
-rw-r--r--
2024-03-19 22:46
test_plistlib.py
38.73
KB
-rw-r--r--
2024-03-19 22:46
test_poll.py
7.27
KB
-rw-r--r--
2024-03-19 22:46
test_popen.py
2.08
KB
-rw-r--r--
2024-03-19 22:46
test_poplib.py
17.54
KB
-rw-r--r--
2024-03-19 22:46
test_positional_only_arg.py
17.77
KB
-rw-r--r--
2024-03-19 22:46
test_posix.py
87.32
KB
-rw-r--r--
2024-03-19 22:46
test_posixpath.py
32.11
KB
-rw-r--r--
2024-03-19 22:46
test_pow.py
5.43
KB
-rw-r--r--
2024-03-19 22:46
test_pprint.py
50.31
KB
-rw-r--r--
2024-03-19 22:46
test_print.py
7.72
KB
-rw-r--r--
2024-03-19 22:46
test_profile.py
8.69
KB
-rw-r--r--
2024-03-19 22:46
test_property.py
11.35
KB
-rw-r--r--
2024-03-19 22:46
test_pstats.py
3.31
KB
-rw-r--r--
2024-03-19 22:46
test_pty.py
16.84
KB
-rw-r--r--
2024-03-19 22:46
test_pulldom.py
12.66
KB
-rw-r--r--
2024-03-19 22:46
test_pwd.py
4.29
KB
-rw-r--r--
2024-03-19 22:46
test_py_compile.py
11.44
KB
-rw-r--r--
2024-03-19 22:46
test_pyclbr.py
9.84
KB
-rw-r--r--
2024-03-19 22:46
test_pydoc.py
60.53
KB
-rw-r--r--
2024-03-19 22:46
test_pyexpat.py
28.42
KB
-rw-r--r--
2024-03-19 22:46
test_queue.py
20.51
KB
-rw-r--r--
2024-03-19 22:46
test_quopri.py
7.78
KB
-rw-r--r--
2024-03-19 22:46
test_raise.py
13.44
KB
-rw-r--r--
2024-03-19 22:46
test_random.py
55.18
KB
-rw-r--r--
2024-03-19 22:46
test_range.py
24.64
KB
-rw-r--r--
2024-03-19 22:46
test_re.py
112.86
KB
-rw-r--r--
2024-03-19 22:46
test_readline.py
14.24
KB
-rw-r--r--
2024-03-19 22:46
test_regrtest.py
49.5
KB
-rw-r--r--
2024-03-19 22:46
test_repl.py
3.96
KB
-rw-r--r--
2024-03-19 22:46
test_reprlib.py
15.13
KB
-rw-r--r--
2024-03-19 22:46
test_resource.py
7.04
KB
-rw-r--r--
2024-03-19 22:46
test_richcmp.py
11.91
KB
-rw-r--r--
2024-03-19 22:46
test_rlcompleter.py
7.1
KB
-rw-r--r--
2024-03-19 22:46
test_robotparser.py
10.88
KB
-rw-r--r--
2024-03-19 22:46
test_runpy.py
33.86
KB
-rw-r--r--
2024-03-19 22:46
test_sax.py
54.6
KB
-rw-r--r--
2024-03-19 22:46
test_sched.py
7.28
KB
-rw-r--r--
2024-03-19 22:46
test_scope.py
19.83
KB
-rw-r--r--
2024-03-19 22:46
test_script_helper.py
5.78
KB
-rw-r--r--
2024-03-19 22:46
test_secrets.py
4.28
KB
-rw-r--r--
2024-03-19 22:46
test_select.py
3.32
KB
-rw-r--r--
2024-03-19 22:46
test_selectors.py
18.27
KB
-rw-r--r--
2024-03-19 22:46
test_set.py
69.09
KB
-rw-r--r--
2024-03-19 22:46
test_setcomps.py
4.15
KB
-rw-r--r--
2024-03-19 22:46
test_shelve.py
6.02
KB
-rw-r--r--
2024-03-19 22:46
test_shlex.py
13.48
KB
-rw-r--r--
2024-03-19 22:46
test_shutil.py
105.72
KB
-rw-r--r--
2024-03-19 22:46
test_signal.py
48.8
KB
-rw-r--r--
2024-03-19 22:46
test_site.py
27.8
KB
-rw-r--r--
2024-03-19 22:46
test_slice.py
9.23
KB
-rw-r--r--
2024-03-19 22:46
test_smtpd.py
40.65
KB
-rw-r--r--
2024-03-19 22:46
test_smtplib.py
60.05
KB
-rw-r--r--
2024-03-19 22:46
test_smtpnet.py
2.99
KB
-rw-r--r--
2024-03-19 22:46
test_sndhdr.py
1.43
KB
-rw-r--r--
2024-03-19 22:46
test_socket.py
246.76
KB
-rw-r--r--
2024-03-19 22:46
test_socketserver.py
17.89
KB
-rw-r--r--
2024-03-19 22:46
test_sort.py
13.42
KB
-rw-r--r--
2024-03-19 22:46
test_source_encoding.py
9.03
KB
-rw-r--r--
2024-03-19 22:46
test_spwd.py
2.73
KB
-rw-r--r--
2024-03-19 22:46
test_sqlite.py
988
B
-rw-r--r--
2024-03-19 22:46
test_ssl.py
217.26
KB
-rw-r--r--
2024-03-19 22:46
test_startfile.py
1.7
KB
-rw-r--r--
2024-03-19 22:46
test_stat.py
8.58
KB
-rw-r--r--
2024-03-19 22:46
test_statistics.py
113.22
KB
-rw-r--r--
2024-03-19 22:46
test_strftime.py
7.54
KB
-rw-r--r--
2024-03-19 22:46
test_string.py
19.8
KB
-rw-r--r--
2024-03-19 22:46
test_string_literals.py
10.2
KB
-rw-r--r--
2024-03-19 22:46
test_stringprep.py
3.04
KB
-rw-r--r--
2024-03-19 22:46
test_strptime.py
34.42
KB
-rw-r--r--
2024-03-19 22:46
test_strtod.py
20.06
KB
-rw-r--r--
2024-03-19 22:46
test_struct.py
36.19
KB
-rw-r--r--
2024-03-19 22:46
test_structseq.py
4.42
KB
-rw-r--r--
2024-03-19 22:46
test_subclassinit.py
8.12
KB
-rw-r--r--
2024-03-19 22:46
test_subprocess.py
156.33
KB
-rw-r--r--
2024-03-19 22:46
test_sunau.py
5.98
KB
-rw-r--r--
2024-03-19 22:46
test_sundry.py
2.1
KB
-rw-r--r--
2024-03-19 22:46
test_super.py
9.6
KB
-rw-r--r--
2024-03-19 22:46
test_support.py
25.33
KB
-rw-r--r--
2024-03-19 22:46
test_symtable.py
9.36
KB
-rw-r--r--
2024-03-19 22:46
test_syntax.py
52.33
KB
-rw-r--r--
2024-03-19 22:46
test_sys.py
58.56
KB
-rw-r--r--
2024-03-19 22:46
test_sys_setprofile.py
13.19
KB
-rw-r--r--
2024-03-19 22:46
test_sys_settrace.py
62.72
KB
-rw-r--r--
2024-03-19 22:46
test_sysconfig.py
18.92
KB
-rw-r--r--
2024-03-19 22:46
test_syslog.py
2.71
KB
-rw-r--r--
2024-03-19 22:46
test_tabnanny.py
13.44
KB
-rw-r--r--
2024-03-19 22:46
test_tarfile.py
152.06
KB
-rw-r--r--
2024-03-19 22:46
test_tcl.py
31.54
KB
-rw-r--r--
2024-03-19 22:46
test_telnetlib.py
12.74
KB
-rw-r--r--
2024-03-19 22:46
test_tempfile.py
65.97
KB
-rw-r--r--
2024-03-19 22:46
test_textwrap.py
41.89
KB
-rw-r--r--
2024-03-19 22:46
test_thread.py
8.54
KB
-rw-r--r--
2024-03-19 22:46
test_threadedtempfile.py
1.87
KB
-rw-r--r--
2024-03-19 22:46
test_threading.py
59.46
KB
-rw-r--r--
2024-03-19 22:46
test_threading_local.py
6.66
KB
-rw-r--r--
2024-03-19 22:46
test_threadsignals.py
10.11
KB
-rw-r--r--
2024-03-19 22:46
test_time.py
39.93
KB
-rw-r--r--
2024-03-19 22:46
test_timeit.py
15.2
KB
-rw-r--r--
2024-03-19 22:46
test_timeout.py
11
KB
-rw-r--r--
2024-03-19 22:46
test_tix.py
1.05
KB
-rw-r--r--
2024-03-19 22:46
test_tk.py
546
B
-rw-r--r--
2024-03-19 22:46
test_tokenize.py
64.51
KB
-rw-r--r--
2024-03-19 22:46
test_trace.py
20.4
KB
-rw-r--r--
2024-03-19 22:46
test_traceback.py
54.55
KB
-rw-r--r--
2024-03-19 22:46
test_tracemalloc.py
39.17
KB
-rw-r--r--
2024-03-19 22:46
test_ttk_guionly.py
986
B
-rw-r--r--
2024-03-19 22:46
test_ttk_textonly.py
16.69
KB
-rw-r--r--
2024-03-19 22:46
test_tuple.py
18.85
KB
-rw-r--r--
2024-03-19 22:46
test_turtle.py
12.75
KB
-rw-r--r--
2024-03-19 22:46
test_type_annotations.py
3.7
KB
-rw-r--r--
2024-03-19 22:46
test_type_comments.py
10.54
KB
-rw-r--r--
2024-03-19 22:46
test_typechecks.py
2.55
KB
-rw-r--r--
2024-03-19 22:46
test_types.py
75.67
KB
-rw-r--r--
2024-03-19 22:46
test_typing.py
179.66
KB
-rw-r--r--
2024-03-19 22:46
test_ucn.py
9.52
KB
-rw-r--r--
2024-03-19 22:46
test_unary.py
1.63
KB
-rw-r--r--
2024-03-19 22:46
test_unicode.py
120.59
KB
-rw-r--r--
2024-03-19 22:46
test_unicode_file.py
5.71
KB
-rw-r--r--
2024-03-19 22:46
test_unicode_file_functions.py
6.74
KB
-rw-r--r--
2024-03-19 22:46
test_unicode_identifiers.py
984
B
-rw-r--r--
2024-03-19 22:46
test_unicodedata.py
16.21
KB
-rw-r--r--
2024-03-19 22:46
test_unittest.py
226
B
-rw-r--r--
2024-03-19 22:46
test_univnewlines.py
3.88
KB
-rw-r--r--
2024-03-19 22:46
test_unpack.py
3.01
KB
-rw-r--r--
2024-03-19 22:46
test_unpack_ex.py
9.91
KB
-rw-r--r--
2024-03-19 22:46
test_unparse.py
18.59
KB
-rw-r--r--
2024-03-19 22:46
test_urllib.py
70.08
KB
-rw-r--r--
2024-03-19 22:46
test_urllib2.py
78.97
KB
-rw-r--r--
2024-03-19 22:46
test_urllib2_localnet.py
25.5
KB
-rw-r--r--
2024-03-19 22:46
test_urllib2net.py
14.07
KB
-rw-r--r--
2024-03-19 22:46
test_urllib_response.py
1.89
KB
-rw-r--r--
2024-03-19 22:46
test_urllibnet.py
9.32
KB
-rw-r--r--
2024-03-19 22:46
test_urlparse.py
67.31
KB
-rw-r--r--
2024-03-19 22:46
test_userdict.py
7.56
KB
-rw-r--r--
2024-03-19 22:46
test_userlist.py
1.97
KB
-rw-r--r--
2024-03-19 22:46
test_userstring.py
2.4
KB
-rw-r--r--
2024-03-19 22:46
test_utf8_mode.py
10.29
KB
-rw-r--r--
2024-03-19 22:46
test_utf8source.py
1.15
KB
-rw-r--r--
2024-03-19 22:46
test_uu.py
8.92
KB
-rw-r--r--
2024-03-19 22:46
test_uuid.py
40
KB
-rwxr-xr-x
2024-03-19 22:46
test_venv.py
22.63
KB
-rw-r--r--
2024-03-19 22:46
test_wait3.py
1.81
KB
-rw-r--r--
2024-03-19 22:46
test_wait4.py
1.16
KB
-rw-r--r--
2024-03-19 22:46
test_wave.py
6.5
KB
-rw-r--r--
2024-03-19 22:46
test_weakref.py
73.74
KB
-rw-r--r--
2024-03-19 22:46
test_weakset.py
15.42
KB
-rw-r--r--
2024-03-19 22:46
test_webbrowser.py
10.6
KB
-rw-r--r--
2024-03-19 22:46
test_winconsoleio.py
6.57
KB
-rw-r--r--
2024-03-19 22:46
test_winreg.py
22.2
KB
-rw-r--r--
2024-03-19 22:46
test_winsound.py
4.61
KB
-rw-r--r--
2024-03-19 22:46
test_with.py
25.99
KB
-rw-r--r--
2024-03-19 22:46
test_wsgiref.py
30.2
KB
-rw-r--r--
2024-03-19 22:46
test_xdrlib.py
2.17
KB
-rw-r--r--
2024-03-19 22:46
test_xml_dom_minicompat.py
4.18
KB
-rw-r--r--
2024-03-19 22:46
test_xml_etree.py
160.6
KB
-rw-r--r--
2024-03-19 22:46
test_xml_etree_c.py
8.48
KB
-rw-r--r--
2024-03-19 22:46
test_xmlrpc.py
57.66
KB
-rw-r--r--
2024-03-19 22:46
test_xmlrpc_net.py
954
B
-rw-r--r--
2024-03-19 22:46
test_xxlimited.py
2.13
KB
-rw-r--r--
2024-03-19 22:46
test_xxtestfuzz.py
690
B
-rw-r--r--
2024-03-19 22:46
test_yield_from.py
30.09
KB
-rw-r--r--
2024-03-19 22:46
test_zipapp.py
15.92
KB
-rw-r--r--
2024-03-19 22:46
test_zipfile.py
131.16
KB
-rw-r--r--
2024-03-19 22:46
test_zipfile64.py
5.86
KB
-rw-r--r--
2024-03-19 22:46
test_zipimport.py
33.56
KB
-rw-r--r--
2024-03-19 22:46
test_zipimport_support.py
10.46
KB
-rw-r--r--
2024-03-19 22:46
test_zlib.py
34.31
KB
-rw-r--r--
2024-03-19 22:46
testcodec.py
1.02
KB
-rw-r--r--
2024-03-19 22:46
testtar.tar
425
KB
-rw-r--r--
2024-03-19 22:46
testtar.tar.xz
172
B
-rw-r--r--
2024-03-19 22:46
tf_inherit_check.py
714
B
-rw-r--r--
2024-03-19 22:46
time_hashlib.py
2.87
KB
-rw-r--r--
2024-03-19 22:46
tokenize_tests-latin1-coding-cookie-and-utf8-bom-sig.txt
443
B
-rw-r--r--
2024-03-19 22:46
tokenize_tests-no-coding-cookie-and-utf8-bom-sig-only.txt
302
B
-rw-r--r--
2024-03-19 22:46
tokenize_tests-utf8-coding-cookie-and-no-utf8-bom-sig.txt
421
B
-rw-r--r--
2024-03-19 22:46
tokenize_tests-utf8-coding-cookie-and-utf8-bom-sig.txt
326
B
-rw-r--r--
2024-03-19 22:46
tokenize_tests.txt
2.65
KB
-rw-r--r--
2024-03-19 22:46
win_console_handler.py
1.38
KB
-rw-r--r--
2024-03-19 22:46
xmltests.py
499
B
-rw-r--r--
2024-03-19 22:46
zip_cp437_header.zip
270
B
-rw-r--r--
2024-03-19 22:46
zipdir.zip
374
B
-rw-r--r--
2024-03-19 22:46
Save
Rename
# Testing the line trace facility. from test import support import unittest from unittest.mock import MagicMock import sys import difflib import gc from functools import wraps import asyncio class tracecontext: """Context manager that traces its enter and exit.""" def __init__(self, output, value): self.output = output self.value = value def __enter__(self): self.output.append(self.value) def __exit__(self, *exc_info): self.output.append(-self.value) class asynctracecontext: """Asynchronous context manager that traces its aenter and aexit.""" def __init__(self, output, value): self.output = output self.value = value async def __aenter__(self): self.output.append(self.value) async def __aexit__(self, *exc_info): self.output.append(-self.value) async def asynciter(iterable): """Convert an iterable to an asynchronous iterator.""" for x in iterable: yield x # A very basic example. If this fails, we're in deep trouble. def basic(): return 1 basic.events = [(0, 'call'), (1, 'line'), (1, 'return')] # Many of the tests below are tricky because they involve pass statements. # If there is implicit control flow around a pass statement (in an except # clause or else clause) under what conditions do you set a line number # following that clause? # Some constructs like "while 0:", "if 0:" or "if 1:...else:..." could be optimized # away. Make sure that those lines aren't skipped. def arigo_example0(): x = 1 del x while 0: pass x = 1 arigo_example0.events = [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (5, 'line'), (5, 'return')] def arigo_example1(): x = 1 del x if 0: pass x = 1 arigo_example1.events = [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (5, 'line'), (5, 'return')] def arigo_example2(): x = 1 del x if 1: x = 1 else: pass return None arigo_example2.events = [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (7, 'line'), (7, 'return')] # check that lines consisting of just one instruction get traced: def one_instr_line(): x = 1 del x x = 1 one_instr_line.events = [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (3, 'return')] def no_pop_tops(): # 0 x = 1 # 1 for a in range(2): # 2 if a: # 3 x = 1 # 4 else: # 5 x = 1 # 6 no_pop_tops.events = [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (6, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (2, 'line'), (2, 'return')] def no_pop_blocks(): y = 1 while not y: bla x = 1 no_pop_blocks.events = [(0, 'call'), (1, 'line'), (2, 'line'), (4, 'line'), (4, 'return')] def called(): # line -3 x = 1 def call(): # line 0 called() call.events = [(0, 'call'), (1, 'line'), (-3, 'call'), (-2, 'line'), (-2, 'return'), (1, 'return')] def raises(): raise Exception def test_raise(): try: raises() except Exception: pass test_raise.events = [(0, 'call'), (1, 'line'), (2, 'line'), (-3, 'call'), (-2, 'line'), (-2, 'exception'), (-2, 'return'), (2, 'exception'), (3, 'line'), (4, 'line'), (4, 'return')] def _settrace_and_return(tracefunc): sys.settrace(tracefunc) sys._getframe().f_back.f_trace = tracefunc def settrace_and_return(tracefunc): _settrace_and_return(tracefunc) settrace_and_return.events = [(1, 'return')] def _settrace_and_raise(tracefunc): sys.settrace(tracefunc) sys._getframe().f_back.f_trace = tracefunc raise RuntimeError def settrace_and_raise(tracefunc): try: _settrace_and_raise(tracefunc) except RuntimeError: pass settrace_and_raise.events = [(2, 'exception'), (3, 'line'), (4, 'line'), (4, 'return')] # implicit return example # This test is interesting because of the else: pass # part of the code. The code generate for the true # part of the if contains a jump past the else branch. # The compiler then generates an implicit "return None" # Internally, the compiler visits the pass statement # and stores its line number for use on the next instruction. # The next instruction is the implicit return None. def ireturn_example(): a = 5 b = 5 if a == b: b = a+1 else: pass ireturn_example.events = [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (4, 'return')] # Tight loop with while(1) example (SF #765624) def tightloop_example(): items = range(0, 3) try: i = 0 while 1: b = items[i]; i+=1 except IndexError: pass tightloop_example.events = [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (5, 'line'), (4, 'line'), (5, 'line'), (4, 'line'), (5, 'line'), (4, 'line'), (5, 'line'), (5, 'exception'), (6, 'line'), (7, 'line'), (7, 'return')] def tighterloop_example(): items = range(1, 4) try: i = 0 while 1: i = items[i] except IndexError: pass tighterloop_example.events = [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (4, 'line'), (4, 'line'), (4, 'line'), (4, 'exception'), (5, 'line'), (6, 'line'), (6, 'return')] def generator_function(): try: yield True "continued" finally: "finally" def generator_example(): # any() will leave the generator before its end x = any(generator_function()) # the following lines were not traced for x in range(10): y = x generator_example.events = ([(0, 'call'), (2, 'line'), (-6, 'call'), (-5, 'line'), (-4, 'line'), (-4, 'return'), (-4, 'call'), (-4, 'exception'), (-1, 'line'), (-1, 'return')] + [(5, 'line'), (6, 'line')] * 10 + [(5, 'line'), (5, 'return')]) class Tracer: def __init__(self, trace_line_events=None, trace_opcode_events=None): self.trace_line_events = trace_line_events self.trace_opcode_events = trace_opcode_events self.events = [] def _reconfigure_frame(self, frame): if self.trace_line_events is not None: frame.f_trace_lines = self.trace_line_events if self.trace_opcode_events is not None: frame.f_trace_opcodes = self.trace_opcode_events def trace(self, frame, event, arg): self._reconfigure_frame(frame) self.events.append((frame.f_lineno, event)) return self.trace def traceWithGenexp(self, frame, event, arg): self._reconfigure_frame(frame) (o for o in [1]) self.events.append((frame.f_lineno, event)) return self.trace class TraceTestCase(unittest.TestCase): # Disable gc collection when tracing, otherwise the # deallocators may be traced as well. def setUp(self): self.using_gc = gc.isenabled() gc.disable() self.addCleanup(sys.settrace, sys.gettrace()) def tearDown(self): if self.using_gc: gc.enable() @staticmethod def make_tracer(): """Helper to allow test subclasses to configure tracers differently""" return Tracer() def compare_events(self, line_offset, events, expected_events): events = [(l - line_offset, e) for (l, e) in events] if events != expected_events: self.fail( "events did not match expectation:\n" + "\n".join(difflib.ndiff([str(x) for x in expected_events], [str(x) for x in events]))) def run_and_compare(self, func, events): tracer = self.make_tracer() sys.settrace(tracer.trace) func() sys.settrace(None) self.compare_events(func.__code__.co_firstlineno, tracer.events, events) def run_test(self, func): self.run_and_compare(func, func.events) def run_test2(self, func): tracer = self.make_tracer() func(tracer.trace) sys.settrace(None) self.compare_events(func.__code__.co_firstlineno, tracer.events, func.events) def test_set_and_retrieve_none(self): sys.settrace(None) assert sys.gettrace() is None def test_set_and_retrieve_func(self): def fn(*args): pass sys.settrace(fn) try: assert sys.gettrace() is fn finally: sys.settrace(None) def test_01_basic(self): self.run_test(basic) def test_02_arigo0(self): self.run_test(arigo_example0) def test_02_arigo1(self): self.run_test(arigo_example1) def test_02_arigo2(self): self.run_test(arigo_example2) def test_03_one_instr(self): self.run_test(one_instr_line) def test_04_no_pop_blocks(self): self.run_test(no_pop_blocks) def test_05_no_pop_tops(self): self.run_test(no_pop_tops) def test_06_call(self): self.run_test(call) def test_07_raise(self): self.run_test(test_raise) def test_08_settrace_and_return(self): self.run_test2(settrace_and_return) def test_09_settrace_and_raise(self): self.run_test2(settrace_and_raise) def test_10_ireturn(self): self.run_test(ireturn_example) def test_11_tightloop(self): self.run_test(tightloop_example) def test_12_tighterloop(self): self.run_test(tighterloop_example) def test_13_genexp(self): self.run_test(generator_example) # issue1265: if the trace function contains a generator, # and if the traced function contains another generator # that is not completely exhausted, the trace stopped. # Worse: the 'finally' clause was not invoked. tracer = self.make_tracer() sys.settrace(tracer.traceWithGenexp) generator_example() sys.settrace(None) self.compare_events(generator_example.__code__.co_firstlineno, tracer.events, generator_example.events) def test_14_onliner_if(self): def onliners(): if True: x=False else: x=True return 0 self.run_and_compare( onliners, [(0, 'call'), (1, 'line'), (3, 'line'), (3, 'return')]) def test_15_loops(self): # issue1750076: "while" expression is skipped by debugger def for_example(): for x in range(2): pass self.run_and_compare( for_example, [(0, 'call'), (1, 'line'), (2, 'line'), (1, 'line'), (2, 'line'), (1, 'line'), (1, 'return')]) def while_example(): # While expression should be traced on every loop x = 2 while x > 0: x -= 1 self.run_and_compare( while_example, [(0, 'call'), (2, 'line'), (3, 'line'), (4, 'line'), (3, 'line'), (4, 'line'), (3, 'line'), (3, 'return')]) def test_16_blank_lines(self): namespace = {} exec("def f():\n" + "\n" * 256 + " pass", namespace) self.run_and_compare( namespace["f"], [(0, 'call'), (257, 'line'), (257, 'return')]) def test_17_none_f_trace(self): # Issue 20041: fix TypeError when f_trace is set to None. def func(): sys._getframe().f_trace = None lineno = 2 self.run_and_compare(func, [(0, 'call'), (1, 'line')]) def test_18_except_with_name(self): def func(): try: try: raise Exception except Exception as e: raise x = "Something" y = "Something" except Exception: pass self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (3, 'exception'), (4, 'line'), (5, 'line'), (8, 'line'), (9, 'line'), (9, 'return')]) def test_19_except_with_finally(self): def func(): try: try: raise Exception finally: y = "Something" except Exception: b = 23 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (3, 'exception'), (5, 'line'), (6, 'line'), (7, 'line'), (7, 'return')]) def test_20_async_for_loop(self): class AsyncIteratorWrapper: def __init__(self, obj): self._it = iter(obj) def __aiter__(self): return self async def __anext__(self): try: return next(self._it) except StopIteration: raise StopAsyncIteration async def doit_async(): async for letter in AsyncIteratorWrapper("abc"): x = letter y = 42 def run(tracer): x = doit_async() try: sys.settrace(tracer) x.send(None) finally: sys.settrace(None) tracer = self.make_tracer() events = [ (0, 'call'), (1, 'line'), (-12, 'call'), (-11, 'line'), (-11, 'return'), (-9, 'call'), (-8, 'line'), (-8, 'return'), (-6, 'call'), (-5, 'line'), (-4, 'line'), (-4, 'return'), (1, 'exception'), (2, 'line'), (1, 'line'), (-6, 'call'), (-5, 'line'), (-4, 'line'), (-4, 'return'), (1, 'exception'), (2, 'line'), (1, 'line'), (-6, 'call'), (-5, 'line'), (-4, 'line'), (-4, 'return'), (1, 'exception'), (2, 'line'), (1, 'line'), (-6, 'call'), (-5, 'line'), (-4, 'line'), (-4, 'exception'), (-3, 'line'), (-2, 'line'), (-2, 'exception'), (-2, 'return'), (1, 'exception'), (3, 'line'), (3, 'return')] try: run(tracer.trace) except Exception: pass self.compare_events(doit_async.__code__.co_firstlineno, tracer.events, events) def test_async_for_backwards_jump_has_no_line(self): async def arange(n): for i in range(n): yield i async def f(): async for i in arange(3): if i > 100: break # should never be traced tracer = self.make_tracer() coro = f() try: sys.settrace(tracer.trace) coro.send(None) except Exception: pass finally: sys.settrace(None) events = [ (0, 'call'), (1, 'line'), (-3, 'call'), (-2, 'line'), (-1, 'line'), (-1, 'return'), (1, 'exception'), (2, 'line'), (1, 'line'), (-1, 'call'), (-2, 'line'), (-1, 'line'), (-1, 'return'), (1, 'exception'), (2, 'line'), (1, 'line'), (-1, 'call'), (-2, 'line'), (-1, 'line'), (-1, 'return'), (1, 'exception'), (2, 'line'), (1, 'line'), (-1, 'call'), (-2, 'line'), (-2, 'return'), (1, 'exception'), (1, 'return'), ] self.compare_events(f.__code__.co_firstlineno, tracer.events, events) def test_21_repeated_pass(self): def func(): pass pass self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (2, 'return')]) def test_loop_in_try_except(self): # https://bugs.python.org/issue41670 def func(): try: for i in []: pass return 1 except: return 2 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (3, 'return')]) def test_try_except_no_exception(self): def func(): try: 2 except: 4 finally: 6 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (6, 'line'), (6, 'return')]) def test_nested_loops(self): def func(): for i in range(2): for j in range(2): a = i + j return a == 1 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (2, 'line'), (3, 'line'), (2, 'line'), (1, 'line'), (2, 'line'), (3, 'line'), (2, 'line'), (3, 'line'), (2, 'line'), (1, 'line'), (4, 'line'), (4, 'return')]) def test_if_break(self): def func(): seq = [1, 0] while seq: n = seq.pop() if n: break # line 5 else: n = 99 return n # line 8 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (5, 'line'), (8, 'line'), (8, 'return')]) def test_break_through_finally(self): def func(): a, c, d, i = 1, 1, 1, 99 try: for i in range(3): try: a = 5 if i > 0: break # line 7 a = 8 finally: c = 10 except: d = 12 # line 12 assert a == 5 and c == 10 and d == 1 # line 13 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (5, 'line'), (6, 'line'), (8, 'line'), (10, 'line'), (3, 'line'), (4, 'line'), (5, 'line'), (6, 'line'), (7, 'line'), (10, 'line'), (13, 'line'), (13, 'return')]) def test_continue_through_finally(self): def func(): a, b, c, d, i = 1, 1, 1, 1, 99 try: for i in range(2): try: a = 5 if i > 0: continue # line 7 b = 8 finally: c = 10 except: d = 12 # line 12 assert (a, b, c, d) == (5, 8, 10, 1) # line 13 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (5, 'line'), (6, 'line'), (8, 'line'), (10, 'line'), (3, 'line'), (4, 'line'), (5, 'line'), (6, 'line'), (7, 'line'), (10, 'line'), (3, 'line'), (13, 'line'), (13, 'return')]) def test_return_through_finally(self): def func(): try: return 2 finally: 4 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (4, 'line'), (4, 'return')]) def test_try_except_with_wrong_type(self): def func(): try: 2/0 except IndexError: 4 finally: return 6 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (2, 'exception'), (3, 'line'), (6, 'line'), (6, 'return')]) def test_break_to_continue1(self): def func(): TRUE = 1 x = [1] while x: x.pop() while TRUE: break continue self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (5, 'line'), (6, 'line'), (7, 'line'), (3, 'line'), (3, 'return')]) def test_break_to_continue2(self): def func(): TRUE = 1 x = [1] while x: x.pop() while TRUE: break else: continue self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (5, 'line'), (6, 'line'), (3, 'line'), (3, 'return')]) def test_break_to_break(self): def func(): TRUE = 1 while TRUE: while TRUE: break break self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (5, 'line'), (5, 'return')]) def test_nested_ifs(self): def func(): a = b = 1 if a == 1: if b == 1: x = 4 else: y = 6 else: z = 8 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (4, 'line'), (4, 'return')]) def test_nested_ifs_with_and(self): def func(): if A: if B: if C: if D: return False else: return False elif E and F: return True A = B = True C = False self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (3, 'return')]) def test_nested_try_if(self): def func(): x = "hello" try: 3/0 except ZeroDivisionError: if x == 'raise': raise ValueError() # line 6 f = 7 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (3, 'exception'), (4, 'line'), (5, 'line'), (7, 'line'), (7, 'return')]) def test_if_false_in_with(self): class C: def __enter__(self): return self def __exit__(*args): pass def func(): with C(): if False: pass self.run_and_compare(func, [(0, 'call'), (1, 'line'), (-5, 'call'), (-4, 'line'), (-4, 'return'), (2, 'line'), (1, 'line'), (-3, 'call'), (-2, 'line'), (-2, 'return'), (1, 'return')]) def test_if_false_in_try_except(self): def func(): try: if False: pass except Exception: X self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (2, 'return')]) def test_implicit_return_in_class(self): def func(): class A: if 3 < 9: a = 1 else: a = 2 self.run_and_compare(func, [(0, 'call'), (1, 'line'), (1, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (3, 'return'), (1, 'return')]) def test_try_in_try(self): def func(): try: try: pass except Exception as ex: pass except Exception: pass self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (3, 'return')]) def test_if_in_if_in_if(self): def func(a=0, p=1, z=1): if p: if a: if z: pass else: pass else: pass self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (2, 'return')]) def test_early_exit_with(self): class C: def __enter__(self): return self def __exit__(*args): pass def func_break(): for i in (1,2): with C(): break pass def func_return(): with C(): return self.run_and_compare(func_break, [(0, 'call'), (1, 'line'), (2, 'line'), (-5, 'call'), (-4, 'line'), (-4, 'return'), (3, 'line'), (2, 'line'), (-3, 'call'), (-2, 'line'), (-2, 'return'), (4, 'line'), (4, 'return')]) self.run_and_compare(func_return, [(0, 'call'), (1, 'line'), (-11, 'call'), (-10, 'line'), (-10, 'return'), (2, 'line'), (1, 'line'), (-9, 'call'), (-8, 'line'), (-8, 'return'), (1, 'return')]) def test_flow_converges_on_same_line(self): def foo(x): if x: try: 1/(x - 1) except ZeroDivisionError: pass return x def func(): for i in range(2): foo(i) self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (-8, 'call'), (-7, 'line'), (-2, 'line'), (-2, 'return'), (1, 'line'), (2, 'line'), (-8, 'call'), (-7, 'line'), (-6, 'line'), (-5, 'line'), (-5, 'exception'), (-4, 'line'), (-3, 'line'), (-2, 'line'), (-2, 'return'), (1, 'line'), (1, 'return')]) def test_no_tracing_of_named_except_cleanup(self): def func(): x = 0 try: 1/x except ZeroDivisionError as error: if x: raise return "done" self.run_and_compare(func, [(0, 'call'), (1, 'line'), (2, 'line'), (3, 'line'), (3, 'exception'), (4, 'line'), (5, 'line'), (7, 'line'), (7, 'return')]) class SkipLineEventsTraceTestCase(TraceTestCase): """Repeat the trace tests, but with per-line events skipped""" def compare_events(self, line_offset, events, expected_events): skip_line_events = [e for e in expected_events if e[1] != 'line'] super().compare_events(line_offset, events, skip_line_events) @staticmethod def make_tracer(): return Tracer(trace_line_events=False) @support.cpython_only class TraceOpcodesTestCase(TraceTestCase): """Repeat the trace tests, but with per-opcodes events enabled""" def compare_events(self, line_offset, events, expected_events): skip_opcode_events = [e for e in events if e[1] != 'opcode'] if len(events) > 1: self.assertLess(len(skip_opcode_events), len(events), msg="No 'opcode' events received by the tracer") super().compare_events(line_offset, skip_opcode_events, expected_events) @staticmethod def make_tracer(): return Tracer(trace_opcode_events=True) class RaisingTraceFuncTestCase(unittest.TestCase): def setUp(self): self.addCleanup(sys.settrace, sys.gettrace()) def trace(self, frame, event, arg): """A trace function that raises an exception in response to a specific trace event.""" if event == self.raiseOnEvent: raise ValueError # just something that isn't RuntimeError else: return self.trace def f(self): """The function to trace; raises an exception if that's the case we're testing, so that the 'exception' trace event fires.""" if self.raiseOnEvent == 'exception': x = 0 y = 1/x else: return 1 def run_test_for_event(self, event): """Tests that an exception raised in response to the given event is handled OK.""" self.raiseOnEvent = event try: for i in range(sys.getrecursionlimit() + 1): sys.settrace(self.trace) try: self.f() except ValueError: pass else: self.fail("exception not raised!") except RuntimeError: self.fail("recursion counter not reset") # Test the handling of exceptions raised by each kind of trace event. def test_call(self): self.run_test_for_event('call') def test_line(self): self.run_test_for_event('line') def test_return(self): self.run_test_for_event('return') def test_exception(self): self.run_test_for_event('exception') def test_trash_stack(self): def f(): for i in range(5): print(i) # line tracing will raise an exception at this line def g(frame, why, extra): if (why == 'line' and frame.f_lineno == f.__code__.co_firstlineno + 2): raise RuntimeError("i am crashing") return g sys.settrace(g) try: f() except RuntimeError: # the test is really that this doesn't segfault: import gc gc.collect() else: self.fail("exception not propagated") def test_exception_arguments(self): def f(): x = 0 # this should raise an error x.no_such_attr def g(frame, event, arg): if (event == 'exception'): type, exception, trace = arg self.assertIsInstance(exception, Exception) return g existing = sys.gettrace() try: sys.settrace(g) try: f() except AttributeError: # this is expected pass finally: sys.settrace(existing) def test_line_event_raises_before_opcode_event(self): exception = ValueError("BOOM!") def trace(frame, event, arg): if event == "line": raise exception frame.f_trace_opcodes = True return trace def f(): pass with self.assertRaises(ValueError) as caught: sys.settrace(trace) f() self.assertIs(caught.exception, exception) # 'Jump' tests: assigning to frame.f_lineno within a trace function # moves the execution position - it's how debuggers implement a Jump # command (aka. "Set next statement"). class JumpTracer: """Defines a trace function that jumps from one place to another.""" def __init__(self, function, jumpFrom, jumpTo, event='line', decorated=False): self.code = function.__code__ self.jumpFrom = jumpFrom self.jumpTo = jumpTo self.event = event self.firstLine = None if decorated else self.code.co_firstlineno self.done = False def trace(self, frame, event, arg): if self.done: return # frame.f_code.co_firstlineno is the first line of the decorator when # 'function' is decorated and the decorator may be written using # multiple physical lines when it is too long. Use the first line # trace event in 'function' to find the first line of 'function'. if (self.firstLine is None and frame.f_code == self.code and event == 'line'): self.firstLine = frame.f_lineno - 1 if (event == self.event and self.firstLine is not None and frame.f_lineno == self.firstLine + self.jumpFrom): f = frame while f is not None and f.f_code != self.code: f = f.f_back if f is not None: # Cope with non-integer self.jumpTo (because of # no_jump_to_non_integers below). try: frame.f_lineno = self.firstLine + self.jumpTo except TypeError: frame.f_lineno = self.jumpTo self.done = True return self.trace # This verifies the line-numbers-must-be-integers rule. def no_jump_to_non_integers(output): try: output.append(2) except ValueError as e: output.append('integer' in str(e)) # This verifies that you can't set f_lineno via _getframe or similar # trickery. def no_jump_without_trace_function(): try: previous_frame = sys._getframe().f_back previous_frame.f_lineno = previous_frame.f_lineno except ValueError as e: # This is the exception we wanted; make sure the error message # talks about trace functions. if 'trace' not in str(e): raise else: # Something's wrong - the expected exception wasn't raised. raise AssertionError("Trace-function-less jump failed to fail") class JumpTestCase(unittest.TestCase): def setUp(self): self.addCleanup(sys.settrace, sys.gettrace()) sys.settrace(None) def compare_jump_output(self, expected, received): if received != expected: self.fail( "Outputs don't match:\n" + "Expected: " + repr(expected) + "\n" + "Received: " + repr(received)) def run_test(self, func, jumpFrom, jumpTo, expected, error=None, event='line', decorated=False): tracer = JumpTracer(func, jumpFrom, jumpTo, event, decorated) sys.settrace(tracer.trace) output = [] if error is None: func(output) else: with self.assertRaisesRegex(*error): func(output) sys.settrace(None) self.compare_jump_output(expected, output) def run_async_test(self, func, jumpFrom, jumpTo, expected, error=None, event='line', decorated=False): tracer = JumpTracer(func, jumpFrom, jumpTo, event, decorated) sys.settrace(tracer.trace) output = [] if error is None: asyncio.run(func(output)) else: with self.assertRaisesRegex(*error): asyncio.run(func(output)) sys.settrace(None) asyncio.set_event_loop_policy(None) self.compare_jump_output(expected, output) def jump_test(jumpFrom, jumpTo, expected, error=None, event='line'): """Decorator that creates a test that makes a jump from one place to another in the following code. """ def decorator(func): @wraps(func) def test(self): self.run_test(func, jumpFrom, jumpTo, expected, error=error, event=event, decorated=True) return test return decorator def async_jump_test(jumpFrom, jumpTo, expected, error=None, event='line'): """Decorator that creates a test that makes a jump from one place to another in the following asynchronous code. """ def decorator(func): @wraps(func) def test(self): self.run_async_test(func, jumpFrom, jumpTo, expected, error=error, event=event, decorated=True) return test return decorator ## The first set of 'jump' tests are for things that are allowed: @jump_test(1, 3, [3]) def test_jump_simple_forwards(output): output.append(1) output.append(2) output.append(3) @jump_test(2, 1, [1, 1, 2]) def test_jump_simple_backwards(output): output.append(1) output.append(2) @jump_test(3, 5, [2, 5]) def test_jump_out_of_block_forwards(output): for i in 1, 2: output.append(2) for j in [3]: # Also tests jumping over a block output.append(4) output.append(5) @jump_test(6, 1, [1, 3, 5, 1, 3, 5, 6, 7]) def test_jump_out_of_block_backwards(output): output.append(1) for i in [1]: output.append(3) for j in [2]: # Also tests jumping over a block output.append(5) output.append(6) output.append(7) @async_jump_test(4, 5, [3, 5]) async def test_jump_out_of_async_for_block_forwards(output): for i in [1]: async for i in asynciter([1, 2]): output.append(3) output.append(4) output.append(5) @async_jump_test(5, 2, [2, 4, 2, 4, 5, 6]) async def test_jump_out_of_async_for_block_backwards(output): for i in [1]: output.append(2) async for i in asynciter([1]): output.append(4) output.append(5) output.append(6) @jump_test(1, 2, [3]) def test_jump_to_codeless_line(output): output.append(1) # Jumping to this line should skip to the next one. output.append(3) @jump_test(2, 2, [1, 2, 3]) def test_jump_to_same_line(output): output.append(1) output.append(2) output.append(3) # Tests jumping within a finally block, and over one. @jump_test(4, 9, [2, 9]) def test_jump_in_nested_finally(output): try: output.append(2) finally: output.append(4) try: output.append(6) finally: output.append(8) output.append(9) @jump_test(6, 7, [2, 7], (ZeroDivisionError, '')) def test_jump_in_nested_finally_2(output): try: output.append(2) 1/0 return finally: output.append(6) output.append(7) output.append(8) @jump_test(6, 11, [2, 11], (ZeroDivisionError, '')) def test_jump_in_nested_finally_3(output): try: output.append(2) 1/0 return finally: output.append(6) try: output.append(8) finally: output.append(10) output.append(11) output.append(12) @jump_test(5, 11, [2, 4], (ValueError, 'after')) def test_no_jump_over_return_try_finally_in_finally_block(output): try: output.append(2) finally: output.append(4) output.append(5) return try: output.append(8) finally: output.append(10) pass output.append(12) @jump_test(3, 4, [1], (ValueError, 'after')) def test_no_jump_infinite_while_loop(output): output.append(1) while True: output.append(3) output.append(4) @jump_test(2, 4, [4, 4]) def test_jump_forwards_into_while_block(output): i = 1 output.append(2) while i <= 2: output.append(4) i += 1 @jump_test(5, 3, [3, 3, 3, 5]) def test_jump_backwards_into_while_block(output): i = 1 while i <= 2: output.append(3) i += 1 output.append(5) @jump_test(2, 3, [1, 3]) def test_jump_forwards_out_of_with_block(output): with tracecontext(output, 1): output.append(2) output.append(3) @async_jump_test(2, 3, [1, 3]) async def test_jump_forwards_out_of_async_with_block(output): async with asynctracecontext(output, 1): output.append(2) output.append(3) @jump_test(3, 1, [1, 2, 1, 2, 3, -2]) def test_jump_backwards_out_of_with_block(output): output.append(1) with tracecontext(output, 2): output.append(3) @async_jump_test(3, 1, [1, 2, 1, 2, 3, -2]) async def test_jump_backwards_out_of_async_with_block(output): output.append(1) async with asynctracecontext(output, 2): output.append(3) @jump_test(2, 5, [5]) def test_jump_forwards_out_of_try_finally_block(output): try: output.append(2) finally: output.append(4) output.append(5) @jump_test(3, 1, [1, 1, 3, 5]) def test_jump_backwards_out_of_try_finally_block(output): output.append(1) try: output.append(3) finally: output.append(5) @jump_test(2, 6, [6]) def test_jump_forwards_out_of_try_except_block(output): try: output.append(2) except: output.append(4) raise output.append(6) @jump_test(3, 1, [1, 1, 3]) def test_jump_backwards_out_of_try_except_block(output): output.append(1) try: output.append(3) except: output.append(5) raise @jump_test(5, 7, [4, 7, 8]) def test_jump_between_except_blocks(output): try: 1/0 except ZeroDivisionError: output.append(4) output.append(5) except FloatingPointError: output.append(7) output.append(8) @jump_test(5, 6, [4, 6, 7]) def test_jump_within_except_block(output): try: 1/0 except: output.append(4) output.append(5) output.append(6) output.append(7) @jump_test(2, 4, [1, 4, 5, -4]) def test_jump_across_with(output): output.append(1) with tracecontext(output, 2): output.append(3) with tracecontext(output, 4): output.append(5) @async_jump_test(2, 4, [1, 4, 5, -4]) async def test_jump_across_async_with(output): output.append(1) async with asynctracecontext(output, 2): output.append(3) async with asynctracecontext(output, 4): output.append(5) @jump_test(4, 5, [1, 3, 5, 6]) def test_jump_out_of_with_block_within_for_block(output): output.append(1) for i in [1]: with tracecontext(output, 3): output.append(4) output.append(5) output.append(6) @async_jump_test(4, 5, [1, 3, 5, 6]) async def test_jump_out_of_async_with_block_within_for_block(output): output.append(1) for i in [1]: async with asynctracecontext(output, 3): output.append(4) output.append(5) output.append(6) @jump_test(4, 5, [1, 2, 3, 5, -2, 6]) def test_jump_out_of_with_block_within_with_block(output): output.append(1) with tracecontext(output, 2): with tracecontext(output, 3): output.append(4) output.append(5) output.append(6) @async_jump_test(4, 5, [1, 2, 3, 5, -2, 6]) async def test_jump_out_of_async_with_block_within_with_block(output): output.append(1) with tracecontext(output, 2): async with asynctracecontext(output, 3): output.append(4) output.append(5) output.append(6) @jump_test(5, 6, [2, 4, 6, 7]) def test_jump_out_of_with_block_within_finally_block(output): try: output.append(2) finally: with tracecontext(output, 4): output.append(5) output.append(6) output.append(7) @async_jump_test(5, 6, [2, 4, 6, 7]) async def test_jump_out_of_async_with_block_within_finally_block(output): try: output.append(2) finally: async with asynctracecontext(output, 4): output.append(5) output.append(6) output.append(7) @jump_test(8, 11, [1, 3, 5, 11, 12]) def test_jump_out_of_complex_nested_blocks(output): output.append(1) for i in [1]: output.append(3) for j in [1, 2]: output.append(5) try: for k in [1, 2]: output.append(8) finally: output.append(10) output.append(11) output.append(12) @jump_test(3, 5, [1, 2, 5]) def test_jump_out_of_with_assignment(output): output.append(1) with tracecontext(output, 2) \ as x: output.append(4) output.append(5) @async_jump_test(3, 5, [1, 2, 5]) async def test_jump_out_of_async_with_assignment(output): output.append(1) async with asynctracecontext(output, 2) \ as x: output.append(4) output.append(5) @jump_test(3, 6, [1, 6, 8, 9]) def test_jump_over_return_in_try_finally_block(output): output.append(1) try: output.append(3) if not output: # always false return output.append(6) finally: output.append(8) output.append(9) @jump_test(5, 8, [1, 3, 8, 10, 11, 13]) def test_jump_over_break_in_try_finally_block(output): output.append(1) while True: output.append(3) try: output.append(5) if not output: # always false break output.append(8) finally: output.append(10) output.append(11) break output.append(13) @jump_test(1, 7, [7, 8]) def test_jump_over_for_block_before_else(output): output.append(1) if not output: # always false for i in [3]: output.append(4) else: output.append(6) output.append(7) output.append(8) @async_jump_test(1, 7, [7, 8]) async def test_jump_over_async_for_block_before_else(output): output.append(1) if not output: # always false async for i in asynciter([3]): output.append(4) else: output.append(6) output.append(7) output.append(8) # The second set of 'jump' tests are for things that are not allowed: @jump_test(2, 3, [1], (ValueError, 'after')) def test_no_jump_too_far_forwards(output): output.append(1) output.append(2) @jump_test(2, -2, [1], (ValueError, 'before')) def test_no_jump_too_far_backwards(output): output.append(1) output.append(2) # Test each kind of 'except' line. @jump_test(2, 3, [4], (ValueError, 'except')) def test_no_jump_to_except_1(output): try: output.append(2) except: output.append(4) raise @jump_test(2, 3, [4], (ValueError, 'except')) def test_no_jump_to_except_2(output): try: output.append(2) except ValueError: output.append(4) raise @jump_test(2, 3, [4], (ValueError, 'except')) def test_no_jump_to_except_3(output): try: output.append(2) except ValueError as e: output.append(4) raise e @jump_test(2, 3, [4], (ValueError, 'except')) def test_no_jump_to_except_4(output): try: output.append(2) except (ValueError, RuntimeError) as e: output.append(4) raise e @jump_test(1, 3, [], (ValueError, 'into')) def test_no_jump_forwards_into_for_block(output): output.append(1) for i in 1, 2: output.append(3) @async_jump_test(1, 3, [], (ValueError, 'into')) async def test_no_jump_forwards_into_async_for_block(output): output.append(1) async for i in asynciter([1, 2]): output.append(3) pass @jump_test(3, 2, [2, 2], (ValueError, 'into')) def test_no_jump_backwards_into_for_block(output): for i in 1, 2: output.append(2) output.append(3) @async_jump_test(3, 2, [2, 2], (ValueError, 'into')) async def test_no_jump_backwards_into_async_for_block(output): async for i in asynciter([1, 2]): output.append(2) output.append(3) @jump_test(1, 3, [], (ValueError, 'into')) def test_no_jump_forwards_into_with_block(output): output.append(1) with tracecontext(output, 2): output.append(3) @async_jump_test(1, 3, [], (ValueError, 'into')) async def test_no_jump_forwards_into_async_with_block(output): output.append(1) async with asynctracecontext(output, 2): output.append(3) @jump_test(3, 2, [1, 2, -1], (ValueError, 'into')) def test_no_jump_backwards_into_with_block(output): with tracecontext(output, 1): output.append(2) output.append(3) @async_jump_test(3, 2, [1, 2, -1], (ValueError, 'into')) async def test_no_jump_backwards_into_async_with_block(output): async with asynctracecontext(output, 1): output.append(2) output.append(3) @jump_test(1, 3, [], (ValueError, 'into')) def test_no_jump_forwards_into_try_finally_block(output): output.append(1) try: output.append(3) finally: output.append(5) @jump_test(5, 2, [2, 4], (ValueError, 'into')) def test_no_jump_backwards_into_try_finally_block(output): try: output.append(2) finally: output.append(4) output.append(5) @jump_test(1, 3, [], (ValueError, 'into')) def test_no_jump_forwards_into_try_except_block(output): output.append(1) try: output.append(3) except: output.append(5) raise @jump_test(6, 2, [2], (ValueError, 'into')) def test_no_jump_backwards_into_try_except_block(output): try: output.append(2) except: output.append(4) raise output.append(6) # 'except' with a variable creates an implicit finally block @jump_test(5, 7, [4], (ValueError, 'into')) def test_no_jump_between_except_blocks_2(output): try: 1/0 except ZeroDivisionError: output.append(4) output.append(5) except FloatingPointError as e: output.append(7) output.append(8) @jump_test(1, 5, [5]) def test_jump_into_finally_block(output): output.append(1) try: output.append(3) finally: output.append(5) @jump_test(3, 6, [2, 6, 7]) def test_jump_into_finally_block_from_try_block(output): try: output.append(2) output.append(3) finally: # still executed if the jump is failed output.append(5) output.append(6) output.append(7) @jump_test(5, 1, [1, 3, 1, 3, 5]) def test_jump_out_of_finally_block(output): output.append(1) try: output.append(3) finally: output.append(5) @jump_test(1, 5, [], (ValueError, "into an 'except'")) def test_no_jump_into_bare_except_block(output): output.append(1) try: output.append(3) except: output.append(5) @jump_test(1, 5, [], (ValueError, "into an 'except'")) def test_no_jump_into_qualified_except_block(output): output.append(1) try: output.append(3) except Exception: output.append(5) @jump_test(3, 6, [2, 5, 6], (ValueError, "into an 'except'")) def test_no_jump_into_bare_except_block_from_try_block(output): try: output.append(2) output.append(3) except: # executed if the jump is failed output.append(5) output.append(6) raise output.append(8) @jump_test(3, 6, [2], (ValueError, "into an 'except'")) def test_no_jump_into_qualified_except_block_from_try_block(output): try: output.append(2) output.append(3) except ZeroDivisionError: output.append(5) output.append(6) raise output.append(8) @jump_test(7, 1, [1, 3, 6], (ValueError, "out of an 'except'")) def test_no_jump_out_of_bare_except_block(output): output.append(1) try: output.append(3) 1/0 except: output.append(6) output.append(7) @jump_test(7, 1, [1, 3, 6], (ValueError, "out of an 'except'")) def test_no_jump_out_of_qualified_except_block(output): output.append(1) try: output.append(3) 1/0 except Exception: output.append(6) output.append(7) @jump_test(3, 5, [1, 2, 5, -2]) def test_jump_between_with_blocks(output): output.append(1) with tracecontext(output, 2): output.append(3) with tracecontext(output, 4): output.append(5) @async_jump_test(3, 5, [1, 2, 5, -2]) async def test_jump_between_async_with_blocks(output): output.append(1) async with asynctracecontext(output, 2): output.append(3) async with asynctracecontext(output, 4): output.append(5) @jump_test(5, 7, [2, 4], (ValueError, "after")) def test_no_jump_over_return_out_of_finally_block(output): try: output.append(2) finally: output.append(4) output.append(5) return output.append(7) @jump_test(7, 4, [1, 6], (ValueError, 'into')) def test_no_jump_into_for_block_before_else(output): output.append(1) if not output: # always false for i in [3]: output.append(4) else: output.append(6) output.append(7) output.append(8) @async_jump_test(7, 4, [1, 6], (ValueError, 'into')) async def test_no_jump_into_async_for_block_before_else(output): output.append(1) if not output: # always false async for i in asynciter([3]): output.append(4) else: output.append(6) output.append(7) output.append(8) def test_no_jump_to_non_integers(self): self.run_test(no_jump_to_non_integers, 2, "Spam", [True]) def test_no_jump_without_trace_function(self): # Must set sys.settrace(None) in setUp(), else condition is not # triggered. no_jump_without_trace_function() def test_large_function(self): d = {} exec("""def f(output): # line 0 x = 0 # line 1 y = 1 # line 2 ''' # line 3 %s # lines 4-1004 ''' # line 1005 x += 1 # line 1006 output.append(x) # line 1007 return""" % ('\n' * 1000,), d) f = d['f'] self.run_test(f, 2, 1007, [0]) def test_jump_to_firstlineno(self): # This tests that PDB can jump back to the first line in a # file. See issue #1689458. It can only be triggered in a # function call if the function is defined on a single line. code = compile(""" # Comments don't count. output.append(2) # firstlineno is here. output.append(3) output.append(4) """, "<fake module>", "exec") class fake_function: __code__ = code tracer = JumpTracer(fake_function, 4, 1) sys.settrace(tracer.trace) namespace = {"output": []} exec(code, namespace) sys.settrace(None) self.compare_jump_output([2, 3, 2, 3, 4], namespace["output"]) @jump_test(2, 3, [1], event='call', error=(ValueError, "can't jump from" " the 'call' trace event of a new frame")) def test_no_jump_from_call(output): output.append(1) def nested(): output.append(3) nested() output.append(5) @jump_test(2, 1, [1], event='return', error=(ValueError, "can only jump from a 'line' trace event")) def test_no_jump_from_return_event(output): output.append(1) return @jump_test(2, 1, [1], event='exception', error=(ValueError, "can only jump from a 'line' trace event")) def test_no_jump_from_exception_event(output): output.append(1) 1 / 0 @jump_test(3, 2, [2, 5], event='return') def test_jump_from_yield(output): def gen(): output.append(2) yield 3 next(gen()) output.append(5) @jump_test(2, 3, [1, 3]) def test_jump_forward_over_listcomp(output): output.append(1) x = [i for i in range(10)] output.append(3) # checking for segfaults. # See https://github.com/python/cpython/issues/92311 @jump_test(3, 1, []) def test_jump_backward_over_listcomp(output): a = 1 x = [i for i in range(10)] c = 3 @jump_test(8, 2, [2, 7, 2]) def test_jump_backward_over_listcomp_v2(output): flag = False output.append(2) if flag: return x = [i for i in range(5)] flag = 6 output.append(7) output.append(8) @async_jump_test(2, 3, [1, 3]) async def test_jump_forward_over_async_listcomp(output): output.append(1) x = [i async for i in asynciter(range(10))] output.append(3) @async_jump_test(3, 1, []) async def test_jump_backward_over_async_listcomp(output): a = 1 x = [i async for i in asynciter(range(10))] c = 3 @async_jump_test(8, 2, [2, 7, 2]) async def test_jump_backward_over_async_listcomp_v2(output): flag = False output.append(2) if flag: return x = [i async for i in asynciter(range(5))] flag = 6 output.append(7) output.append(8) class TestEdgeCases(unittest.TestCase): def setUp(self): self.addCleanup(sys.settrace, sys.gettrace()) sys.settrace(None) def test_reentrancy(self): def foo(*args): ... def bar(*args): ... class A: def __call__(self, *args): pass def __del__(self): sys.settrace(bar) sys.settrace(A()) with support.catch_unraisable_exception() as cm: sys.settrace(foo) self.assertEqual(cm.unraisable.object, A.__del__) self.assertIsInstance(cm.unraisable.exc_value, RuntimeError) self.assertEqual(sys.gettrace(), foo) def test_same_object(self): def foo(*args): ... sys.settrace(foo) del foo sys.settrace(sys.gettrace()) if __name__ == "__main__": unittest.main()