From e8f0d578e15a5ac3069cc912f9915c3e87854fef Mon Sep 17 00:00:00 2001 From: suyiiyii Date: Wed, 30 Oct 2024 20:03:48 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20=E5=B0=86=20Site=20=E7=9A=84?= =?UTF-8?q?=E5=85=83=E7=B1=BB=E4=BB=8E=20RegistryMeta=20=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=20=E6=96=B0=E5=BB=BA=E7=9A=84=20SiteMeta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nonebot_bison/admin_page/api.py | 4 ++-- nonebot_bison/platform/__init__.py | 8 -------- nonebot_bison/utils/site.py | 14 ++++++++++++-- tests/config/test_cookie.py | 3 +-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/nonebot_bison/admin_page/api.py b/nonebot_bison/admin_page/api.py index 2351a32..14111c8 100644 --- a/nonebot_bison/admin_page/api.py +++ b/nonebot_bison/admin_page/api.py @@ -15,10 +15,10 @@ from .jwt import load_jwt, pack_jwt from ..scheduler import scheduler_dict from ..types import Target as T_Target from ..utils.get_bot import get_groups +from ..platform import platform_manager from .token_manager import token_manager from ..config.db_config import SubscribeDupException -from ..platform import site_manager, platform_manager -from ..utils.site import CookieClientManager, is_cookie_client_manager +from ..utils.site import CookieClientManager, site_manager, is_cookie_client_manager from ..config import NoSuchUserException, NoSuchTargetException, NoSuchSubscribeException, config from .types import ( Cookie, diff --git a/nonebot_bison/platform/__init__.py b/nonebot_bison/platform/__init__.py index 063c60d..accdf83 100644 --- a/nonebot_bison/platform/__init__.py +++ b/nonebot_bison/platform/__init__.py @@ -3,7 +3,6 @@ from pkgutil import iter_modules from collections import defaultdict from importlib import import_module -from ..utils import Site from ..plugin_config import plugin_config from .platform import Platform, make_no_target_group @@ -36,10 +35,3 @@ def _get_unavailable_platforms() -> dict[str, str]: # platform => reason for not available unavailable_paltforms: dict[str, str] = _get_unavailable_platforms() - - -site_manager: dict[str, type[Site]] = {} -for site in Site.registry: - if not hasattr(site, "name"): - continue - site_manager[site.name] = site diff --git a/nonebot_bison/utils/site.py b/nonebot_bison/utils/site.py index 141c717..95a5b85 100644 --- a/nonebot_bison/utils/site.py +++ b/nonebot_bison/utils/site.py @@ -9,10 +9,10 @@ import httpx from httpx import AsyncClient from nonebot.log import logger +from ..types import Target from ..config import config from .http import http_client from ..config.db_model import Cookie -from ..types import Target, RegistryMeta class ClientManager(ABC): @@ -161,7 +161,17 @@ def is_cookie_client_manager(manger: type[ClientManager]) -> bool: return issubclass(manger, CookieClientManager) -class Site(metaclass=RegistryMeta, base=True): +site_manager: dict[str, type["Site"]] = {} + + +class SiteMeta(type): + def __init__(cls, *args, **kwargs): + if hasattr(cls, "name"): + site_manager[cls.name] = cls + super().__init__(*args, **kwargs) + + +class Site(metaclass=SiteMeta): schedule_type: Literal["date", "interval", "cron"] schedule_setting: dict name: str diff --git a/tests/config/test_cookie.py b/tests/config/test_cookie.py index 9f29790..8d463d4 100644 --- a/tests/config/test_cookie.py +++ b/tests/config/test_cookie.py @@ -10,12 +10,11 @@ from nonebug import App async def test_cookie(app: App, init_scheduler): from nonebot_plugin_saa import TargetQQGroup - from nonebot_bison.platform import site_manager from nonebot_bison.config.db_config import config from nonebot_bison.scheduler import scheduler_dict from nonebot_bison.types import Target as T_Target - from nonebot_bison.utils.site import CookieClientManager from nonebot_bison.config.utils import DuplicateCookieTargetException + from nonebot_bison.utils.site import CookieClientManager, site_manager target = T_Target("weibo_id") platform_name = "weibo"