_serialization_metadata = {
"application/xml": {
"attributes": {
- "port": ["id", "state"], },
+ "port": ["id", "state"],
+ "attachment": ["id"]
+ },
"plurals": {"ports": "port"}
},
}
self._resource_name = 'port'
super(Controller, self).__init__(plugin)
- def index(self, request, tenant_id, network_id):
- """ Returns a list of port ids for a given network """
- return self._items(request, tenant_id, network_id, is_detail=False)
-
- def _items(self, request, tenant_id, network_id, is_detail):
- """ Returns a list of networks. """
+ def _items(self, request, tenant_id, network_id,
+ port_details=False):
+ """ Returns a list of ports. """
try:
ports = self._plugin.get_all_ports(tenant_id, network_id)
builder = ports_view.get_view_builder(request)
- result = [builder.build(port, is_detail)['port']
+ result = [builder.build(port, port_details)['port']
for port in ports]
return dict(ports=result)
except exception.NetworkNotFound as e:
return faults.Fault(faults.NetworkNotFound(e))
+
+ def _item(self, request, tenant_id, network_id, port_id,
+ att_details=False):
+ """ Returns a specific port. """
+ port = self._plugin.get_port_details(
+ tenant_id, network_id, port_id)
+ builder = ports_view.get_view_builder(request)
+ result = builder.build(port, port_details=True,
+ att_details=att_details)['port']
+ return dict(port=result)
+
+ def index(self, request, tenant_id, network_id):
+ """ Returns a list of port ids for a given network """
+ return self._items(request, tenant_id, network_id, port_details=False)
def show(self, request, tenant_id, network_id, id):
""" Returns port details for given port and network """
try:
- port = self._plugin.get_port_details(
- tenant_id, network_id, id)
- builder = ports_view.get_view_builder(request)
- #build response with details
- result = builder.build(port, True)['port']
- return dict(port=result)
+ return self._item(request, tenant_id, network_id, id)
except exception.NetworkNotFound as e:
return faults.Fault(faults.NetworkNotFound(e))
except exception.PortNotFound as e:
return faults.Fault(faults.PortNotFound(e))
+ def detail(self, request, **kwargs):
+ tenant_id = kwargs.get('tenant_id')
+ network_id = kwargs.get('network_id')
+ port_id = kwargs.get('id')
+ if port_id:
+ # show details for a given network
+ return self._item(request, tenant_id,
+ network_id, port_id, att_details=True)
+ else:
+ # show details for all port
+ return self._items(request, tenant_id,
+ network_id, port_details=True)
+
def create(self, request, tenant_id, network_id):
""" Creates a new port for a given network """
#look for port state in request
"""
self.base_url = base_url
- def build(self, port_data, is_detail=False):
+ def build(self, port_data, port_details=False, att_details=False):
"""Generic method used to generate a port entity."""
- if is_detail:
- port = self._build_detail(port_data)
- else:
- port = self._build_simple(port_data)
+ port = dict(port=dict(id=port_data['port-id']))
+ if port_details:
+ port['port']['state'] = port_data['port-state']
+ if att_details and port_data['attachment-id']:
+ port['attachment'] = dict(id=port_data['attachment-id'])
return port
-
- def _build_simple(self, port_data):
- """Return a simple model of a port."""
- return dict(port=dict(id=port_data['port-id']))
-
- def _build_detail(self, port_data):
- """Return a simple model of a port (with its state)."""
- return dict(port=dict(id=port_data['port-id'],
- state=port_data['port-state']))
Based on the query extension then the Accept header.
"""
+ # First lookup http request
parts = self.path.rsplit('.', 1)
LOG.debug("Request parts:%s", parts)
if len(parts) > 1:
format = parts[1]
if format in ['json', 'xml']:
return 'application/{0}'.format(parts[1])
-
+
+ #Then look up content header
+ type_from_header = self.get_content_type()
+ if type_from_header:
+ return type_from_header
ctypes = ['application/json', 'application/xml']
+
+ #Finally search in Accept-* headers
bm = self.accept.best_match(ctypes)
return bm or 'application/json'
if type in allowed_types:
return type
LOG.debug(_("Wrong Content-Type: %s") % type)
- raise webob.exc.HTTPBadRequest("Invalid content type")
+ return None
class Application(object):