data-grid: create a common re-usable app with datagrid rendering helpers

This commit is contained in:
Marcin Kuzminski 2017-04-13 12:15:02 +02:00
parent 90a7661dde
commit 482cb6cd23
2 changed files with 30 additions and 24 deletions

View file

@ -130,6 +130,34 @@ class RepoAppView(BaseAppView):
return c
class DataGridAppView(object):
"""
Common class to have re-usable grid rendering components
"""
def _extract_ordering(self, request):
column_index = safe_int(request.GET.get('order[0][column]'))
order_dir = request.GET.get(
'order[0][dir]', 'desc')
order_by = request.GET.get(
'columns[%s][data][sort]' % column_index, 'name_raw')
# translate datatable to DB columns
order_by = {
'first_name': 'name',
'last_name': 'lastname',
}.get(order_by) or order_by
search_q = request.GET.get('search[value]')
return search_q, order_by, order_dir
def _extract_chunk(self, request):
start = safe_int(request.GET.get('start'), 0)
length = safe_int(request.GET.get('length'), 25)
draw = safe_int(request.GET.get('draw'))
return draw, start, length
class RepoRoutePredicate(object):
def __init__(self, val, config):
self.val = val

View file

@ -28,7 +28,7 @@ from sqlalchemy.sql.functions import coalesce
from rhodecode.lib.helpers import Page
from rhodecode_tools.lib.ext_json import json
from rhodecode.apps._base import BaseAppView
from rhodecode.apps._base import BaseAppView, DataGridAppView
from rhodecode.lib.auth import (
LoginRequired, HasPermissionAllDecorator, CSRFRequired)
from rhodecode.lib import helpers as h
@ -43,7 +43,7 @@ from rhodecode.model.meta import Session
log = logging.getLogger(__name__)
class AdminUsersView(BaseAppView):
class AdminUsersViewData(BaseAppView, DataGridAppView):
ALLOW_SCOPED_TOKENS = False
"""
This view has alternative version inside EE, if modified please take a look
@ -64,28 +64,6 @@ class AdminUsersView(BaseAppView):
# is a pyramid view
raise HTTPFound('/')
def _extract_ordering(self, request):
column_index = safe_int(request.GET.get('order[0][column]'))
order_dir = request.GET.get(
'order[0][dir]', 'desc')
order_by = request.GET.get(
'columns[%s][data][sort]' % column_index, 'name_raw')
# translate datatable to DB columns
order_by = {
'first_name': 'name',
'last_name': 'lastname',
}.get(order_by) or order_by
search_q = request.GET.get('search[value]')
return search_q, order_by, order_dir
def _extract_chunk(self, request):
start = safe_int(request.GET.get('start'), 0)
length = safe_int(request.GET.get('length'), 25)
draw = safe_int(request.GET.get('draw'))
return draw, start, length
@HasPermissionAllDecorator('hg.admin')
@view_config(
route_name='users', request_method='GET',