summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-03-16 16:15:56 -0400
committerBrian Waldon <brian.waldon@rackspace.com>2011-03-16 16:15:56 -0400
commit77a48cdd8a22cc84ed67a6b3d1c3793dd93e44a8 (patch)
tree9cccad212259ce33abd6e2f1f06bb7faefd783cf /nova/api
parentf05e4d0cec29ed352c6afbe32ab5b12382769711 (diff)
expanding osapi flavors tests; rewriting flavors resource with view builders; adding 1.1 specific links to flavors resources
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/flavors.py48
-rw-r--r--nova/api/openstack/views/flavors.py45
2 files changed, 66 insertions, 27 deletions
diff --git a/nova/api/openstack/flavors.py b/nova/api/openstack/flavors.py
index c99b945fb..bc61e8d1a 100644
--- a/nova/api/openstack/flavors.py
+++ b/nova/api/openstack/flavors.py
@@ -15,16 +15,12 @@
# License for the specific language governing permissions and limitations
# under the License.
-from webob import exc
+import webob
from nova import db
-from nova import context
-from nova.api.openstack import faults
-from nova.api.openstack import common
-from nova.compute import instance_types
-from nova.api.openstack.views import flavors as flavors_views
+from nova import exception
from nova import wsgi
-import nova.api.openstack
+from nova.api.openstack.views import flavors as flavors_views
class Controller(wsgi.Controller):
@@ -37,29 +33,31 @@ class Controller(wsgi.Controller):
def index(self, req):
"""Return all flavors in brief."""
- return dict(flavors=[dict(id=flavor['id'], name=flavor['name'])
- for flavor in self.detail(req)['flavors']])
+ items = self._get_flavors(req, False)
+ return dict(flavors=items)
def detail(self, req):
"""Return all flavors in detail."""
- items = [self.show(req, id)['flavor'] for id in self._all_ids(req)]
+ items = self._get_flavors(req, True)
return dict(flavors=items)
+ def _get_flavors(self, req, is_detail):
+ """Helper function that returns a list of flavor dicts."""
+ ctxt = req.environ['nova.context']
+ flavors = db.api.instance_type_get_all(ctxt)
+ builder = flavors_views.get_view_builder(req)
+ items = [builder.build(flavor, is_detail=is_detail) \
+ for flavor in flavors.values()]
+ return items
+
def show(self, req, id):
"""Return data about the given flavor id."""
- ctxt = req.environ['nova.context']
- flavor = db.api.instance_type_get_by_flavor_id(ctxt, id)
- values = {
- "id": flavor["flavorid"],
- "name": flavor["name"],
- "ram": flavor["memory_mb"],
- "disk": flavor["local_gb"],
- }
+ try:
+ ctxt = req.environ['nova.context']
+ flavor = db.api.instance_type_get_by_flavor_id(ctxt, id)
+ except exception.NotFound:
+ return webob.exc.HTTPNotFound()
+
+ builder = flavors_views.get_view_builder(req)
+ values = builder.build(flavor, is_detail=True)
return dict(flavor=values)
-
- def _all_ids(self, req):
- """Return the list of all flavorids."""
- ctxt = req.environ['nova.context']
- inst_types = db.api.instance_type_get_all(ctxt)
- flavor_ids = [inst_types[i]['flavorid'] for i in inst_types.keys()]
- return sorted(flavor_ids)
diff --git a/nova/api/openstack/views/flavors.py b/nova/api/openstack/views/flavors.py
index dd2e75a7a..19ac8f114 100644
--- a/nova/api/openstack/views/flavors.py
+++ b/nova/api/openstack/views/flavors.py
@@ -35,14 +35,55 @@ class ViewBuilder(object):
def __init__(self):
pass
- def build(self, flavor_obj):
- raise NotImplementedError()
+ def build(self, flavor_obj, is_detail=False):
+ if is_detail:
+ flavor = self._build_detail(flavor_obj)
+ else:
+ flavor = self._build_simple(flavor_obj)
+
+ full_flavor = self._build_extra(flavor)
+
+ return full_flavor
+
+ def _build_simple(self, flavor_obj):
+ return {
+ "id": flavor_obj["flavorid"],
+ "name": flavor_obj["name"],
+ }
+
+ def _build_detail(self, flavor_obj):
+ simple = self._build_simple(flavor_obj)
+
+ detail = {
+ "ram": flavor_obj["memory_mb"],
+ "disk": flavor_obj["local_gb"],
+ }
+
+ detail.update(simple)
+
+ return detail
+
+ def _build_extra(self, flavor_obj):
+ return flavor_obj
class ViewBuilder_1_1(ViewBuilder):
def __init__(self, base_url):
self.base_url = base_url
+ def _build_extra(self, flavor_obj):
+ flavor_obj["links"] = self._build_links(flavor_obj)
+ return flavor_obj
+
+ def _build_links(self, flavor_obj):
+ links = [
+ {
+ "rel": "self",
+ "href": self.generate_href(flavor_obj["id"]),
+ },
+ ]
+ return links
+
def generate_href(self, flavor_id):
return "%s/flavors/%s" % (self.base_url, flavor_id)