Пишу бота на
aiogram
. Сделал
celery
таску, но отрабатывает она не всегда. Вот код хэндлера:
@admin_router.message(CreateEvent.time)
async def cmd_create_event_4(message: Message, state: FSMContext, bot: Bot):
await state.update_data(time=message.text)
data = await state.get_data()
await state.clear()
date = data['date']
time = data['time']
year, month, day = (map(int, date.split('/')))
try:
hour, minute = (map(int, time.split(':')))
datetime = f'{date} {time}'
now = dt.datetime.now()
event_datetime = dt.datetime(year, month, day, hour, minute)
diff = event_datetime - now
seconds = diff.total_seconds()
if seconds < 0:
await message.answer(Admin.event_datetime_passed)
else:
events_table = EventTable()
defer1 = 0
defer3 = 0
if seconds > ONE_DAY_SECONDS:
time = await process_data(year, month, day, hour, minute, 1)
task_1 = start_notificating.apply_async(eta=time,
expires=seconds,
kwargs={'event_name' : data['name'],
'datetime' : f'{date} в {time}',
'left' : Admin.one_day})
defer1 = task_1.id
if seconds > THREE_DAYS_SECONDS:
time = await process_data(year, month, day, hour, minute, 3)
task_3 = start_notificating.apply_async(eta=time,
expires=seconds,
kwargs={'event_name' : data['name'],
'datetime' : f'{date} в {time}',
'left' : Admin.three_days})
defer3 = task_3.id
await events_table.add_event(data['name'], datetime, int(seconds), defer1, defer3)
await message.answer(Admin.event_created_successfully)
except ValueError:
await message.answer(Error.invalid_time_passed)
Когда я поместил создание задачи в блок
if
, она перестала запускаться. Код доходит до условия, оно совпадает, принты из того
if
блока тоже работают, но задача не выполняется.
Что может быть не так?