Commit a3bd004e authored by Paul Brown's avatar Paul Brown

allow overriding get_list page_size, fixes merge conflicts in #644

parents 05d18308 5ecb59f2
...@@ -454,7 +454,7 @@ class ModelView(BaseModelView): ...@@ -454,7 +454,7 @@ class ModelView(BaseModelView):
return query.filter(criteria) return query.filter(criteria)
def get_list(self, page, sort_column, sort_desc, search, filters, def get_list(self, page, sort_column, sort_desc, search, filters,
execute=True): execute=True, page_size=None):
""" """
Get list of objects from MongoEngine Get list of objects from MongoEngine
...@@ -470,6 +470,10 @@ class ModelView(BaseModelView): ...@@ -470,6 +470,10 @@ class ModelView(BaseModelView):
List of applied filters List of applied filters
:param execute: :param execute:
Run query immediately or not 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() query = self.get_query()
...@@ -496,10 +500,14 @@ class ModelView(BaseModelView): ...@@ -496,10 +500,14 @@ class ModelView(BaseModelView):
query = query.order_by('%s%s' % ('-' if order[1] else '', order[0])) query = query.order_by('%s%s' % ('-' if order[1] else '', order[0]))
# Pagination # Pagination
if page is not None: if page_size is None:
query = query.skip(page * self.page_size) 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: if execute:
query = query.all() query = query.all()
......
...@@ -302,7 +302,28 @@ class ModelView(BaseModelView): ...@@ -302,7 +302,28 @@ class ModelView(BaseModelView):
return self.model.select() return self.model.select()
def get_list(self, page, sort_column, sort_desc, search, filters, 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() query = self.get_query()
joins = set() joins = set()
...@@ -353,10 +374,14 @@ class ModelView(BaseModelView): ...@@ -353,10 +374,14 @@ class ModelView(BaseModelView):
query, joins = self._order_by(query, joins, order[0], order[1]) query, joins = self._order_by(query, joins, order[0], order[1])
# Pagination # Pagination
if page is not None: if page_size is None:
query = query.offset(page * self.page_size) 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: if execute:
query = list(query.execute()) query = list(query.execute())
......
...@@ -184,7 +184,7 @@ class ModelView(BaseModelView): ...@@ -184,7 +184,7 @@ class ModelView(BaseModelView):
return query return query
def get_list(self, page, sort_column, sort_desc, search, filters, def get_list(self, page, sort_column, sort_desc, search, filters,
execute=True): execute=True, page_size=None):
""" """
Get list of objects from MongoEngine Get list of objects from MongoEngine
...@@ -200,6 +200,10 @@ class ModelView(BaseModelView): ...@@ -200,6 +200,10 @@ class ModelView(BaseModelView):
List of applied fiters List of applied fiters
:param execute: :param execute:
Run query immediately or not 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 = {} query = {}
...@@ -236,12 +240,15 @@ class ModelView(BaseModelView): ...@@ -236,12 +240,15 @@ class ModelView(BaseModelView):
sort_by = [(order[0], pymongo.DESCENDING if order[1] else pymongo.ASCENDING)] sort_by = [(order[0], pymongo.DESCENDING if order[1] else pymongo.ASCENDING)]
# Pagination # Pagination
if page_size is None:
page_size = self.page_size
skip = None skip = None
if page is not None: if page and page_size:
skip = page * self.page_size skip = page * page_size
results = self.coll.find(query, sort=sort_by, skip=skip, limit=self.page_size) results = self.coll.find(query, sort=sort_by, skip=skip, limit=page_size)
if execute: if execute:
results = list(results) results = list(results)
......
...@@ -884,9 +884,10 @@ class ModelView(BaseModelView): ...@@ -884,9 +884,10 @@ class ModelView(BaseModelView):
return query, count_query, joins, count_joins 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: :param page:
Page number Page number
...@@ -900,6 +901,10 @@ class ModelView(BaseModelView): ...@@ -900,6 +901,10 @@ class ModelView(BaseModelView):
Execute query immediately? Default is `True` Execute query immediately? Default is `True`
:param filters: :param filters:
List of filter tuples 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 # Will contain join paths with optional aliased object
...@@ -943,10 +948,14 @@ class ModelView(BaseModelView): ...@@ -943,10 +948,14 @@ class ModelView(BaseModelView):
query, joins = self._apply_sorting(query, joins, sort_column, sort_desc) query, joins = self._apply_sorting(query, joins, sort_column, sort_desc)
# Pagination # Pagination
if page is not None: if page_size is None:
query = query.offset(page * self.page_size) 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 # Execute if needed
if execute: 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