U Qab7@s ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z mZddlZejdrddlmmmmZn ejejZzeZWnek rdZYnXeZddlm Z ddlm!Z!ddd d gZ"d-d d Z#ej$d.d dZ%ej$ddZ&ej$ddZ'ej$ddZ(Gddde)Z*GdddZ+ej$ddZ,ddZ-ej$ddZ.ej$dd Z/d!d"Z0d#d$Z1d%d Z2Gd&ddZ3e4ed'rej5gZ6ngZ6Gd(dde3Z7e8ej9d)d*d+:DZ;Gd,d d e Zr4r5tbrrr__exit__{s zExceptionSaver.__exit__cCs6dt|krdSttj|j\}}t|||jdS)z"restore and re-raise any exceptionrAN)varsrr.loadsrArZreraiserB)r>r4r5rrrresumes zExceptionSaver.resumeN)r7r8r9r:r?rDrGrrrrr<rs r<c #sVtjt }VW5QRXtjfddtjD}t||dS)z Context in which imported modules are saved. Translates exceptions internal to the context into the equivalent exception outside the context. c3s$|]}|kr|ds|VqdS)z encodings.N startswith).0mod_namer!rr s zsave_modules..N)rmodulescopyr<update_clear_modulesrG) saved_excZ del_modulesrr!r save_moduless   rRcCst|D] }tj|=qdSr)listrrM)Z module_namesrKrrrrPs rPc cs$t}z |VW5t|XdSr)r$ __getstate__ __setstate__r!rrrsave_pkg_resources_states rVccstj|d}txtfttNt<t|(t |t ddVW5QRXW5QRXW5QRXW5QRXW5QRXW5QRXdS)NZtempZ setuptools) r(r joinrVrRhide_setuptoolsr"rr'r, __import__) setup_dirZtemp_dirrrr setup_contexts  r[cCstd}t||S)aH >>> _needs_hiding('setuptools') True >>> _needs_hiding('pkg_resources') True >>> _needs_hiding('setuptools_plugin') False >>> _needs_hiding('setuptools.__init__') True >>> _needs_hiding('distutils') True >>> _needs_hiding('os') False >>> _needs_hiding('Cython') True z1(setuptools|pkg_resources|distutils|Cython)(\.|$))rerboolmatch)rKpatternrrr _needs_hidings r`cCstttj}t|dS)a% Remove references to setuptools' modules from sys.modules to allow the invocation to import the most appropriate setuptools. This technique is necessary to avoid issues such as #315 where setuptools upgrading itself would fail to find a function declared in the metadata. N)filterr`rrMrP)rMrrrrXs rXc Cstjtj|}t|z|gt|tjdd<tjd|t t j ddt |trl|n |t}t|t|dd}t||W5QRXWn4tk r}z|jr|jdrʂW5d}~XYnXW5QRXdS)z8Run a distutils setup script, sandboxed in its directoryNrcSs|Sr)Zactivate)Zdistrrrzrun_setup..__main__)__file__r7)r(r abspathdirnamer[rSrrinsertr__init__Z callbacksappend isinstancestrencodegetfilesystemencodingr dictr SystemExitargs)Z setup_scriptrqrZZ dunder_filensvrrrr s"    c@seZdZdZdZddZddZddZd d Zd d Z d dZ dD]Z e e e rDe e ee <qDd$ddZerzedeZedeZdD]Z e e e ree ee <qddZdD]Z e e e ree ee <qddZdD]Z e e e ree ee <qddZddZd d!Zd"d#ZdS)%rzDWrap 'os' module and 'open()' builtin for virtualizing setup scriptsFcsfddttD_dS)Ncs$g|]}|dst|r|qS)_)rIhasattr)rJnamer=rr s z,AbstractSandbox.__init__..)dir_os_attrsr=rr=rris zAbstractSandbox.__init__cCs"|jD]}tt|t||qdSr)rzsetattrr(getattr)r>sourcervrrr_copy s zAbstractSandbox._copycCs(||tr|jt_|jt_d|_dSr@)r~_filerfile_openr_activer=rrrr?s  zAbstractSandbox.__enter__cCs$d|_trtt_tt_|tdSNF)rrrrrrr~ry)r>exc_type exc_value tracebackrrrrDs zAbstractSandbox.__exit__c Cs"||W5QRSQRXdS)zRun 'func' under os sandboxingNr)r>funcrrrrunszAbstractSandbox.runcsttfdd}|S)Ncs2|jr |j||f||\}}||f||Sr)r _remap_pair)r>srcdstrqkwrvoriginalrrwrap&sz3AbstractSandbox._mk_dual_path_wrapper..wrapr|ryrvrrrr_mk_dual_path_wrapper#s z%AbstractSandbox._mk_dual_path_wrapper)renamelinksymlinkNcs p ttfdd}|S)Ncs*|jr|j|f||}|f||Sr)r _remap_inputr>r rqrrrrr4sz5AbstractSandbox._mk_single_path_wrapper..wrapr)rvrrrrr_mk_single_path_wrapper1sz'AbstractSandbox._mk_single_path_wrapperrr)statlistdirr*rchmodchownmkdirremoveunlinkrmdirutimelchownchrootlstatZ startfilemkfifomknodpathconfaccesscsttfdd}|S)NcsB|jr2|j|f||}||f||S|f||Sr)rr _remap_outputrrrrrIsz4AbstractSandbox._mk_single_with_return..wraprrrrr_mk_single_with_returnFs z&AbstractSandbox._mk_single_with_return)readlinktempnamcsttfdd}|S)Ncs ||}|jr||S|Sr)rr)r>rqrZretvalrrrrXs  z'AbstractSandbox._mk_query..wraprrrrr _mk_queryUs zAbstractSandbox._mk_query)r)tmpnamcCs|S)z=Called to remap or validate any path, whether input or outputr)r>r rrr_validate_pathdszAbstractSandbox._validate_pathcOs ||SzCalled for path inputsrr> operationr rqrrrrrhszAbstractSandbox._remap_inputcCs ||S)zCalled for path outputsr)r>rr rrrrlszAbstractSandbox._remap_outputcOs0|j|d|f|||j|d|f||fS)?Called for path pairs like rename, link, and symlink operationsz-fromz-to)rr>rrrrqrrrrrpszAbstractSandbox._remap_pair)N)r7r8r9r:rrir~r?rDrrrvruryrrrrrrrrrrrrrrrs<          devnullc@seZdZdZedddddddd d d d d dg ZdgZefddZ ddZ e rXd'ddZ d(ddZ ddZ ddZddZdd Zd!d"Zd)d$d%Zd&S)*r z.) r(r rr_sandboxrW_prefix _exceptionsrri)r>Zsandbox exceptionsrrrris zDirectorySandbox.__init__cOsddlm}||||dS)Nr)r )r1r )r>rrqrr rrr _violations zDirectorySandbox._violationrcOs:|dkr(||s(|jd||f||t||f||S)NrZrtr ZrUUr)_okrrr>r rrqrrrrrszDirectorySandbox._filecOs:|dkr(||s(|jd||f||t||f||S)Nrr)rrrrrrrrszDirectorySandbox._opencCs|ddS)Nr)rr=rrrrszDirectorySandbox.tmpnamcCsR|j}z>d|_tjtj|}||p@||jkp@||jWS||_XdSr) rr(r rr _exemptedrrIr)r>r Zactiverrrrrs  zDirectorySandbox._okcs<fdd|jD}fdd|jD}t||}t|S)Nc3s|]}|VqdSrrH)rJZ exceptionfilepathrrrLsz-DirectorySandbox._exempted..c3s|]}t|VqdSr)r\r^)rJr_rrrrLs)r_exception_patterns itertoolschainany)r>rZ start_matchesZpattern_matchesZ candidatesrrrrs   zDirectorySandbox._exemptedcOs4||jkr0||s0|j|tj|f|||Sr) write_opsrrr(r rrrrrrszDirectorySandbox._remap_inputcOs2||r||s*|j|||f||||fS)r)rrrrrrrszDirectorySandbox._remap_paircOs@|t@r*||s*|jd|||f||tj|||f||S)zCalled for low-level os.open()zos.open) WRITE_FLAGSrrryr)r>rflagsrrqrrrrrszDirectorySandbox.openN)r)r)r)r7r8r9r:rofromkeysrr _EXCEPTIONSrirrrrrrrrrrrrrr ~s:     cCsg|]}tt|dqS)rr)rJarrrrwsrwz4O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC O_TEMPORARYc@s&eZdZdZedZddZdS)r zEA setup script attempted to modify the filesystem outside the sandboxa SandboxViolation: {cmd}{args!r} {kwargs} The package setup script has attempted to modify files on your system that are not within the EasyInstall build area, and has been aborted. This package cannot be safely installed by EasyInstall, and may not support alternate installation locations even if you run its setup script by hand. Please inform the package's author and the EasyInstall maintainers to find out if a fix or workaround is available. cCs|j\}}}|jjftSr)rqtmplformatr)r>cmdrqkwargsrrr__str__s zSandboxViolation.__str__N) r7r8r9r:textwrapdedentlstriprrrrrrr s )N)N)=r(rr&operator functoolsrr\ contextlibr.rZsetuptools.externrZsetuptools.extern.six.movesrrZpkg_resources.py31compatr$platformrIZ$org.python.modules.posix.PosixModulepythonrMposixZ PosixModuleryrvrr NameErrorrrZdistutils.errorsrr__all__rcontextmanagerrr"r'r,r0r-r<rRrPrVr[r`rXr rrurrr reduceor_splitrr rrrrsx                w  V