o Eh2@snddlZddlZddlZddlZddlZddlmZddlmZddl m Z Gddde Z GdddZ dS) N)support) os_helper) print_warningc@s eZdZdS)SkipTestEnvironmentN)__name__ __module__ __qualname__r r 0/usr/lib/python3.10/test/libregrtest/save_env.pyr src@seZdZdZdddddZdZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Zdd?Z!d@dAZ"dBdCZ#dDdEZ$dFdGZ%dHdIZ&dJdKZ'dLdMZ(dNdOZ)dPdQZ*dRdSZ+dTdUZ,dVdWZ-dXdYZ.dZd[Z/d\d]Z0d^d_Z1d`daZ2dbdcZ3dddeZ4dfdgZ5dhdiZ6djdkZ7dldmZ8dndoZ9dpdqe:e;DZdvdwZ?dxdyZ@dzd{ZAd|d}ZBd~dZCdS)saved_test_environmentaSave bits of the test environment and restore them at block exit. with saved_test_environment(testname, verbose, quiet): #stuff Unless quiet is True, a warning is printed to stderr if any of the saved items was changed by the test. The support.environment_altered attribute is set to True if a change is detected. If verbose is more than 1, the before and after state of changed items is also printed. rF)pgocCs||_||_||_||_dSN)testnameverbosequietr )selfrrrr r r r __init__%s zsaved_test_environment.__init__)zsys.argvcwdz sys.stdinz sys.stdoutz sys.stderrz os.environzsys.pathzsys.path_hooks __import__zwarnings.filterszasyncore.socket_mapzlogging._handlerszlogging._handlerListz sys.gettracezsys.warnoptionsz!multiprocessing.process._danglingzthreading._danglingzsysconfig._CONFIG_VARSzsysconfig._INSTALL_SCHEMESfileslocalezwarnings.showwarningshutil_archive_formatsshutil_unpack_formatsz!asyncio.events._event_loop_policyzurllib.requests._url_tempfileszurllib.requests._openercCs tj|Sr )sysmodulesrnamer r r get_moduleD z!saved_test_environment.get_modulecCs z||WStytwr )rKeyErrorrrr r r try_get_moduleHs   z%saved_test_environment.try_get_modulecCs|d}t|jSNzurllib.request)r list_url_tempfilesrurllib_requestr r r "get_urllib_requests__url_tempfilesO  z9saved_test_environment.get_urllib_requests__url_tempfilescCs|D]}t|qdSr )runlink)r tempfilesfilenamer r r &restore_urllib_requests__url_tempfilesRs z=saved_test_environment.restore_urllib_requests__url_tempfilescC|d}|jSr!)r _openerr$r r r get_urllib_requests__openerV z2saved_test_environment.get_urllib_requests__openercC|d}||_dSr!)rr-)ropenerr%r r r restore_urllib_requests__openerYr'z6saved_test_environment.restore_urllib_requests__openercCs|dtSNasyncio)r rmaybe_get_event_loop_policyrr r r %get_asyncio_events__event_loop_policy]s zs z3saved_test_environment.get_files..)sortedrHlistdirr6r r r get_filessz saved_test_environment.get_filescCsZtj}||vr'|d|vr)tj|rt|dStj|r+t|dSdSdSdS)Nr)rTESTFNrHrkisfiler(rrmtree)r saved_valuerr r r restore_filess  z$saved_test_environment.restore_filescCs g|] }|drtt|qS)LC_) startswithgetattrr)rlcr r r sz!saved_test_environment.c CsDg}|jD]}z ||t|dfWqttfyYqw|Sr )_lcappendr setlocale TypeError ValueError)rpairingsrr r r get_locales z!saved_test_environment.get_localecCs|D] \}}t||qdSr )rr)rrrsettingr r r restore_locales z%saved_test_environment.restore_localecCr,r~)r showwarningrr r r get_warnings_showwarningr/z/saved_test_environment.get_warnings_showwarningcCr0r~)rr)rfxnrr r r restore_warnings_showwarningr'z3saved_test_environment.restore_warnings_showwarningccsF|jD]}|dd}d|}d|}|t||t||fVqdS)N._get_restore_) resourcesreplacer)rr method_suffixget_name restore_namer r r resource_info#s  z$saved_test_environment.resource_infoc CsPg|_|D]\}}}z|}Wn tyYqw|j||||fq|Sr ) saved_valuesrrr)rrrrestoreoriginalr r r __enter__*s  z saved_test_environment.__enter__c Cs|j}d|_t|D]3\}}}}|} | |kr?dt_|||js?|js?t|d|jtd|d| dt j ddq dS)NTz was modified by z Before: z After:  )fileflushF) rr gc_collectenvironment_alteredrr rrprintrr[) rexc_typeexc_valexc_tbrrrrrcurrentr r r __exit__5s zsaved_test_environment.__exit__N)rF)Drrr__doc__rrrr r&r+r.r2r7r:r>rErJrOrTrXr\r^rarcrfrjrlrnrprrrtrwrzr|rrrrrrrrrrrrrrrrrrrrrrrrdirrrrrrrrrrr r r r r s  r )ryrrHrrtestr test.supportrtest.libregrtest.utilsr Exceptionrr r r r r s