Commit 47bdad4e authored by Simon Charette's avatar Simon Charette
Browse files

Replaced inner functions by class methods.

refs #24031

Thanks to Tim Graham and Michał Modzelewski for the review.
parent 4832c004
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -90,22 +90,24 @@ class Q(tree.Node):
        clause, _ = query._add_q(self, reuse, allow_joins=allow_joins)
        return clause

    def refs_aggregate(self, existing_aggregates):
        def _refs_aggregate(obj, existing_aggregates):
    @classmethod
    def _refs_aggregate(cls, obj, existing_aggregates):
        if not isinstance(obj, tree.Node):
            aggregate, aggregate_lookups = refs_aggregate(obj[0].split(LOOKUP_SEP), existing_aggregates)
            if not aggregate and hasattr(obj[1], 'refs_aggregate'):
                return obj[1].refs_aggregate(existing_aggregates)
            return aggregate, aggregate_lookups
        for c in obj.children:
                aggregate, aggregate_lookups = _refs_aggregate(c, existing_aggregates)
            aggregate, aggregate_lookups = cls._refs_aggregate(c, existing_aggregates)
            if aggregate:
                return aggregate, aggregate_lookups
        return False, ()

    def refs_aggregate(self, existing_aggregates):
        if not existing_aggregates:
            return False
        return _refs_aggregate(self, existing_aggregates)

        return self._refs_aggregate(self, existing_aggregates)


class DeferredAttribute(object):
+15 −13
Original line number Diff line number Diff line
@@ -315,24 +315,26 @@ class WhereNode(tree.Node):
        clone.relabel_aliases(change_map)
        return clone

    @cached_property
    def contains_aggregate(self):
        def _contains_aggregate(obj):
    @classmethod
    def _contains_aggregate(cls, obj):
        if not isinstance(obj, tree.Node):
            return getattr(obj.lhs, 'contains_aggregate', False) or getattr(obj.rhs, 'contains_aggregate', False)
            return any(_contains_aggregate(c) for c in obj.children)
        return any(cls._contains_aggregate(c) for c in obj.children)

        return _contains_aggregate(self)
    @cached_property
    def contains_aggregate(self):
        return self._contains_aggregate(self)

    def refs_field(self, aggregate_types, field_types):
        def _refs_field(obj, aggregate_types, field_types):
    @classmethod
    def _refs_field(cls, obj, aggregate_types, field_types):
        if not isinstance(obj, tree.Node):
            if hasattr(obj.rhs, 'refs_field'):
                return obj.rhs.refs_field(aggregate_types, field_types)
            return False
            return any(_refs_field(c, aggregate_types, field_types) for c in obj.children)
        return any(cls._refs_field(c, aggregate_types, field_types) for c in obj.children)

        return _refs_field(self, aggregate_types, field_types)
    def refs_field(self, aggregate_types, field_types):
        return self._refs_field(self, aggregate_types, field_types)


class EmptyWhere(WhereNode):