200
200
if key in fields))
203
def _get_collection(self, context, model, dict_func, filters=None,
205
collection = self._model_query(context, model)
203
def _apply_filters_to_query(self, query, model, filters):
207
205
for key, value in filters.iteritems():
208
206
column = getattr(model, key, None)
210
collection = collection.filter(column.in_(value))
208
query = query.filter(column.in_(value))
211
def _get_collection(self, context, model, dict_func, filters=None,
213
collection = self._model_query(context, model)
214
collection = self._apply_filters_to_query(collection, model, filters)
211
215
return [dict_func(c, fields) for c in collection.all()]
1236
1240
return self._make_port_dict(port, fields)
1238
1242
def get_ports(self, context, filters=None, fields=None):
1239
fixed_ips = filters.pop('fixed_ips', []) if filters else []
1240
ports = self._get_collection(context, models_v2.Port,
1241
self._make_port_dict,
1242
filters=filters, fields=fields)
1244
if ports and fixed_ips:
1247
if port['fixed_ips']:
1248
ips = port['fixed_ips']
1249
for fixed in fixed_ips:
1251
# Convert to dictionary (deserialize)
1254
if 'ip_address' in fixed and 'subnet_id' in fixed:
1255
if (ip['ip_address'] == fixed['ip_address'] and
1256
ip['subnet_id'] == fixed['subnet_id']):
1258
elif 'ip_address' in fixed:
1259
if ip['ip_address'] == fixed['ip_address']:
1261
elif 'subnet_id' in fixed:
1262
if ip['subnet_id'] == fixed['subnet_id']:
1265
filtered_ports.append(port)
1269
return filtered_ports
1243
Port = models_v2.Port
1244
IPAllocation = models_v2.IPAllocation
1249
query = self._model_query(context, Port)
1251
fixed_ips = filters.pop('fixed_ips', {})
1252
ip_addresses = fixed_ips.get('ip_address')
1253
subnet_ids = fixed_ips.get('subnet_id')
1254
if ip_addresses or subnet_ids:
1255
query = query.join(Port.fixed_ips)
1257
query = query.filter(IPAllocation.ip_address.in_(ip_addresses))
1259
query = query.filter(IPAllocation.subnet_id.in_(subnet_ids))
1261
query = self._apply_filters_to_query(query, Port, filters)
1262
return [self._make_port_dict(c, fields) for c in query.all()]