Esempio n. 1
0
    def test_add_both(self):
        queryset1 = Column.objects.all()

        columns = cache.get_many([1])
        column_orders = [(cache.get(x), y) for x, y in [(1, 'desc')]]

        queryset2 = utils.add_columns(queryset1, columns)
        queryset2 = utils.add_ordering(queryset2, column_orders)

        self.assertEqual(str(queryset2.query), 'SELECT "avocado_column"."id", "avocado_column"."name", "avocado_column"."keywords" FROM "avocado_column" ORDER BY "avocado_column"."name" DESC, "avocado_column"."keywords" DESC')

        queryset3 = utils.add_ordering(queryset1, column_orders)
        queryset3 = utils.add_columns(queryset3, columns)

        self.assertEqual(str(queryset3.query), 'SELECT "avocado_column"."id", "avocado_column"."name", "avocado_column"."keywords" FROM "avocado_column" ORDER BY "avocado_column"."name" DESC, "avocado_column"."keywords" DESC')

        self.assertEqual(str(queryset2.query), str(queryset3.query))

        columns = cache.get_many([2, 1])
        column_orders = [(cache.get(x), y) for x, y in [(2, 'desc'), (1, 'asc')]]
        queryset4 = utils.add_columns(queryset1, columns)
        queryset4 = utils.add_ordering(queryset4, column_orders)

        self.assertEqual(str(queryset4.query), 'SELECT "avocado_column"."id", "avocado_field"."name", "avocado_field"."field_name", "avocado_column"."name", "avocado_column"."keywords" FROM "avocado_column" LEFT OUTER JOIN "avocado_columnfield" ON ("avocado_column"."id" = "avocado_columnfield"."concept_id") LEFT OUTER JOIN "avocado_field" ON ("avocado_columnfield"."field_id" = "avocado_field"."id") ORDER BY "avocado_field"."name" DESC, "avocado_field"."field_name" DESC, "avocado_column"."name" ASC, "avocado_column"."keywords" ASC')

        queryset5 = utils.add_ordering(queryset1, column_orders)
        queryset5 = utils.add_columns(queryset5, columns)

        self.assertEqual(str(queryset5.query), 'SELECT "avocado_column"."id", "avocado_field"."name", "avocado_field"."field_name", "avocado_column"."name", "avocado_column"."keywords" FROM "avocado_column" LEFT OUTER JOIN "avocado_columnfield" ON ("avocado_column"."id" = "avocado_columnfield"."concept_id") LEFT OUTER JOIN "avocado_field" ON ("avocado_columnfield"."field_id" = "avocado_field"."id") ORDER BY "avocado_field"."name" DESC, "avocado_field"."field_name" DESC, "avocado_column"."name" ASC, "avocado_column"."keywords" ASC')

        self.assertEqual(str(queryset4.query), str(queryset5.query))
Esempio n. 2
0
    def test_add_ordering(self):
        queryset1 = Column.objects.values('id')
        column_orders = [(cache.get(x), y) for x, y in [(1, 'desc')]]
        queryset2 = utils.add_ordering(queryset1, column_orders)

        self.assertEqual(str(queryset2.query), 'SELECT "avocado_column"."id" FROM "avocado_column" ORDER BY "avocado_column"."name" DESC, "avocado_column"."keywords" DESC')

        column_orders = [(cache.get(x), y) for x, y in [(2, 'desc'), (1, 'asc')]]
        queryset3 = utils.add_ordering(queryset1, column_orders)

        self.assertEqual(str(queryset3.query), 'SELECT "avocado_column"."id" FROM "avocado_column" LEFT OUTER JOIN "avocado_columnfield" ON ("avocado_column"."id" = "avocado_columnfield"."concept_id") LEFT OUTER JOIN "avocado_field" ON ("avocado_columnfield"."field_id" = "avocado_field"."id") ORDER BY "avocado_field"."name" DESC, "avocado_field"."field_name" DESC, "avocado_column"."name" ASC, "avocado_column"."keywords" ASC')
Esempio n. 3
0
    def test_get(self):
        concept_id = 1
        key = cache.id_key % concept_id

        self.assertFalse(djcache.has_key(key))

        concept = cache.get(concept_id)
        self.assertNotEqual(concept, None)
        self.assertEqual(djcache.get(key), concept)

        djcache.delete(key)

        queryset = Column.objects.none()
        concept = cache.get(concept_id, queryset=queryset)
        self.assertEqual(concept, None)
        self.assertFalse(djcache.has_key(key))
Esempio n. 4
0
def column_format_rules(columns, format_type, pk_pass=True):
    if pk_pass:
        rules = [('Pass', 1)]
    else:
        rules = []

    for column in columns:
        if not isinstance(column, Column):
            column = cache.get(column)
        rules.append(column.rule(format_type))
    return rules
Esempio n. 5
0
    def get_columns_as_fields(self):
        store = self.read()
        header = []

        for x in store['columns']:
            c = column_cache.get(x)
            cfields = c.conceptfields.select_related('field').order_by('order')
            if len(cfields) == 1:
                header.append(c.name)
            else:
                header.extend([x.name or x.field.name for x in cfields])
        return header
Esempio n. 6
0
def add_columns(queryset, columns, using=DEFAULT_MODELTREE_ALIAS):
    """Takes a ``queryset`` and ensures the proper table join have been
    setup to display the table columns.
    """
    # add queryset model's pk field
    aliases = [(queryset.model._meta.db_table,
        queryset.model._meta.pk.column)]

    for column in columns:
        if not isinstance(column, Column):
            column = cache.get(column)
        queryset, _aliases = column.add_fields_to_queryset(queryset, using)
        aliases.extend(_aliases)

    queryset.query.select = aliases
    return queryset
Esempio n. 7
0
    def header(self):
        store = self.read()
        header = []

        for x in store['columns']:
            c = column_cache.get(x)
            if c is None:
                continue
            o = {'id': x, 'name': c.name, 'direction': ''}
            for y, z in store['ordering']:
                if x == y:
                    o['direction'] = z
                    break
            header.append(o)

        return header
Esempio n. 8
0
def add_ordering(queryset, order_rules, using=DEFAULT_MODELTREE_ALIAS):
    """Applies column ordering to a queryset. Resolves a Column's
    fields and generates the `order_by' paths.
    """
    queryset.query.clear_ordering(True)

    if not order_rules:
        return queryset

    orders = []

    for column, direction in order_rules:
        if not isinstance(column, Column):
            column = cache.get(column)
        _orders = column.get_ordering_for_queryset(direction, using=using)
        orders.extend(_orders)

    return queryset.order_by(*orders)