Aggregate Provider

When building application with large dataset, it is common to pre-aggregate data on the data management layer and only query for aggregate from precomputed aggregate storage.

MorpFW provides a overrideable aggregate provider API for you to intercept the aggregate mechanism and put your own aggregate logic.

Overriding Aggregate Provider

import typing
import morpfw
from .app import App
from .model import PageCollection


class PagesAggregateProvider(morpfw.AggregateProvider):

    def aggregate(self, query=None, group=None, order_by=None):
        """search for resources, aggregate and return aggregate result"""
        result = []
        # do something here
        return result


@App.aggregateprovider(model=PageCollection)
def get_aggregateprovider(context):
    return PagesAggregateProvider(context)