summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLorin Hochstein <lorin@isi.edu>2011-06-23 23:42:44 -0400
committerLorin Hochstein <lorin@isi.edu>2011-06-23 23:42:44 -0400
commit188dd9117318cc4f5ebe0be9d19b9737a43ce68b (patch)
treee685b4402c4af845ad80bfa572e3d140252c388d
parent7f578a0f657c076bf97c33dca15f1c78bd11b607 (diff)
Starting to transition instance type extra specs API to an extension API
-rw-r--r--nova/api/openstack/__init__.py5
-rw-r--r--nova/api/openstack/contrib/flavorextraspecs.py (renamed from nova/api/openstack/flavor_extra_specs.py)33
-rw-r--r--nova/tests/api/openstack/test_flavors_extra_specs.py20
3 files changed, 43 insertions, 15 deletions
diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py
index 857a5431b..859cac669 100644
--- a/nova/api/openstack/__init__.py
+++ b/nova/api/openstack/__init__.py
@@ -178,8 +178,3 @@ class APIRouterV11(APIRouter):
controller=server_metadata.create_resource(),
parent_resource=dict(member_name='server',
collection_name='servers'))
-
- mapper.resource("flavor_extra_specs", "extra",
- controller=flavor_extra_specs.create_resource(),
- parent_resource=dict(member_name='flavor',
- collection_name='flavors'))
diff --git a/nova/api/openstack/flavor_extra_specs.py b/nova/api/openstack/contrib/flavorextraspecs.py
index 6a6d2f7a1..24c5da7b2 100644
--- a/nova/api/openstack/flavor_extra_specs.py
+++ b/nova/api/openstack/contrib/flavorextraspecs.py
@@ -15,15 +15,18 @@
# License for the specific language governing permissions and limitations
# under the License.
+""" The instance type extra specs extension"""
+
from webob import exc
from nova import db
from nova import quota
+from nova.api.openstack import extensions
from nova.api.openstack import faults
from nova.api.openstack import wsgi
-class Controller(object):
+class FlavorExtraSpecsController(object):
""" The flavor extra specs API controller for the Openstack API """
def _get_extra_specs(self, context, flavor_id):
@@ -93,10 +96,28 @@ class Controller(object):
raise exc.HTTPBadRequest(explanation=error.message)
raise error
+class Flavorextraspecs(extensions.ExtensionDescriptor):
+ def get_name(self):
+ return "FlavorExtraSpecs"
+
+ def get_alias(self):
+ return "flavor-extra-specs"
+
+ def get_description(self):
+ return "Instance type (flavor) extra specs"
+
+ def get_namespace(self):
+ return \
+ "http://docs.openstack.org/ext/flavor-extra-specs/api/v1.1"
+
+ def get_updated(self):
+ return "2011-06-23T00:00:00+00:00"
+
+ def get_resources(self):
+ resources = []
-def create_resource():
- serializers = {
- 'application/xml': wsgi.XMLDictSerializer(xmlns=wsgi.XMLNS_V11),
- }
+ res = extensions.ResourceExtension('flavor-extra-specs',
+ FlavorExtraSpecsController())
+ resources.append(res)
- return wsgi.Resource(Controller(), serializers=serializers)
+ return resources
diff --git a/nova/tests/api/openstack/test_flavors_extra_specs.py b/nova/tests/api/openstack/test_flavors_extra_specs.py
index 14f6e7d43..1fe0884b6 100644
--- a/nova/tests/api/openstack/test_flavors_extra_specs.py
+++ b/nova/tests/api/openstack/test_flavors_extra_specs.py
@@ -19,12 +19,16 @@ import json
import stubout
import unittest
import webob
+import os.path
+
from nova import flags
from nova.api import openstack
+from nova.api.openstack import extensions
from nova.tests.api.openstack import fakes
import nova.wsgi
+FLAGS = flags.FLAGS
def return_create_flavor_extra_specs(context, flavor_id, extra_specs):
return stub_flavor_extra_specs()
@@ -60,6 +64,8 @@ class FlavorsExtraSpecsTest(unittest.TestCase):
def setUp(self):
super(FlavorsExtraSpecsTest, self).setUp()
+ FLAGS.osapi_extensions_path = os.path.join(os.path.dirname(__file__),
+ "extensions")
self.stubs = stubout.StubOutForTesting()
fakes.FakeAuthManager.auth_data = {}
fakes.FakeAuthDatabase.data = {}
@@ -73,13 +79,19 @@ class FlavorsExtraSpecsTest(unittest.TestCase):
def test_index(self):
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',
return_flavor_extra_specs)
- req = webob.Request.blank('/v1.1/flavors/1/extra')
- req.environ['api.version'] = '1.1'
- res = req.get_response(fakes.wsgi_app())
+ app = openstack.APIRouterV11()
+ ext_midware = extensions.ExtensionMiddleware(app)
+ #request = webob.Request.blank('/flavors-extra-specs/1')
+ request = webob.Request.blank('/flavors-extra-specs')
+ res = request.get_response(ext_midware)
+ print res
+ #req.environ['api.version'] = '1.1'
+ #res = req.get_response(fakes.wsgi_app())
self.assertEqual(200, res.status_int)
res_dict = json.loads(res.body)
self.assertEqual('application/json', res.headers['Content-Type'])
- self.assertEqual('value1', res_dict['extra']['key1'])
+ print res_dict
+ self.assertEqual('value1', res_dict['1']['key1'])
def test_index_no_data(self):
self.stubs.Set(nova.db.api, 'instance_type_extra_specs_get',