class PagedQuery:
def __init__(self, query: orm.Query):
self.logger: logging.Logger = logging.getLogger(self.__module__)
self.query: orm.Query = query
self._limit: int = None
self._offset: int = None
def __getattr__(self, item: Text):
try:
return self.__getattribute__(item)
except AttributeError:
def call(*args, **kwargs):
self.query = getattr(self.query, item)(*args, **kwargs)
return self
return call
def limit(self, limit: int):
self._limit = limit
return self
def offset(self, offset: int):
self._offset = offset
return self
def all(self):
count = self.query.count()
self.logger.debug(f"Paging results, count={count}, offset={self._offset}, limit={self._limit}")
data = self.query \
.limit(self._limit) \
.offset(self._offset) \
.all()
return {
'total_count': count,
'data': data
}