Skip to content
This repository has been archived by the owner on May 10, 2024. It is now read-only.

Commit

Permalink
Merge pull request #2342 from tryggvib/develop
Browse files Browse the repository at this point in the history
Add namespace to AccessControlPolicy xml representation. Fixes #2342.
  • Loading branch information
danielgtaylor committed Jul 1, 2014
2 parents 4d67e19 + dec2ff9 commit ce07446
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 1 deletion.
9 changes: 8 additions & 1 deletion boto/s3/acl.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class Policy(object):

def __init__(self, parent=None):
self.parent = parent
self.namespace = None
self.acl = None

def __repr__(self):
Expand All @@ -50,6 +51,9 @@ def __repr__(self):
return "<Policy: %s>" % ", ".join(grants)

def startElement(self, name, attrs, connection):
if name == 'AccessControlPolicy':
self.namespace = attrs.get('xmlns', None)
return None
if name == 'Owner':
self.owner = User(self)
return self.owner
Expand All @@ -68,7 +72,10 @@ def endElement(self, name, value, connection):
setattr(self, name, value)

def to_xml(self):
s = '<AccessControlPolicy>'
if self.namespace is not None:
s = '<AccessControlPolicy xmlns="{0}">'.format(self.namespace)
else:
s = '<AccessControlPolicy>'
s += self.owner.to_xml()
s += self.acl.to_xml()
s += '</AccessControlPolicy>'
Expand Down
32 changes: 32 additions & 0 deletions tests/unit/s3/test_bucket.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from mock import patch
import xml.dom.minidom

from tests.unit import unittest
from tests.unit import AWSMockServiceTestCase
Expand Down Expand Up @@ -195,3 +196,34 @@ def test_bucket_get_key_no_validate(self, mock_gki, mock_gak):
version_id='something',
validate=False
)

def acl_policy(self):
return """<?xml version="1.0" encoding="UTF-8"?>
<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>owner_id</ID>
<DisplayName>owner_display_name</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="CanonicalUser">
<ID>grantee_id</ID>
<DisplayName>grantee_display_name</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>"""

def test_bucket_acl_policy_namespace(self):
self.set_http_response(status_code=200)
bucket = self.service_connection.get_bucket('mybucket')

self.set_http_response(status_code=200, body=self.acl_policy())
policy = bucket.get_acl()

xml_policy = policy.to_xml()
document = xml.dom.minidom.parseString(xml_policy)
namespace = document.documentElement.namespaceURI
self.assertEqual(namespace, 'http://s3.amazonaws.com/doc/2006-03-01/')

0 comments on commit ce07446

Please sign in to comment.