î
½1kd
'  ã               @   sä  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z e  j d k rŠ d  d l	 j
 j j j Z n e j e  j Z y
 e Z Wn e k
 r¾ d Z Yn Xe Z d  d l m Z d  d l m Z d  d l m Z m Z d d d d	 g Z d
 d	 „  Z Gd d „  d ƒ Z e e  d ƒ rJe  j g Z n g  Z y' d  d l  m! Z! e j" e! ƒ  ƒ [! Wn e# k
 r‹Yn XGd d „  d e ƒ Z$ e j% e j& d d „  d j' ƒ  Dƒ ƒ Z( Gd d „  d e ƒ Z) d S)é    NÚjava)ÚDistutilsError)Úworking_set)ÚbuiltinsÚexecfileÚAbstractSandboxÚDirectorySandboxÚSandboxViolationÚ	run_setupc                s  t  j ƒ  } t j d d … } t j d d … } t  j j t  j j ˆ ƒ ƒ } t  j j | d ƒ } t  j j | ƒ s‡ t  j	 | ƒ n  t
 j } t j j ƒ  ‰  t j ƒ  } zÑ | t
 _ t  j | ƒ yv ˆ g t | ƒ t j d d … <t j j d | ƒ t j ƒ  t j j d d „  ƒ t | ƒ j ‡ f d d †  ƒ Wn> t k
 rzt j ƒ  d }	 |	 j rv|	 j d rv‚  n  Yn XWd t j | ƒ t j j ˆ  ƒ ‡  f d d	 †  t j Dƒ }
 t t t j j |
 ƒ ƒ t  j | ƒ | t j d d … <| t j d d … <| t
 _ Xd S)
z8Run a distutils setup script, sandboxed in its directoryNÚtempr   c             S   s
   |  j  ƒ  S)N)Úactivate)Údist© r   úH/var/www/pythonscrapper/code/venv/build/setuptools/setuptools/sandbox.pyÚ<lambda>0   s    zrun_setup.<locals>.<lambda>c                  s   t  d i ˆ  d 6d d 6ƒ S)Nzsetup.pyÚ__file__Ú__main__Ú__name__)r   r   )Úsetup_scriptr   r   r   2   s   é   c                s2   g  |  ]( } | ˆ  k r | j  d  ƒ r | ‘ q S)z
encodings.)Ú
startswith)Ú.0Úmod_name)Úsave_modulesr   r   ú
<listcomp>A   s   	 zrun_setup.<locals>.<listcomp>) ÚosÚgetcwdÚsysÚargvÚpathÚabspathÚdirnameÚjoinÚisdirÚmakedirsÚtempfileÚtempdirÚmodulesÚcopyÚpkg_resourcesÚ__getstate__ÚchdirÚlistÚinsertr   Ú__init__Ú	callbacksÚappendr   ÚrunÚ
SystemExitÚexc_infoÚargsÚ__setstate__ÚupdateÚmapÚ__delitem__)r   r4   Zold_dirÚ	save_argvZ	save_pathZ	setup_dirÚtemp_dirZsave_tmpZpr_stateÚvZdel_modulesr   )r   r   r   r
      s@     		 
c               @   sð  e  Z d  Z d Z d Z d d „  Z d d „  Z d d „  Z d	 d
 „  Z x< d d d g D]+ Z	 e
 e e	 ƒ rX e e	 ƒ e ƒ  e	 <qX qX Wd d d „ Z e r® e d e ƒ Z n  e d e ƒ Z xl d d d d d d d d d d d d d d d  d! d" d# d$ g D]+ Z	 e
 e e	 ƒ rý e e	 ƒ e ƒ  e	 <qý qý Wd% d& „  Z x9 d' d( g D]+ Z	 e
 e e	 ƒ rEe e	 ƒ e ƒ  e	 <qEqEWd) d* „  Z x9 d+ d, g D]+ Z	 e
 e e	 ƒ r�e e	 ƒ e ƒ  e	 <q�q�Wd- d. „  Z d/ d0 „  Z d1 d2 „  Z d3 d4 „  Z d S)5r   zDWrap 'os' module and 'open()' builtin for virtualizing setup scriptsFc                s&   ‡  f d d †  t  t ƒ Dƒ ˆ  _ d  S)Nc                s5   g  |  ]+ } | j  d  ƒ r t ˆ  | ƒ r | ‘ q S)Ú_)r   Úhasattr)r   Úname)Úselfr   r   r   T   s   	 z,AbstractSandbox.__init__.<locals>.<listcomp>)ÚdirÚ_osÚ_attrs)r?   r   )r?   r   r.   R   s    zAbstractSandbox.__init__c             C   s1   x* |  j  D] } t t | t | | ƒ ƒ q
 Wd  S)N)rB   Úsetattrr   Úgetattr)r?   Úsourcer>   r   r   r   Ú_copyX   s    zAbstractSandbox._copyc             C   s{   zB |  j  |  ƒ t r% |  j t _ n  |  j t _ d |  _ | ƒ  SWd d |  _ t r` t t _ n  t t _ |  j  t ƒ Xd S)zRun 'func' under os sandboxingTNF)rF   Ú_filer   ÚfileÚ_openÚopenÚ_activerA   )r?   Úfuncr   r   r   r1   \   s    			zAbstractSandbox.runc                s(   t  t ˆ  ƒ ‰ ‡  ‡ f d d †  } | S)Nc                s@   |  j  r- |  j ˆ  | | | | Ž \ } } n  ˆ | | | | Ž S)N)rK   Ú_remap_pair)r?   ÚsrcÚdstr4   Úkw)r>   Úoriginalr   r   Úwrapn   s    	$z3AbstractSandbox._mk_dual_path_wrapper.<locals>.wrap)rD   rA   )r>   rR   r   )r>   rQ   r   Ú_mk_dual_path_wrapperl   s    z%AbstractSandbox._mk_dual_path_wrapperÚrenameÚlinkÚsymlinkNc                s.   ˆ p t  t ˆ  ƒ ‰ ‡  ‡ f d d †  } | S)Nc                s4   |  j  r$ |  j ˆ  | | | Ž } n  ˆ | | | Ž S)N)rK   Ú_remap_input)r?   r   r4   rP   )r>   rQ   r   r   rR   y   s    	z5AbstractSandbox._mk_single_path_wrapper.<locals>.wrap)rD   rA   )r>   rQ   rR   r   )r>   rQ   r   Ú_mk_single_path_wrapperw   s    z'AbstractSandbox._mk_single_path_wrapperrH   rJ   ÚstatÚlistdirr+   ÚchmodÚchownÚmkdirÚremoveÚunlinkÚrmdirÚutimeÚlchownÚchrootÚlstatZ	startfileÚmkfifoÚmknodÚpathconfÚaccessc                s(   t  t ˆ  ƒ ‰ ‡  ‡ f d d †  } | S)Nc                sM   |  j  r= |  j ˆ  | | | Ž } |  j ˆ  ˆ | | | Ž ƒ Sˆ | | | Ž S)N)rK   rW   Ú_remap_output)r?   r   r4   rP   )r>   rQ   r   r   rR   ‹   s    	z4AbstractSandbox._mk_single_with_return.<locals>.wrap)rD   rA   )r>   rR   r   )r>   rQ   r   Ú_mk_single_with_return‰   s    z&AbstractSandbox._mk_single_with_returnÚreadlinkÚtempnamc                s(   t  t ˆ  ƒ ‰ ‡  ‡ f d d †  } | S)Nc                s,   ˆ | | Ž  } |  j  r( |  j ˆ  | ƒ S| S)N)rK   ri   )r?   r4   rP   Úretval)r>   rQ   r   r   rR   —   s    	z'AbstractSandbox._mk_query.<locals>.wrap)rD   rA   )r>   rR   r   )r>   rQ   r   Ú	_mk_query•   s    zAbstractSandbox._mk_queryr   Útmpnamc             C   s   | S)z=Called to remap or validate any path, whether input or outputr   )r?   r   r   r   r   Ú_validate_path¡   s    zAbstractSandbox._validate_pathc             O   s   |  j  | ƒ S)zCalled for path inputs)rp   )r?   Ú	operationr   r4   rP   r   r   r   rW   ¥   s    zAbstractSandbox._remap_inputc             C   s   |  j  | ƒ S)zCalled for path outputs)rp   )r?   rq   r   r   r   r   ri   ©   s    zAbstractSandbox._remap_outputc             O   s6   |  j  | d | | | Ž |  j  | d | | | Ž f S)z?Called for path pairs like rename, link, and symlink operationsz-fromz-to)rW   )r?   rq   rN   rO   r4   rP   r   r   r   rM   ­   s    zAbstractSandbox._remap_pair)r   Ú
__module__Ú__qualname__Ú__doc__rK   r.   rF   r1   rS   r>   r=   rA   ÚlocalsrX   rG   rI   rj   rn   rp   rW   ri   rM   r   r   r   r   r   M   s>     	 	 Údevnull)ÚGetGeneratePathc               @   sâ   e  Z d  Z d Z e j d d d d d d d d	 d
 d d d d g ƒ Z d g Z e d d „ Z	 d d „  Z
 e r„ d d d „ Z n  d d d „ Z d d „  Z d d „  Z d d „  Z d d  „  Z d! d" „  Z d# d$ d% „ Z d& S)'r   z<Restrict operations to a single subdirectory - pseudo-chrootrJ   r[   r\   r]   r^   r_   r`   ra   rb   rc   re   rf   rl   z.*lib2to3.*\.pickle$c             C   sc   t  j j t  j j | ƒ ƒ |  _ t  j j |  j d ƒ |  _ d d „  | Dƒ |  _ t j	 |  ƒ d  S)NÚ c             S   s.   g  |  ]$ } t  j j t  j j | ƒ ƒ ‘ q Sr   )r   r   ÚnormcaseÚrealpath)r   r   r   r   r   r   Ô   s   	z-DirectorySandbox.__init__.<locals>.<listcomp>)
r   r   ry   rz   Ú_sandboxr"   Ú_prefixÚ_exceptionsr   r.   )r?   ZsandboxÚ
exceptionsr   r   r   r.   Ð   s
    !	zDirectorySandbox.__init__c             O   s   t  | | | ƒ ‚ d  S)N)r	   )r?   rq   r4   rP   r   r   r   Ú
_violationÙ   s    zDirectorySandbox._violationÚrc             O   sK   | d k r8 |  j  | ƒ r8 |  j d | | | | Ž n  t | | | | Ž S)Nr€   ÚrtÚrbÚrUÚUrH   )r€   zrtzrbzrUr„   )Ú_okr   rG   )r?   r   Úmoder4   rP   r   r   r   rG   Ý   s    zDirectorySandbox._filec             O   sK   | d k r8 |  j  | ƒ r8 |  j d | | | | Ž n  t | | | | Ž S)Nr€   r�   r‚   rƒ   r„   rJ   )r€   zrtzrbzrUr„   )r…   r   rI   )r?   r   r†   r4   rP   r   r   r   rI   â   s    zDirectorySandbox._openc             C   s   |  j  d ƒ d  S)Nro   )r   )r?   r   r   r   ro   ç   s    zDirectorySandbox.tmpnamc             C   ss   |  j  } zY d |  _  t j j t j j | ƒ ƒ } |  j | ƒ p` | |  j k p` | j |  j ƒ SWd  | |  _  Xd  S)NF)	rK   r   r   ry   rz   Ú	_exemptedr{   r   r|   )r?   r   Zactiverz   r   r   r   r…   ê   s    		zDirectorySandbox._okc                sT   ‡  f d d †  |  j  Dƒ } ‡  f d d †  |  j Dƒ } t j | | ƒ } t | ƒ S)Nc             3   s   |  ] } ˆ  j  | ƒ Vq d  S)N)r   )r   Ú	exception)Úfilepathr   r   ú	<genexpr>ù   s   z-DirectorySandbox._exempted.<locals>.<genexpr>c             3   s!   |  ] } t  j | ˆ  ƒ Vq d  S)N)ÚreÚmatch)r   Úpattern)r‰   r   r   rŠ   ý   s   )r}   Ú_exception_patternsÚ	itertoolsÚchainÚany)r?   r‰   Zstart_matchesZpattern_matchesZ
candidatesr   )r‰   r   r‡   ÷   s    zDirectorySandbox._exemptedc             O   sH   | |  j  k rD |  j | ƒ rD |  j | t j j | ƒ | | Ž n  | S)zCalled for path inputs)Ú	write_opsr…   r   r   r   rz   )r?   rq   r   r4   rP   r   r   r   rW     s    %zDirectorySandbox._remap_inputc             O   sF   |  j  | ƒ s  |  j  | ƒ r< |  j | | | | | Ž n  | | f S)z?Called for path pairs like rename, link, and symlink operations)r…   r   )r?   rq   rN   rO   r4   rP   r   r   r   rM   	  s     zDirectorySandbox._remap_pairiÿ  c             O   sR   | t  @r9 |  j | ƒ r9 |  j d | | | | | Ž n  t j | | | | | Ž S)zCalled for low-level os.open()zos.open)ÚWRITE_FLAGSr…   r   rA   rJ   )r?   rH   Úflagsr†   r4   rP   r   r   r   rJ     s    zDirectorySandbox.openN)r   rr   rs   rt   ÚdictÚfromkeysr’   rŽ   Ú_EXCEPTIONSr.   r   rG   rI   ro   r…   r‡   rW   rM   rJ   r   r   r   r   r   Â   s    		c             C   s"   g  |  ] } t  t | d  ƒ ‘ q S)r   )rD   rA   )r   Úar   r   r   r     s   	 r   z4O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC O_TEMPORARYc               @   s"   e  Z d  Z d Z d d „  Z d S)r	   zEA setup script attempted to modify the filesystem outside the sandboxc             C   s   d |  j  S)Na³  SandboxViolation: %s%r %s

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.)r4   )r?   r   r   r   Ú__str__  s    	zSandboxViolation.__str__N)r   rr   rs   rt   r™   r   r   r   r   r	     s   )*r   r   r%   ÚoperatorÚ	functoolsr�   r‹   r)   r>   Z$org.python.modules.posix.PosixModuleÚpythonr'   ÚposixZPosixModulerA   rH   rG   Ú	NameErrorrJ   rI   Zdistutils.errorsr   r   Zsetuptools.compatr   r   Ú__all__r
   r   r=   rv   r—   Zwin32com.client.gencacherw   r0   ÚImportErrorr   ÚreduceÚor_Úsplitr“   r	   r   r   r   r   Ú<module>   sF   
0hS