♻️ 将 Site 的元类从 RegistryMeta 改为 新建的 SiteMeta

This commit is contained in:
suyiiyii 2024-10-30 20:03:48 +08:00
parent 60dd2c4bab
commit e8f0d578e1
Signed by: suyiiyii
GPG Key ID: 044704CB29B8AD85
4 changed files with 15 additions and 14 deletions

View File

@ -15,10 +15,10 @@ from .jwt import load_jwt, pack_jwt
from ..scheduler import scheduler_dict from ..scheduler import scheduler_dict
from ..types import Target as T_Target from ..types import Target as T_Target
from ..utils.get_bot import get_groups from ..utils.get_bot import get_groups
from ..platform import platform_manager
from .token_manager import token_manager from .token_manager import token_manager
from ..config.db_config import SubscribeDupException from ..config.db_config import SubscribeDupException
from ..platform import site_manager, platform_manager from ..utils.site import CookieClientManager, site_manager, is_cookie_client_manager
from ..utils.site import CookieClientManager, is_cookie_client_manager
from ..config import NoSuchUserException, NoSuchTargetException, NoSuchSubscribeException, config from ..config import NoSuchUserException, NoSuchTargetException, NoSuchSubscribeException, config
from .types import ( from .types import (
Cookie, Cookie,

View File

@ -3,7 +3,6 @@ from pkgutil import iter_modules
from collections import defaultdict from collections import defaultdict
from importlib import import_module from importlib import import_module
from ..utils import Site
from ..plugin_config import plugin_config from ..plugin_config import plugin_config
from .platform import Platform, make_no_target_group from .platform import Platform, make_no_target_group
@ -36,10 +35,3 @@ def _get_unavailable_platforms() -> dict[str, str]:
# platform => reason for not available # platform => reason for not available
unavailable_paltforms: dict[str, str] = _get_unavailable_platforms() 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

View File

@ -9,10 +9,10 @@ import httpx
from httpx import AsyncClient from httpx import AsyncClient
from nonebot.log import logger from nonebot.log import logger
from ..types import Target
from ..config import config from ..config import config
from .http import http_client from .http import http_client
from ..config.db_model import Cookie from ..config.db_model import Cookie
from ..types import Target, RegistryMeta
class ClientManager(ABC): class ClientManager(ABC):
@ -161,7 +161,17 @@ def is_cookie_client_manager(manger: type[ClientManager]) -> bool:
return issubclass(manger, CookieClientManager) 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_type: Literal["date", "interval", "cron"]
schedule_setting: dict schedule_setting: dict
name: str name: str

View File

@ -10,12 +10,11 @@ from nonebug import App
async def test_cookie(app: App, init_scheduler): async def test_cookie(app: App, init_scheduler):
from nonebot_plugin_saa import TargetQQGroup from nonebot_plugin_saa import TargetQQGroup
from nonebot_bison.platform import site_manager
from nonebot_bison.config.db_config import config from nonebot_bison.config.db_config import config
from nonebot_bison.scheduler import scheduler_dict from nonebot_bison.scheduler import scheduler_dict
from nonebot_bison.types import Target as T_Target 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.config.utils import DuplicateCookieTargetException
from nonebot_bison.utils.site import CookieClientManager, site_manager
target = T_Target("weibo_id") target = T_Target("weibo_id")
platform_name = "weibo" platform_name = "weibo"