U
    3ìdÁ,  ã                   @   sÄ   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ddddddgZdddgZG d d!„ d!eƒZG d"d
„ d
eƒZG d#d	„ d	eƒZG d$d„ deƒZd%S )&é    )ÚUser)ÚInvalidAclErrorZAccessControlListZAllAuthenticatedUsersZAllUsersZDisplayNameÚDomainZEmailAddressÚEntryÚEntriesZGroupByDomainZGroupByEmailZ	GroupByIdÚIDÚNameZOwnerZ
PermissionÚScopeÚtypeZUserByEmailZUserByIdÚprivatezpublic-readzproject-privatezpublic-read-writezauthenticated-readzbucket-owner-readzbucket-owner-full-controlÚREADÚWRITEZFULL_CONTROLc                   @   sb   e Zd Zddd„Zedd„ ƒZdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚACLNc                 C   s   || _ t| ƒ| _d S ©N)Úparentr   Úentries©Úselfr   © r   ú//tmp/pip-unpacked-wheel-d7dsrkjd/boto/gs/acl.pyÚ__init__9   s    zACL.__init__c                 C   s   | S r   r   ©r   r   r   r   Úacl=   s    zACL.aclc                 C   sT   t | dƒrd| j ¡  g}ndg}| j}|rF|jD ]}| | ¡ ¡ q2dd |¡ S )NÚownerzOwner:%sÚ ú<%s>ú, )Úhasattrr   Ú__repr__r   Ú
entry_listÚappendÚjoin)r   Úentries_reprÚacl_entriesÚer   r   r   r   A   s    

zACL.__repr__c                 C   s    t t||d}| jj |¡ d S ©N)r
   Úemail_addressÚ
permission)r   ÚUSER_BY_EMAILr   r   r    ©r   r'   r&   Úentryr   r   r   Úadd_email_grantO   s    ÿzACL.add_email_grantc                 C   s    t |t|d}| jj |¡ d S )N)r'   r
   Úid)r   Ú
USER_BY_IDr   r   r    )r   r'   Zuser_idr*   r   r   r   Úadd_user_grantV   s    zACL.add_user_grantc                 C   s    t t||d}| jj |¡ d S r%   )r   ÚGROUP_BY_EMAILr   r   r    r)   r   r   r   Úadd_group_email_grantZ   s    ÿzACL.add_group_email_grantc                 C   s    t t||d}| jj |¡ d S )N)r
   r,   r'   )r   ÚGROUP_BY_IDr   r   r    )r   r'   Zgroup_idr*   r   r   r   Úadd_group_grant_   s    zACL.add_group_grantc                 C   sH   |  ¡ t  ¡ kr t| ƒ| _| jS |  ¡ t  ¡ kr@t| ƒ| _| jS d S d S r   )ÚlowerÚOWNERr   r   ÚENTRIESr   r   ©r   ÚnameÚattrsÚ
connectionr   r   r   ÚstartElementc   s    

zACL.startElementc                 C   s4   |  ¡ t  ¡ krn|  ¡ t  ¡ kr$nt| ||ƒ d S r   )r3   r4   r5   Úsetattr©r   r7   Úvaluer9   r   r   r   Ú
endElementm   s
    zACL.endElementc                 C   sF   dt  }t| dƒr || j ¡ 7 }| j}|r6|| ¡ 7 }|dt  7 }|S )Nr   r   ú</%s>)ÚACCESS_CONTROL_LISTr   r   Úto_xmlr   )r   Úsr#   r   r   r   rA   u   s    
z
ACL.to_xml)N)Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   r   r+   r.   r0   r2   r:   r>   rA   r   r   r   r   r   7   s   


r   c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )r   Nc                 C   s   || _ g | _d S r   )r   r   r   r   r   r   r   ƒ   s    zEntries.__init__c                 C   s,   g }| j D ]}| | ¡ ¡ q
dd |¡ S )Nz<Entries: %s>r   )r   r    r   r!   )r   r"   r$   r   r   r   r   ‰   s    
zEntries.__repr__c                 C   s0   |  ¡ t  ¡ kr(t| ƒ}| j |¡ |S d S d S r   )r3   ÚENTRYr   r   r    )r   r7   r8   r9   r*   r   r   r   r:      s
    zEntries.startElementc                 C   s"   |  ¡ t  ¡ krnt| ||ƒ d S r   )r3   rG   r;   r<   r   r   r   r>   —   s    zEntries.endElementc                 C   s:   | j s
dS dt }| j D ]}|| ¡ 7 }q|dt 7 }|S )Nr   r   r?   )r   r5   rA   )r   rB   r*   r   r   r   rA      s    
zEntries.to_xml)N©rC   rD   rE   r   r   r:   r>   rA   r   r   r   r   r      s
   
c                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )r   Nc                 C   s&   |st | |||||ƒ}|| _|| _d S r   )r	   Úscoper'   )r   rI   r
   r,   r7   r&   Údomainr'   r   r   r   r   ª   s    zEntry.__init__c                 C   s   d| j  ¡ | j ¡ f S )Nú<%s: %s>)rI   r   r'   r   r   r   r   r   ±   s    zEntry.__repr__c                 C   sX   |  ¡ t  ¡ kr>t|kr(tdttf ƒ‚t| |t ƒ| _| jS |  ¡ t  ¡ krPnd S d S )Nz Missing "%s" in "%s" part of ACL)r3   ÚSCOPEÚTYPEr   r	   rI   Ú
PERMISSIONr6   r   r   r   r:   ´   s    ÿzEntry.startElementc                 C   sV   |  ¡ t  ¡ krn@|  ¡ t  ¡ krF| ¡ }|tkr>td| ƒ‚|| _nt| ||ƒ d S )NzInvalid Permission "%s")r3   rL   rN   ÚstripÚSupportedPermissionsr   r'   r;   r<   r   r   r   r>   Ï   s    zEntry.endElementc                 C   s:   dt  }|| j ¡ 7 }|dt| jtf 7 }|dt  7 }|S )Nr   ú<%s>%s</%s>r?   )rG   rI   rA   rN   r'   ©r   rB   r   r   r   rA   Ú   s
    zEntry.to_xml)NNNNNNNrH   r   r   r   r   r   ¨   s         ÿ
c                   @   sÀ   e Zd Ze ¡ g e ¡ g e ¡ e ¡ ge ¡ e	 ¡ e
 ¡ e ¡ ge ¡ e	 ¡ e ¡ e ¡ ge ¡ e	 ¡ e
 ¡ e ¡ ge ¡ e	 ¡ e ¡ e ¡ giZddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )r	   Nc                 C   sL   || _ || _|| _|| _|| _|| _| j ¡ | jkrHtdt	t
| jf ƒ‚d S )NzInvalid %s %s "%s" )r   r
   r7   r,   rJ   r&   r3   ÚALLOWED_SCOPE_TYPE_SUB_ELEMSr   rL   rM   )r   r   r
   r,   r7   r&   rJ   r   r   r   r   ñ   s    
ÿzScope.__init__c                 C   sL   d }| j r| j }n| jr | j}n| jr,| j}|r>d| j|f S d| j S d S )NrK   r   )r,   r&   rJ   r
   )r   Znamed_entityr   r   r   r   ý   s    zScope.__repr__c                 C   s2   |  ¡ | j| j  ¡  kr.td|tt| jf ƒ‚d S )Nz'Element "%s" not allowed in %s %s "%s" )r3   rS   r
   r   rL   rM   r6   r   r   r   r:   
  s    ÿÿzScope.startElementc                 C   sx   |  ¡ }| ¡ t ¡ kr || _nT| ¡ t ¡ kr8|| _n<| ¡ t ¡ krP|| _n$| ¡ t ¡ krh|| _	nt
| ||ƒ d S r   )rO   r3   ÚDOMAINrJ   ÚEMAIL_ADDRESSr&   r   r,   ÚNAMEr7   r;   r<   r   r   r   r>     s    zScope.endElementc                 C   s$  dt | jf }| j ¡ t ¡ ks2| j ¡ t ¡ kr4nà| j ¡ t ¡ kr\|dt| jtf 7 }n¸| j ¡ t ¡ ks€| j ¡ t	 ¡ kr°|dt
| jt
f 7 }| jr®|dt| jtf 7 }nd| j ¡ t ¡ ksÖ| j ¡ t ¡ kr|dt| jtf 7 }| jr|dt| jtf 7 }ntd| jƒ‚|dt  7 }|S )Nz<%s type="%s">rQ   zInvalid scope type "%s" r?   )rL   r
   r3   ÚALL_AUTHENTICATED_USERSÚ	ALL_USERSÚGROUP_BY_DOMAINrT   rJ   r/   r(   rU   r&   r7   rV   r1   r-   r   r,   r   rR   r   r   r   rA     s0    ÿÿ
ÿÿzScope.to_xml)NNNNN)rC   rD   rE   rW   r3   rX   rY   rT   r/   ÚDISPLAY_NAMErU   rV   r1   r   r(   r-   rS   r   r   r:   r>   rA   r   r   r   r   r	   â   s:        ÿ   ÿ ÷    ÿ
N)Zboto.gs.userr   Zboto.exceptionr   r@   rW   rX   rZ   rT   rU   rG   r5   rY   r/   r1   r   rV   r4   rN   rL   rM   r(   r-   ZCannedACLStringsrP   Úobjectr   r   r   r	   r   r   r   r   Ú<module>   s>     þ
J':