Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
    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))
Ejemplo n.º 8
0
    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)