
?F[c           @   s  d  Z  d d l Z d d l m Z d d l m Z d d l Z d d l m Z d d l m Z d d l m	 Z	 d d l
 m Z d d	 l m Z d d
 l m Z d d
 l m Z d d l m Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z d Z  d Z! d Z" d Z# d Z$ d Z% d Z& d  Z' d! Z( d" Z) d# Z* e+   Z, d$ e- f d%     YZ. d& e+ f d'     YZ/ d(   Z0 d S()   sC   
This class encapsulates the provider-specific header differences.
iN(   t   six(   t   datetime(   t   config(   t
   expanduser(   t   Config(   t   InvalidInstanceMetadataError(   t   ACL(   t   CannedACLStrings(   t   Policyt   header_prefixt   metadata_prefixs   x-amz-s   x-goog-s
   acl-headers   auth-headers   copy-source-headers   copy-source-version-id-headers   copy-source-range-headers   delete-marker-headers   date-headers   metadata-directive-headers   resumable-upload-headers   security-token-headers   storage-classs
   mfa-headers   server-side-encryption-headers   version-id-headers   restore-headert   StorageCopyErrort   StorageCreateErrort   StorageDataErrort   StoragePermissionsErrort   StorageResponseErrort   ProfileNotFoundErrorc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s,   lib/python2.7/site-packages/boto/provider.pyR   J   s   t   Providerc           B   sQ  e  Z i d+ d 6d- d 6Z i e d 6e d 6Z i e d 6e d 6Z	 i d d 6d	 d 6Z
 i e d 6e d 6Z i e d 6e d 6Z i i e e 6e d
 e 6e d e 6d e 6e d e 6e d e 6e d e 6e d e 6e d e 6e d e 6d, e 6e d e 6e d e 6e d e 6e d e 6e d e 6e d e  6d 6i e! e 6e! d
 e 6e! d e 6d e 6e! d e 6e! d e 6d, e 6e! d e 6e! d e 6e! d e 6e! d e 6e! d e 6d, e 6e! d e 6e! d e 6d, e 6d, e  6d 6Z" i i e# j$ j% e& 6e# j$ j' e( 6e# j$ j) e* 6e# j$ j+ e, 6e# j$ j- e. 6d 6i e# j$ j/ e& 6e# j$ j0 e( 6e# j$ j1 e* 6e# j$ j2 e, 6e# j$ j3 e. 6d 6Z4 d, d, d, d, d  Z5 d   Z6 d   Z7 e8 e6 e7  Z9 d   Z: d   Z; e8 e: e;  Z< d    Z= d!   Z> e8 e= e>  Z? d"   Z@ d, d, d, d, d#  ZA d$   ZB d%   ZC d&   ZD d'   ZE d(   ZF d)   ZG d*   ZH RS(.   t   aws_access_key_idt   aws_secret_access_keyt   aws_security_tokent   aws_profilet   awst   gs_access_key_idt   gs_secret_access_keyt   googlet   s3t   gss   meta-t   aclt   AWSs   copy-sources   copy-source-version-ids   copy-source-ranget   dates   delete-markers   metadata-directives   security-tokens   server-side-encryptions
   version-ids   storage-classt   mfat   restoret   GOOG1t	   resumablec   
      C   s  d  |  _ d  |  _ d  |  _ | |  _ | |  _ | |  _ | |  _ | |  _ |  j	 |  j |  _
 |  j |  j |  _ d  |  _ t j j t d  d | d  } t d t  |  _ t j j |  r |  j j |  n  |  j | | | |  |  j   |  j   d |  j |  j } t j d |  r8t j d |  |  _ n  d |  j |  j } t j d |  rvt j d |  |  _ n  d |  j |  j }	 t j d |	  rt j d |	  |  _ n  d  S(	   Nt   ~t   .t   credentialst   do_loads   %s_hostt   Credentialss   %s_ports   %s_host_header(   t   Nonet   hostt   portt   host_headert
   access_keyt
   secret_keyt   security_tokent   profile_namet   namet   AclClassMapt	   acl_classt   CannedAclsMapt   canned_aclst   _credential_expiry_timet   ost   patht   joinR   R   t   Falset   shared_credentialst   isfilet   load_from_patht   get_credentialst   configure_headerst   configure_errorst
   HostKeyMapR   t
   has_optiont   gett   getint(
   t   selfR2   R.   R/   R0   R1   t   shared_patht   host_opt_namet   port_opt_namet   host_header_opt_name(    (    s,   lib/python2.7/site-packages/boto/provider.pyt   __init__   s6    									"

c         C   s    |  j    r |  j   n  |  j S(   N(   t   _credentials_need_refresht#   _populate_keys_from_metadata_servert   _access_key(   RF   (    (    s,   lib/python2.7/site-packages/boto/provider.pyt   get_access_key   s    c         C   s   | |  _  d  S(   N(   RN   (   RF   t   value(    (    s,   lib/python2.7/site-packages/boto/provider.pyt   set_access_key   s    c         C   s    |  j    r |  j   n  |  j S(   N(   RL   RM   t   _secret_key(   RF   (    (    s,   lib/python2.7/site-packages/boto/provider.pyt   get_secret_key   s    c         C   s   | |  _  d  S(   N(   RR   (   RF   RP   (    (    s,   lib/python2.7/site-packages/boto/provider.pyt   set_secret_key   s    c         C   s    |  j    r |  j   n  |  j S(   N(   RL   RM   t   _security_token(   RF   (    (    s,   lib/python2.7/site-packages/boto/provider.pyt   get_security_token   s    c         C   s   | |  _  d  S(   N(   RU   (   RF   RP   (    (    s,   lib/python2.7/site-packages/boto/provider.pyt   set_security_token   s    c         C   su   |  j  d  k r t S|  j  t j   } | j | j | j d d d d	 } | d
 k  rm t j	 j
 d  t St Sd  S(   Ni   i  i
   i   i   i<   s!   Credentials need to be refreshed.i@B i@B i,  (   R7   R*   R;   R   t   utcnowt   microsecondst   secondst   dayst   botot   logt   debugt   True(   RF   t   deltat   seconds_left(    (    s,   lib/python2.7/site-packages/boto/provider.pyRL      s    c         C   s  |  j  |  j \ } } } } | d  k r_ | d  k	 r_ | j   t j k r_ t j | j   } n  |  j }	 | d  k	 r | |  _ t j	 j
 d  nU| j   t j k r t j | j   |  _ t j	 j
 d  n| d  k	 rq|	 j | |  r|	 j | |  |  _ t j	 j
 d |  qt j d | |  r^t j d | |  |  _ t j	 j
 d |  qt d |   nt |	 j d |  r|	 j d |  |  _ t j	 j
 d  n: t j d	 |  rt j d	 |  |  _ t j	 j
 d
  n  | d  k	 r| |  _ t j	 j
 d  n| j   t j k rKt j | j   |  _ t j	 j
 d  n| d  k	 r|	 j | |  r|	 j | |  |  _ t j	 j
 d |  qt j d | |  rt j d | |  |  _ t j	 j
 d |  qt d |   n |	 j d |  r(|	 j d |  |  _ t j	 j
 d  n t j d	 |  rbt j d	 |  |  _ t j	 j
 d  n t j d	 d  rt j d	 d  }
 y d d  l } Wn$ t k
 rt j	 j d    n X| j |
 |  j  |  _ t j	 j
 d  n  | d  k	 r| |  _ t j	 j
 d  nJ| d  k	 rZ| d  k rZ| d  k rZ| j   t j k rrt j | j   |  _ t j	 j
 d  qZ|	 j | pd |  r|	 j | pd |  |  _ t j	 j
 d  qZ| d  k	 rt j d | |  rWt j	 j
 d  t j d | |  |  _ t j	 j
 d |  qWqZt j d	 |  rZt j d	 |  |  _ t j	 j
 d  qZn  |  j d  k sx|  j d  k r|  j |  j r|  j   n  |  j |  j  |  _ d  S(   Ns$   Using access key provided by client.s/   Using access key found in environment variable.s@   Using access key found in shared credential file for profile %s.s
   profile %ss2   Using access key found in config file: profile %s.s   Profile "%s" not found!t   defaults1   Using access key found in shared credential file.R)   s&   Using access key found in config file.s$   Using secret key provided by client.s/   Using secret key found in environment variable.s@   Using secret key found in shared credential file for profile %s.s2   Using secret key found in config file: profile %s.s1   Using secret key found in shared credential file.s&   Using secret key found in config file.t   keyringisZ   The keyring module could not be imported. For keyring support, install the keyring module.s"   Using secret key found in keyring.s(   Using security token provided by client.s3   Using security token found in environment variable.s5   Using security token found in shared credential file.s   config has options6   Using security token found in config file: profile %s.s*   Using security token found in config file.(   t   CredentialMapR2   R*   t   upperR8   t   environR<   R.   R\   R]   R^   RC   RD   R   R   R/   Rc   t   ImportErrort   errort   get_passwordR0   RN   RR   t   MetadataServiceSupportRM   t   _convert_key_to_str(   RF   R.   R/   R0   R1   t   access_key_namet   secret_key_namet   security_token_namet   profile_name_namet   sharedt   keyring_nameRc   (    (    s,   lib/python2.7/site-packages/boto/provider.pyR?   	  s    								c         C   s   t  j j d  d d l m } t j d d d  } t j d d d  } | d	 | d
 | d d  } | r |  j |  } | d |  _	 | d |  _
 | d |  _ | d } t j | d  |  _ t  j j d |  j t j   |  n  d  S(   Ns,   Retrieving credentials from metadata server.i(   t   get_instance_metadatat   Botot   metadata_service_timeoutg      ?t   metadata_service_num_attemptsi   t   timeoutt   num_retriest   datas#   meta-data/iam/security-credentials/i    i   i   s   %Y-%m-%dT%H:%M:%SZs.   Retrieved credentials will expire in %s at: %s(   R\   R]   R^   t
   boto.utilsRr   R   t   getfloatRE   t   _get_credentials_from_metadataRN   RR   RU   R   t   strptimeR7   t   now(   RF   Rr   Rv   t   attemptst   metadatat   credst
   expires_at(    (    s,   lib/python2.7/site-packages/boto/provider.pyRM   |  s$    	
c   	      C   s   t  | j    d } t | t  sW | d k r: d } n
 d | } t d |   n  y5 | d } |  j | d  } | d } | d	 } Wn# t k
 r } t d
 |   n X| | | | f S(   Ni    t    s   an empty strings   type: %ss7   Expected a dict type of credentials instead received %st   AccessKeyIdt   SecretAccessKeyt   Tokent
   Expirations;   Credentials from instance metadata missing required key: %s(   t   listt   valuest
   isinstancet   dictR   Rk   t   KeyError(	   RF   R   R   t   msgR.   R/   R0   R   t   e(    (    s,   lib/python2.7/site-packages/boto/provider.pyR{     s"    	


c         C   s    t  | t j  r t |  S| S(   N(   R   R    t	   text_typet   str(   RF   t   key(    (    s,   lib/python2.7/site-packages/boto/provider.pyRk     s    
c         C   s   |  j  |  j } | t |  _ | t |  _ | t |  _ | t |  _	 | t
 |  _ | t |  _ | t |  _ | t |  _ | t |  _ | t |  _ | t |  _ | t |  _ | t |  _ | t |  _ | t |  _ | t  |  _! | t" |  _# d  S(   N($   t   HeaderInfoMapR2   t   METADATA_PREFIX_KEYR
   t   HEADER_PREFIX_KEYR	   t   ACL_HEADER_KEYt
   acl_headert   AUTH_HEADER_KEYt   auth_headert   COPY_SOURCE_HEADER_KEYt   copy_source_headert!   COPY_SOURCE_VERSION_ID_HEADER_KEYt   copy_source_version_idt   COPY_SOURCE_RANGE_HEADER_KEYt   copy_source_range_headert   DATE_HEADER_KEYt   date_headert   DELETE_MARKER_HEADER_KEYt   delete_markert   METADATA_DIRECTIVE_HEADER_KEYt   metadata_directive_headert   SECURITY_TOKEN_HEADER_KEYt   security_token_headert   RESUMABLE_UPLOAD_HEADER_KEYt   resumable_upload_headert   SERVER_SIDE_ENCRYPTION_KEYt   server_side_encryption_headert   STORAGE_CLASS_HEADER_KEYt   storage_class_headert   VERSION_ID_HEADER_KEYt
   version_idt   MFA_HEADER_KEYt
   mfa_headert   RESTORE_HEADER_KEYt   restore_header(   RF   t   header_info_map(    (    s,   lib/python2.7/site-packages/boto/provider.pyR@     s(    

c         C   sU   |  j  |  j } | t |  _ | t |  _ | t |  _ | t |  _	 | t
 |  _ d  S(   N(   t   ErrorMapR2   t   STORAGE_COPY_ERRORt   storage_copy_errort   STORAGE_CREATE_ERRORt   storage_create_errort   STORAGE_DATA_ERRORt   storage_data_errort   STORAGE_PERMISSIONS_ERRORt   storage_permissions_errort   STORAGE_RESPONSE_ERRORt   storage_response_error(   RF   t	   error_map(    (    s,   lib/python2.7/site-packages/boto/provider.pyRA     s    c         C   s   |  j  |  j S(   N(   RB   R2   (   RF   (    (    s,   lib/python2.7/site-packages/boto/provider.pyt   get_provider_name  s    c         C   s   |  j  |  j S(   N(   t   ChunkedTransferSupportR2   (   RF   (    (    s,   lib/python2.7/site-packages/boto/provider.pyt   supports_chunked_transfer  s    (   R   R   R   R   N(   R   R   NN(I   R   R   R*   Rd   R   R   R3   t   CannedS3ACLStringst   CannedGSACLStringsR5   RB   R;   R_   R   Rj   t   AWS_HEADER_PREFIXR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   GOOG_HEADER_PREFIXR   R\   t	   exceptiont   S3CopyErrorR   t   S3CreateErrorR   t   S3DataErrorR   t   S3PermissionsErrorR   t   S3ResponseErrorR   t   GSCopyErrort   GSCreateErrort   GSDataErrort   GSPermissionsErrort   GSResponseErrorR   RK   RO   RQ   t   propertyR.   RS   RT   R/   RV   RW   R0   RL   R?   RM   R{   Rk   R@   RA   R   R   (    (    (    s,   lib/python2.7/site-packages/boto/provider.pyR   N   s     





"							r						c           C   s
   t  d  S(   NR   (   R   (    (    (    s,   lib/python2.7/site-packages/boto/provider.pyt   get_default  s    (1   t   __doc__R8   t   boto.compatR    R   R\   R   R   t   boto.pyami.configR   t   boto.exceptionR   t   boto.gs.aclR   R   R   t   boto.s3.aclR   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   t   objectt   NO_CREDENTIALS_PROVIDEDt
   ValueErrorR   R   R   (    (    (    s,   lib/python2.7/site-packages/boto/provider.pyt   <module>   sR   	 