Передача данных между функциями в дектораторе для callback_query_handler

Я написал бота, который отдает по расписанию статистику из БД. Сам запрос достаточно жадный и постоянно его дергать не удобно. Так как приходиться ждать ответа.

Вот тут и основная проблема. Каждый раз когда я жму на кнопку, он снова идёт в БД и это тянется по несколько минут, что не удобно. По хорошему надо данные из send_statistic() передавать дальше в callback_query_handler.

Если инициализировать класс раньше вне send_statistic(), т.е. есть шанс, что кто-то может вызвать инициализацию класса и данные будут другими.

Подскажите, как лучше передать данные, которые получили в send_statistic() в callback_query_handler?

@bot.message_handler(commands=["stat"])
    def send_statistic(self,message):
        psql = PSQL() #это класс, который ходит в Postgres
        data = psql.GetQuery() #query
        sort = SORT() #это класс который сортирует фетч таблицы во что-то удобоваримое
        sort_data = sort.GetSortData(data) #Отсортированные данные
        keys = types.InlineKeyboardMarkup()
        keys.add(types.InlineKeyboardButton(text="Расширенная статистика", callback_data='full_stat'))
        keys.add(types.InlineKeyboardButton(text="CSV Отчет", callback_data='report'))
        bot.send_message(message.from_user.id, "Текст с кнопками"+data,reply_markup=keys)

@bot.callback_query_handler(func=lambda call:True)
def send_full_stat(call):
    logger.info("Переход по кнопке")
    if call.data == 'full_stat':
        psql = PSQL() #Снова инициализируем
        data = psql.GetQuery() #query
        sort = SORT() #это класс который сортирует фетч таблицы во что-то удобоваримое
        sort_data = sort.GetFullSortData(data) #По другому отсортированные данные
    if call.data == 'report':
        psql = PSQL() #это класс, который ходит в Postgres
        data = psql.GetQuery() #query
        path_to_csv = REPORT.CreateCSVReport(psql.UNLOAD_HEAD, psql.UNLOAD, call.message.user.id)
        report = open(path_to_csv, 'rb')
        bot.send_document(call.message.from_user.id, report)

Ответы (0 шт):