Returns a str table of the times for this api call
        :param include_overhead: bool if True include information from
                                 overhead, such as the time for this class code
        :param header:           bool if True includes the column header
        :param include_server:   bool if True includes times reported by the
                                 server in the header
        :param digits:           int of the number of significant digits
        :return:                 str table of the times for the api call

def time_report(self, include_overhead=False, header=None,
                    include_server=True, digits=4):
        """
            Returns a str table of the times for this api call
        :param include_overhead: bool if True include information from
                                 overhead, such as the time for this class code
        :param header:           bool if True includes the column header
        :param include_server:   bool if True includes times reported by the
                                 server in the header
        :param digits:           int of the number of significant digits
        :return:                 str table of the times for the api call
        """
        try:
            self._timestamps.setdefault('report', time.time())
            header = header or ['Message', 'Start', 'End', 'Sum', 'Count']

            ret = []
            if include_overhead:
                ret.append(self.time_report_item(
                    'create', 'Overhead from api call "Create"'))
                ret.append(self.time_report_item(
                    'setup', 'Overhead from api call "Setup"'))

            if 'repeat' in self._timestamps:
                ret.append(self.time_report_item(
                    'repeat', 'First Request of the api call'))

            ret.append(self.time_report_item('send', 'Send the api call'))

            if self._server_timing and include_server:

                send_start = ret[-1]['Start']
                delta = max(0, ret[-1]['Sum'] - (
                    self._server_timing['End'] - self._server_timing['Start']))

                if include_overhead:
                    ret.append(
                        {'Message': "Internet overhead", "Start": send_start,
                         "End": ret[0]['Start'] + delta, 'Sum': delta,
                         'Count': 1})

                    if 'Overhead' in self._server_timing:
                        ret.append({'Message': "Time profile overhead",
                                    "Start": send_start + delta,
                                    'Sum': self._server_timing['Overhead'],
                                    'End': send_start + delta +
                                           self._server_timing['End'] -
                                           self._server_timing['Start'],
                                    'Count': sum(
                                        [len(msg.get('Times', [])) for msg in
                                         self._server_timing[
                                             'Messages']]) + 1})

                    for msg in self._server_timing['Messages']:
                        ret.append(msg.copy())
                        ret[-1]['Start'] = ret[-1].setdefault(
                            'Start', 0) + delta + send_start
                        ret[-1]['End'] = ret[-1].setdefault(
                            'End', ret[-1]['Sum']) + delta + send_start
                else:
                    ret += self._server_timing['Messages']

            if 'stream' in self._timestamps:
                ret.append(
                    self.time_report_item('stream', 'Streaming the api call'))

            if include_overhead:
                ret.append(self.time_report_item(
                    'receive', 'Overhead from api call "Post Processing"'))

            return 'Total Time: %s \t\tStart Time: %s\n%s' % (
                round(self.timedelta.total_seconds(), digits),
                reformat_date(self._timestamps.get('send', '')),
                str(ReprListDict(ret, col_names=header,
                                 digits=digits).list_of_list()))
        except Exception as ex:
            return "Exception creating time report with %s" % ex.message