σ
έ²k^c           @` sB  d  d l  m Z m Z m Z m Z d  d l Z d  d l m Z m Z d  d l	 m
 Z
 e Z Z y# d  d l Z e Z e j d  Wn; e k
 rΎ y d  d l Z e Z WqΏ e k
 rΊ qΏ Xn Xd d l m Z m Z m Z d d	 l m Z d d
 l m Z e e  Z e e d  d e d d  Z d e f d     YZ d S(   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsN(   t   LoggerAdaptert	   getLogger(   t   SpooledTemporaryFileu   s3i   (   t   BaseAdaptert   CaseInsensitiveDictt   Responsei   (   t   ensure_binary(   t   url_to_s3_infou   conda.stderrlogt   extrat
   terminatoru   
t	   S3Adapterc           B` sM   e  Z d    Z d d d d d d  Z d   Z d   Z d   Z d   Z RS(   c         C` s   t  t |   j   d  S(   N(   t   superR   t   __init__(   t   self(    (    sD   lib/python2.7/site-packages/conda/gateways/connection/adapters/s3.pyR       s    c         C` sn   t    } d | _ | j | _ t r7 |  j t | |  St rP |  j t | |  St	 j
 d  d | _ | Sd  S(   NiΘ   u   
Error: boto3 is required for S3 channels. Please install with `conda install boto3`
Make sure to run `source deactivate` if you are in a conda environment.
i  (   R	   t   status_codet   urlt
   have_boto3t   _send_boto3t   boto3t	   have_botot
   _send_botot   botot	   stderrlogt   info(   R   t   requestt   streamt   timeoutt   verifyt   certt   proxiest   resp(    (    sD   lib/python2.7/site-packages/conda/gateways/connection/adapters/s3.pyt   send#   s    			c         C` s   d  S(   N(    (   R   (    (    sD   lib/python2.7/site-packages/conda/gateways/connection/adapters/s3.pyt   close3   s    c         ` s<  d d l  m } m } t | j  \ } } | j d  j | | d  } y | j   }	 Wnq | | f k
 rΝ }
 d | _ i d d 6| j d 6t	 |
  d	 6  |  j
   f d
    | _ | j j | _ | SX|	 d d } t i | j d d  d 6| d d 6| d d 6 | _ |  j
 | j  | _ | j j | _ | S(   Ni    (   t   BotoCoreErrort   ClientErroru   s3i   i  u   error downloading file from s3u   erroru   pathu	   exceptionc         ` s   |  j  t t j      S(   N(   t   writeR
   t   jsont   dumps(   t   x(   t   message(    sD   lib/python2.7/site-packages/conda/gateways/connection/adapters/s3.pyt   <lambda>E   s    u   ResponseMetadatau   HTTPHeadersu   content-typeu
   text/plainu   Content-Typeu   content-lengthu   Content-Lengthu   last-modifiedu   Last-Modified(   t   botocore.exceptionsR%   R&   R   R   t   resourcet   Objectt   getR   t   reprt   _write_tempfilet   rawR$   R   t   headerst   download_fileobj(   R   R   R"   R   R%   R&   t   bucket_namet
   key_stringt   keyt   responset   et   key_headers(    (   R+   sD   lib/python2.7/site-packages/conda/gateways/connection/adapters/s3.pyR   6   s,    	
c         C` sϊ   | j    } t | j  \ } } | j | d t } y | j |  } Wn, | j j k
 rw }	 d | _ |	 | _	 | SX| rν | j
 rν | j }
 | j p d } t i | d 6| j d 6|
 d 6 | _ |  j | j  | _	 | j	 j | _ n	 d | _ | S(   Nt   validatei  u
   text/plainu   Content-Typeu   Content-Lengthu   Last-Modified(   t
   connect_s3R   R   t
   get_buckett   Falset   get_keyt	   exceptiont   S3ResponseErrorR   R3   t   existst   last_modifiedt   content_typeR   t   sizeR4   R2   t   get_contents_to_fileR$   (   R   R   R"   R   t   connR6   R7   t   bucketR8   t   exct   modifiedRE   (    (    sD   lib/python2.7/site-packages/conda/gateways/connection/adapters/s3.pyR   U   s(    			
	c         C` s$   t    } | |  | j d  | S(   Ni    (   R   t   seek(   R   t   writer_callablet   fh(    (    sD   lib/python2.7/site-packages/conda/gateways/connection/adapters/s3.pyR2   q   s    	
N(	   t   __name__t
   __module__R   t   NoneR#   R$   R   R   R2   (    (    (    sD   lib/python2.7/site-packages/conda/gateways/connection/adapters/s3.pyR      s   				(    t
   __future__R    R   R   R   R(   t   loggingR   R   t   tempfileR   R?   R   R   R   t   Truet   clientt   ImportErrorR   t    R   R   R	   t   common.compatR
   t
   common.urlR   RO   t   logt   dictR   R   (    (    (    sD   lib/python2.7/site-packages/conda/gateways/connection/adapters/s3.pyt   <module>   s(   "

!