def datatable(self, resource_name, resource_id): draw = int(request.params['draw']) search_text = unicode(request.params['search[value]']) offset = int(request.params['start']) limit = int(request.params['length']) sort_by_num = int(request.params['order[0][column]']) sort_order = ('desc' if request.params['order[0][dir]'] == 'desc' else 'asc' ) chromo = h.recombinant_get_chromo(resource_name) lc = LocalCKAN(username=c.user) unfiltered_response = lc.action.datastore_search( resource_id=resource_id, limit=1, ) cols = [f['datastore_id'] for f in chromo['fields']] sort_str = cols[sort_by_num] + ' ' + sort_order sort_str += ' NULLS LAST' response = lc.action.datastore_search( q=search_text, resource_id=resource_id, offset=offset, limit=limit, sort=sort_str ) aadata = [ [datatablify(row.get(colname, u''), colname) for colname in cols] for row in response['records']] if chromo.get('edit_form', False): res = lc.action.resource_show(id=resource_id) pkg = lc.action.package_show(id=res['package_id']) fids = [f['datastore_id'] for f in chromo['fields']] pkids = [fids.index(k) for k in aslist(chromo['datastore_primary_key'])] for row in aadata: row.insert(0, ( u'<a href="{0}" aria-label"' + _("Edit") + '">' u'<i class="fa fa-lg fa-edit" aria-hidden="true"></i></a>').format( h.url_for( controller='ckanext.canada.controller:PDUpdateController', action='update_pd_record', owner_org=pkg['organization']['name'], resource_name=resource_name, pk=','.join(url_part_escape(row[i]) for i in pkids) ) ) ) return json.dumps({ 'draw': draw, 'iTotalRecords': unfiltered_response.get('total', 0), 'iTotalDisplayRecords': response.get('total', 0), 'aaData': aadata, })
def datatable(self, resource_name, resource_id): draw = int(request.params['draw']) search_text = unicode(request.params['search[value]']) offset = int(request.params['start']) limit = int(request.params['length']) sort_by_num = int(request.params['order[0][column]']) sort_order = ('desc' if request.params['order[0][dir]'] == 'desc' else 'asc' ) chromo = h.recombinant_get_chromo(resource_name) lc = LocalCKAN(username=c.user) unfiltered_response = lc.action.datastore_search( resource_id=resource_id, limit=1, ) cols = [f['datastore_id'] for f in chromo['fields']] sort_str = cols[sort_by_num] + ' ' + sort_order sort_str += ' NULLS LAST' response = lc.action.datastore_search( q=search_text, resource_id=resource_id, offset=offset, limit=limit, sort=sort_str ) aadata = [ [datatablify(row.get(colname, u''), colname) for colname in cols] for row in response['records']] # XXX custom business logic hack if resource_name == 'consultations': res = lc.action.resource_show(id=resource_id) pkg = lc.action.package_show(id=res['package_id']) for row in aadata: row[0] = u'<a href="{0}">{1}</a>'.format( h.url_for( controller='ckanext.canada.controller:PDUpdateController', action='update_pd_record', owner_org=pkg['organization']['name'], resource_name=resource_name, pk=url_part_escape(row[0])), row[0]) return json.dumps({ 'draw': draw, 'iTotalRecords': unfiltered_response.get('total', 0), 'iTotalDisplayRecords': response.get('total', 0), 'aaData': aadata, })
def datatable(self, resource_name, resource_id): draw = int(request.params['draw']) search_text = unicode(request.params['search[value]']) offset = int(request.params['start']) limit = int(request.params['length']) sort_by_num = int(request.params['order[0][column]']) sort_order = ('desc' if request.params['order[0][dir]'] == 'desc' else 'asc') chromo = h.recombinant_get_chromo(resource_name) lc = LocalCKAN(username=c.user) unfiltered_response = lc.action.datastore_search( resource_id=resource_id, limit=1, ) cols = [f['datastore_id'] for f in chromo['fields']] sort_str = cols[sort_by_num] + ' ' + sort_order sort_str += ' NULLS LAST' response = lc.action.datastore_search(q=search_text, resource_id=resource_id, offset=offset, limit=limit, sort=sort_str) aadata = [[ datatablify(row.get(colname, u''), colname) for colname in cols ] for row in response['records']] # XXX custom business logic hack if resource_name == 'consultations': res = lc.action.resource_show(id=resource_id) pkg = lc.action.package_show(id=res['package_id']) for row in aadata: row[0] = u'<a href="{0}">{1}</a>'.format( h.url_for(controller= 'ckanext.canada.controller:PDUpdateController', action='update_pd_record', owner_org=pkg['organization']['name'], resource_name=resource_name, pk=url_part_escape(row[0])), row[0]) return json.dumps({ 'draw': draw, 'iTotalRecords': unfiltered_response.get('total', 0), 'iTotalDisplayRecords': response.get('total', 0), 'aaData': aadata, })
def datatable(self, resource_name, resource_id): draw = int(request.params['draw']) search_text = unicode(request.params['search[value]']) offset = int(request.params['start']) limit = int(request.params['length']) sort_by_num = int(request.params['order[0][column]']) sort_order = ('desc' if request.params['order[0][dir]'] == 'desc' else 'asc' ) chromo = h.recombinant_get_chromo(resource_name) lc = LocalCKAN(username=c.user) unfiltered_response = lc.action.datastore_search( resource_id=resource_id, limit=1, ) cols = [f['datastore_id'] for f in chromo['fields']] sort_str = cols[sort_by_num] + ' ' + sort_order sort_str += ' NULLS LAST' response = lc.action.datastore_search( q=search_text, resource_id=resource_id, offset=offset, limit=limit, sort=sort_str ) return json.dumps({ 'draw': draw, 'iTotalRecords': unfiltered_response.get('total', 0), 'iTotalDisplayRecords': response.get('total', 0), 'aaData': [ [datatablify(row.get(colname, u''), colname) for colname in cols] for row in response['records'] ], })
def datatable(self, resource_name, resource_id): draw = int(request.params['draw']) search_text = unicode(request.params['search[value]']) offset = int(request.params['start']) limit = int(request.params['length']) sort_by_num = int(request.params['order[0][column]']) sort_order = ('desc' if request.params['order[0][dir]'] == 'desc' else 'asc') chromo = h.recombinant_get_chromo(resource_name) lc = LocalCKAN(username=c.user) unfiltered_response = lc.action.datastore_search( resource_id=resource_id, limit=1, ) cols = [f['datastore_id'] for f in chromo['fields']] sort_str = cols[sort_by_num] + ' ' + sort_order sort_str += ' NULLS LAST' response = lc.action.datastore_search(q=search_text, resource_id=resource_id, offset=offset, limit=limit, sort=sort_str) return json.dumps({ 'draw': draw, 'iTotalRecords': unfiltered_response.get('total', 0), 'iTotalDisplayRecords': response.get('total', 0), 'aaData': [[datatablify(row.get(colname, u''), colname) for colname in cols] for row in response['records']], })
def datatable(self, resource_name, resource_id): draw = int(request.params['draw']) search_text = unicode(request.params['search[value]']) offset = int(request.params['start']) limit = int(request.params['length']) chromo = h.recombinant_get_chromo(resource_name) lc = LocalCKAN(username=c.user) try: unfiltered_response = lc.action.datastore_search( resource_id=resource_id, limit=1, ) except NotAuthorized: # datatables js can't handle any sort of error response # return no records instead return json.dumps({ 'draw': draw, 'iTotalRecords': -1, # with a hint that something is wrong 'iTotalDisplayRecords': -1, 'aaData': [], }) cols = [f['datastore_id'] for f in chromo['fields']] prefix_cols = 1 if chromo.get('edit_form', False) else 0 sort_list = [] i = 0 while True: if u'order[%d][column]' % i not in request.params: break sort_by_num = int(request.params[u'order[%d][column]' % i]) sort_order = (u'desc NULLS LAST' if request.params[u'order[%d][dir]' % i] == u'desc' else u'asc NULLS LAST') sort_list.append(cols[sort_by_num - prefix_cols] + u' ' + sort_order) i += 1 response = lc.action.datastore_search( q=search_text, resource_id=resource_id, offset=offset, limit=limit, sort=u', '.join(sort_list), ) aadata = [[ datatablify(row.get(colname, u''), colname) for colname in cols ] for row in response['records']] if chromo.get('edit_form', False): res = lc.action.resource_show(id=resource_id) pkg = lc.action.package_show(id=res['package_id']) fids = [f['datastore_id'] for f in chromo['fields']] pkids = [ fids.index(k) for k in aslist(chromo['datastore_primary_key']) ] for row in aadata: row.insert( 0, (u'<a href="{0}" aria-label"' + _("Edit") + '">' u'<i class="fa fa-lg fa-edit" aria-hidden="true"></i></a>' ).format( h.url_for( controller= 'ckanext.canada.controller:PDUpdateController', action='update_pd_record', owner_org=pkg['organization']['name'], resource_name=resource_name, pk=','.join( url_part_escape(row[i]) for i in pkids)))) return json.dumps({ 'draw': draw, 'iTotalRecords': unfiltered_response.get('total', 0), 'iTotalDisplayRecords': response.get('total', 0), 'aaData': aadata, })