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))
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')
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))
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
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
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
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
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)