ó
ÓnùWc           @   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 d  d l m	 Z
 m Z d d d „ Z d „  Z d „  Z d „  Z d e j f d „  ƒ  YZ d	 „  Z d d d
 d d „ Z d S(   iÿÿÿÿN(   t   Popent   PIPEc         C   sR   t  | t j ƒ s$ |  j | ƒ } n  | d k r? t j ƒ  } n  t |  | | | ƒ S(   s'   for zipfile py2.5 borrowed from cpythonN(   t
   isinstancet   zipfilet   ZipInfot   getinfot   Nonet   ost   getcwdt   _extract_member(   t   selft   membert   patht   pwd(    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyt   _extract   s
    c         C   s;   t  | d ƒ } z | j |  j | ƒ ƒ Wd  | j ƒ  Xd  S(   Nt   wb(   t   opent   writet   readt   close(   R
   t   namet	   dest_patht	   dest_file(    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyt   _extract_from_zip   s    c         C   s8  | d t  j j t  j j f k rQ t t  j j | ƒ d ƒ d k rQ | d  } n  | j d d k rƒ t  j j | | j d ƒ } n t  j j | | j ƒ } t  j j | ƒ } t  j j	 | ƒ } | rè t  j j
 | ƒ rè t  j | ƒ n  | j d d k r!t  j j | ƒ st  j | ƒ n  | St |  | j | ƒ | S(   s'   for zipfile py2.5 borrowed from cpythoniÿÿÿÿi   i    t   /(   R   R   t   sept   altsept   lent
   splitdrivet   filenamet   joint   normpatht   dirnamet   existst   makedirst   isdirt   mkdirR   (   R
   R   t
   targetpathR   t	   upperdirs(    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyR	       s     ""c         C   sz   xf t  j |  ƒ D]U \ } } } t  j | t j ƒ x0 | D]( } t  j t  j j | | ƒ t j ƒ q9 Wq Wt j |  ƒ d  S(   N(	   R   t   walkt   chmodt   statt   S_IWRITER   R   t   shutilt   rmtree(   t   targett   dir_patht   dirst   filesR   (    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyt   _remove_dir@   s
    *t   ZippedEnvironmentc           B   s,   e  Z d Z d Z d Z d  „  Z d „  Z RS(   c         C   sö   |  j  d  k s |  j d  k r" d  St j j |  j  ƒ sD d  |  _ d  St j ƒ  |  _ t j	 ƒ  |  _
 d  d  d  } } } z@ t j |  j  ƒ } x' | j ƒ  D] } t | | |  j
 ƒ q˜ WWd  | rÌ | j ƒ  n  ~ Xt j t j j |  j
 |  j ƒ ƒ d  S(   N(   t   datafileR   t   datanameR   R   t   isfilet   old_cwdR   t   tempfilet   mkdtempt   temp_dirR   t   ZipFilet   namelistR   R   t   chdirR   (   R
   t   zip_filet   sourceR-   R0   (    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyt   setUpP   s     	c         C   sg   |  j  d  k s |  j d  k r" d  Sy- |  j rN t j |  j ƒ t |  j ƒ n  Wn t k
 rb n Xd  S(   N(	   R4   R   R3   R6   R   R<   R1   R9   t   OSError(   R
   (    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyt   tearDowng   s    	N(   t   __name__t
   __module__R   R3   R4   R6   R?   RA   (    (    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyR2   J   s
   	c         C   ss   t  ƒ  } xc t j j d d ƒ j t j ƒ D]@ } t j j | |  ƒ } t j | t j	 ƒ r+ | j
 | ƒ q+ q+ W| S(   Nt   PATHt    (   t   setR   t   environt   gett   splitt   pathsepR   R   t   accesst   X_OKt   add(   t   cmdt   resultR   R   (    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyt   _which_dirsu   s    	(i    c      
   C   si  | d k r= t ƒ  } x% t j D] } t j | | | <q Wn  | d k	 rV | | d <n  | d k	 ro | | d <n  | j d d ƒ s½ t d ƒ j t d ƒ ƒ | d <t j j | d ƒ | d <n  t	 j
 d g t |  ƒ }  yA t |  d t d t d	 t	 j d
 k d | ƒ} | j ƒ  | } Wn t k
 r+d SXt | d ƒ r\| j ƒ  } t j d | ƒ } n  | j | f S(   s~   
    Execution command for tests, separate from those used by the
    code directly to prevent accidental behavior issues
    t
   PYTHONPATHRD   RE   t   tart   gzips   setup.pyt   stdoutt   stderrt   shellt   win32t   envi   t   decodet   NFCN(   i   RE   (   R   t   dictR   RG   RH   RP   t   unionRJ   R   t   syst
   executablet   listt   _Popent   _PIPEt   platformt   communicateR@   t   hasattrRY   t   unicodedatat	   normalizet
   returncode(   RN   t   pypathR   t   data_streamRX   t   envnamet   proct   data(    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyt   run_setup_py~   s,    	(   R   R   R]   R7   t   unittestR+   R)   Re   t
   subprocessR    R`   R   Ra   R   R   R   R	   R1   t   TestCaseR2   RP   Rm   (    (    (    sC   /var/www/html/venv/build/setuptools/setuptools/tests/environment.pyt   <module>   s    		 	
+		