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