Commit a00b716a authored by Serge S. Koval's avatar Serge S. Koval

Merge pull request #981 from pawl/allow_overriding_pagesize

Allow overriding page_size in get_list
parents 691a1c98 28be9a00
......@@ -454,7 +454,7 @@ class ModelView(BaseModelView):
return query.filter(criteria)
def get_list(self, page, sort_column, sort_desc, search, filters,
execute=True):
execute=True, page_size=None):
"""
Get list of objects from MongoEngine
......@@ -470,6 +470,10 @@ class ModelView(BaseModelView):
List of applied filters
:param execute:
Run query immediately or not
:param page_size:
Number of results. Defaults to ModelView's page_size. Can be
overriden to change the page_size limit. Removing the page_size
limit requires setting page_size to 0 or False.
"""
query = self.get_query()
......@@ -496,10 +500,14 @@ class ModelView(BaseModelView):
query = query.order_by('%s%s' % ('-' if order[1] else '', order[0]))
# Pagination
if page is not None:
query = query.skip(page * self.page_size)
if page_size is None:
page_size = self.page_size
query = query.limit(self.page_size)
if page_size:
query = query.limit(page_size)
if page and page_size:
query = query.skip(page * page_size)
if execute:
query = query.all()
......
......@@ -302,7 +302,28 @@ class ModelView(BaseModelView):
return self.model.select()
def get_list(self, page, sort_column, sort_desc, search, filters,
execute=True):
execute=True, page_size=None):
"""
Return records from the database.
:param page:
Page number
:param sort_column:
Sort column name
:param sort_desc:
Descending or ascending sort
:param search:
Search query
:param filters:
List of filter tuples
:param execute:
Execute query immediately? Default is `True`
:param page_size:
Number of results. Defaults to ModelView's page_size. Can be
overriden to change the page_size limit. Removing the page_size
limit requires setting page_size to 0 or False.
"""
query = self.get_query()
joins = set()
......@@ -353,10 +374,14 @@ class ModelView(BaseModelView):
query, joins = self._order_by(query, joins, order[0], order[1])
# Pagination
if page is not None:
query = query.offset(page * self.page_size)
if page_size is None:
page_size = self.page_size
if page_size:
query = query.limit(page_size)
query = query.limit(self.page_size)
if page and page_size:
query = query.offset(page * page_size)
if execute:
query = list(query.execute())
......
......@@ -184,7 +184,7 @@ class ModelView(BaseModelView):
return query
def get_list(self, page, sort_column, sort_desc, search, filters,
execute=True):
execute=True, page_size=None):
"""
Get list of objects from MongoEngine
......@@ -200,6 +200,10 @@ class ModelView(BaseModelView):
List of applied fiters
:param execute:
Run query immediately or not
:param page_size:
Number of results. Defaults to ModelView's page_size. Can be
overriden to change the page_size limit. Removing the page_size
limit requires setting page_size to 0 or False.
"""
query = {}
......@@ -236,12 +240,15 @@ class ModelView(BaseModelView):
sort_by = [(order[0], pymongo.DESCENDING if order[1] else pymongo.ASCENDING)]
# Pagination
skip = None
if page_size is None:
page_size = self.page_size
if page is not None:
skip = page * self.page_size
skip = 0
results = self.coll.find(query, sort=sort_by, skip=skip, limit=self.page_size)
if page and page_size:
skip = page * page_size
results = self.coll.find(query, sort=sort_by, skip=skip, limit=page_size)
if execute:
results = list(results)
......
......@@ -884,9 +884,10 @@ class ModelView(BaseModelView):
return query, count_query, joins, count_joins
def get_list(self, page, sort_column, sort_desc, search, filters, execute=True):
def get_list(self, page, sort_column, sort_desc, search, filters,
execute=True, page_size=None):
"""
Return models from the database.
Return records from the database.
:param page:
Page number
......@@ -900,6 +901,10 @@ class ModelView(BaseModelView):
Execute query immediately? Default is `True`
:param filters:
List of filter tuples
:param page_size:
Number of results. Defaults to ModelView's page_size. Can be
overriden to change the page_size limit. Removing the page_size
limit requires setting page_size to 0 or False.
"""
# Will contain join paths with optional aliased object
......@@ -943,10 +948,14 @@ class ModelView(BaseModelView):
query, joins = self._apply_sorting(query, joins, sort_column, sort_desc)
# Pagination
if page is not None:
query = query.offset(page * self.page_size)
if page_size is None:
page_size = self.page_size
query = query.limit(self.page_size)
if page_size:
query = query.limit(page_size)
if page and page_size:
query = query.offset(page * page_size)
# Execute if needed
if execute:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment