add updated attribute to list all versions, add ability to list individual versions
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
import routes
|
||||
|
||||
from reddwarf.common import wsgi
|
||||
from reddwarf.versions import VersionsController
|
||||
from reddwarf.flavor.service import FlavorController
|
||||
from reddwarf.instance.service import InstanceController
|
||||
|
||||
@@ -26,6 +27,11 @@ class API(wsgi.Router):
|
||||
super(API, self).__init__(mapper)
|
||||
self._instance_router(mapper)
|
||||
self._flavor_router(mapper)
|
||||
self._versions_router(mapper)
|
||||
|
||||
def _versions_router(self, mapper):
|
||||
versions_resource = VersionsController().create_resource()
|
||||
mapper.connect("/", controller=versions_resource, action="show")
|
||||
|
||||
def _instance_router(self, mapper):
|
||||
instance_resource = InstanceController().create_resource()
|
||||
|
||||
@@ -22,35 +22,61 @@ from xml.dom import minidom
|
||||
from reddwarf.common import wsgi
|
||||
|
||||
|
||||
VERSIONS = {
|
||||
"1.0": {
|
||||
"id": "v1.0",
|
||||
"status": "CURRENT",
|
||||
"updated": "2012-08-01T00:00:00Z",
|
||||
"links": [],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
class VersionsController(wsgi.Controller):
|
||||
|
||||
def index(self, request):
|
||||
"""Respond to a request for all OpenStack API versions."""
|
||||
versions = [Version("v1.0", "CURRENT", request.application_url)]
|
||||
"""Respond to a request for API versions."""
|
||||
versions = []
|
||||
for key, data in VERSIONS.items():
|
||||
v = BaseVersion(data["id"], data["status"],
|
||||
request.application_url, data["updated"])
|
||||
versions.append(v)
|
||||
return wsgi.Result(VersionsDataView(versions))
|
||||
|
||||
def show(self, request):
|
||||
"""Respond to a request for a specific API version."""
|
||||
data = VERSIONS[request.url_version]
|
||||
v = Version(data["id"], data["status"],
|
||||
request.application_url, data["updated"])
|
||||
return wsgi.Result(VersionDataView(v))
|
||||
|
||||
class Version(object):
|
||||
|
||||
def __init__(self, id, status, base_url):
|
||||
class BaseVersion(object):
|
||||
|
||||
def __init__(self, id, status, base_url, updated):
|
||||
self.id = id
|
||||
self.status = status
|
||||
self.base_url = base_url
|
||||
self.updated = updated
|
||||
|
||||
def data(self):
|
||||
return dict(id=self.id,
|
||||
status=self.status,
|
||||
links=[dict(rel="self",
|
||||
href=self.url())])
|
||||
updated=self.updated,
|
||||
links=[dict(rel="self", href=self.url())])
|
||||
|
||||
def url(self):
|
||||
return os.path.join(self.base_url, self.id)
|
||||
url = os.path.join(self.base_url, self.id)
|
||||
if not url.endswith("/"):
|
||||
return url + "/"
|
||||
return url
|
||||
|
||||
def to_xml(self):
|
||||
doc = minidom.Document()
|
||||
version_elem = doc.createElement("version")
|
||||
version_elem.setAttribute("id", self.id)
|
||||
version_elem.setAttribute("status", self.status)
|
||||
version_elem.setAttribute("updated", self.updated)
|
||||
links_elem = doc.createElement("links")
|
||||
link_elem = doc.createElement("link")
|
||||
link_elem.setAttribute("href", self.url())
|
||||
@@ -60,6 +86,26 @@ class Version(object):
|
||||
return version_elem
|
||||
|
||||
|
||||
class Version(BaseVersion):
|
||||
|
||||
def url(self):
|
||||
if not self.base_url.endswith("/"):
|
||||
return self.base_url + "/"
|
||||
return self.base_url
|
||||
|
||||
|
||||
class VersionDataView(object):
|
||||
|
||||
def __init__(self, version):
|
||||
self.version = version
|
||||
|
||||
def data_for_json(self):
|
||||
return {'version': self.version.data()}
|
||||
|
||||
def data_for_xml(self):
|
||||
return {'version': self.version}
|
||||
|
||||
|
||||
class VersionsDataView(object):
|
||||
|
||||
def __init__(self, versions):
|
||||
@@ -75,8 +121,8 @@ class VersionsDataView(object):
|
||||
class VersionsAPI(wsgi.Router):
|
||||
def __init__(self):
|
||||
mapper = routes.Mapper()
|
||||
mapper.connect("/", controller=VersionsController().create_resource(),
|
||||
action="index")
|
||||
versions_resource = VersionsController().create_resource()
|
||||
mapper.connect("/", controller=versions_resource, action="index")
|
||||
super(VersionsAPI, self).__init__(mapper)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user