o Qa @sddlmZmZddlZddlmZmZmZddlm Z z ddl m m Z Wney6ddlm Z YnwejdkZGdddeZGd d d eZGd d d eZGd ddeZedkrdZeeZedeeedeeedeeedSdS))absolute_importprint_functionN)getTreeFromXml encode_to_s3decode_from_s3) deunicodise)rc@sDeZdZdZdZddZddZddZd d Zd d Z d dZ dS)Granteez/http://acs.amazonaws.com/groups/global/AllUsersz.http://acs.amazonaws.com/groups/s3/LogDeliverycCs"d|_d|_d|_d|_d|_dSN)xsi_typetagname display_name permissionselfr(/usr/lib/python3/dist-packages/S3/ACL.py__init__s  zGrantee.__init__cCstd|j|j|jdS)Nz0Grantee("%(tag)s", "%(name)s", "%(permission)s"))rrr)reprrrrrrrr__repr__!s  zGrantee.__repr__cCs|jdko |jtjkS)NURI)rrr ALL_USERS_URIrrrr isAllUsers(zGrantee.isAllUserscC|o |jdkp |jdkS)NREAD FULL_CONTROLrrrrrr isAnonRead+zGrantee.isAnonReadcCr)NWRITErr rrrr isAnonWrite.r"zGrantee.isAnonWritecCsNtd}t|dd|jd}t||j}|j|_t|d}|j|_|S)NGrantr z)http://www.w3.org/2001/XMLSchema-instance)z xmlns:xsizxsi:type Permission)ETElement SubElementr rrtextr)relgranteerrrrr getElement1s  zGrantee.getElementN) __name__ __module__ __qualname__rLOG_DELIVERY_URIrrrr!r$r-rrrrr s r c@eZdZddZdS)GranteeAnonReadcCs(t|d|_d|_tj|_d|_dS)NGrouprr)r rr rrrrrrrrr>s  zGranteeAnonRead.__init__Nr.r/r0rrrrrr3= r3c@r2)GranteeLogDeliverycCs(t|d|_d|_tj|_||_dS)z= permission must be either READ_ACP or WRITE r4rN)r rr rr1rr)rrrrrrFs  zGranteeLogDelivery.__init__Nr5rrrrr7Er6r7c@seZdZdZd%ddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$ZdS)&ACLsjNcCs@|stj}g|_d|_d|_tt|}||||dSr ) r8 EMPTY_ACLgranteesowner_id owner_nickrr parseOwner parseGrants)rxmltreerrrrSs  z ACL.__init__cCs|d|_|d|_dS)N .//Owner//IDz.//Owner//DisplayName)findtextr;r<)rr@rrrr=_s zACL.parseOwnercCsx|dD]4}t}|d}|jd|_|dj|_|D]}|jdkr*|j|_q|j|_|j|_ q|j |qdS)Nz.//Grantz .//Granteez/{http://www.w3.org/2001/XMLSchema-instance}typer& DisplayName) findallr findattribr r*rrrrr:append)rr@grantr,gr+rrrr>cs     zACL.parseGrantscCsHg}|jD]}|jr|j}n |rd}n|j}|||jdq|S)Nz*anon*)r,r)r:rrrrGr)raclr,userrrr getGrantListqs zACL.getGrantListcCs|j|jdS)N)idnick)r;r<rrrrgetOwner}sz ACL.getOwnercC|jD] }|r dSqdSNTF)r:r!rr,rrrr! zACL.isAnonReadcCrPrQ)r:r$rRrrrr$rSzACL.isAnonWritecCs|s |tdSdSN)r! appendGranteer3rrrr grantAnonReadszACL.grantAnonReadcCdd|jD|_dS)NcSg|]}|s|qSr)r!.0rIrrr z&ACL.revokeAnonRead..r:rrrrrevokeAnonReadrzACL.revokeAnonReadcCrW)NcSrXr)r$rYrrrr[r\z'ACL.revokeAnonWrite..r]rrrrrevokeAnonWriterzACL.revokeAnonWritecCs|j|dSrT)r:rGrRrrrrUszACL.appendGranteecCsR|}|}|jD]}|j|kr&|jdkrdS|j|kr&dSq dS)NrTF)lowerupperr:rrrrrr,rrrhasGrants  z ACL.hasGrantcCs|||rdS|}d|krd}d|kr||dt}||_||_d|vr6|j|_d|_d|_nd|vrAd|_d|_n |j|_d |_d |_| |dS) NALLr@AmazonCustomerByEmail EmailAddressz http://acs.amazonaws.com/groups/r4r CanonicalUserID) rcrarevoker rrr`r rrUrbrrrrHs*    z ACL.grantcsNdkrfdd|jD|_dSfdd|jD|_dS)Nrdcs6g|]}|jks|jdur|jks|qSrT)rr`rrY)rrrr[s6zACL.revoke..csDg|]}|jdur|jks|jkr|jks|qSrT)rr`rrrarYrrrrr[s.)r`rar:)rrrrrkrrjs z ACL.revokecCsNttj}d|jd<|d}|j|_|d}|jD] }|| q|S)Nz'http://s3.amazonaws.com/doc/2006-03-01/xmlnsrAz.//AccessControlList) rr8r9rFrEr;r*r:rGr-)rr@ownerrJr,rrrget_printable_trees     zACL.get_printable_treecCstt|SrT)rr'tostringrnrrrr __unicode__szACL.__unicode__cCs$tr tj|ddSt|S)Nunicode)encoding)PY3r'rornrrrr__str__sz ACL.__str__rT)r.r/r0r9rr=r>rLrOr!r$rVr^r_rUrcrHrjrnrprtrrrrr8Ps&      r8__main__s 12345678901234567890 owner-nickname 12345678901234567890 owner-nickname FULL_CONTROL http://acs.amazonaws.com/groups/global/AllUsers READ zGrants:) __future__rrsys BaseUtilsrrrUtilsrxml.etree.ElementTreeetree ElementTreer' ImportErrorelementtree.ElementTree version_inforsobjectr r3r7r8r.r?rJprintrLr^rVrrrrs2   '