def execute(self):
        try:
            self._data_iterator = self.get_data_iterator()
        except Warning as e:
            #~ logger.info("20130809 Warning %s",e)
            self.no_data_text = six.text_type(e)
            self._data_iterator = []
        except Exception as e:
            if not settings.SITE.catch_layout_exceptions:
                raise
            # Report this exception. But since such errors may occur
            # rather often and since exception loggers usually send an
            # email to the local system admin, make sure to log each
            # exception only once.
            self.no_data_text = six.text_type(e)
            w = WARNINGS_LOGGED.get(six.text_type(e))
            if w is None:
                WARNINGS_LOGGED[six.text_type(e)] = True
                raise
                # logger.exception(e)
            self._data_iterator = []

        if isinstance(self._data_iterator, GeneratorType):
            # print 20150718, self._data_iterator
            self._data_iterator = tuple(self._data_iterator)
        self._sliced_data_iterator = self._data_iterator
        if False:  # self.actor.start_at_bottom:
            if self.offset is not None:
                assert self.limit is not None
                num = self.get_total_count()
                max_pages = int(old_div(num, self.limit))
                page = old_div(self.offset, self.limit)
                page = max_pages - page
                offset = self.limit * page
                # offset = max_offset - self.offset
                self._sliced_data_iterator = self._sliced_data_iterator[
                    offset:]
                self._sliced_data_iterator = self._sliced_data_iterator[
                    :self.limit]
        else:
            if self.offset is not None:
                offset = self.offset
                if offset == -1:
                    assert self.limit is not None
                    num = self.get_total_count()
                    page_num = int(old_div(num, self.limit))
                    offset = self.limit * page_num
                self._sliced_data_iterator = self._sliced_data_iterator[
                    offset:]
            if self.limit is not None:
                self._sliced_data_iterator = self._sliced_data_iterator[
                    :self.limit]
This will actually call the :meth:`get_data_iterator` and run the
dataset/ETHPy150Open lsaffre/lino/lino/core/tablerequest.py/TableRequest.execute