python (3.12.0)
1 # This script is used by test_misc.
2
3 import _imp
4 import _testinternalcapi
5 import json
6 import os
7 import sys
8
9
10 def import_singlephase():
11 assert '_testsinglephase' not in sys.modules
12 try:
13 import _testsinglephase
14 except ImportError:
15 sys.modules.pop('_testsinglephase', None)
16 return False
17 else:
18 del sys.modules['_testsinglephase']
19 return True
20
21
22 def check_singlephase(override):
23 # Check using the default setting.
24 settings_initial = _testinternalcapi.get_interp_settings()
25 allowed_initial = import_singlephase()
26 assert(_testinternalcapi.get_interp_settings() == settings_initial)
27
28 # Apply the override and check.
29 override_initial = _imp._override_multi_interp_extensions_check(override)
30 settings_after = _testinternalcapi.get_interp_settings()
31 allowed_after = import_singlephase()
32
33 # Apply the override again and check.
34 noop = {}
35 override_after = _imp._override_multi_interp_extensions_check(override)
36 settings_noop = _testinternalcapi.get_interp_settings()
37 if settings_noop != settings_after:
38 noop['settings_noop'] = settings_noop
39 allowed_noop = import_singlephase()
40 if allowed_noop != allowed_after:
41 noop['allowed_noop'] = allowed_noop
42
43 # Restore the original setting and check.
44 override_noop = _imp._override_multi_interp_extensions_check(override_initial)
45 if override_noop != override_after:
46 noop['override_noop'] = override_noop
47 settings_restored = _testinternalcapi.get_interp_settings()
48 allowed_restored = import_singlephase()
49
50 # Restore the original setting again.
51 override_restored = _imp._override_multi_interp_extensions_check(override_initial)
52 assert(_testinternalcapi.get_interp_settings() == settings_restored)
53
54 return dict({
55 'requested': override,
56 'override__initial': override_initial,
57 'override_after': override_after,
58 'override_restored': override_restored,
59 'settings__initial': settings_initial,
60 'settings_after': settings_after,
61 'settings_restored': settings_restored,
62 'allowed__initial': allowed_initial,
63 'allowed_after': allowed_after,
64 'allowed_restored': allowed_restored,
65 }, **noop)
66
67
68 def run_singlephase_check(override, outfd):
69 with os.fdopen(outfd, 'w') as outfile:
70 sys.stdout = outfile
71 sys.stderr = outfile
72 try:
73 results = check_singlephase(override)
74 json.dump(results, outfile)
75 finally:
76 sys.stdout = sys.__stdout__
77 sys.stderr = sys.__stderr__