Как взять значение из словаря в функции

Через aoigram и fsmcontext записываю дату введенную пользователем в формате isoweekday()(Понедельник - 1, вторник - 2 ... и тд) в словарь. До этого создал этот словарь current_data и получается, что через current_data = state.set_state() обновляю значение на введенное пользователем. Дальше нужно сделать проверку типа if '1' in current_data:... И так от 1 до 7, в зависимости от того, какой день недели будет в веденную дату. Но при проверке оператор смотрит на словарь, ранее заданный как dict() с пустыми значениями. Как можно взять словарь из функции, и дальше работать с ним? Пытался сделать current_data глобальным но не работает.

class Vvod(StatesGroup):
    data = State()
    data1 = State()

current_data = dict()


@router.message(Vvod.data)
async def dostal_datu(message: Message, state: FSMContext):
    data1 = message.text

    correctdate = None

    for funcs in range(0, 1):
            try:
                global poluch1
                poluch1 = DT.datetime.strptime(data1, '%d-%m-%Y')
                correctdate = 'Спасибо, дата введена успешно'
                if correctdate == 'Спасибо, дата введена успешно':
                    poluchosn = poluch1.isoweekday()

                await state.update_data(data1=str(poluchosn))

                await message.answer(str(correctdate))
                global current_data
                current_data = await state.get_data()

                await state.clear()
#ухожу с цикла на следующий state
                await state.set_state(Vvod.data1)

            except ValueError:
                correctdate = 'Не верный формат даты, необходимо ДД-ММ-ГГГГ, введите дату еще раз:'
                await message.answer(str(correctdate))
#При неправильном вводе даты перехожу в начало 
                await state.set_state(Vvod.data)

@router.message(Vvod.data1)
async def next(message: Message, state: FSMContext):
    if '1' in current_data:
        await message.answer('Значение равно 1')
    else: 
        await message.answer('такого значения нет')

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

Автор решения: Ben Puls

Вы можете передавать данные через саму машину состояний. Сделать это достаточно просто, для этого в FSMContext существует метод update_data(). Он позволяет записать необходимые данные, а с помощью get_data() вы сможете получить необходимые данные в другой функции.

Вы можете сохранить необходимые вам данные таким образом:

@router.message(Vvod.data)
async def dostal_datu(message: Message, state: FSMContext):
    data1 = message.text
    
    await state.update_data(important_data=data1)
    await state.set_state(Vvod.data1)


@router.message(Vvod.data1)
async def next(message: Message, state: FSMContext):
    my_important_data = await state.get_data().get("important_data", "something_else")
    if my_important_data == "1":
        await message.answer('Значение равно 1')
        await state.clear()
    else: 
        await message.answer('такого значения нет')
→ Ссылка