Простая утилита для синхронного выполнения асинхронных функций с корректным сохранением типов. IDE правильно определит тип возвращаемого значения благодаря использованию TypeVar.
Проблема
При обычном вызове asyncio.run() IDE теряет информацию о типе:
asyncdeffetch_book(id: int) -> BookModel:
...
# IDE не знает, что это BookModel
book = asyncio.run(fetch_book(123))
Решение
Функция sync_await с правильной типизацией через TypeVar:
book = sync_await(fetch_book(4325)) # ✅ IDE корректно определяет тип как BookModel
print(book.title) # Автодополнение работает!
Использование
example.py
from sync_await import sync_await
classBookModel(BaseModel):
id: int
title: str
content: str
asyncdeffetch_book(id: int) -> BookModel:
...
if__name__=="__main__":
book = sync_await(fetch_book(4325)) # IDE корректно определит тип переменной book