def testFromResource(self): # need to be logged in to query resources auth.s3_impersonate('*****@*****.**') r = current.s3db.resource("org_organisation") # no limit table = S3DataTable.from_resource(r, [{'name': 'id'}]) self.assertEqual(len(table.rows), r.count()) # limit table = S3DataTable.from_resource(r, [{'name': 'id'}], limit=1) self.assertEqual(table.cols, [{'name': 'id', 'label': 'Id', 'type': 'id'}]) self.assertEqual(table.rows, [{'id': u'1'},]) # ajax source and page_size table = S3DataTable.from_resource(r, [{'name': 'id'}], options={'sAjaxSource': '_'}, page_size=1) self.assertEqual(table.rows, [{'id': u'1'},]) # ajax source, page_size and limit table = S3DataTable.from_resource(r, [{'name': 'id'}], options={'sAjaxSource': '_'}, page_size=1, limit=2) self.assertEqual(len(table.rows), 1)
def organisation(): """ Function to handle pagination for the org list on the homepage """ from s3.s3data import S3DataTable resource = s3db.resource("org_organisation") totalrows = resource.count() table = resource.table list_fields = ["id", "name"] limit = int(request.get_vars["iDisplayLength"] ) if request.extension == "aadata" else 1 rfields = resource.resolve_selectors(list_fields)[0] (orderby, filter) = S3DataTable.getControlData(rfields, request.vars) resource.add_filter(filter) filteredrows = resource.count() if isinstance(orderby, bool): orderby = table.name rows = resource.select( list_fields, orderby=orderby, start=0, limit=limit, ) data = resource.extract( rows, list_fields, represent=True, ) dt = S3DataTable(rfields, data) dt.defaultActionButtons(resource) s3.no_formats = True if request.extension == "html": items = dt.html( totalrows, filteredrows, "org_list_1", dt_displayLength=10, dt_ajax_url=URL( c="default", f="organisation", extension="aadata", vars={"id": "org_list_1"}, ), ) elif request.extension.lower() == "aadata": limit = resource.count() if "sEcho" in request.vars: echo = int(request.vars.sEcho) else: echo = None items = dt.json(totalrows, filteredrows, "org_list_1", echo) else: raise HTTP(501, s3mgr.ERROR.BAD_FORMAT) return items
def testSqlTableJSON(self): """ render to a JSON Object """ dt = S3DataTable(self.rfields, self.data) actual = dt.json("list_1", 1, 14, 14) # @todo: Need to add a test for the format returned #print actual dt = S3DataTable(self.rfields, self.data, start=3, limit=5) actual = dt.json("list_1", 1, 14, 14)
def testSqlTableHTML(self): """ render to an HTML TABLE """ dt = S3DataTable(self.rfields, self.data) actual = dt.html(14, 14) # @todo: Need to add a test for the format returned #print actual dt = S3DataTable(self.rfields, self.data, start=3, limit=5) actual = dt.html(14, 14)
def testFromResource(self): # need to be logged in to query resources auth.s3_impersonate('*****@*****.**') r = current.s3db.resource("org_organisation") # no limit table = S3DataTable.from_resource(r, [{'name': 'id'}]) self.assertEqual(len(table.rows), r.count()) # limit table = S3DataTable.from_resource(r, [{'name': 'id'}], limit=1) self.assertEqual(table.cols, [{ 'name': 'id', 'label': 'Id', 'type': 'id' }]) self.assertEqual(table.rows, [ { 'id': u'1' }, ]) # ajax source and page_size table = S3DataTable.from_resource(r, [{ 'name': 'id' }], options={'sAjaxSource': '_'}, page_size=1) self.assertEqual(table.rows, [ { 'id': u'1' }, ]) # ajax source, page_size and limit table = S3DataTable.from_resource(r, [{ 'name': 'id' }], options={'sAjaxSource': '_'}, page_size=1, limit=2) self.assertEqual(len(table.rows), 1)
def organisation(): """ Function to handle pagination for the org list on the homepage """ from s3.s3data import S3DataTable resource = s3db.resource("org_organisation") totalrows = resource.count() table = resource.table list_fields = ["id", "name"] limit = int(request.get_vars["iDisplayLength"]) if request.extension == "aadata" else 1 rfields = resource.resolve_selectors(list_fields)[0] (orderby, filter) = S3DataTable.getControlData(rfields, request.vars) resource.add_filter(filter) filteredrows = resource.count() if isinstance(orderby, bool): orderby = table.name rows = resource.select(list_fields, orderby=orderby, start=0, limit=limit, ) data = resource.extract(rows, list_fields, represent=True, ) dt = S3DataTable(rfields, data) dt.defaultActionButtons(resource) s3.no_formats = True if request.extension == "html": items = dt.html(totalrows, filteredrows, "org_list_1", dt_displayLength=10, dt_ajax_url=URL(c="default", f="organisation", extension="aadata", vars={"id": "org_list_1"}, ), ) elif request.extension.lower() == "aadata": limit = resource.count() if "sEcho" in request.vars: echo = int(request.vars.sEcho) else: echo = None items = dt.json(totalrows, filteredrows, "org_list_1", echo) else: raise HTTP(501, s3mgr.ERROR.BAD_FORMAT) return items
def testInitOrderby(self): """ test to check that the orderby property is set up correctly from different types of input. """ table = self.resource.table dt = S3DataTable(self.rfields, self.data) expected = [[1, "asc"]] actual = dt.orderby self.assertEqual(expected, actual, "1) %s not equal to %s" % (expected, actual)) dt = S3DataTable(self.rfields, self.data, orderby=table.name) expected = [[3, "asc"]] actual = dt.orderby self.assertEqual(expected, actual, "2) %s not equal to %s" % (expected, actual)) dt = S3DataTable(self.rfields, self.data, orderby=~table.name) expected = [[3, "desc"]] actual = dt.orderby self.assertEqual(expected, actual, "3) %s not equal to %s" % (expected, actual)) dt = S3DataTable(self.rfields, self.data, orderby=table.office_type_id | table.name) expected = [[4, "asc"], [3, "asc"]] actual = dt.orderby self.assertEqual(expected, actual, "4) %s not equal to %s" % (expected, actual)) dt = S3DataTable(self.rfields, self.data, orderby=~table.office_type_id | table.name) expected = [[4, "desc"], [3, "asc"]] actual = dt.orderby self.assertEqual(expected, actual, "5) %s not equal to %s" % (expected, actual)) otable = current.s3db.org_organisation dt = S3DataTable(self.rfields, self.data, orderby=otable.name | ~table.office_type_id | table.name) expected = [[1, "asc"], [4, "desc"], [3, "asc"]] actual = dt.orderby self.assertEqual(expected, actual, "6) %s not equal to %s" % (expected, actual))
def testDataTableInitialOrderby(self): """ Test the initial orderby for different types of input. """ table = self.resource.table dt = S3DataTable(self.rfields, self.data) expected = [[1, "asc"]] actual = dt.orderby self.assertEqual(expected, actual) dt = S3DataTable(self.rfields, self.data, orderby=table.name) expected = [[3, "asc"]] actual = dt.orderby self.assertEqual(expected, actual) dt = S3DataTable(self.rfields, self.data, orderby=~table.name) expected = [[3, "desc"]] actual = dt.orderby self.assertEqual(expected, actual) dt = S3DataTable(self.rfields, self.data, orderby=table.office_type_id | table.name) expected = [[4, "asc"], [3, "asc"]] actual = dt.orderby self.assertEqual(expected, actual) dt = S3DataTable(self.rfields, self.data, orderby=~table.office_type_id | table.name) expected = [[4, "desc"], [3, "asc"]] actual = dt.orderby self.assertEqual(expected, actual) otable = current.s3db.org_organisation dt = S3DataTable(self.rfields, self.data, orderby=otable.name | ~table.office_type_id | table.name) expected = [[1, "asc"], [4, "desc"], [3, "asc"]] actual = dt.orderby self.assertEqual(expected, actual)