forked from RustPython/RustPython
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuiltins_module.py
More file actions
44 lines (31 loc) · 1.12 KB
/
Copy pathbuiltins_module.py
File metadata and controls
44 lines (31 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from testutils import assert_raises
assert "__builtins__" in globals()
# assert type(__builtins__).__name__ == 'module'
with assert_raises(AttributeError):
__builtins__.__builtins__
assert __builtins__.__name__ == "builtins"
import builtins
assert builtins.__name__ == "builtins"
__builtins__.x = "new"
assert x == "new" # noqa: F821
exec('assert "__builtins__" in globals()', dict())
exec("assert __builtins__ == 7", {"__builtins__": 7})
exec("assert not isinstance(__builtins__, dict)")
exec("assert isinstance(__builtins__, dict)", {})
namespace = {}
exec("", namespace)
assert namespace["__builtins__"] == __builtins__.__dict__
# function.__builtins__ should be a dict, not a module
# See: https://docs.python.org/3/reference/datamodel.html
def test_func():
pass
assert isinstance(test_func.__builtins__, dict), (
f"function.__builtins__ should be dict, got {type(test_func.__builtins__)}"
)
# with assert_raises(NameError):
# exec('print(__builtins__)', {'__builtins__': {}})
# __builtins__ is deletable but names are alive
del __builtins__
with assert_raises(NameError):
__builtins__ # noqa: F821
assert print