| # This script is used by test_misc. | |
| import _imp | |
| import _testinternalcapi | |
| import json | |
| import os | |
| import sys | |
| def import_singlephase(): | |
| assert '_testsinglephase' not in sys.modules | |
| try: | |
| import _testsinglephase # noqa: F401 | |
| except ImportError: | |
| sys.modules.pop('_testsinglephase', None) | |
| return False | |
| else: | |
| del sys.modules['_testsinglephase'] | |
| return True | |
| def check_singlephase(override): | |
| # Check using the default setting. | |
| settings_initial = _testinternalcapi.get_interp_settings() | |
| allowed_initial = import_singlephase() | |
| assert(_testinternalcapi.get_interp_settings() == settings_initial) | |
| # Apply the override and check. | |
| override_initial = _imp._override_multi_interp_extensions_check(override) | |
| settings_after = _testinternalcapi.get_interp_settings() | |
| allowed_after = import_singlephase() | |
| # Apply the override again and check. | |
| noop = {} | |
| override_after = _imp._override_multi_interp_extensions_check(override) | |
| settings_noop = _testinternalcapi.get_interp_settings() | |
| if settings_noop != settings_after: | |
| noop['settings_noop'] = settings_noop | |
| allowed_noop = import_singlephase() | |
| if allowed_noop != allowed_after: | |
| noop['allowed_noop'] = allowed_noop | |
| # Restore the original setting and check. | |
| override_noop = _imp._override_multi_interp_extensions_check(override_initial) | |
| if override_noop != override_after: | |
| noop['override_noop'] = override_noop | |
| settings_restored = _testinternalcapi.get_interp_settings() | |
| allowed_restored = import_singlephase() | |
| # Restore the original setting again. | |
| override_restored = _imp._override_multi_interp_extensions_check(override_initial) | |
| assert(_testinternalcapi.get_interp_settings() == settings_restored) | |
| return dict({ | |
| 'requested': override, | |
| 'override__initial': override_initial, | |
| 'override_after': override_after, | |
| 'override_restored': override_restored, | |
| 'settings__initial': settings_initial, | |
| 'settings_after': settings_after, | |
| 'settings_restored': settings_restored, | |
| 'allowed__initial': allowed_initial, | |
| 'allowed_after': allowed_after, | |
| 'allowed_restored': allowed_restored, | |
| }, **noop) | |
| def run_singlephase_check(override, outfd): | |
| with os.fdopen(outfd, 'w') as outfile: | |
| sys.stdout = outfile | |
| sys.stderr = outfile | |
| try: | |
| results = check_singlephase(override) | |
| json.dump(results, outfile) | |
| finally: | |
| sys.stdout = sys.__stdout__ | |
| sys.stderr = sys.__stderr__ |