Revision b6bc4afa

b/snf-cyclades-app/synnefo/api/floating_ips.py
92 92
    log.debug("list_floating_ips")
93 93

  
94 94
    userid = request.user_uniq
95
    floating_ips = FloatingIP.objects.filter(userid=userid, deleted=False)\
96
                                     .order_by("id")
95
    floating_ips = FloatingIP.objects.filter(userid=userid).order_by("id")
96
    floating_ips = utils.filter_modified_since(request, objects=floating_ips)
97 97

  
98 98
    floating_ips = map(ip_to_dict, floating_ips)
99 99

  
......
231 231
@api.api_method(http_method='GET', user_required=True, logger=log,
232 232
                serializations=["json"])
233 233
def list_floating_ip_pools(request):
234
    networks = Network.objects.filter(public=True, deleted=False,
235
                                      floating_ip_pool=True)
234
    networks = Network.objects.filter(public=True, floating_ip_pool=True)
235
    networks = utils.filter_modified_since(request, objects=networks)
236 236
    pools = [{"name": str(net.id)} for net in networks]
237 237
    request.serialization = "json"
238 238
    data = json.dumps({"floating_ip_pools": pools})
b/snf-cyclades-app/synnefo/api/networks.py
120 120
    #                       overLimit (413)
121 121

  
122 122
    log.debug('list_networks detail=%s', detail)
123
    since = utils.isoparse(request.GET.get('changes-since'))
124 123
    user_networks = Network.objects.filter(Q(userid=request.user_uniq) |
125 124
                                           Q(public=True))
126

  
127
    if since:
128
        user_networks = user_networks.filter(updated__gte=since)
129
        if not user_networks:
130
            return HttpResponse(status=304)
131
    else:
132
        user_networks = user_networks.filter(deleted=False)
125
    user_networks = utils.filter_modified_since(request, objects=user_networks)
133 126

  
134 127
    networks_dict = [network_to_dict(network, request.user_uniq, detail)
135 128
                     for network in user_networks.order_by('id')]
b/snf-cyclades-app/synnefo/api/servers.py
242 242
    log.debug('list_servers detail=%s', detail)
243 243
    user_vms = VirtualMachine.objects.filter(userid=request.user_uniq)
244 244

  
245
    since = utils.isoparse(request.GET.get('changes-since'))
246

  
247
    if since:
248
        user_vms = user_vms.filter(updated__gte=since)
249
        if not user_vms:
250
            return HttpResponse(status=304)
251
    else:
252
        user_vms = user_vms.filter(deleted=False)
245
    user_vms = utils.filter_modified_since(request, objects=user_vms)
253 246

  
254 247
    servers_dict = [vm_to_dict(server, detail)
255 248
                    for server in user_vms.order_by('id')]
b/snf-django-lib/snf_django/lib/api/utils.py
34 34
import datetime
35 35
from dateutil.parser import parse as date_parse
36 36
from django.utils import simplejson as json
37
from django.http import HttpResponse
37 38

  
38 39
from django.conf import settings
39 40
from snf_django.lib.api import faults
......
115 116
        prefix += '/'
116 117
    pattern = '^' + prefix
117 118
    return pattern
119

  
120

  
121
def filter_modified_since(request, objects):
122
    """Filter DB objects based on 'changes-since' request parameter.
123

  
124
    Parse request for 'changes-since' parameter and get only the DB objects
125
    that have been updated after that time. Otherwise, return the non-deleted
126
    objects.
127

  
128
    """
129
    since = isoparse(request.GET.get("changes-since"))
130
    if since:
131
        modified_objs = objects.filter(updated__gte=since)
132
        if not modified_objs:
133
            return HttpResponse(status=304)
134
        return modified_objs
135
    else:
136
        return objects.filter(deleted=False)

Also available in: Unified diff