ó
Òbc           @@ sj  d  d l  m Z m Z d  d l Z d d l m Z m Z m Z d d l m	 Z	 y d  d l
 j j Z Wn  e k
 r† d  d l j Z n Xe j d k Z d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ e d k rfd Z e e ƒ Z e d e j ƒ  ƒ e j ƒ  e d e j ƒ  ƒ e j ƒ  e d e j ƒ  ƒ e e ƒ n  d S(   i    (   t   absolute_importt   print_functionNi   (   t   getTreeFromXmlt   encode_to_s3t   decode_from_s3(   t   deunicodisei   t   Granteec           B@ sJ   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s/   http://acs.amazonaws.com/groups/global/AllUserss.   http://acs.amazonaws.com/groups/s3/LogDeliveryc         C@ s1   d  |  _ d  |  _ d  |  _ d |  _ d  |  _ d  S(   Nt    (   t   Nonet   xsi_typet   tagt   namet   display_namet
   permission(   t   self(    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   __init__   s
    				c         C@ s,   t  d i |  j d 6|  j d 6|  j d 6ƒ S(   Ns0   Grantee("%(tag)s", "%(name)s", "%(permission)s")R
   R   R   (   t   reprR
   R   R   (   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   __repr__!   s    	

c         C@ s   |  j  d k o |  j t j k S(   Nt   URI(   R
   R   R   t   ALL_USERS_URI(   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt
   isAllUsers(   s    c         C@ s(   |  j  ƒ  o' |  j d k p' |  j d k S(   Nt   READt   FULL_CONTROL(   R   R   (   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt
   isAnonRead+   s    c         C@ s(   |  j  ƒ  o' |  j d k p' |  j d k S(   Nt   WRITER   (   R   R   (   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   isAnonWrite.   s    c         C@ sx   t  j d ƒ } t  j | d i d d 6|  j d 6ƒ } t  j | |  j ƒ } |  j | _ t  j | d ƒ } |  j | _ | S(   Nt   GrantR   s)   http://www.w3.org/2001/XMLSchema-instances	   xmlns:xsis   xsi:typet
   Permission(   t   ETt   Elementt
   SubElementR	   R
   R   t   textR   (   R   t   elt   granteeR   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt
   getElement1   s    (
   t   __name__t
   __module__R   t   LOG_DELIVERY_URIR   R   R   R   R   R"   (    (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR      s   					t   GranteeAnonReadc           B@ s   e  Z d  „  Z RS(   c         C@ s8   t  j |  ƒ d |  _ d |  _ t  j |  _ d |  _ d  S(   Nt   GroupR   R   (   R   R   R	   R
   R   R   R   (   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR   >   s
    		(   R#   R$   R   (    (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR&   =   s   t   GranteeLogDeliveryc           B@ s   e  Z d  „  Z RS(   c         C@ s8   t  j |  ƒ d |  _ d |  _ t  j |  _ | |  _ d S(   s=   
        permission must be either READ_ACP or WRITE
        R'   R   N(   R   R   R	   R
   R%   R   R   (   R   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR   F   s
    		(   R#   R$   R   (    (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR(   E   s   t   ACLc           B@ sª   e  Z d  Z d 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 RS(   sj   <AccessControlPolicy><Owner><ID></ID></Owner><AccessControlList></AccessControlList></AccessControlPolicy>c         C@ s]   | s t  j } n  g  |  _ d |  _ d |  _ t t | ƒ ƒ } |  j | ƒ |  j | ƒ d  S(   NR   (	   R)   t	   EMPTY_ACLt   granteest   owner_idt
   owner_nickR   R   t
   parseOwnert   parseGrants(   R   t   xmlt   tree(    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR   S   s    			c         C@ s(   | j  d ƒ |  _ | j  d ƒ |  _ d  S(   Ns   .//Owner//IDs   .//Owner//DisplayName(   t   findtextR,   R-   (   R   R1   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR.   _   s    c         C@ s²   x« | j  d ƒ D]š } t ƒ  } | j d ƒ } | j d | _ | j d ƒ j | _ xD | D]< } | j d k r~ | j | _ qZ | j | _ | j | _	 qZ W|  j
 j | ƒ q Wd  S(   Ns   .//Grants
   .//Grantees/   {http://www.w3.org/2001/XMLSchema-instance}typeR   t   DisplayName(   t   findallR   t   findt   attribR	   R   R   R
   R   R   R+   t   append(   R   R1   t   grantR!   t   gR    (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR/   c   s    	c         C@ so   g  } xb |  j  D]W } | j r+ | j } n | j ƒ  r@ d } n	 | j } | j i | d 6| j d 6ƒ q W| S(   Ns   *anon*R!   R   (   R+   R   R   R   R7   R   (   R   t   aclR!   t   user(    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   getGrantListq   s    			"c         C@ s   i |  j  d 6|  j d 6S(   Nt   idt   nick(   R,   R-   (   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   getOwner}   s    c         C@ s(   x! |  j  D] } | j ƒ  r
 t Sq
 Wt S(   N(   R+   R   t   Truet   False(   R   R!   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR   €   s    c         C@ s(   x! |  j  D] } | j ƒ  r
 t Sq
 Wt S(   N(   R+   R   R@   RA   (   R   R!   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR   †   s    c         C@ s#   |  j  ƒ  s |  j t ƒ  ƒ n  d  S(   N(   R   t   appendGranteeR&   (   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   grantAnonReadŒ   s    c         C@ s/   g  |  j  D] } | j ƒ  s
 | ^ q
 |  _  d  S(   N(   R+   R   (   R   R9   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   revokeAnonRead   s    c         C@ s/   g  |  j  D] } | j ƒ  s
 | ^ q
 |  _  d  S(   N(   R+   R   (   R   R9   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   revokeAnonWrite“   s    c         C@ s   |  j  j | ƒ d  S(   N(   R+   R7   (   R   R!   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyRB   –   s    c         C@ st   | j  ƒ  } | j ƒ  } xU |  j D]J } | j j  ƒ  | k r" | j d k rP t S| j j ƒ  | k rl t Sq" q" Wt S(   NR   (   t   lowert   upperR+   R   R   R@   RA   (   R   R   R   R!   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   hasGrant™   s    c         C@ sú   |  j  | | ƒ r d  S| j ƒ  } d | k r7 d } n  d | k rV |  j | d ƒ n  t ƒ  } | | _ | | _ d | k r¤ | j j ƒ  | _ d | _ d | _ nE d | k rÅ d | _ d | _ n$ | j j ƒ  | _ d	 | _ d
 | _ |  j	 | ƒ d  S(   Nt   ALLR   t   @t   AmazonCustomerByEmailt   EmailAddresss    http://acs.amazonaws.com/groups/R'   R   t   CanonicalUsert   ID(
   RH   RG   t   revokeR   R   R   RF   R	   R
   RB   (   R   R   R   R!   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR8   ¦   s*    								c         C@ sð   | j  ƒ  } | j ƒ  } d | k r g  |  j D]E } | j j  ƒ  | k pj | j d  k	 oj | j j  ƒ  | k s. | ^ q. |  _ nm g  |  j D]Z } | j d  k	 r³ | j j  ƒ  | k sÈ | j j  ƒ  | k oÚ | j j ƒ  | k s‰ | ^ q‰ |  _ d  S(   NRI   (   RF   RG   R+   R   R   R   R   (   R   R   R   R9   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyRO   Å   s    [Ic         C@ sq   t  t j ƒ } d | j d <| j d ƒ } |  j | _ | j d ƒ } x$ |  j D] } | j | j	 ƒ  ƒ qP W| S(   Ns'   http://s3.amazonaws.com/doc/2006-03-01/t   xmlnss   .//Owner//IDs   .//AccessControlList(
   R   R)   R*   R6   R5   R,   R   R+   R7   R"   (   R   R1   t   ownerR:   R!   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   get_printable_treeÏ   s    c         C@ s   t  t j |  j ƒ  ƒ ƒ S(   N(   R   R   t   tostringRR   (   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   __unicode__Ù   s    c         C@ s6   t  r t j |  j ƒ  d d ƒSt j |  j ƒ  ƒ Sd  S(   Nt   encodingt   unicode(   t   PY3R   RS   RR   (   R   (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   __str__Ü   s    N(   R#   R$   R*   R   R   R.   R/   R<   R?   R   R   RC   RD   RE   RB   RH   R8   RO   RR   RT   RX   (    (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyR)   P   s$   													
	
	t   __main__s  <?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
    <ID>12345678901234567890</ID>
    <DisplayName>owner-nickname</DisplayName>
</Owner>
<AccessControlList>
    <Grant>
        <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
            <ID>12345678901234567890</ID>
            <DisplayName>owner-nickname</DisplayName>
        </Grantee>
        <Permission>FULL_CONTROL</Permission>
    </Grant>
    <Grant>
        <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
            <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
        </Grantee>
        <Permission>READ</Permission>
    </Grant>
</AccessControlList>
</AccessControlPolicy>
    s   Grants:(   i   i    (   t
   __future__R    R   t   syst	   BaseUtilsR   R   R   t   UtilsR   t   xml.etree.ElementTreet   etreet   ElementTreeR   t   ImportErrort   elementtree.ElementTreet   version_infoRW   t   objectR   R&   R(   R)   R#   R0   R:   t   printR<   RD   RC   (    (    (    sF   /oak/stanford/groups/akundaje/marinovg/programs/s3cmd-master/S3/ACL.pyt   <module>	   s*   '”

