11import io
2+ import json
23import os
34import logging
45import datetime
56import math
7+ import time
68
79import numpy as np
810import zipstream
1214from django .conf import settings
1315from django .db .models import F
1416from rest_framework .decorators import permission_classes , api_view
17+ from rest_framework .exceptions import ParseError
1518from rest_framework .permissions import IsAdminUser , IsAuthenticated
1619
1720from pyobs_archive .api .models import Frame
@@ -147,8 +150,15 @@ def filter_frames(data, request):
147150@permission_classes ([IsAuthenticated ])
148151def frames_view (request ):
149152 # get offset and limit
150- offset = request .GET .get ('offset' , default = None )
151- limit = request .GET .get ('limit' , default = None )
153+ try :
154+ offset = int (request .GET .get ('offset' , default = 0 ))
155+ limit = int (request .GET .get ('limit' , default = 1000 ))
156+ except ValueError :
157+ raise ParseError ('Invalid values for offset/limit.' )
158+
159+ # limit to 1000
160+ limit = max (0 , min (limit , 1000 ))
161+ offset = max (0 , offset )
152162
153163 # sort
154164 sort = request .GET .get ('sort' , default = 'DATE_OBS' )
@@ -162,14 +172,10 @@ def frames_view(request):
162172 data = filter_frames (data , request )
163173
164174 # get results
165- if offset is None or limit is None :
166- results = [frame .get_info () for frame in data ]
167- else :
168- results = [frame .get_info () for frame in data [int (offset ):int (offset ) + int (limit )]]
175+ results = [frame .get_info () for frame in data [int (offset ):int (offset ) + int (limit )]]
169176
170177 # return them
171- return JsonResponse ({'count' : len (data ),
172- 'results' : results })
178+ return JsonResponse ({'count' : len (results ), 'results' : results })
173179
174180
175181@api_view (['GET' ])
0 commit comments