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,
        })
Beispiel #2
0
    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,
        })
Beispiel #4
0
    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']
            ],
        })
Beispiel #5
0
    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']],
        })
Beispiel #6
0
    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,
        })