Commit 257fd1a0 authored by Bryan Hoyt's avatar Bryan Hoyt

Factor _get_extra_args into _get_listing_args and overrideable get_filter_args

parent 3cefe8e0
......@@ -948,19 +948,20 @@ class BaseModelView(BaseView, ActionsMixin):
def get_empty_list_message(self):
return gettext('There are no items in the table.')
# URL generation helper
def _get_extra_args(self):
def get_filter_args(self):
"""
Return arguments from query string.
"""
page = request.args.get('page', 0, type=int)
sort = request.args.get('sort', None, type=int)
sort_desc = request.args.get('desc', None, type=int)
search = request.args.get('search', None)
Retrieve and parse filter parameters from the request URL.
Returns a list of 2-tuples in the format [(idx, value), ...],
where idx is the index into the list returned by get_filters().
Override this method to provide your own URL filter format.
"""
filter_idx_by_label = dict((flt.query_label(), i) for i, flt in enumerate(self._filters))
# Gather filters
if self._filters:
if not self._filters:
return None
sfilters = []
for n in request.args:
......@@ -989,11 +990,17 @@ class BaseModelView(BaseView, ActionsMixin):
if flt.validate(value):
sfilters.append((pos, (idx, flt.clean(value))))
filters = [v[1] for v in sorted(sfilters, key=lambda n: n[0])]
else:
filters = None
return [v[1] for v in sorted(sfilters, key=lambda n: n[0])]
return page, sort, sort_desc, search, filters
def _get_listing_args(self):
"""
Return generic list view arguments from query string.
"""
page = request.args.get('page', 0, type=int)
sort = request.args.get('sort', None, type=int)
sort_desc = request.args.get('desc', None, type=int)
search = request.args.get('search', None)
return page, sort, sort_desc, search
def _get_url(self, view=None, page=None, sort=None, sort_desc=None,
search=None, filters=None):
......@@ -1111,7 +1118,8 @@ class BaseModelView(BaseView, ActionsMixin):
List view
"""
# Grab parameters from URL
page, sort_idx, sort_desc, search, filters = self._get_extra_args()
page, sort_idx, sort_desc, search = self._get_listing_args()
filters = self.get_filter_args()
# Map column index to column name
sort_column = self._get_column_by_idx(sort_idx)
......
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