summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNaveed Massjouni <naveedm9@gmail.com>2011-09-04 05:39:21 -0400
committerNaveed Massjouni <naveedm9@gmail.com>2011-09-04 05:39:21 -0400
commit9b35957eef001ae1c3329e9197984d3aca0da787 (patch)
treefa7ed9b680d6f44e4443be25018a86478bf2453f
parentc5ad2b155a2ad7d7aefea316362cc354d0cf4cf3 (diff)
Fixing xml serialization of limits resource.
-rw-r--r--nova/api/openstack/limits.py24
-rw-r--r--nova/tests/api/openstack/test_limits.py34
2 files changed, 29 insertions, 29 deletions
diff --git a/nova/api/openstack/limits.py b/nova/api/openstack/limits.py
index 2896ac396..f6df94eea 100644
--- a/nova/api/openstack/limits.py
+++ b/nova/api/openstack/limits.py
@@ -87,25 +87,25 @@ class LimitsXMLSerializer(wsgi.XMLDictSerializer):
def __init__(self):
pass
- def _create_rates_node(self, rates_dict):
+ def _create_rates_node(self, rates):
rates_elem = etree.Element('rates', nsmap=self.NSMAP)
- for rate in rates_dict.items():
+ for rate in rates:
rate_node = etree.SubElement(rates_elem, 'rate')
rate_node.set('uri', rate['uri'])
rate_node.set('regex', rate['regex'])
- for limit in rate['limits']:
+ for limit in rate['limit']:
limit_elem = etree.SubElement(rate_node, 'limit')
- limit_elem.set('value', str(rate['value']))
- limit_elem.set('verb', str(rate['verb']))
- limit_elem.set('remaining', str(rate['remaining']))
- limit_elem.set('unit', str(rate['unit']))
- limit_elem.set('next-available', str(rate['next-available']))
+ limit_elem.set('value', str(limit['value']))
+ limit_elem.set('verb', str(limit['verb']))
+ limit_elem.set('remaining', str(limit['remaining']))
+ limit_elem.set('unit', str(limit['unit']))
+ limit_elem.set('next-available', str(limit['next-available']))
return rates_elem
def _create_absolute_node(self, absolute_dict):
absolute_elem = etree.Element('absolute', nsmap=self.NSMAP)
for key, value in absolute_dict.items():
- limit_elem = etree.SubElement(rate_node, 'limit')
+ limit_elem = etree.SubElement(absolute_elem, 'limit')
limit_elem.set('name', str(key))
limit_elem.set('value', str(value))
return absolute_elem
@@ -114,16 +114,16 @@ class LimitsXMLSerializer(wsgi.XMLDictSerializer):
"""Populate a limits xml element from a dict."""
rates_elem = self._create_rates_node(
- limits_dict.get('rates', {}))
+ limits_dict.get('rate', []))
limits_elem.append(rates_elem)
absolutes_elem = self._create_absolute_node(
- limits_dict.get('absolutes', {}))
+ limits_dict.get('absolute', {}))
limits_elem.append(absolutes_elem)
def index(self, limits_dict):
limits = etree.Element('limits', nsmap=self.NSMAP)
- self._populate_limits(limits, limits_dict)
+ self._populate_limits(limits, limits_dict['limits'])
return self._to_xml(limits)
diff --git a/nova/tests/api/openstack/test_limits.py b/nova/tests/api/openstack/test_limits.py
index f71d9c454..3db57ee86 100644
--- a/nova/tests/api/openstack/test_limits.py
+++ b/nova/tests/api/openstack/test_limits.py
@@ -41,8 +41,10 @@ TEST_LIMITS = [
limits.Limit("PUT", "*", "", 10, limits.PER_MINUTE),
limits.Limit("PUT", "/servers", "^/servers", 5, limits.PER_MINUTE),
]
-NS = "{http://docs.openstack.org/compute/api/v1.1}"
-ATOMNS = "{http://www.w3.org/2005/Atom}"
+NS = {
+ 'atom': 'http://www.w3.org/2005/Atom',
+ 'ns': 'http://docs.openstack.org/compute/api/v1.1'
+}
class BaseLimitTestSuite(unittest.TestCase):
@@ -998,7 +1000,8 @@ class LimitsXMLSerializationTest(test.TestCase):
def test_index(self):
serializer = limits.LimitsXMLSerializer()
- fixture = {"limits": {
+ fixture = {
+ "limits": {
"rate": [{
"uri": "*",
"regex": ".*",
@@ -1027,28 +1030,27 @@ class LimitsXMLSerializationTest(test.TestCase):
xmlutil.validate_schema(root, 'limits')
#verify absolute limits
- absolute = root.find('{0}absolute'.format(NS))
- absolutes = absolute.findall('limit'.format(NS))
+ absolutes = root.xpath('ns:absolute/ns:limit', namespaces=NS)
+ self.assertEqual(len(absolutes), 4)
for limit in absolutes:
name = limit.get('name')
value = limit.get('value')
self.assertEqual(value, str(fixture['limits']['absolute'][name]))
#verify rate limits
- rate_root = root.find('{0}rates'.format(NS))
- rates = rate_root.findall('{0}rate'.format(NS))
- for i in range(len(rates)):
- rate = rates[i]
+ rates = root.xpath('ns:rates/ns:rate', namespaces=NS)
+ self.assertEqual(len(rates), 2)
+ for i, rate in enumerate(rates):
for key in ['uri', 'regex']:
self.assertEqual(rate.get(key),
str(fixture['limits']['rate'][i][key]))
- rate_limits = rate.findall('{0}limit'.format(NS))
- for z in range(len(rate_limits)):
- limit = rate_limits[z]
+ rate_limits = rate.xpath('ns:limit', namespaces=NS)
+ self.assertEqual(len(rate_limits), 1)
+ for j, limit in enumerate(rate_limits):
for key in ['verb', 'value', 'remaining', 'unit',
'next-available']:
self.assertEqual(limit.get(key),
- str(fixture['limits']['rate'][i]['limit'][z][key]))
+ str(fixture['limits']['rate'][i]['limit'][j][key]))
def test_index_no_limits(self):
serializer = limits.LimitsXMLSerializer()
@@ -1063,11 +1065,9 @@ class LimitsXMLSerializationTest(test.TestCase):
xmlutil.validate_schema(root, 'limits')
#verify absolute limits
- absolute = root.find('{0}absolute'.format(NS))
- absolutes = absolute.findall('limit'.format(NS))
+ absolutes = root.xpath('ns:absolute/ns:limit', namespaces=NS)
self.assertEqual(len(absolutes), 0)
#verify rate limits
- rate_root = root.find('{0}rates'.format(NS))
- rates = rate_root.findall('{0}rate'.format(NS))
+ rates = root.xpath('ns:rates/ns:rate', namespaces=NS)
self.assertEqual(len(rates), 0)