]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Adds API parameters to quantum.api.extension.ResourceExtension
authorZhongyue Luo <zhongyue.nah@intel.com>
Fri, 25 Jan 2013 08:48:21 +0000 (16:48 +0800)
committerZhongyue Luo <zhongyue.nah@intel.com>
Mon, 11 Feb 2013 04:26:53 +0000 (13:26 +0900)
Part of blueprint quantum-api-wadl

Fixes bug #1104882

Change-Id: I0d30864d3176ab001b10948f1deb37b3c062987c

quantum/api/extensions.py
quantum/extensions/l3.py
quantum/extensions/loadbalancer.py
quantum/extensions/securitygroup.py
quantum/extensions/servicetype.py
quantum/plugins/nec/extensions/packetfilter.py
quantum/tests/unit/test_extensions.py

index 5062ee15e676ac0d4dd6c6d07071065581a69a73..d321a8668471153befbabd2a5267cc4cd534aa11 100644 (file)
@@ -590,13 +590,14 @@ class ResourceExtension(object):
     """Add top level resources to the OpenStack API in Quantum."""
 
     def __init__(self, collection, controller, parent=None, path_prefix="",
-                 collection_actions={}, member_actions={}):
+                 collection_actions={}, member_actions={}, attr_map={}):
         self.collection = collection
         self.controller = controller
         self.parent = parent
         self.collection_actions = collection_actions
         self.member_actions = member_actions
         self.path_prefix = path_prefix
+        self.attr_map = attr_map
 
 
 # Returns the extention paths from a config entry and the __path__
index 5499c7a602efd82e92a33f2ac14a743c88d5752c..e3a1263d2551a4594e823e551a0f4d64e28d39eb 100644 (file)
@@ -207,7 +207,8 @@ class L3(extensions.ExtensionDescriptor):
 
             ex = extensions.ResourceExtension(collection_name,
                                               controller,
-                                              member_actions=member_actions)
+                                              member_actions=member_actions,
+                                              attr_map=params)
             exts.append(ex)
 
         return exts
index df423233ce91e16d96516c3bceaafd2437e1ee31..7484ba5084799a784cb958245030f5d3c15d3ee0 100644 (file)
@@ -281,7 +281,8 @@ class Loadbalancer(extensions.ExtensionDescriptor):
                 collection_name,
                 controller,
                 path_prefix=constants.COMMON_PREFIXES[constants.LOADBALANCER],
-                member_actions=member_actions)
+                member_actions=member_actions,
+                attr_map=params)
             resources.append(resource)
 
         for collection_name in SUB_RESOURCE_ATTRIBUTE_MAP:
@@ -300,7 +301,8 @@ class Loadbalancer(extensions.ExtensionDescriptor):
             resource = extensions.ResourceExtension(
                 collection_name,
                 controller, parent,
-                path_prefix=constants.COMMON_PREFIXES[constants.LOADBALANCER])
+                path_prefix=constants.COMMON_PREFIXES[constants.LOADBALANCER],
+                attr_map=params)
             resources.append(resource)
 
         return resources
index 756c0753c2684a13379848161e5b96c4c37f9308..cd3ee9c18ca0738abac6a6b05668c9ace1262918 100644 (file)
@@ -302,7 +302,8 @@ class Securitygroup(extensions.ExtensionDescriptor):
                                               plugin, params, allow_bulk=True)
 
             ex = extensions.ResourceExtension(collection_name,
-                                              controller)
+                                              controller,
+                                              attr_map=params)
             exts.append(ex)
 
         return exts
index d4a987cd4e756f2817c7e21e1e9407dfbd14d99c..58fae25f609c87c6e13a3ae911d61f49d0c6f14c 100644 (file)
@@ -188,9 +188,12 @@ class Servicetype(extensions.ExtensionDescriptor):
                       key in RESOURCE_ATTRIBUTE_MAP.keys()]
         my_plurals.append(('service_definitions', 'service_definition'))
         attributes.PLURALS.update(dict(my_plurals))
+        attr_map = RESOURCE_ATTRIBUTE_MAP[COLLECTION_NAME]
         controller = base.create_resource(
             COLLECTION_NAME,
             RESOURCE_NAME,
             servicetype_db.ServiceTypeManager.get_instance(),
-            RESOURCE_ATTRIBUTE_MAP[COLLECTION_NAME])
-        return [extensions.ResourceExtension(COLLECTION_NAME, controller)]
+            attr_map)
+        return [extensions.ResourceExtension(COLLECTION_NAME,
+                                             controller,
+                                             attr_map=attr_map)]
index e885535ee4dad66d691b6ac64a74a9332cd59ff3..cb510374c5225040e5e79deab1a097b4c02373c8 100644 (file)
@@ -127,4 +127,6 @@ class Packetfilter(extensions.ExtensionDescriptor):
                                             quota._count_resource,
                                             'quota_packet_filter')
         quota.QUOTAS.register_resource(qresource)
-        return [extensions.ResourceExtension('packet_filters', resource)]
+        return [extensions.ResourceExtension('packet_filters',
+                                             resource,
+                                             attr_map=PACKET_FILTER_ATTR_MAP)]
index e287ab1da0029f427bdcb8eea69776e55a62c0b7..c5d50e9d38d70cd321df37cb698bc4251a84ab10 100644 (file)
@@ -277,6 +277,29 @@ class ResourceExtensionTest(unittest.TestCase):
         self.assertEqual(200, response.status_int)
         self.assertEqual(jsonutils.loads(response.body)['collection'], "value")
 
+    def test_resource_extension_with_custom_member_action_and_attr_map(self):
+        controller = self.ResourceExtensionController()
+        member = {'custom_member_action': "GET"}
+        params = {
+            'tweedles': {
+                'id': {'allow_post': False, 'allow_put': False,
+                       'validate': {'type:uuid': None},
+                       'is_visible': True},
+                'name': {'allow_post': True, 'allow_put': True,
+                         'validate': {'type:string': None},
+                         'default': '', 'is_visible': True},
+            }
+        }
+        res_ext = extensions.ResourceExtension('tweedles', controller,
+                                               member_actions=member,
+                                               attr_map=params)
+        test_app = _setup_extensions_test_app(SimpleExtensionManager(res_ext))
+
+        response = test_app.get("/tweedles/some_id/custom_member_action")
+        self.assertEqual(200, response.status_int)
+        self.assertEqual(jsonutils.loads(response.body)['member_action'],
+                         "value")
+
     def test_returns_404_for_non_existent_extension(self):
         test_app = _setup_extensions_test_app(SimpleExtensionManager(None))