Создание функции для части кода
В данном хендлере:
@dp.callback_query_handler(text='call')
async def answer(call: CallbackQuery):
connect = sqlite3.connect('main.db')
cursor = connect.cursor()
cursor.execute('SELECT grup FROM Users WHERE id = ?', (call.from_user.id,))
result = cursor.fetchone()
if result is None:
print('none')
for row in result:
if row == '1':
cursor.execute("SELECT `Tab` FROM `Spisok` WHERE `Par` = 'rez'")
row = cursor.fetchone()
await call.message.answer(row[0])
Имею вот такое начало. которое повторяется во всех других хендрерах. Как эту часть кода сделать отдельной функцией, и не писать в каждом хендлере ?
async def answer(call: CallbackQuery):
connect = sqlite3.connect('main.db')
cursor = connect.cursor()
cursor.execute('SELECT grup FROM Users WHERE id = ?', (call.from_user.id,))
result = cursor.fetchone()
if result is None:
print('none')
for row in result:
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Сделайте contextmanager:
from contextlib import contextmanager
@contextmanager
def get_user(call: CallbackQuery):
connect = sqlite3.connect('main.db')
cursor = connect.cursor()
cursor.execute('SELECT grup FROM Users WHERE id = ?', (call.from_user.id,))
result = cursor.fetchone()
if result is None:
print('none')
else:
for row in result:
yield row
@dp.callback_query_handler(text='call')
async def answer(call: CallbackQuery):
with get_user(call) as row:
if row == '1':
cursor.execute("SELECT `Tab` FROM `Spisok` WHERE `Par` = 'rez'")
row = cursor.fetchone()
await call.message.answer(row[0])