Передача данных между функциями в дектораторе для 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)