
bc           @`  sA  d  d l  m Z m 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 d  d l m Z d  d l m Z m Z m Z m Z d  d l m Z y d  d l m Z Wn! e k
 r d  d l m Z n Xy d  d l m Z Wn! e k
 r+d  d	 l m Z n Xd  d l Z y d  d
 l m Z Wn! e k
 rod  d
 l m Z n Xd d l m  Z  m! Z! m" Z" m# Z# m$ Z$ m% Z% d d l& m' Z' m( Z( m) Z) m* Z* m+ Z+ m, Z, m- Z- m. Z. d d l/ m/ Z/ d d l0 m0 Z0 d d l1 m1 Z1 m2 Z2 d d l3 m3 Z3 d d l4 m4 Z4 d d l5 Td d l6 m7 Z7 d d l8 m8 Z8 d d l9 m9 Z9 d d l: m; Z; m< Z< m= Z= m> Z> m? Z? y d  d l@ mA ZA d  d lB ZB y eB jC d eD  ZE d   ZF Wn eG k
 r<y) eB jH eB jI  ZE eE jJ   d   ZF Wn/ eK k
 r8eB jC d eB jI  ZE d   ZF n Xn6 eK k
 rqeB jH eB jI  ZE eE jJ   d   ZF n XWn] e eL f k
 rZM eN eM  ZO d eO k rd  ZP n
 d! eO ZP eP d" 7ZP eQ aR d#   ZF n Xd$   ZS d% ZT d& d& ZU g  ZV d' eW f d(     YZX d) eW f d*     YZY eV jZ d)  d+   Z[ d,   Z\ d S(-   i    (   t   absolute_importt   divisionN(   t   saxutils(   t   timeout(   t   debugt   infot   warningt   error(   t   ST_SIZE(   t   urlparse(   t   encodestring(   t   encodebytes(   t   md5i   (   t   getListFromXmlt   getTextFromXmlt   getRootTagNamet   decode_from_s3t   encode_to_s3t   s3_quote(   t   convertHeaderTupleListToDictt   hash_file_md5t	   unicodiset   deunicodiset   check_bucket_namet   check_bucket_name_dns_supportt   getHostnameFromBuckett   calculateChecksum(   t
   SortedDict(   t	   AccessLog(   t   ACLt   GranteeLogDelivery(   t   BidirMap(   t   Config(   t   *(   t   MultiPartUpload(   t   S3Uri(   t   ConnMan(   t   sign_request_v2t   sign_request_v4t   checksum_sha256_filet   checksum_sha256_buffert   format_param_str(   t   ArgumentErrort   mimec         C`  s   t  j |   S(   N(   t   magic_t	   from_file(   t   file(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   mime_magic_fileC   s    c         C`  sB   y t  j |   SWn* t t t f k
 r= t  j t |    SXd  S(   N(   R,   R.   t   UnicodeDecodeErrort   UnicodeEncodeErrorR*   R   (   R.   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR/   P   s    t   flagsc         C`  s   t  j |   S(   N(   R,   t   id_filename(   R.   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR/   Z   s    c         C`  s   t  j t |    S(   N(   R,   R.   R   (   R.   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR/   c   s    t   magics%   Module python-magic is not available.s'   Module python-magic can't be used (%s).s.    Guessing MIME types based on file extensions.c         C`  s*   t  s t t  t a  n  t j |   d S(   Ni    (   t   magic_warnedR   t   magic_messaget   Truet	   mimetypest
   guess_type(   R.   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR/   n   s    
	c         C`  s   d   } | |   } | d  k	 r t | t  r d | k rp | j d  \ } } | t d  } | | f } q | d  f } q n  | d  k r d } n  | S(   Nc         S`  s   t  |   } | S(   N(   R/   (   R.   t	   magictype(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _mime_magicw   s    t   ;t   charset(   NN(   t   Nonet
   isinstancet   strt   splitt   len(   R.   R;   t   resultt   mimetypeR=   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt
   mime_magicu   s    		i   i   t	   S3Requestc           B`  sM   e  Z i  Z i  Z d d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(   c         C`  s   | |  _  t | p i  d t |  _ t |  j  j j  d k rh |  j  j j   |  j  j j |  j d <n  | |  _ | |  _	 | p i  |  _
 | |  _ |  j   d  S(   Nt   ignore_casei    s   x-amz-security-token(   t   s3R   R7   t   headersRB   t   configt   access_tokent   role_refresht   resourcet   method_stringt   paramst   bodyt   requester_pays(   t   selfRH   RN   RM   RI   RP   RO   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   __init__   s    				c         C`  s2   |  j  j j r. |  j d k r. d |  j d <n  d  S(   Nt   GETt   POSTt   PUTt   HEADt	   requesters   x-amz-request-payer(   RT   RU   RV   RW   (   RH   RJ   RQ   RN   RI   (   RR   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyRQ      s    c         C`  s?   d |  j  k r |  j  d =n  t j d t j    |  j  d <d  S(   Nt   dates   %a, %d %b %Y %H:%M:%S +0000s
   x-amz-date(   RI   t   timet   strftimet   gmtime(   RR   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   update_timestamp   s    c         C`  s3   |  j  j r t S|  j  j j s+ |  j  j r/ t St S(   N(   RH   t   endpoint_requires_signature_v4t   FalseRJ   t   signature_v2t   fallback_to_signature_v2R7   (   RR   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   use_signature_v2   s
    c         C`  ss  |  j  j d  } |  j   ry t d  | rH d | |  j  d f } n |  j  d } t |  j | |  j |  j  |  _ n t d  |  j j	 |  j  d  } | r| t
 j k r t
 j j | d  j d |  s | t
 j k rt t   j |  rd | |  j  d f } n |  j  d } t
 j j |  j  d t   j  } t |  j | | |  j | |  j |  j  |  _ d  S(   Nt   buckets   Using signature v2s   /%s%st   uris   Using signature v4t    s   %s.(   RM   t   getRb   R   R%   RN   RO   RI   RH   t   get_hostnameRF   t	   redir_mapt
   startswithR   R    t   host_buckett
   region_mapt   bucket_locationR&   RP   (   RR   t   bucket_namet   resource_urit   hostnamet   bucket_region(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   sign   s&    
$
#"c         C`  so   |  j    |  j   t |  j  } t | d d t d t | d <| d c t |  j  7<|  j	 | |  j
 f S(   NRd   t   quote_backslashest   unicode_output(   R]   Rq   t   dictRM   R   R_   R7   R)   RO   RN   RI   (   RR   RM   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   get_triplet   s    

 N(   t   __name__t
   __module__Rk   Rh   R>   RS   RQ   R]   Rb   Rq   Ru   (    (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyRF      s   					!t   S3c           B`  sj  e  Z e d  d d d d d d d d d	 d
 d  Z e d d d d d d d d d
 d  Z e d d d e d e d  Bd e d e d Bd e d e d  Bd e d e d Bd e d e d Bd e d e d  Bd e d e d Bd e d e d Bd e d e d Bd  e d e d B Z i d! d" 6d# d$ 6d% d& 6Z d' Z d(   Z d)   Z	 d*   Z
 d+   Z dn d,  Z d-   Z dn dn dn d. d/  Z dn dn dn d. d0  Z dn dn dn d. d1  Z dn dn d2  Z d3   Z e d4  Z d5   Z d6   Z dn d7  Z dn d8  Z dn d9  Z dn d:  Z dn d;  Z d<   Z d=   Z d>   Z dn d?  Z  d@   Z! dn dA dB  Z" d dA dC  Z# dD   Z$ dE   Z% dF   Z& dG   Z' dH   Z( dn dn dA e dI  Z) dn dn dA dJ  Z* dn dn dA dK  Z+ dL   Z, dM   Z- dN   Z. dO   Z/ dP   Z0 dQ   Z1 dR   Z2 dS   Z3 dT   Z4 dU   Z5 dV   Z6 dW   Z7 dX   Z8 dn d. dY  Z9 dn d. dZ  Z: dn d. d[  Z; dn d. d\  Z< dn d. d]  Z= d^   Z> d_   Z? d`   Z@ dn e da  ZA dn dn dn dn dA dn db  ZB dc   ZC dd   ZD de   ZE df   ZF dg   ZG e dh  ZH d di  ZI dA d e d d. dn dj  ZJ dA dk  ZK dA dl  ZL d e dm  ZM RS(o   RT   i   RV   i   RW   i   t   DELETEi   RU   i   t   MASKi   t   SERVICEi   t   BUCKETi   t   OBJECTi   t   BATCHi   i   t   UNDFINEDi    t   LIST_ALL_BUCKETSt   BUCKET_CREATEt   BUCKET_LISTt   BUCKET_DELETEt
   OBJECT_PUTt
   OBJECT_GETt   OBJECT_HEADt   OBJECT_DELETEt   OBJECT_POSTt   BATCH_DELETEs   Bucket '%s' does not existt   NoSuchBuckets    Access to bucket '%s' was deniedt   AccessDenieds   Bucket '%s' already existst   BucketAlreadyExistsi   c         C`  s(   | |  _  t |  _ t |  _ t |  _ d  S(   N(   RJ   R_   Ra   R^   t   expect_continue_not_supported(   RR   RJ   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyRS     s    			c         C`  s;   d } |  j  j d k r" |  j  j S|  j  j r7 d } n  | S(   Nt   STANDARDRe   t   REDUCED_REDUNDANCY(   RJ   t   storage_classt   reduced_redundancy(   RR   t   cls(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR     s    
	c         C`  s   | r% | t  j k r% t  j | } n< | rO t |  j j |  rO t |  } n |  j j j   } |  j j r | j	 d  r | d  } q n | j	 d  r | d  } n  t
 d | | f  | S(   Ns   :443is   :80is   get_hostname(%s): %s(   RF   Rh   R   RJ   Rj   R   t	   host_baset   lowert	   use_httpst   endswithR   (   RR   Rc   t   host(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyRg     s    c         C`  s   | j    t j | <d  S(   N(   R   RF   Rh   (   RR   Rc   t   redir_hostname(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   set_hostname,  s    c         C`  s  | j  d  } | r | t j k rG t j j  | d  j d |  sl | t j k r t |  j j |  r d t | d t d t	 | d f } n
 | d } | r d | | f } n  |  j j
 d k r |  j j r d	 |  j |  | f } n  t d
 |  | S(   NRc   Re   s   %s.s   /%s%sRr   Rs   Rd   s   %s%ss   http://%s%ss   format_uri(): (   Rf   RF   Rh   Ri   R   RJ   Rj   R   R_   R7   t
   proxy_hostR   Rg   R   (   RR   RM   t	   base_pathRm   Rd   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt
   format_uri/  s     #
c         C`  s9   |  j  d  } |  j |  } t | d d  | d <| S(   NR   t   datat   Buckett   list(   t   create_requestt   send_requestR   (   RR   t   requestt   response(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   list_all_bucketsD  s    ic         C`  s}   g  } g  } xF |  j  | | | | |  D]) \ } }	 }
 | j |
  | j |	  q( Wi  } | | d <| | d <| | d <| S(   NR   t   common_prefixest	   truncated(   t   bucket_list_streamingt   extend(   RR   Rc   t   prefixt	   recursivet
   uri_paramst   limitt	   item_listt   prefixesR   t   dirst   objectsR   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   bucket_listJ  s    +


c         #`  s  d   } d   } d   }   f d   }	 | r< | j    p? i  } t }
 g  } d } d } | } x7|
 r|  j | | | | |    |   d  } |   d  } | t |  7} | t |  7} | | | k r | | | } n  |   d  }
 |
 r| d k s| | | k  rv| r7|	   d |  | d <n* | rR| d d	 | d <n t | | f VPt d
 | d  q|
 | | f VPn  |
 | | f Vqc Wd S(   se    Generator that produces <dir_list>, <object_list> pairs of groups of content of a specified bucket. c         S`  s%   t  |  d  p d } | j   d k S(   Ns   .//IsTruncatedt   false(   R   R   (   R   t   is_truncated(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _list_truncatedY  s    c         S`  s   t  |  d  S(   Nt   Contents(   R   (   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _get_contents^  s    c         S`  s   t  |  d  S(   Nt   CommonPrefixes(   R   (   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _get_common_prefixesa  s    c         `  s   t    d d  p | d d S(   NR   t
   NextMarkerit   Key(   R   (   R   t   current_list(   R   (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _get_next_markerd  s    i    R   it   markert   Prefixs   Listing continues after '%s'N(   t   copyR7   t   bucket_list_noparseRB   R_   R   (   RR   Rc   R   R   R   R   R   R   R   R   R   R   t   num_objectst   num_prefixest   max_keysR   t   current_prefixes(    (   R   sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR   W  s@    				c         C`  s   | d  k r i  } n  | r( | | d <n  |  j j rI | rI d | d <n  | d k rh t |  | d <n  |  j d d | d | } |  j |  } | S(	   NR   t   /t	   delimiteris   max-keysR   Rc   R   (   R>   RJ   R   R@   R   R   (   RR   Rc   R   R   R   R   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR     s    	c         C`  s&  t  d t  } | r% | j |  n  d } | r | j   j   d k r | j   j   d k r | j   } | j   d k r | j   } n  d } | | 7} | d 7} t d |  t | d	 t n t | d	 t |  j	 j
 r d
 | d <n  |  j d d | d | d | } |  j |  } | S(   NRG   Re   t   USs	   us-east-1t   EUs/   <CreateBucketConfiguration><LocationConstraint>s1   </LocationConstraint></CreateBucketConfiguration>s   bucket_location: t
   dns_stricts   public-reads	   x-amz-aclR   Rc   RI   RP   (   R   R7   t   updatet   stript   upperR   R   R   R_   RJ   t
   acl_publicR   R   (   RR   Rc   Rl   t   extra_headersRI   RP   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   bucket_create  s&    6

!c         C`  s(   |  j  d d | } |  j |  } | S(   NR   Rc   (   R   R   (   RR   Rc   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   bucket_delete  s    c   	      C`  sc  | j    } |  j d d | j    d i d  d 6} t j j | d  } t j j | d  } zI | r | op | r |  j j t j | <d t j | <n  |  j	 |  } Wd  | | k r | t j | <n | t j k r t j | =n  | | k r | t j | <n | t j k rt j | =n  Xt
 | d d  } | sA| d k rJd } n | d
 k r_d } n  | S(   NR   Rc   R   t   locationRe   s	   us-east-1R   t   LocationConstraintR   R   s	   eu-west-1(   Re   R   (   Rc   R   R>   RF   Rh   Rf   Rk   RJ   R   R   R   (	   RR   Rd   t   force_us_defaultRc   R   t   saved_redir_mapt   saved_region_mapR   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   get_bucket_location  s0    		c         C`  so   |  j  d d | j   d i d  d 6} |  j |  } | j d d  } | re t | d d  } n d  } | S(   NR   Rc   R   t   requestPaymentR   Re   t   Payer(   R   Rc   R>   R   Rf   R   (   RR   Rd   R   R   t	   resp_datat   payer(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   get_bucket_requester_pays  s    c         C`  sT   i  } |  j  |  | d <y |  j |  | d <Wn t k
 rO } d  | d <n X| S(   Ns   bucket-locations   requester-pays(   R   R   t   S3ErrorR>   (   RR   Rd   R   t   e(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   bucket_info  s    c         C`  s   | j    } |  j d d | d i d  d 6} yv |  j |  } t | d d  | d <t | d d  | d	 <|  j j i | j    d 6|  j |  d
 6| d <| SWn3 t k
 r } | j	 d k r t
 d  d  S  n Xd  S(   NR   Rc   R   t   websiteR   s   .//IndexDocument//Suffixt   index_documents   .//ErrorDocument//Keyt   error_documentR   t   website_endpointi  sI   Could not get /?website - website probably not configured for this bucket(   Rc   R   R>   R   R   RJ   R   R   R   t   statusR   (   RR   Rd   Rl   Rc   R   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   website_info  s     
c      
   C`  s   | j    } d } | d 7} | d |  j j 7} | d 7} |  j j rq | d 7} | d |  j j 7} | d 7} n  | d 7} |  j d	 d
 | d | d i d  d 6} |  j |  } t d |  | S(   NsF   <WebsiteConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">s     <IndexDocument>s       <Suffix>%s</Suffix>s     </IndexDocument>s     <ErrorDocument>s       <Key>%s</Key>s     </ErrorDocument>s   </WebsiteConfiguration>R   Rc   RP   R   R   s   Received response '%s'(   Rc   RJ   t   website_indext   website_errorR   R>   R   R   (   RR   Rd   Rl   Rc   RP   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   website_create  s    



c         C`  sr   | j    } |  j d d | d i d  d 6} |  j |  } t d |  | d d k rn t d |   n  | S(	   NR   Rc   R   R   s   Received response '%s'R   i   s   Expected status 204: %s(   Rc   R   R>   R   R   t   S3ResponseError(   RR   Rd   Rl   Rc   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   website_delete  s    c         C`  s
  | j    } |  j d d | d i d  d 6} y |  j |  } WnP t k
 r } | j d k rp t d  d  S| j d k r t d  d  S  n Xt | d	  } | d
 k r t d |  d  St | d	 d  | d <t | d	 d  | d <t | d	 d  | d <| S(   NR   Rc   R   t	   lifecyclei  sM   Could not get /?lifecycle - lifecycle probably not configured for this bucketi  sK   Could not get /?lifecycle - lifecycle support not implemented by the serverR   t   LifecycleConfigurations7   Could not get /?lifecycle - unexpected xml response: %ss   .//Rule//PrefixR   s   .//Rule//Expiration//DateRY   s   .//Rule//Expiration//Dayst   days(	   Rc   R   R>   R   R   R   R   R   R   (   RR   Rd   Rl   Rc   R   R   R   t   root_tag_name(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   expiration_info  s2    




c         C`  s   |  j  j r' |  j  j r' t d   n  |  j  j p< |  j  j s |  j  j rZ t d   n  t d  | j   } |  j d d | d i d  d 6} n |  j	 |  } |  j
 |  } t d |  | S(   Ns+   Expect either --expiry-day or --expiry-dates   del bucket lifecycleR   Rc   R   R   s   Received response '%s'(   RJ   t   expiry_datet   expiry_dayst   ParameterErrort   expiry_prefixR   Rc   R   R>   t   _expiration_setR   (   RR   Rd   Rl   Rc   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   expiration_set=  s    
c         C`  s  t  d  d } | d 7} | d |  j j 7} | d 7} | d 7} |  j j re | d |  j j 7} n# |  j j r | d |  j j 7} n  | d	 7} | d
 7} | d 7} t d t  } t |  | d <| j   } |  j	 d d | d | d | d i d  d 6} | S(   Ns   put bucket lifecycles   <LifecycleConfiguration>s     <Rule>s       <Prefix>%s</Prefix>s       <Status>Enabled</Status>s       <Expiration>s       <Date>%s</Date>s       <Days>%s</Days>s       </Expiration>s	     </Rule>s   </LifecycleConfiguration>RG   s   content-md5R   Rc   RI   RP   R   R   (   R   RJ   R   R   R   R   R7   t   compute_content_md5Rc   R   R>   (   RR   Rd   RP   RI   Rc   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR   M  s(    






c         C`  s   |  j  j } d  } | d k r: |  j  j r: t d   n  |  j  j r |  j  j rs t t j j	 t
 |    } n  |  j  j r t |  \ } } q t j |  \ } } n  | s |  j  j } n  | | f S(   Nt   -sR   You must specify --mime-type or --default-mime-type for files uploaded from stdin.(   RJ   t   default_mime_typeR>   R   t   guess_mime_typet   follow_symlinksR   t   ost   patht   realpathR   t   use_mime_magicRE   R8   R9   (   RR   t   filenamet   content_typet   content_charset(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _guess_content_typed  s    !c         C`  s?   |  j  j } | s! |  j  j } n  | d |  j  j j   7} | S(   Ns
   ; charset=(   RJ   t	   mime_typeR   t   encodingR   (   RR   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   stdin_content_typev  s
    c         C`  s   |  j  j } d  } | d k r( |  j   S| sF |  j |  \ } } n  | sa |  j  j j   } n  |  j | |  r | d  k	 r | d | } n  | S(   Nu   -s
   ; charset=(   RJ   R  R>   R  R  R  R   t   add_encoding(   RR   R   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR   ~  s    
c         C`  s   d | k r t  S|  j j j d  } | d d k r9 t  S| j d d  } t |  d k  ra t  S| d } | | k r{ t St  Sd  S(   Ns   charset=t   ,i    Re   t   .i   i   (   R_   RJ   t   add_encoding_extsRA   t   rsplitRB   R7   (   RR   R   R   t   extst   partst   ext(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR    s    
Re   c         C`  s  | j  d k r% t d | j    n  | d k rY t j j t |   rY t d   n  y | d k r t j t	 j
 j   d d d t } d | _ d	 } n= t j t |  d d } | | _ t j t |   t } Wn, t t f k
 r
} t d
 | j   n Xt d t  } | r0| j |  n  |  j j rId | d <n  |  j j rrd | d <|  j j | d <n  |  j d |  | d <|  j j rd | d <n  |  j   | d <t }	 |  j j r| d k rt d   n  |  j j r^| |  j j t k s| d k r^t }	 | |  j j  |  j j t k r[t d |  j j |  j j  f   q[q^n  |	 r}|  j! | | | | |  S|  j j" rly |  j# |  }
 Wn t$ k
 rd  }
 n X|
 d  k	 rlt& |
 d d  } |
 d d j' d  } | | k rOt( d | d	 | |  j j)  } | | k r5t* d |  d  St* d | | | f  qit* d | | | f  qln  t+ |  | d <|  j, d d  | d | } i | d! 6| j-   d" 6| d# 6} |  j. | | |  } | S($   NRH   s    Expected URI type 's3', got '%s'R   u   Not a regular filet   modet   rbt   closefdu   <stdin>i    u   %sRG   t   AES256s   x-amz-server-side-encryptions   aws:kmss+   x-amz-server-side-encryption-aws-kms-key-idR   s   content-types   public-reads	   x-amz-acls   x-amz-storage-classs2   Multi-part upload is required to upload from stdinsZ   Chunk size %d MB results in more than %d chunks. Please increase --multipart-chunk-size-mbRI   s   content-lengtht   etags   "'Re   s,   Put: size and md5sum match for %s, skipping.sB   MultiPart: checksum (%s vs %s) does not match for %s, reuploading.s>   MultiPart: size (%d vs %d) does not match for %s, reuploading.R   Rd   t   sourcet   destinationt   extra(/   t   typet
   ValueErrorR   R   t   isfileR   t   InvalidFileErrort   iot   opent   syst   stdint   filenoR_   t   stream_namet   statR   t   IOErrort   OSErrort   strerrorR   R7   R   RJ   t   server_side_encryptiont   kms_keyR   R   R   t   enable_multipartR   t   multipart_chunk_size_mbt   SIZE_1MBt   multipart_max_chunkst   send_file_multipartt   put_continuet   object_infot	   ExceptionR>   t   intR   R   t
   send_chunkR   R@   R   Rd   t	   send_file(   RR   R   Rd   R   t   extra_labelt
   src_streamt   sizeR   RI   t	   multipartR   t   remote_sizet   remote_checksumt   checksumR   t   labelsR   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt
   object_put  sv    %$			
" %
!c   	      C`  sw   | j  d k r% t d | j    n  |  j d d | } i | j   d 6| d 6| d 6} |  j | | | |  } | S(   NRH   s    Expected URI type 's3', got '%s'R   Rd   R  R  R  (   R  R  R   Rd   t	   recv_file(	   RR   Rd   t   streamt	   dest_namet   start_positionR0  R   R7  R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt
   object_get  s    !c         C`  s2   g  | D] } | | d ^ q } |  j  |  d S(   s"    Batch delete given a remote_list t   object_uri_strN(   t   object_batch_delete_uri_strs(   RR   t   remote_listt   itemt   uris(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   object_batch_delete  s    !c   	      C`  s   d   } | } t  |  d k r0 t d   n  t | d  j   } | | |  } t i t |  d 6d d 6d t } |  j d d	 | d
 | d | d i d d 6} |  j	 |  } | S(   s*    Batch delete given a list of object uris c         S`  s   d } x | D] } t  |  } | j d k rD t d | j   n  | j   sc t d |   n  | j   |  k r t d   n  t j | j    } | d | 7} q W| d 7} t |  } | S(   Nu.   <?xml version="1.0" encoding="UTF-8"?><Delete>RH   s    Expected URI type 's3', got '%s's   URI '%s' has no objects2   The batch should contain keys from the same bucketu   <Object><Key>%s</Key></Object>u	   </Delete>(	   R#   R  R  t
   has_objectRc   R   t   escapet   objectR   (   Rc   t   key_listRP   t   keyRd   RF  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   compose_batch_del_xml  s    
i    s   Key list is emptys   content-md5s   application/xmls   content-typeRG   R   Rc   RI   RP   R   t   deleteN(
   RB   R  R#   Rc   R   R   R7   R   R>   R   (	   RR   RB  RI  t   batchRc   t   request_bodyRI   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR?    s    	c         C`  sM   | j  d k r% t d | j    n  |  j d d | } |  j |  } | S(   NRH   s    Expected URI type 's3', got '%s'R   Rd   (   R  R  R   R   (   RR   Rd   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   object_delete"  s
    c      
   C`  s   | j  d k r% t d | j    n  |  j j d k  rF t d   n  |  j j d k rg t d   n  d	 } | d
 |  j j 7} | d 7} | d |  j j 7} | d 7} | d 7} |  j d d | d | d i d  d 6} |  j |  } t	 d |  | S(   NRH   s    Expected URI type 's3', got '%s'i   s*   You must restore a file for 1 or more dayst   Standardt	   Expeditedt   Bulks7   Valid restoration priorities: bulk, standard, expediteds@   <RestoreRequest xmlns="http://s3.amazonaws.com/doc/2006-03-01/">s     <Days>%s</Days>s     <GlacierJobParameters>s       <Tier>%s</Tier>s     </GlacierJobParameters>s   </RestoreRequest>R   Rd   RP   R   t   restores   Received response '%s'(   RN  RO  RP  (
   R  R  RJ   t   restore_daysR   t   restore_priorityR   R>   R   R   (   RR   Rd   RP   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   object_restore)  s"    


c         C`  sn   d d d d d d d d d	 d
 d d d g } x: | |  j  j D]( } | j   | k r> | | j   =q> q> W| S(   NRY   s   content-lengths   last-modifieds   content-md5s   x-amz-version-ids   x-amz-delete-markers   accept-rangest
   connectionR  t   servers
   x-amz-id-2s   x-amz-request-ids   x-amz-storage-class(   RJ   t   remove_headersR   (   RR   RI   t	   to_removet   h(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _sanitize_headers<  s"    	c         C`  s  | j  d k r% t d | j    n  | j  d k rJ t d | j    n  |  j j d k r y |  j |  } Wq t k
 r } | j d k r |  n  d } q Xn  t }	 d }
 | s |  j j	 r t
 } n  | r |  j |  } | d }
 t |
 d  } n  |  j j r|
 } | d k rI|  j |  } | d } t | d  } n  | | k ret j t } n |  j j t } | | k r| d k r|  j |  } | d } t | d  } n  | }
 t
 }	 qn  |
 r|  j |
  t |
 d t
 }
 n t d t
  }
 |  j j rd |
 d <n  |  j   |
 d	 <|  j j rDd
 |
 d <n  |  j j rmd |
 d <|  j j |
 d <n  | r|
 j |  n  |  j j	 r|  j j	 |
 d <n  | sd |
 d <n
 d |
 d <|	 r|  j | | | |
 |  } n\ t d | j   | j   f d t d t
 |
 d <|  j d d | d |
 } |  j |  } | d rt | d  d k rd | d <t d  t |   n  |  j j d k r| ry |  j  | |  Wqt k
 r} | j d k r|  qqXn  | S(   s   Remote copy an object and eventually set metadata

        Note: A little memo description of the nightmare for performance here:
        ** FOR AWS, 2 cases:
        - COPY will copy the metadata of the source to dest, but you can't
        modify them. Any additional header will be ignored anyway.
        - REPLACE will set the additional metadata headers that are provided
        but will not copy any of the source headers.
        So, to add to existing meta during copy, you have to do an object_info
        to get original source headers, then modify, then use REPLACE for the
        copy operation.

        ** For Minio and maybe other implementations:
        - if additional headers are sent, they will be set to the destination
        on top of source original meta in all cases COPY and REPLACE.
        It is a nice behavior except that it is different of the aws one.

        As it was still too easy, there is another catch:
        In all cases, for multipart copies, metadata data are never copied
        from the source.
        RH   s    Expected URI type 's3', got '%s'i  RI   s   content-lengthRG   s   public-reads	   x-amz-acls   x-amz-storage-classR  s   x-amz-server-side-encryptions   aws:kmss+   x-amz-server-side-encryption-aws-kms-key-ids   content-typet   COPYs   x-amz-metadata-directivet   REPLACEs   /%s/%sRr   Rs   s   x-amz-copy-sourceR   Rd   R   t   Errori  R   sH   Server error during the COPY operation. Overwrite response status to 500N(!   R  R  RJ   R   R>   t   get_aclR   R   R_   R  R7   R+  R-  R%  R"   t   MAX_CHUNK_SIZE_MBR'  t   multipart_copy_chunk_size_mbRZ  R   R   R#  R$  R   t   copy_file_multipartR   Rc   RF  R   R   R   R   t   set_acl(   RR   t   src_urit   dst_uriR   t   src_sizeR0  t   replace_metat   aclt   excR3  RI   t   src_infot   src_headerst	   thresholdR   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   object_copyV  s    		




	 

c         C`  s   |  j  | | | | | d t S(   NRf  (   Rl  R7   (   RR   Rc  Rd  R   Re  R0  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   object_modify  s    c         C`  s~   |  j  | | | | |  } t d | | f  | d sP t | d  d k rm |  j |  t d |  n t d |  | S(   Ns   Object %s copied to %sR   t   CopyObjectResultt   CompleteMultipartUploadResults   Object '%s' deletedsG   Object '%s' NOT deleted because of an unexpected response data content.(   Rn  Ro  (   Rl  R   R   RM  R   (   RR   Rc  Rd  R   Re  R0  t   response_copy(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   object_move  s    	c         C`  s(   |  j  d d | } |  j |  } | S(   NR   Rd   (   R   R   (   RR   Rd   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR+    s    c         C`  s|   | j    r1 |  j d d | d i d  d 6} n( |  j d d | j   d i d  d 6} |  j |  } t | d  } | S(   NR   Rd   R   Rg  R   Rc   R   (   RD  R   R>   Rc   R   R   (   RR   Rd   R   R   Rg  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR^    s    c         C`  s   d | } t  d | | f  t i d d 6d t } | j   rt |  j d d | d | d	 | d
 i d  d 6} n4 |  j d d | j   d | d	 | d
 i d  d 6} |  j |  } | S(   Nu   %su   set_acl(%s): acl-xml: %ss   application/xmls   content-typeRG   R   Rd   RI   RP   R   Rg  R   Rc   (   R   R   R7   RD  R   R>   Rc   R   (   RR   Rd   Rg  RP   RI   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyRb    s    
c         C`  sE   |  j  d d | j   d i d  d 6} |  j |  } t | d  S(   NR   Rc   R   t   policyR   (   R   Rc   R>   R   R   (   RR   Rd   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt
   get_policy$  s    c         C`  sZ   t  d t  } d | d <|  j d d | d | d | d i d  d	 6} |  j |  } | S(
   NRG   s   application/jsons   content-typeR   Rd   RI   RP   R   Rr  (   R   R7   R   R>   R   (   RR   Rd   Rr  RI   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt
   set_policy*  s    
c         C`  sC   |  j  d d | d i d  d 6} t d |  |  j |  } | S(   NR   Rd   R   Rr  u   delete_policy(%s)(   R   R>   R   R   (   RR   Rd   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   delete_policy4  s
    c         C`  sE   |  j  d d | j   d i d  d 6} |  j |  } t | d  S(   NR   Rc   R   t   corsR   (   R   Rc   R>   R   R   (   RR   Rd   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   get_cors;  s    c         C`  sj   t  d t  } d | d <t |  | d <|  j d d | d | d | d	 i d  d
 6} |  j |  } | S(   NRG   s   application/xmls   content-types   content-md5R   Rd   RI   RP   R   Rv  (   R   R7   R   R   R>   R   (   RR   Rd   Rv  RI   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   set_corsA  s    
c         C`  sC   |  j  d d | d i d  d 6} t d |  |  j |  } | S(   NR   Rd   R   Rv  u   delete_cors(%s)(   R   R>   R   R   (   RR   Rd   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   delete_corsL  s
    c         C`  st   t  d t  } t |  | d <|  j d d | d | d | d i d  d 6} t d	 | | f  |  j |  } | S(
   NRG   s   content-md5R   Rd   RI   RP   R   R   u(   set_lifecycle_policy(%s): policy-xml: %s(   R   R7   R   R   R>   R   R   (   RR   Rd   Rr  RI   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   set_lifecycle_policyS  s    c      
   C`  s   t  d t  } d | d <d } |  j j r8 | d 7} n
 | d 7} | d 7} |  j d d	 | d
 | d i d  d 6} |  j |  } | S(   NRG   s   application/xmls   content-typesN   <RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
s   <Payer>Requester</Payer>
s   <Payer>BucketOwner</Payer>
s   </RequestPaymentConfiguration>
R   Rd   RP   R   R   (   R   R7   RJ   RQ   R   R>   R   (   RR   Rd   RI   RP   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt	   set_payer]  s    


c         C`  s[   |  j  d d | j   d i d  d 6} t d |  |  j |  } t d | d  | S(   NR   Rc   R   R   u   get_lifecycle_policy(%s)u   %s: Got Lifecycle PolicyR   (   R   Rc   R>   R   R   (   RR   Rd   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   get_lifecycle_policyk  s    c         C`  sC   |  j  d d | d i d  d 6} t d |  |  j |  } | S(   NR   Rd   R   R   u   delete_lifecycle_policy(%s)(   R   R>   R   R   (   RR   Rd   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   delete_lifecycle_policyt  s
    c         C`  s=   g  } x0 |  j  | | |  D] \ } } | j |  q W| S(   N(   t   get_multipart_streamingR   (   RR   Rd   R   R   t   upload_listR   t   uploads(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   get_multipart{  s    c         c`  s  | r | j    p i  } | j   } t } d } | } d  | d <xh| r|  j | d t d | d | } | d }	 t |	 d  }
 | t |
  7} | | k r | | } n  t |	 d  } | s | j   d	 k r t	 } n  | r| d
 k s | | k  r|
 rlt |	 d  } | s'|
 d
 d } n  | | d <t |	 d  } | rS| | d <qxd | k rx| d =qxn t	 |
 f VPt
 d | d  q| |
 f VPn  | |
 f VqC Wd  S(   Ni    R  R   R   R   R   t   Uploads   .//IsTruncatedR   it   NextKeyMarkerR   t	   KeyMarkert   NextUploadIdMarkert   UploadIdMarkers   Listing continues after '%s'(   R   Rc   R7   R>   R   R   RB   R   R   R_   R   (   RR   Rd   R   R   Rc   R   R   R   R   t   xml_dataR  t   xml_truncatedt   next_keyt   upload_id_marker(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR~    sL    
		
	
c         C`  s@   g  } x3 |  j  | | | |  D] \ } } | j |  q W| S(   N(   t   list_multipart_streamingR   (   RR   Rd   t	   upload_idR   R   t	   part_listR   R  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   list_multipart  s    c         c`  sX  | r | j    p i  } t } d } | } x'| rS|  j | | | |  } | d }	 t |	 d  }
 | t |
  7} | | k r | | } n  t |	 d  } | s | j   d k r t } n  | rE| d k s | | k  r6|
 rt |	 d  } | s|
 d d } n  | | d	 <n t |
 f VPt d
 | d	  qE| |
 f VPn  | |
 f Vq- Wd  S(   Ni    R   t   Parts   .//IsTruncatedR   it   NextPartNumberMarkert
   PartNumbers   part-number-markers!   Listing continues after Part '%s'(	   R   R7   t   list_multipart_noparseR   RB   R   R   R_   R   (   RR   Rd   R  R   R   R   R   t	   max_partsR   R  R  R  t   next_part_number(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR    s<    	
	c         C`  sl   | d  k r i  } n  | d k r4 t |  | d <n  | | d <|  j d d | d | } |  j |  } | S(   Nis	   max-partst   uploadIdR   Rd   R   (   R>   R@   R   R   (   RR   Rd   R  R   R  R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR    s    	
	c         C`  s5   |  j  d d | d i | d 6} |  j |  } | S(   NR   Rd   R   R  (   R   R   (   RR   Rd   t   idR   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   abort_multipart  s    c         C`  sK   |  j  d d | j   d i d  d 6} |  j |  } t | d  } | S(   NR   Rc   R   t   loggingR   (   R   Rc   R>   R   R   (   RR   Rd   R   R   t	   accesslog(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   get_accesslog  s
    c         C`  s}   |  j  |  } t d | j   | f  | j t d   | j t d   t d | j   | f  |  j | |  d  S(   Ns   Current ACL(%s): %st   READ_ACPt   WRITEs   Updated ACL(%s): %s(   R^  R   Rd   t   appendGranteeR   Rb  (   RR   Rd   Rg  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   set_accesslog_acl  s    c   
   
   C`  s  t    } | r, | j |  | j |  n
 | j   d | } t d | | f  |  j d d | j   d | d i d  d 6} y |  j |  } Wnb t	 k
 r }	 |	 j
 d d	 k r t
 d
  |  j t d | j     |  j |  } q   n X| | f S(   Ns   %su$   set_accesslog(%s): accesslog-xml: %sR   Rc   RP   R   R  t   Codet   InvalidTargetBucketForLoggings.   Setting up log-delivery ACL for target bucket.u   s3://%s(   R   t   enableLoggingt   setAclPublict   disableLoggingR   R   Rc   R>   R   R   R   R  R#   (
   RR   Rd   t   enablet   log_target_prefix_uriR   R  RP   R   R   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   set_accesslog  s$    	


c         C`  s   i d  d 6d d 6} | r5 | s& | r5 t d   n  | rh | j   } | j   r_ | j   pb d  } n  | r | | d <| r d | | d <q n  t j j t j | t j d @ }	 t	 |  |	 | | | |  }
 t
 d | d  |
 S(   NRc   R   Rd   s>   Both 'uri' and either 'bucket' or 'object' parameters suppliedRz   s   CreateRequest: resource[uri]=%s(   R>   R  Rc   RD  RF  Rx   t   http_methodst   getkeyt
   operationsRF   R   (   RR   t	   operationRd   Rc   RF  RI   RP   R   RM   RN   R   (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR   (  s    !
$c         C`  s   |  j  | d d S(   Ni   i   (   t   _max_retries(   RR   t   retries(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt
   _fail_wait>  s    c   
      O`  s  | d j  d  } d | k r t | d  d k r t | d d  } t | d d  } |  j | |  t d |  | r | t j | <t d |  n  | | |   S| j d	 k r| d j  d
  }	 |	 ru|	 j d  r |	 d }	 n |	 j d  r|	 d }	 n  t	 d |	  j
 }	 | j d } |  j | |	  t d |	  | rh| t j | <t d |  n  | | |   St d |  n  t |   d  S(   NRI   s   x-amz-bucket-regionR   i    s	   .//Buckets   .//Endpointu   Redirected to: %su   Redirected to region: %sRW   R   s   http://i   s   https://i   Rc   u   Redirection error: No info provided by the server to where should be forwarded the request (HEAD request). (Hint target region: %s)(   Rf   RB   R   R   R   RF   Rk   RN   Ri   R	   Ro   RM   R   R   (
   RR   R   R   t   fnt   argst   kwargst   redir_regiont   redir_bucketR   t   location_url(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _http_redirection_handlerB  s6    "c   	      O`  sm  d | k r2t  | d  d k r2t | d d  } | d k r t | d d  } | d k	 r | t j | j d <t d |  | | |   St d  qi| d	 k r t | d d
  } | d k r/t d  t	 |  _
 | | |   Sqi| d k ri| j   r/|  j r/t d  t	 |  _ | | |   Sqin7 | j   ri|  j rit d  t	 |  _ | | |   Sd S(   sR   
        Returns None if no handler available for the specific error code
        R   i    R  t   AuthorizationHeaderMalformedt   RegionRc   s   Forwarding request to %suV   Could not determine bucket the location. Please consider using the --region parameter.t   InvalidRequestt   Messages\   The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.u   Endpoint requires signature v4t   InvalidArgumentu   Falling back to signature v2N(   RB   R   R>   RF   Rk   RM   R   R   R   R7   R^   Rb   Ra   (	   RR   R   R   R  R  R  t   failureCodet   regiont   message(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _http_400_handlerg  s2    "
	
	
	c         O`  s   d | k r t  | d  d k r t | d d  } | d k r t | d d  } | d k r | j   r |  j r t d  t |  _ | | |   Sq q n  t |   d  S(   NR   i    R  R   R  s=   AWS authentication requires a valid Date or x-amz-date headeru   Falling back to signature v2(   RB   R   Rb   Ra   R   R7   R   (   RR   R   R   R  R  R  R  R  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   _http_403_handler  s    "
	c         C`  s   | j  j d  r | j   r t j j | j  d t   j  d k r t d  y` t d | j  d  } |  j	 | d t
 } | d	 k	 r | t j | j  d <n  t d |  Wq t k
 r } t d |  t d  q Xn  d	 S(
   s?  Get and update region for the request if needed.

        Signature v4 needs the region of the bucket or the request will fail
        with the indication of the correct region.
        We are trying to avoid this failure by pre-emptively getting the
        correct region to use, if not provided by the user.
        Rc   R   s=   ===== SEND Inner request to determine the bucket region =====u   s3://R   sE   ===== SUCCESS Inner request to determine the bucket region (%r) =====s,   getlocation inner request failure reason: %ss?   ===== FAILED Inner request to determine the bucket region =====N(   RM   Rf   Rb   RF   Rk   R    Rl   R   R#   R   R7   R>   R,  (   RR   R   t   s3_uriR  Rh  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   update_region_inner_request  s    		
c         C`  s  |  j  |  t | j  | _ | j } | j   \ } } } i  } t d  d  } yt j |  j	 | d   } |  j
 | | j  } t d | | | t | j p d  f  | j j | | | j |  | j j   }	 |	 j | d <|	 j | d <t |	 j    | d <|	 j   | d <d	 | d k rLt | d d	  }
 |
 | d
 <n  t j |  Wn\t t f k
 rv  nCt t f k
 r} t d t j |   t | d  r| j r| j t j t j  t j! f k sd t" |  k sd t" |  k rt# | t$  r  n  t j% |  | rt& d | d | f  t& d |  j' |   t( j) |  j' |   |  j* | | d  St+ d | d   n! t d t j |     n Xt d t j |   | d d$ k r|  j, | | |  j* |  S| d d k r|  j- | | |  j* |  } | r.| St. |  } | r| j/ d% k rt& d | d | f  t& d |  j' |   t( j) |  j' |   |  j* | | d  S|  n  | d d k r|  j0 | | |  j* |  S| d d k rt. |   n  | d d k s| d d k rt. |  } | d d  k r>d! } n  | rt& d | d | f  t& d |  j' |   t( j) |  j' |   |  j* | | d  S|  n  | d d" k  s| d d# k rt. |   n  | S(&   Ns"   Processing request, please wait...Rc   sE   Sending request method_string=%r, uri=%r, headers=%r, body=(%i bytes)Re   R   t   reasonRI   R   s   x-amz-meta-s3cmd-attrss   s3cmd-attrss
   Response:
t   errnos   [Errno 104]s
   [Errno 32]s    Retrying failed request: %s (%s)Rd   s   Waiting %d sec...i   s   Request failed for: %si-  i3  i  t	   BadDigestt   OperationAbortedt   TokenRefreshRequiredt   RequestTimeoutu    Retrying failed request: %s (%s)i  i  i  i  i  i    i   i+  (   i-  i3  (   R  R  R  R  (1   R  R   RP   RI   Ru   R   R>   R$   Rf   Rg   R   R   RB   t   cR   t   getresponseR   R  R   t
   getheaderst   readt   parse_attrs_headert   putt
   S3SSLErrort   S3SSLCertificateErrorR   R,  t   pprintt   pformatt   hasattrR  t   EPIPEt
   ECONNRESETt	   ETIMEDOUTR@   R?   t   SocketTimeoutExceptiont   closeR   R  RZ   t   sleepR   t   S3RequestErrorR  R  R   t   codeR  (   RR   R   R  RI   RN   RM   R   t   connRd   t   http_responset   attrsR   t
   handler_fnt   err(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR     s    	
)!		 		 c         C`  s   |  j  j s# t d  |  j |  Sd | k r< d | d <n  |  j  j | |  } y |  j |  } Wn# t k
 r } | j d    n X| j d |  | j d  | S(   sr   Wrapper around send_request for slow requests.

        To be able to show progression for small requests
        s$   Sending slow request, please wait...t   actionu   requestu   actiont   failedt   current_positiont   done(   RJ   t   progress_meterR   R   t   progress_classR,  R  R   (   RR   R   R7  t   operation_sizet   progressR   Rh  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   send_request_with_progress"  s    
c
   )      C`  s  |  j  |  |	 d  k r( |  j j }	 n  |  j r@ |	 r@ t }	 n  | j }
 t |
 d  } } | j } |  j j	 r d | d <|  j j
 | |  } n t d |  t j   } | r t | | |  } n t | | |  } | | _ |	 r| s t }	 qd |
 d <n  | j   \ } } }
 y t j |  j | d   } | j j | |  j | | j   x7 |
 j   D]) } | j j t |  t |
 |   qiW| j j   Wn t k
 r}   n t k
 ro} |  j j	 r| j d  n  | rXt d	 | d
 | f  t d |  j  |   t j! |  j  |   |  j" | | | | | | d | |  St# d | d
   n X| d k r| j$ |  n  t%   } yd  } |	 rt& j& | j j' g g  g  t(  \ } } } | r| j j)   } q| r| rt d t(  t* |  _ t }	 qn  |	 s5| r| j+ t j, k r| rW| j-   t j. | j _/ n  xJ| d k rt0 |  j j1 |  } | d k r| j- |  } n | } | st2 d   n  |  j j3 d k rt j   } n  | j4 |  | j j5 |  |  j j	 r| j4 d t6 |   n  | t6 |  8} | } |  j j3 d k r{t j   | } t7 |  |  j j3 }  t8 |  | |  } n  | rZt j! t0 | |  j j9   qZqZW| j:   }! | j j)   } n  i  }" | j+ |" d <| j; |" d <t< | j=    |" d <| j-   |" d <| |" d <t j> |  t? d t@ jA |"   Wnt k
 rO}   nt2 k
 r} |  j j	 rz| j d  n    nt k
 rP} |  j j	 r| j d  n  | r%t }# tB | d  r| jC r| jC tC jD tC jE tC jF f k sd tG |  k sd tG |  k rtH | tI  ryi | j j)   } i  }" | j+ |" d <| j; |" d <t< | j=    |" d <| j-   |" d <| |" d <t* }# Wqt k
 rtJ d  qXn  |# sMt d | d
 | f  t d |  j  |   t j! |  j  |   |  j" | | | | | | d | | |	 	 SqQt? d | | f  t# d | d
   n Xt j   }$ |$ | |" d <|" d rt7 |" d  |" d pt7 d   |" d! <|  j j	 r| j4   | j d"  n  |" d d@ k r|  jK | |" |  j" | | | | d% | d& | d' |	 S|" d d( k r~|  jL | |" |  j" | | | | d% | d& | d' |	 }% |% rW|% StM |"  }& |& jN dA k r~|&  q~n  |" d d- k r|  jO | |" |  j" | | | | d% | d& | d' |	 S|" d d. k r	| r	t* |  _ |  j" | | | | | | d | | d' t Sd/ |" d k r.	d |" d d/ <n  |" d d0 k  sN	|" d d1 k r
t }' |" d d2 k r	t* }' |" d d3 k r	| r	| d4 p	d5 } q	nf |" d d6 k r	t* }' | r	| d4 p	d5 } n7 |" d d( k r	tM |"  }& |& jN dB k r	t* }' q	n  |' r
| r
t d | d
 tM |"  f  | r=
t d7 |  n  t d |  j  |   t j! |  j  |   |  j" | | | | | | d | | |	 	 St d8 |  t# d8 |   n  tM |"   n  t? d9 |! |" d j d/ d  jP d:  f  |" d j d/ d  jP d:  }( d; |( k r|( | j:   k r|" d j d<  d= k rt d>  | rt d? |  |  j" | | | | | | d | | |	 	 St d8 |  t# d8 |   n  |" S(C   Ns   content-lengthu   uploadu   actions!   Sending file '%s', please wait...s   100-continuet   expectRc   R  s    Retrying failed request: %s (%s)Rd   s   Waiting %d sec...i   s   Upload failed for: %sRe   sQ   HTTP Expect Continue feature disabled because of no reply of the server in %.2fs.i    s3   File smaller than expected. Was the file truncated?t   delta_positionR   R  RI   R   R2  u
   Response:
R  s   [Errno 104]s
   [Errno 32]sX   Cannot retrieve any response status before encountering an EPIPE or ECONNRESET exceptions   Upload failed: %s (%s)s   Giving up on '%s' %st   elapsedit   speedR  i-  i3  t   offsett
   chunk_sizet   use_expect_continuei  R  R  R  R  i  i  R  i   i+  i  i  i   g{Gz?i  s(   Retrying on lower speed (throttle=%0.2f)s$   Too many failures. Giving up on '%s's"   MD5 sums: computed=%s, received=%ss   "'R   s   x-amz-server-side-encryptions   aws:kmss   MD5 Sums don't match!s   Retrying upload of %s(   i-  i3  (   R  R  R  R  (   R  R  R  R  (Q   R  R>   RJ   t   use_http_expectR   R_   RI   R-  R  R  R  R   RZ   R(   R'   RP   Ru   R$   Rf   Rg   R  t
   putrequestR   R   t   keyst	   putheaderR   t
   endheadersR   R,  R  R   R  R  R/  t   S3UploadErrort   seekR   t   selectt   sockt   EXPECT_CONTINUE_TIMEOUTR  R7   R   t   CONTINUER  t   _CS_REQ_SENTt   _HTTPConnection__statet   minR.  R  t	   limitrateR   t   wrapper_send_bodyRB   t   floatt   maxt   throttle_maxt	   hexdigestR  R   R  R  R   R  R  R  R  R  R  R  R@   R?   R  R   R  R  R   R  R  R   ()   RR   R   R:  R7  t   buffert   throttleR  R  R  R  RI   t	   size_leftt
   size_totalR   R  t   timestamp_startt   sha256_hashRN   RM   R  t   headerR   t   md5_hashR  t   readablet   writablet   exceptionalt   lR   t
   start_timet   limitrate_throttlet   real_durationt   expected_durationt   md5_computedR   t   known_errort   timestamp_endR  R  t	   try_retryt   md5_from_s3(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR/  :  st   			
		"'&	*	
#
!$

2
(*	(	 -7
c   
      C`  s   t  j    } t |  | | | |  } | j |  | j   } t  j    }	 |	 | | d <| | d <| d r t | d  | d p t d  | d <| d r t | d  d k r t t | d d    n  | S(   NR  R2  iR  R   R]  R  (   RZ   R"   t   upload_all_partst   complete_multipart_uploadR  R   R  R   (
   RR   R:  RI   Rd   R2  R0  R  t   uploadR   R  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR)  7  s    
2 c         C`  s   |  j  | | | | |  S(   N(   R)  (   RR   Rc  Rd  R2  RI   R0  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyRa  G  s    c         C`  s	  |  j  |  | j   \ } } } | j }	 |  j j rY d | d <|  j j | d  }
 n t d |	  t j   } d  } yJt	 j
 |  j | d   } | j j | |  j | | j   x7 | j   D]) } | j j t |  t | |   q W| d k r(t d |  | j j d d |  n  | j j   i  } | j j   } | j | d	 <| j | d
 <t | j    | d <d | d k rt | d d  } | | d <n  t d t j |   WnFt k
 r}   n1t t f k
 r} |  j j r|
 j  d  n  t! | d  rE| j" rE| j" t" j# t" j$ t" j% f k sid t& |  k sid t& |  k rt' | t(  r  n  t	 j) |  | rt* d | d | f  t* d |  j+ |   t j, |  j+ |   |  j- | | | | | d  St. d | d   n X| d	 d6 k rN| j/   | d <|  j0 | | |  j- | | | |  S| d	 d k r| j/   | d <|  j1 | | |  j- | | | |  } | r| St2 |   n  | d	 d k r| j/   | d <|  j3 | | |  j- | | | |  S| d	 d k r| j/   | d <t2 |   n  | d	 d k  s<| d	 d k r[| j/   | d <t2 |   n  | d k rst4   } n  t5 | d d   } | | } | } |  j j r| |
 _6 | |
 _7 | |
 _8 n  y| d k r| j/ d  } t9 |  d k st:  n  x>| | k  r:| |  j j; k r'|  j j; p*| } |  j j< d k rNt j   } n  | j/ |  } t9 |  d k r~t= d!   n  |  j j< d k rt j   | } t> |  |  j j< } | | k rt j, | |  qn  | j? |  | d k r| j@ |  n  | t9 |  7} |  j j r|
 j@ d" t9 |   qqWt	 jA |  WnDtB k
 r_  n1t t f k
 r} |  j j r|
 j  d  n  t! | d  r| j" r| j" t" j# t" j$ t" j% f k sd t& |  k sd t& |  k rt' | t(  r  n  t	 j) |  | rxt* d | d | f  t* d |  j+ |   t j, |  j+ |   |  j- | | | | | d  St. d | d   n X| jC   t j   } |  j j r|
 j@   |
 j  d#  n  | d j
 d$ d%  jD d&  } d' | d k r$y | d d( } Wq$tE k
 r q$Xn  d) | k r| d k rO| jF   | d( <qy tG |	  | d( <Wqt k
 r} | j" t" jH k rt* d* |	 | f  n  t* d+  qXn  | j
 d(  | k | d, <| | | d- <| | d. <| d- r	t> | d.  | d- p	t> d/  | d0 <| d. | t5 | d d   k ra	t* d1 | t5 | d d   | d. f  n  t d2 | j
 d(   d) | k r	| d, r	| d j
 d3  d4 k r	t* d5 | j
 d(  | f  n  | S(7   Nu   downloadu   actioni    s#   Receiving file '%s', please wait...Rc   s   Requesting Range: %d .. endt   Ranges	   bytes=%d-R   R  RI   s   x-amz-meta-s3cmd-attrss   s3cmd-attrss
   Response:
R  R  s   [Errno 104]s
   [Errno 32]s    Retrying failed request: %s (%s)Rd   s   Waiting %d sec...i   s   Download failed for: %si-  i3  R   i  i  i  i   i+  s   content-lengths   EOF from S3!R  R  R  Re   s   "'s   x-amz-meta-s3tools-gpgencR   R   s   Unable to open file: %s: %ss(   Unable to verify MD5. Assume it matches.t   md5matchR  R2  iR  s4   Reported size (%s) does not match received size (%s)s   ReceiveFile: Computed MD5 = %ss   x-amz-server-side-encryptions   aws:kmss5   MD5 signatures do not match: computed=%s, received=%s(   i-  i3  (I   R  Ru   R  RJ   R  R  R   RZ   R>   R$   Rf   Rg   R  R  R   R   R  R  R   R   R  R  R   R  R   R  R  R  R  R   R   R,  R  R  R  R  R  R  R@   R?   R  R  R   R  R  R9  t   S3DownloadErrorR  R  R  R   R  R   R-  t
   total_sizet   initial_positionR  RB   t   AssertionErrort
   recv_chunkR  R   R  t   writeR   R  R!  t   flushR   t   KeyErrorR  R   t   ENOENT(   RR   R   R:  R7  R<  R  RN   RM   RI   R   R  R  R  R	  R   R  R  R   R  R
  R  R  R  R   t
   this_chunkR  R  R  R  R  (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR9  L  s&   	
"'!$	 
		$!$


2"'0N(N   Rv   Rw   R   R  t   targetsR  t   codesR  RS   R   Rg   R   R>   R   R   R   R   R   R   R   R_   R   R   R   R   R   R   R   R   R   R  R  R   R  R8  R=  RC  R?  RM  RT  RZ  Rl  Rm  Rq  R+  R^  Rb  Rs  Rt  Ru  Rw  Rx  Ry  Rz  R{  R|  R}  R  R~  R  R  R  R  R  R  R  R   R  R  R  R  R  R   R  R/  R)  Ra  R9  (    (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyRx      s   		
		
			4	!							W										
					
					6
*					%	*		f	c         C`  sC   i  } x6 |  j  d  D]% } | j  d  \ } } | | | <q W| S(   NR   t   :(   RA   (   t   attrs_headerR  t   attrRH  t   val(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR    s
    c         C`  sZ   t  t |    } t | j    } t |  } | d d k rP | d d !} n  t |  S(   Nis   
i    (   R   R   R
   t   digestR   (   RP   t   mt	   base64md5(    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyR     s    (]   t
   __future__R    R   R  R   RZ   R  R8   R  R  t   xml.saxR   t   socketR   R  R  R   R   R   R   R  R   R	   t   ImportErrort   urllib.parset   base64R
   R   R  t   hashlibR   t	   BaseUtilsR   R   R   R   R   R   t   UtilsR   R   R   R   R   R   R   R   R   R   R   R   R   R    t
   Exceptionst	   MultiPartR"   R#   R$   t   CryptoR%   R&   R'   R(   R)   t   ctypesR*   R4   t   MagicR7   R,   R/   t	   TypeErrorR  t
   MAGIC_MIMEt   loadt   AttributeErrorR!  R   R@   t	   error_strR6   R_   R5   RE   R  R'  t   __all__RF  RF   Rx   t   appendR  R   (    (    (    sE   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/S3.pyt   <module>	   s   ".:
(

	

	
P       7	