ó
?…]c           @   s)  d  d l  Z d  d l m Z d  d l Z d  d l Z d  d l m	 Z
 d  d l Z d d l m Z m Z d d l m Z m Z d d l m Z d d l m Z m Z m Z i e d	 6e d
 6Z d „  Z e  d „ Z! d d d d „ Z# d d „ Z$ d „  Z% d d d „ Z& e j' ƒ  d d „ Z( d „  Z) d S(   iÿÿÿÿN(   t   glob(   t   string_typesi   (   t   ConversionErrort   InvalidArchiveError(   t   CondaTarBZ2t   libarchive_enabled(   t   CondaFormat_v2(   t   TemporaryDirectoryt   rm_rft   get_executors   .tar.bz2s   .condac            sÉ   g  g  } } x| t  j ˆ ƒ D]k \ ‰  } } x9 | D]1 } | j t  j j t  j j ˆ  | ƒ ˆ ƒ ƒ q3 W| j ‡  ‡ f d †  | Dƒ ƒ q W| g  | D]( ‰  t ‡  f d †  | Dƒ ƒ s– ˆ  ^ q– } | S(   Nc         3   s3   |  ]) } t  j j t  j j ˆ  | ƒ ˆ ƒ Vq d  S(   N(   t   _ost   patht   relpatht   join(   t   .0t   _(   t   dpt   prefix(    s9   lib/python2.7/site-packages/conda_package_handling/api.pys	   <genexpr>   s    c         3   s   |  ] } | j  ˆ  ƒ Vq d  S(   N(   t
   startswith(   R   t   f(   R   (    s9   lib/python2.7/site-packages/conda_package_handling/api.pys	   <genexpr>   s    (   R
   t   walkt   appendR   R   R   t   extendt   any(   R   t	   dir_pathst
   file_pathst   dnt	   filenamesR   t	   file_list(    (   R   R   s9   lib/python2.7/site-packages/conda_package_handling/api.pyt   _collect_paths   s    /$)c         C   s`   d  } x1 t D]) } |  j | ƒ r |  t | ƒ  } q q W| r\ | r\ t j j | ƒ } n  | S(   N(   t   Nonet   SUPPORTED_EXTENSIONSt   endswitht   lenR
   R   t   basename(   t   in_filet   abspatht   dirnamet   ext(    (    s9   lib/python2.7/site-packages/conda_package_handling/api.pyt   get_default_extracted_folder   s    c         C   s-  | rr t  j j | ƒ r- | r- t d ƒ ‚ n  t  j j | ƒ s¥ t  j j t  j j | p` t  j ƒ  | ƒ ƒ } q¥ n3 t  j j | p t  j j |  ƒ t |  d t	 ƒƒ } t  j j
 | ƒ sÇ t  j | ƒ n  x_ t D]3 } |  j | ƒ rÎ t | j |  | d | ƒPqÎ qÎ Wt d j |  t t j ƒ  ƒ ƒ ƒ ‚ d  S(   Ns   dest_dir and prefix both provided as abs paths.  If providing both, prefix can be abspath, but dest dir must be relative (relative to prefix)R$   t
   componentssG   Didn't recognize extension for file '{}'.  Supported extensions are: {}(   R
   R   t   isabst
   ValueErrort   normpathR   t   getcwdR%   R'   t   Falset   isdirt   makedirsR   R    t   extractt   formatt   listt   keys(   t   fnt   dest_dirR(   R   R&   (    (    s9   lib/python2.7/site-packages/conda_package_handling/api.pyR0   )   s    3	c   
      K   s  | s t  j ƒ  } n  | d  k r0 t |  ƒ } nc t | t ƒ r“ yD t | ƒ  } | j ƒ  } Wd  QXg  | D] } | j ƒ  ^ qj } Wq“ ‚  q“ Xn  xl t	 D]d } | j
 | ƒ rš y# t	 | j |  | | | |  }	 Wqþ t  j j |	 ƒ rû t |	 ƒ qû qþ Xqš qš W|	 S(   N(   R
   R,   R   R   t
   isinstancet   _string_typest   opent	   readlinest   stripR   R    t   createR   t   isfilet   _rm_rf(
   R   R   t   out_fnt
   out_foldert   kwR   t   dataR   R&   t   out(    (    s9   lib/python2.7/site-packages/conda_package_handling/api.pyR;   A   s&    #
#c         K   sF  t  |  d t ƒ} d d l m } | s; d |  t f GHd  St j j | | | ƒ } d } t j j | ƒ s9t	 d | ƒ ¹ } y t
 |  d | ƒt | ƒ }	 t | |	 t j j | ƒ d | | | | t j j | |  ƒ ƒ \ }
 } } | sõ | rt t | | ƒ ƒ } n  Wn t k
 r/} t | ƒ } n XWd  QXn  |  | | f S(	   NR$   i   (   t   validate_converted_files_matchsB   Input file %s doesn't have a supported extension (%s), skipping itt    R   R5   R?   (   R'   R-   t   validateRC   R   R
   R   R   t   lexistst   _TemporaryDirectoryR0   R   R;   R"   t   strR   t	   Exception(   R4   t   out_extR?   R@   R"   RC   R>   t   errorst   tmpR   R   t   missing_filest   mismatching_sizest   e(    (    s9   lib/python2.7/site-packages/conda_package_handling/api.pyt   _convertZ   s*    %$c         K   sc  | s' t  j j |  ƒ p! t  j ƒ  } n  t t |  ƒ ƒ } |  j d ƒ rm | t t |  j d | ƒ ƒ ƒ } n4 |  j d ƒ r¡ | t t |  j d | ƒ ƒ ƒ } n  i  } t j	 d t
 | ƒ d t ƒ ˜ } t | ƒ ƒ } t j t d | d | | }	 x[ | j |	 | ƒ D]G \ }
 } } | j d |
 ƒ | j ƒ  | r| | |
 <t | ƒ qqWWd  QXWd  QX| S(   Ns   .tar.bz2s   .condat   totalt   leaveRJ   R?   s   Converted: %s(   R
   R   R%   R,   t   sett   _globR    t   replacet   _tqdmt   tqdmR!   R-   t   _get_executort
   _functoolst   partialRP   t   mapt   set_descriptiont   updateR=   (   R#   RJ   R?   t	   processesR@   t   flistt   failed_filest   tt   executort	   convert_fR4   R>   RK   (    (    s9   lib/python2.7/site-packages/conda_package_handling/api.pyt	   transmutes   s&    !%%!"

c            s•  d d l  m ‰ ˆ  j ˆ ƒ s, ˆ  ˆ ‰  n  ‡  ‡ f d †  t Dƒ } d „  | ˆ Dƒ } x@ | j ƒ  D]2 \ } } | ˆ k r„ qf n  | d „  | Dƒ M} qf Wt t ƒ ˆ h }	 i  }
 t j d t | ƒ t t ƒ d d t	 ƒ ® } t
 d | ƒ – } xŒ |	 D]„ ‰ ‡ ‡ ‡ f d	 †  } xf | j | | ƒ D]R \ } } } | j d
 | ƒ | j ƒ  | sa| r+t t | | ƒ ƒ |
 | <q+q+Wqý WWd  QXWd  QX|
 S(   Ni   (   RC   c            s2   i  |  ]( } t  t j j ˆ ˆ  | ƒ ƒ | “ q S(    (   RT   R
   R   R   (   R   R&   (   t   glob_patternt
   target_dir(    s9   lib/python2.7/site-packages/conda_package_handling/api.pys
   <dictcomp>   s   	c         S   s(   h  |  ] \ } } | j  | d  ƒ ’ q S(   RD   (   RU   (   R   R&   R   (    (    s9   lib/python2.7/site-packages/conda_package_handling/api.pys	   <setcomp>’   s   	 c         S   s(   h  |  ] \ } } | j  | d  ƒ ’ q S(   RD   (   RU   (   R   R&   R   (    (    s9   lib/python2.7/site-packages/conda_package_handling/api.pys	   <setcomp>–   s   	 RQ   RR   t   max_workersc            s   ˆ d ˆ d |  ˆ  ƒ S(   Nt   ref_extt   subject(    (   R4   (   t	   other_extt   reference_extRC   (    s9   lib/python2.7/site-packages/conda_package_handling/api.pyt   <lambda>   s   s   Validating %s(   RE   RC   R    R   t   itemsRS   RV   RW   R!   R-   t	   _ExecutorR[   R\   R]   RH   R   (   Re   Rf   Rk   t   tmpdir_rootR^   t   file_sets_by_extt   matchesR&   t   pathst
   other_extsRK   Ra   Rb   t	   verify_fnR4   t   missingt   mismatching(    (   Re   Rj   Rk   Rf   RC   s9   lib/python2.7/site-packages/conda_package_handling/api.pyt   verify_conversion‹   s,    
/"
0c         C   sP   xI t  D], } |  j | ƒ r t  | j |  ƒ } Pq q Wt d j |  ƒ ƒ ‚ | S(   sW   For the new pkg format, we return the size and hashes of the inner pkg part of the files"   Don't know what to do with file {}(   R   R    t   get_pkg_detailsR*   R1   (   R#   R&   t   details(    (    s9   lib/python2.7/site-packages/conda_package_handling/api.pyRx   §   s    (*   t   osR
   R    RT   t	   functoolsRY   t   tempfilet	   _tempfilet   sixR   R7   RW   RV   t
   exceptionsR   R   t   tarballR   t   _CondaTarBZ2R   t	   conda_fmtR   t   _CondaFormat_v2t   utilsR   RG   R   R=   R	   RX   R   R   t   TrueR'   R   R0   R;   RP   Rd   t
   gettempdirRw   Rx   (    (    (    s9   lib/python2.7/site-packages/conda_package_handling/api.pyt   <module>   s&   

	
	