## Amazon S3 - Access Control List representation ## Author: Michal Ludvig ## http://www.logix.cz/michal ## License: GPL Version 2 from Utils import * try: import xml.etree.ElementTree as ET except ImportError: import elementtree.ElementTree as ET class ACL(object): EMPTY_ACL = """ """ GRANT_PUBLIC_READ = """ http://acs.amazonaws.com/groups/global/AllUsers READ """ def __init__(self, xml = None): if not xml: xml = ACL.EMPTY_ACL self.tree = getTreeFromXml(xml) def getGrants(self): acl = {} for grant in self.tree.findall(".//Grant"): grantee = grant.find(".//Grantee") grantee = dict([(tag.tag, tag.text) for tag in grant.find(".//Grantee")]) if grantee.has_key('DisplayName'): user = grantee['DisplayName'] elif grantee.has_key('URI'): user = grantee['URI'] if user == 'http://acs.amazonaws.com/groups/global/AllUsers': user = "*anon*" else: user = grantee[grantee.keys()[0]] acl[user] = grant.find('Permission').text return acl if __name__ == "__main__": xml = """ 12345678901234567890 owner-nickname 12345678901234567890 owner-nickname FULL_CONTROL http://acs.amazonaws.com/groups/global/AllUsers READ """ acl = ACL(xml) print acl.getGrants()