diff --git a/src/karkas_blocks/karkas_blocks/standard/config/miniapp_ui.py b/src/karkas_blocks/karkas_blocks/standard/config/miniapp_ui.py index 799be60..56a9964 100644 --- a/src/karkas_blocks/karkas_blocks/standard/config/miniapp_ui.py +++ b/src/karkas_blocks/karkas_blocks/standard/config/miniapp_ui.py @@ -1,8 +1,6 @@ import asyncio from typing import TYPE_CHECKING -from .config_manager import ConfigManager - try: import dash_bootstrap_components as dbc import flask @@ -17,6 +15,8 @@ from karkas_core.modules_system.public_api import get_module if TYPE_CHECKING: from karkas_blocks.standard.roles import Roles as IRoles + from .config_manager import ConfigManager + def create_control(key: str, config: ConfigManager): value = config.get(key) diff --git a/src/karkas_blocks/karkas_blocks/standard/filters/filters.py b/src/karkas_blocks/karkas_blocks/standard/filters/filters.py index dfe98bd..2400d95 100644 --- a/src/karkas_blocks/karkas_blocks/standard/filters/filters.py +++ b/src/karkas_blocks/karkas_blocks/standard/filters/filters.py @@ -1,13 +1,14 @@ from typing import TYPE_CHECKING -from aiogram import Bot from aiogram.filters import BaseFilter -from aiogram.types import Message from typing_extensions import deprecated from karkas_core.modules_system.public_api import get_module if TYPE_CHECKING: + from aiogram import Bot + from aiogram.types import Message + from karkas_blocks.standard.config import IConfig from karkas_blocks.standard.roles import Roles as IRoles diff --git a/src/karkas_blocks/karkas_blocks/standard/help/main.py b/src/karkas_blocks/karkas_blocks/standard/help/main.py index a5e1de0..9a789c9 100644 --- a/src/karkas_blocks/karkas_blocks/standard/help/main.py +++ b/src/karkas_blocks/karkas_blocks/standard/help/main.py @@ -3,7 +3,6 @@ from typing import TYPE_CHECKING from aiogram import Router from aiogram.filters import Command -from aiogram.types import Message from karkas_core.modules_system.public_api import ( get_metainfo, @@ -12,6 +11,8 @@ from karkas_core.modules_system.public_api import ( ) if TYPE_CHECKING: + from aiogram.types import Message + from karkas_blocks.standard.config import IConfig config: "IConfig" = get_module("standard.config", "config") diff --git a/src/karkas_blocks/karkas_blocks/standard/welcome/main.py b/src/karkas_blocks/karkas_blocks/standard/welcome/main.py index bac7446..f52f0a7 100644 --- a/src/karkas_blocks/karkas_blocks/standard/welcome/main.py +++ b/src/karkas_blocks/karkas_blocks/standard/welcome/main.py @@ -7,7 +7,6 @@ from aiogram import Bot, Router, types from aiogram.enums import ChatMemberStatus, ParseMode from aiogram.exceptions import TelegramBadRequest from aiogram.filters import JOIN_TRANSITION, LEAVE_TRANSITION, ChatMemberUpdatedFilter -from aiogram.types import ChatMemberUpdated, PollAnswer from karkas_core.modules_system.public_api import get_module, log, register_router @@ -22,6 +21,8 @@ from .verifications_methods.simple import ( from .verifications_methods.utils import user_mention if TYPE_CHECKING: + from aiogram.types import ChatMemberUpdated, PollAnswer + from karkas_blocks.standard.config import IConfig from karkas_blocks.standard.filters import ChatIDFilter as IChatIDFilter diff --git a/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/base.py b/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/base.py index afc3853..0bb376f 100644 --- a/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/base.py +++ b/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/base.py @@ -1,15 +1,18 @@ import asyncio from functools import wraps +from typing import TYPE_CHECKING -from aiogram import Bot from aiogram.exceptions import TelegramBadRequest from aiogram.filters.callback_data import CallbackData -from aiogram.types import ChatMemberUpdated from karkas_core.modules_system.public_api import log from .utils import mute_user, unmute_user +if TYPE_CHECKING: + from aiogram import Bot + from aiogram.types import ChatMemberUpdated + class BaseTask: def __init__( diff --git a/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/simple.py b/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/simple.py index f396822..d3e8ee3 100644 --- a/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/simple.py +++ b/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/simple.py @@ -1,13 +1,17 @@ from string import Template +from typing import TYPE_CHECKING -from aiogram import Bot from aiogram.enums import ParseMode, PollType -from aiogram.types import ChatMemberUpdated, InlineKeyboardButton, InlineKeyboardMarkup +from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup from ..utils import get_plural_form, key_from_poll, key_from_user_chat from .base import BaseTask, VerificationCallback, mute_while_task from .utils import user_mention +if TYPE_CHECKING: + from aiogram import Bot + from aiogram.types import ChatMemberUpdated + class SimpleBaseTask(BaseTask): pass diff --git a/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/utils.py b/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/utils.py index f544735..20eb56b 100644 --- a/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/utils.py +++ b/src/karkas_blocks/karkas_blocks/standard/welcome/verifications_methods/utils.py @@ -1,9 +1,12 @@ import time +from typing import TYPE_CHECKING -from aiogram import Bot from aiogram.enums import ParseMode from aiogram.types import ChatPermissions, User +if TYPE_CHECKING: + from aiogram import Bot + def user_mention(user: User, mode=ParseMode.HTML): if mode == ParseMode.HTML: diff --git a/src/karkas_core/karkas_core/lib.py b/src/karkas_core/karkas_core/lib.py index 7cc7acb..c126ef3 100644 --- a/src/karkas_core/karkas_core/lib.py +++ b/src/karkas_core/karkas_core/lib.py @@ -1,10 +1,14 @@ import importlib import os import traceback +from typing import TYPE_CHECKING -from aiogram import Bot, Dispatcher from aiogram.types import Update +if TYPE_CHECKING: + from aiogram import Bot, Dispatcher + from fastapi import FastAPI, Request + def get_module_directory(module_name): spec = importlib.util.find_spec(module_name) @@ -16,23 +20,15 @@ def get_module_directory(module_name): return os.path.dirname(module_path) -try: - from fastapi import FastAPI, Request +async def register_bot_webhook(app: FastAPI, bot: Bot, dp: Dispatcher): + async def handle_webhook(request: Request): + try: + update = Update.model_validate(await request.json(), context={"bot": bot}) + await dp.feed_update(bot, update) + except Exception: + traceback.print_exc() + return {"ok": False} - async def register_bot_webhook(app: FastAPI, bot: Bot, dp: Dispatcher): - async def handle_webhook(request: Request): - try: - update = Update.model_validate( - await request.json(), context={"bot": bot} - ) - await dp.feed_update(bot, update) - except Exception: - traceback.print_exc() - return {"ok": False} + return {"ok": True} - return {"ok": True} - - app.post("/webhook")(handle_webhook) - -except ImportError: - pass + app.post("/webhook")(handle_webhook) diff --git a/src/karkas_core/karkas_core/modules_system/loaders/base.py b/src/karkas_core/karkas_core/modules_system/loaders/base.py index ebcb89e..74f848f 100644 --- a/src/karkas_core/karkas_core/modules_system/loaders/base.py +++ b/src/karkas_core/karkas_core/modules_system/loaders/base.py @@ -1,9 +1,11 @@ -import types from dataclasses import dataclass -from typing import Dict, List, Optional, Union +from typing import TYPE_CHECKING, Dict, List, Optional, Union from dataclasses_json import dataclass_json +if TYPE_CHECKING: + import types + @dataclass_json @dataclass diff --git a/src/karkas_core/karkas_core/modules_system/public_api/public_api.py b/src/karkas_core/karkas_core/modules_system/public_api/public_api.py index 53e6185..3fb36c9 100644 --- a/src/karkas_core/karkas_core/modules_system/public_api/public_api.py +++ b/src/karkas_core/karkas_core/modules_system/public_api/public_api.py @@ -1,8 +1,7 @@ import inspect import types -from typing import Any, Tuple, Union +from typing import TYPE_CHECKING, Any, Tuple, Union -from aiogram import BaseMiddleware, Router from aiogram.fsm.context import FSMContext from aiogram.fsm.storage.base import StorageKey @@ -10,6 +9,9 @@ from aiogram.fsm.storage.base import StorageKey from karkas_core.modules_system.loaders.base import DependencyInfo from karkas_core.singleton import Singleton +if TYPE_CHECKING: + from aiogram import BaseMiddleware, Router + async def set_chat_menu_button(menu_button): app = Singleton() diff --git a/src/karkas_core/karkas_core/modules_system/safe/policy.py b/src/karkas_core/karkas_core/modules_system/safe/policy.py index 8dfc14b..f41f185 100644 --- a/src/karkas_core/karkas_core/modules_system/safe/policy.py +++ b/src/karkas_core/karkas_core/modules_system/safe/policy.py @@ -1,6 +1,5 @@ import types -from _ast import AnnAssign -from typing import Any +from typing import TYPE_CHECKING, Any from aiogram import Bot from RestrictedPython import ( @@ -20,6 +19,9 @@ from RestrictedPython.Guards import ( # guarded_setattr,; full_write_guard, from karkas_core.logger import log from karkas_core.modules_system.safe.zope_guards import extra_safe_builtins +if TYPE_CHECKING: + from _ast import AnnAssign + class RestrictedPythonPolicy(RestrictingNodeTransformer): def visit_AsyncFunctionDef(self, node): diff --git a/src/karkas_core/karkas_core/singleton.py b/src/karkas_core/karkas_core/singleton.py index d0db542..a46a058 100644 --- a/src/karkas_core/karkas_core/singleton.py +++ b/src/karkas_core/karkas_core/singleton.py @@ -1,7 +1,11 @@ -from aiogram import Bot, Dispatcher +from typing import TYPE_CHECKING + from aiogram.fsm.storage.memory import MemoryStorage -from karkas_core.modules_system import ModulesManager +if TYPE_CHECKING: + from aiogram import Bot, Dispatcher + + from karkas_core.modules_system import ModulesManager class SingletonMeta(type):