Revision bad9404c snf-cyclades-app/synnefo/management/common.py
b/snf-cyclades-app/synnefo/management/common.py | ||
---|---|---|
41 | 41 |
from synnefo.db.models import Backend, VirtualMachine, Network, Flavor |
42 | 42 |
from synnefo.api.util import get_image as backend_get_image |
43 | 43 |
from synnefo.api.faults import ItemNotFound |
44 |
from django.core.exceptions import FieldError |
|
45 |
|
|
44 | 46 |
|
45 | 47 |
from synnefo.api.util import validate_network_size |
46 | 48 |
from synnefo.settings import MAX_CIDR_BLOCK |
... | ... | |
158 | 160 |
raise CommandError("Flavor with ID %s not found in DB." |
159 | 161 |
" Use snf-manage flavor-list to find out" |
160 | 162 |
" available flavor IDs." % flavor_id) |
163 |
|
|
164 |
|
|
165 |
def filter_results(objects, filter_by): |
|
166 |
filter_list = filter_by.split(",") |
|
167 |
filter_dict = {} |
|
168 |
exclude_dict = {} |
|
169 |
|
|
170 |
def map_field_type(query): |
|
171 |
def fix_bool(val): |
|
172 |
if val.lower() in ("yes", "true", "t"): |
|
173 |
return True |
|
174 |
if val.lower() in ("no", "false", "f"): |
|
175 |
return False |
|
176 |
return val |
|
177 |
|
|
178 |
if "!=" in query: |
|
179 |
key, val = query.split("!=") |
|
180 |
exclude_dict[key] = fix_bool(val) |
|
181 |
return |
|
182 |
OP_MAP = { |
|
183 |
">=": "__gte", |
|
184 |
"=>": "__gte", |
|
185 |
">": "__gt", |
|
186 |
"<=": "__lte", |
|
187 |
"=<": "__lte", |
|
188 |
"<": "__lt", |
|
189 |
"=": "" |
|
190 |
} |
|
191 |
for op, new_op in OP_MAP.items(): |
|
192 |
if op in query: |
|
193 |
key, val = query.split(op) |
|
194 |
filter_dict[key + new_op] = fix_bool(val) |
|
195 |
return |
|
196 |
|
|
197 |
map(lambda x: map_field_type(x), filter_list) |
|
198 |
|
|
199 |
try: |
|
200 |
objects = objects.filter(**filter_dict) |
|
201 |
return objects.exclude(**exclude_dict) |
|
202 |
except FieldError as e: |
|
203 |
raise CommandError(e) |
Also available in: Unified diff