ó
OyTLc           @   sz  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z e j e  j Z y
 e Z	 Wn e
 k
 ro d Z	 n Xe Z d  d l m Z d d d d g Z d „  Z d d d „  ƒ  YZ e e  d	 ƒ rÒ e  j g Z n g  Z y' d  d
 l m Z e j e ƒ  ƒ [ Wn e k
 rn Xd e f d „  ƒ  YZ e e j g  d j ƒ  D] Z e e e d ƒ ^ q?ƒ Z  d e f d „  ƒ  YZ! d S(   iÿÿÿÿN(   t   DistutilsErrort   AbstractSandboxt   DirectorySandboxt   SandboxViolationt	   run_setupc            s˜  t  j ƒ  } t j } t j } t  j j t  j j ˆ  ƒ ƒ } t  j j | d ƒ } t  j j | ƒ su t  j	 | ƒ n  t
 j } t j j ƒ  } z– | t
 _ t  j | ƒ yJ ˆ  g t | ƒ t j (t j j d | ƒ t | ƒ j ‡  f d †  ƒ Wn/ t k
 r!}	 |	 j r"|	 j d r"‚  q"n XWd t j j | ƒ x0 t t j ƒ D] }
 |
 | k rFt j |
 =qFqFWt  j | ƒ | t j (| t j (| t
 _ Xd S(   s8   Run a distutils setup script, sandboxed in its directoryt   tempi    c              s   t  d i ˆ  d 6d d 6ƒ S(   Ns   setup.pyt   __file__t   __main__t   __name__(   t   execfile(    (   t   setup_script(    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   <lambda>   s   N(   t   ost   getcwdt   syst   argvt   patht   abspatht   dirnamet   joint   isdirt   makedirst   tempfilet   tempdirt   modulest   copyt   chdirt   listt   insertR   t   runt
   SystemExitt   argst   update(   R
   R   t   old_dirt	   save_argvt	   save_patht	   setup_dirt   temp_dirt   save_tmpt   save_modulest   vt   key(    (   R
   s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR      s8    

 		 

c           B   sÇ  e  Z d  Z e Z d „  Z d „  Z d „  Z d „  Z x< d d d g D]+ Z	 e
 e e	 ƒ rF e e	 ƒ e ƒ  e	 <qF qF Wd' 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 „  Z x9 d d g D]+ Z	 e
 e e	 ƒ r-e e	 ƒ e ƒ  e	 <q-q-Wd  „  Z x9 d! d" g D]+ Z	 e
 e e	 ƒ rre e	 ƒ e ƒ  e	 <qrqrWd# „  Z d$ „  Z d% „  Z d& „  Z RS((   sD   Wrap 'os' module and 'open()' builtin for virtualizing setup scriptsc         C   sE   g  t  t ƒ D]+ } | j d ƒ r t |  | ƒ r | ^ q |  _ d  S(   Nt   _(   t   dirt   _ost
   startswitht   hasattrt   _attrs(   t   selft   name(    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   __init__4   s    c         C   s1   x* |  j  D] } t t | t | | ƒ ƒ q
 Wd  S(   N(   R/   t   setattrR   t   getattr(   R0   t   sourceR1   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   _copy:   s    c         C   s{   zB |  j  |  ƒ t r% |  j t _ n  |  j t _ t |  _ | ƒ  SWd t |  _ t r` t t _ n  t t _ |  j  t	 ƒ Xd S(   s   Run 'func' under os sandboxingN(
   R6   t   _filet   __builtin__t   filet   _opent   opent   Truet   _activet   FalseR,   (   R0   t   func(    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR   >   s    			c            s%   t  t ˆ  ƒ ‰ ‡  ‡ f d †  } | S(   Nc            s@   |  j  r- |  j ˆ  | | | | Ž \ } } n  ˆ | | | | Ž S(   N(   R=   t   _remap_pair(   R0   t   srct   dstR   t   kw(   R1   t   original(    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   wrapQ   s    	$(   R4   R,   (   R1   RE   (    (   R1   RD   s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   _mk_dual_path_wrapperO   s    t   renamet   linkt   symlinkc            s+   ˆ p t  t ˆ  ƒ ‰ ‡  ‡ f d †  } | S(   Nc            s4   |  j  r$ |  j ˆ  | | | Ž } n  ˆ | | | Ž S(   N(   R=   t   _remap_input(   R0   R   R   RC   (   R1   RD   (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyRE   ^   s    	(   R4   R,   (   R1   RD   RE   (    (   R1   RD   s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   _mk_single_path_wrapper\   s    R9   R;   t   statt   listdirR   t   chmodt   chownt   mkdirt   removet   unlinkt   rmdirt   utimet   lchownt   chroott   lstatt	   startfilet   mkfifot   mknodt   pathconft   accessc            s%   t  t ˆ  ƒ ‰ ‡  ‡ f d †  } | S(   Nc            sM   |  j  r= |  j ˆ  | | | Ž } |  j ˆ  ˆ | | | Ž ƒ Sˆ | | | Ž S(   N(   R=   RJ   t   _remap_output(   R0   R   R   RC   (   R1   RD   (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyRE   q   s    	(   R4   R,   (   R1   RE   (    (   R1   RD   s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   _mk_single_with_returno   s    t   readlinkt   tempnamc            s%   t  t ˆ  ƒ ‰ ‡  ‡ f d †  } | S(   Nc            s,   ˆ | | Ž  } |  j  r( |  j ˆ  | ƒ S| S(   N(   R=   R]   (   R0   R   RC   t   retval(   R1   RD   (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyRE   }   s    	(   R4   R,   (   R1   RE   (    (   R1   RD   s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt	   _mk_query{   s    R   t   tmpnamc         C   s   | S(   s=   Called to remap or validate any path, whether input or output(    (   R0   R   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   _validate_path‡   s    c         O   s   |  j  | ƒ S(   s   Called for path inputs(   Rd   (   R0   t	   operationR   R   RC   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyRJ   ‹   s    c         C   s   |  j  | ƒ S(   s   Called for path outputs(   Rd   (   R0   Re   R   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR]      s    c         O   s6   |  j  | d | | | Ž |  j  | d | | | Ž f S(   s?   Called for path pairs like rename, link, and symlink operationss   -froms   -to(   RJ   (   R0   Re   RA   RB   R   RC   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR@   “   s    N(   R   t
   __module__t   __doc__R>   R=   R2   R6   R   RF   R1   R.   R,   t   localst   NoneRK   R7   R:   R^   Rb   Rd   RJ   R]   R@   (    (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR   /   s>   					  		 		 			t   devnull(   t   GetGeneratePathc           B   s³   e  Z d  Z e j d d d d d d d d d	 d
 d d d g ƒ Z e d „ Z d „  Z e	 rl d d „ Z	 n  d d „ Z
 d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z RS(   s<   Restrict operations to a single subdirectory - pseudo-chrootR;   RN   RO   RP   RQ   RR   RS   RT   RU   RV   RY   RZ   R`   c         C   s   t  j j t  j j | ƒ ƒ |  _ t  j j |  j d ƒ |  _ g  | D]$ } t  j j t  j j | ƒ ƒ ^ qC |  _ t j	 |  ƒ d  S(   Nt    (
   R   R   t   normcaset   realpatht   _sandboxR   t   _prefixt   _exceptionsR   R2   (   R0   t   sandboxt
   exceptionsR   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR2   °   s    !4c         O   s   t  | | | ƒ ‚ d  S(   N(   R   (   R0   Re   R   RC   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt
   _violation¶   s    t   rc         O   sK   | d k r8 |  j  | ƒ r8 |  j d | | | | Ž n  t | | | | Ž S(   NRu   t   rtt   rbt   rUt   UR9   (   Ru   Rv   s   rbs   rURy   (   t   _okRt   R7   (   R0   R   t   modeR   RC   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR7   º   s    c         O   sK   | d k r8 |  j  | ƒ r8 |  j d | | | | Ž n  t | | | | Ž S(   NRu   Rv   Rw   Rx   Ry   R;   (   Ru   s   rts   rbs   rURy   (   Rz   Rt   R:   (   R0   R   R{   R   RC   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR:   ¿   s    c         C   s   |  j  d ƒ d  S(   NRc   (   Rt   (   R0   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyRc   Ä   s    c         C   sy   |  j  } z_ t |  _  t j j t j j | ƒ ƒ } |  j | ƒ sc | |  j k sc | j |  j	 ƒ rg t
 SWd  | |  _  Xd  S(   N(   R=   R>   R   R   Rm   Rn   t	   _exemptedRo   R-   Rp   R<   (   R0   R   t   activeRn   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyRz   Ç   s    		c         C   s   t  | j |  j ƒ } t | k S(   N(   t   mapR-   Rq   R<   (   R0   t   filepatht   exception_matches(    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR|   Ò   s    c         O   sH   | |  j  k rD |  j | ƒ rD |  j | t j j | ƒ | | Ž n  | S(   s   Called for path inputs(   t	   write_opsRz   Rt   R   R   Rn   (   R0   Re   R   R   RC   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyRJ   Ö   s    %c         O   sF   |  j  | ƒ s  |  j  | ƒ r< |  j | | | | | Ž n  | | f S(   s?   Called for path pairs like rename, link, and symlink operations(   Rz   Rt   (   R0   Re   RA   RB   R   RC   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR@   Ü   s     iÿ  c         C   sF   | t  @r3 |  j | ƒ r3 |  j d | | | ƒ n  t j | | | ƒ S(   s   Called for low-level os.open()s   os.open(   t   WRITE_FLAGSRz   Rt   R,   R;   (   R0   R9   t   flagsR{   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR;   â   s    (   R   Rf   Rg   t   dictt   fromkeysR   t   _EXCEPTIONSR2   Rt   R7   R:   Rc   Rz   R|   RJ   R@   R;   (    (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR   ¨   s   						s4   O_WRONLY O_RDWR O_APPEND O_CREAT O_TRUNC O_TEMPORARYi    c           B   s   e  Z d  Z d „  Z RS(   sE   A setup script attempted to modify the filesystem outside the sandboxc         C   s   d |  j  S(   Ns³  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.(   R   (   R0   (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   __str__õ   s    	(   R   Rf   Rg   R‡   (    (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyR   ò   s   (    ("   R   R   R8   R   t   operatorR   R1   R,   R9   R7   t	   NameErrorRi   R;   R:   t   distutils.errorsR    t   __all__R   R   R.   Rj   R†   t   win32com.client.gencacheRk   t   appendt   ImportErrorR   t   reducet   or_t   splitt   aR4   R‚   R   (    (    (    s6   /usr/lib/python2.7/dist-packages/setuptools/sandbox.pyt   <module>   s2   <

	#lA+