← Back to team overview

harvest-dev team mailing list archive

[Merge] lp:~dholbach/harvest/974431 into lp:harvest

 

Daniel Holbach has proposed merging lp:~dholbach/harvest/974431 into lp:harvest.

Requested reviews:
  harvest-dev (harvest-dev)
Related bugs:
  Bug #974431 in harvest: "/services/ API does offset/length calculation wrong"
  https://bugs.launchpad.net/harvest/+bug/974431

For more details, see:
https://code.launchpad.net/~dholbach/harvest/974431/+merge/101543

The API now does slicing and sorting now properly.

Test-case:
wget -O - "http://127.0.0.1:8000/services/sourcepackages/?_sortby=id";
wget -O - "http://127.0.0.1:8000/services/sourcepackages/?_offset=500&_sortby=id";
-- 
https://code.launchpad.net/~dholbach/harvest/974431/+merge/101543
Your team harvest-dev is requested to review the proposed merge of lp:~dholbach/harvest/974431 into lp:harvest.
=== modified file 'harvest/services/__init__.py'
--- harvest/services/__init__.py	2010-12-08 08:15:50 +0000
+++ harvest/services/__init__.py	2012-04-11 12:36:17 +0000
@@ -80,14 +80,16 @@
     for key in search_values.keys():
         if key.startswith('_'):
             extra_arguments[key] = search_values.pop(key)
+    if '_sortby' in request and request['_sortby'] not in EMPTY_VALUES:
+        results = model.objects.filter(**search_values).order_by(request.get('_sortby'))
+    
     offset = parse_number_argument(extra_arguments, '_offset')
     length = parse_number_argument(extra_arguments, '_length')
+    start = offset if offset else 0
     if not length or length > CHUNK_SIZE:
         length = CHUNK_SIZE
-    results = model.objects.filter(**search_values)[offset:length]
-
-    if '_sortby' in request and request['_sortby'] not in EMPTY_VALUES:
-        results = results.order_by(request.get('_sortby'))
+    end = start + length
+    results = results[start:end]
     return results
 
 def get_model_id(request, url):


Follow ups