Ejemplo n.º 1
0
    def build_ancestor_condition(self, cte):
        """
        @see MPTTModel.get_ancestors()
        """
        left_op = "<="
        right_op = ">="

        if not self.include_self:
            left_op = "<"
            right_op = ">"

        return [
            BooleanComparison(cte.col.lft, left_op, F("lft")),
            BooleanComparison(cte.col.rght, right_op, F("rght")),
        ]
Ejemplo n.º 2
0
    def build_descendant_condition(self, cte):
        """
        @see MPTTModel.get_descendants()
        """
        left_op = '>='
        right_op = '<='

        if not self.include_self:
            left_op = '>'
            right_op = '<'

        return [
            BooleanComparison(cte.col.lft, left_op, F('lft')),
            BooleanComparison(cte.col.lft, right_op, F('rght')),
        ]
Ejemplo n.º 3
0
    def build(self):
        """
        Creates special nested CTE since all other metadata works of nodes, and joining on multiple
        file records would produce incorrect result for resource sizes due to summing.
        """
        files_cte = FileMetadataCTE(self.query)
        files_cte.add_columns(('file_size', 'checksum'))

        resource_condition = BooleanComparison(F('kind_id'), '!=',
                                               Value(content_kinds.TOPIC))

        q = files_cte.join(self.query).annotate(resource_size=Sum(
            Case(
                # aggregate file_size when selected node is not a topic
                When(
                    condition=WhenQ(resource_condition),
                    then=Coalesce(files_cte.col.file_size, Value(0)),
                ),
                default=Value(0)),
            output_field=IntegerField()))

        return With(q.values(*set(self.columns)), name='resource_size_cte')
Ejemplo n.º 4
0
 def build_kind_condition(self, kind_id, value, comparison="="):
     return [BooleanComparison(kind_id, comparison, Value(value))]
Ejemplo n.º 5
0
 def build_child_condition(self, cte):
     return [BooleanComparison(cte.col.parent_id, "=", F("id"))]
Ejemplo n.º 6
0
 def build_coach_condition(self, role_visibility):
     return [BooleanComparison(role_visibility, "=", Value(roles.COACH))]
Ejemplo n.º 7
0
 def build_child_condition(self, cte):
     return [BooleanComparison(cte.col.parent_id, '=', F('id'))]