Default and Hard Limits on dbapi
This commit is contained in:
parent
b563adb521
commit
265512bcd6
@ -36,6 +36,10 @@ from stacktach import models
|
||||
from stacktach import utils
|
||||
|
||||
|
||||
DEFAULT_LIMIT = 50
|
||||
HARD_LIMIT = 1000
|
||||
|
||||
|
||||
class APIException(Exception):
|
||||
def __init__(self, message="Internal Server Error"):
|
||||
self.status = 500
|
||||
@ -269,16 +273,15 @@ def get_db_objects(klass, request, default_order_by, direction='asc',
|
||||
order_by = '-%s' % order_by
|
||||
|
||||
offset = request.GET.get('offset')
|
||||
limit = request.GET.get('limit')
|
||||
limit = request.GET.get('limit', DEFAULT_LIMIT)
|
||||
if limit > HARD_LIMIT:
|
||||
limit = HARD_LIMIT
|
||||
if offset:
|
||||
start = int(offset)
|
||||
else:
|
||||
start = None
|
||||
offset = 0
|
||||
if limit:
|
||||
end = int(offset) + int(limit)
|
||||
else:
|
||||
end = None
|
||||
end = int(offset) + int(limit)
|
||||
return objects.order_by(order_by)[start:end]
|
||||
|
||||
|
||||
|
@ -140,7 +140,8 @@ class DBAPITestCase(unittest.TestCase):
|
||||
result = self.mox.CreateMockAnything()
|
||||
fake_model.objects.all().AndReturn(result)
|
||||
result.order_by('id').AndReturn(result)
|
||||
result.__getitem__(slice(None, None, None)).AndReturn(result)
|
||||
s = slice(None, dbapi.DEFAULT_LIMIT, None)
|
||||
result.__getitem__(s).AndReturn(result)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
query_result = dbapi.get_db_objects(fake_model, fake_request, 'id')
|
||||
@ -160,7 +161,8 @@ class DBAPITestCase(unittest.TestCase):
|
||||
result = self.mox.CreateMockAnything()
|
||||
fake_model.objects.all().AndReturn(result)
|
||||
result.order_by('-id').AndReturn(result)
|
||||
result.__getitem__(slice(None, None, None)).AndReturn(result)
|
||||
s = slice(None, dbapi.DEFAULT_LIMIT, None)
|
||||
result.__getitem__(s).AndReturn(result)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
query_result = dbapi.get_db_objects(fake_model, fake_request, 'id')
|
||||
@ -188,6 +190,27 @@ class DBAPITestCase(unittest.TestCase):
|
||||
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_get_db_objects_hard_limit(self):
|
||||
fake_model = self.make_fake_model()
|
||||
fake_request = self.mox.CreateMockAnything()
|
||||
fake_request.GET = {'limit': dbapi.HARD_LIMIT + 1}
|
||||
self.mox.StubOutWithMock(dbapi, '_get_filter_args')
|
||||
dbapi._get_filter_args(fake_model, fake_request,
|
||||
custom_filters=None).AndReturn({})
|
||||
self.mox.StubOutWithMock(dbapi, '_check_has_field')
|
||||
dbapi._check_has_field(fake_model, 'id')
|
||||
result = self.mox.CreateMockAnything()
|
||||
fake_model.objects.all().AndReturn(result)
|
||||
result.order_by('id').AndReturn(result)
|
||||
s = slice(None, dbapi.HARD_LIMIT, None)
|
||||
result.__getitem__(s).AndReturn(result)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
query_result = dbapi.get_db_objects(fake_model, fake_request, 'id')
|
||||
self.assertEquals(query_result, result)
|
||||
|
||||
self.mox.VerifyAll()
|
||||
|
||||
def test_get_db_objects_offset(self):
|
||||
fake_model = self.make_fake_model()
|
||||
fake_request = self.mox.CreateMockAnything()
|
||||
@ -200,7 +223,7 @@ class DBAPITestCase(unittest.TestCase):
|
||||
result = self.mox.CreateMockAnything()
|
||||
fake_model.objects.all().AndReturn(result)
|
||||
result.order_by('id').AndReturn(result)
|
||||
result.__getitem__(slice(1, None, None)).AndReturn(result)
|
||||
result.__getslice__(1, dbapi.DEFAULT_LIMIT + 1).AndReturn(result)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
query_result = dbapi.get_db_objects(fake_model, fake_request, 'id')
|
||||
@ -241,7 +264,8 @@ class DBAPITestCase(unittest.TestCase):
|
||||
result = self.mox.CreateMockAnything()
|
||||
fake_model.objects.filter(**filters).AndReturn(result)
|
||||
result.order_by('id').AndReturn(result)
|
||||
result.__getitem__(slice(None, None, None)).AndReturn(result)
|
||||
s = slice(None, dbapi.DEFAULT_LIMIT, None)
|
||||
result.__getitem__(s).AndReturn(result)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
query_result = dbapi.get_db_objects(fake_model, fake_request, 'id')
|
||||
@ -266,7 +290,8 @@ class DBAPITestCase(unittest.TestCase):
|
||||
all_filters.update(custom_filters['raw'])
|
||||
fake_model.objects.filter(**all_filters).AndReturn(result)
|
||||
result.order_by('id').AndReturn(result)
|
||||
result.__getitem__(slice(None, None, None)).AndReturn(result)
|
||||
s = slice(None, dbapi.DEFAULT_LIMIT, None)
|
||||
result.__getitem__(s).AndReturn(result)
|
||||
self.mox.ReplayAll()
|
||||
|
||||
query_result = dbapi.get_db_objects(fake_model, fake_request, 'id',
|
||||
|
Loading…
x
Reference in New Issue
Block a user