♻️ rename scheduler_config -> site

This commit is contained in:
felinae98 2024-06-02 22:36:02 +08:00
parent 2fc11a9653
commit 5bd8b21f19
27 changed files with 135 additions and 169 deletions

View File

@ -5,7 +5,7 @@ from .platform import platform_manager
async def check_sub_target(platform_name: str, target: Target): async def check_sub_target(platform_name: str, target: Target):
platform = platform_manager[platform_name] platform = platform_manager[platform_name]
scheduler_conf_class = platform.scheduler scheduler_conf_class = platform.site
scheduler = scheduler_dict[scheduler_conf_class] scheduler = scheduler_dict[scheduler_conf_class]
client = await scheduler.client_mgr.get_query_name_client() client = await scheduler.client_mgr.get_query_name_client()

View File

@ -8,9 +8,9 @@ from pydantic import Field, BaseModel
from nonebot.compat import type_validate_python from nonebot.compat import type_validate_python
from ..post import Post from ..post import Post
from ..utils import Site
from ..types import Target, RawPost, Category from ..types import Target, RawPost, Category
from .platform import NewMessage, StatusChange from .platform import NewMessage, StatusChange
from ..utils.scheduler_config import SchedulerConfig
class ArkResponseBase(BaseModel): class ArkResponseBase(BaseModel):
@ -52,7 +52,7 @@ class ArkBulletinResponse(ArkResponseBase):
data: BulletinData data: BulletinData
class ArknightsSchedConf(SchedulerConfig): class ArknightsSite(Site):
name = "arknights" name = "arknights"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"seconds": 30} schedule_setting = {"seconds": 30}
@ -65,7 +65,7 @@ class Arknights(NewMessage):
enable_tag = False enable_tag = False
enabled = True enabled = True
is_common = False is_common = False
scheduler = ArknightsSchedConf site = ArknightsSite
has_target = False has_target = False
default_theme = "arknights" default_theme = "arknights"
@ -127,7 +127,7 @@ class AkVersion(StatusChange):
enable_tag = False enable_tag = False
enabled = True enabled = True
is_common = False is_common = False
scheduler = ArknightsSchedConf site = ArknightsSite
has_target = False has_target = False
default_theme = "brief" default_theme = "brief"
@ -172,7 +172,7 @@ class MonsterSiren(NewMessage):
enable_tag = False enable_tag = False
enabled = True enabled = True
is_common = False is_common = False
scheduler = ArknightsSchedConf site = ArknightsSite
has_target = False has_target = False
@classmethod @classmethod
@ -220,7 +220,7 @@ class TerraHistoricusComic(NewMessage):
enable_tag = False enable_tag = False
enabled = True enabled = True
is_common = False is_common = False
scheduler = ArknightsSchedConf site = ArknightsSite
has_target = False has_target = False
default_theme = "brief" default_theme = "brief"

View File

@ -11,12 +11,10 @@ from nonebot.log import logger
from pydantic import Field, BaseModel from pydantic import Field, BaseModel
from nonebot.compat import PYDANTIC_V2, ConfigDict, type_validate_json, type_validate_python from nonebot.compat import PYDANTIC_V2, ConfigDict, type_validate_json, type_validate_python
from nonebot_bison.compat import model_rebuild
from nonebot_bison.utils.scheduler_config import ClientManager
from ..post import Post from ..post import Post
from ..compat import model_rebuild
from ..types import Tag, Target, RawPost, ApiError, Category from ..types import Tag, Target, RawPost, ApiError, Category
from ..utils import SchedulerConfig, http_client, text_similarity from ..utils import Site, ClientManager, http_client, text_similarity
from .platform import NewMessage, StatusChange, CategoryNotSupport, CategoryNotRecognize from .platform import NewMessage, StatusChange, CategoryNotSupport, CategoryNotRecognize
TBaseModel = TypeVar("TBaseModel", bound=type[BaseModel]) TBaseModel = TypeVar("TBaseModel", bound=type[BaseModel])
@ -133,18 +131,18 @@ class BilibiliClient(ClientManager):
return self._client return self._client
class BilibiliSchedConf(SchedulerConfig): class BilibiliSite(Site):
name = "bilibili.com" name = "bilibili.com"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"seconds": 10} schedule_setting = {"seconds": 10}
client_man = BilibiliClient client_mgr = BilibiliClient
class BililiveSchedConf(SchedulerConfig): class BililiveSchedConf(Site):
name = "live.bilibili.com" name = "live.bilibili.com"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"seconds": 3} schedule_setting = {"seconds": 3}
client_man = BilibiliClient client_mgr = BilibiliClient
class Bilibili(NewMessage): class Bilibili(NewMessage):
@ -160,7 +158,7 @@ class Bilibili(NewMessage):
enable_tag = True enable_tag = True
enabled = True enabled = True
is_common = True is_common = True
scheduler = BilibiliSchedConf site = BilibiliSite
name = "B站" name = "B站"
has_target = True has_target = True
parse_target_promot = "请输入用户主页的链接" parse_target_promot = "请输入用户主页的链接"
@ -333,7 +331,7 @@ class Bilibililive(StatusChange):
enable_tag = False enable_tag = False
enabled = True enabled = True
is_common = True is_common = True
scheduler = BililiveSchedConf site = BililiveSchedConf
name = "Bilibili直播" name = "Bilibili直播"
has_target = True has_target = True
use_batch = True use_batch = True
@ -483,7 +481,7 @@ class BilibiliBangumi(StatusChange):
enable_tag = False enable_tag = False
enabled = True enabled = True
is_common = True is_common = True
scheduler = BilibiliSchedConf site = BilibiliSite
name = "Bilibili剧集" name = "Bilibili剧集"
has_target = True has_target = True
parse_target_promot = "请输入剧集主页" parse_target_promot = "请输入剧集主页"

View File

@ -3,8 +3,8 @@ from typing import Any
from httpx import AsyncClient from httpx import AsyncClient
from ..post import Post from ..post import Post
from ..utils import scheduler
from .platform import NewMessage from .platform import NewMessage
from ..utils import anonymous_site
from ..types import Target, RawPost from ..types import Target, RawPost
@ -16,7 +16,7 @@ class FF14(NewMessage):
enabled = True enabled = True
is_common = False is_common = False
scheduler_class = "ff14" scheduler_class = "ff14"
scheduler = scheduler("interval", {"seconds": 60}) site = anonymous_site("interval", {"seconds": 60})
has_target = False has_target = False
@classmethod @classmethod

View File

@ -4,12 +4,12 @@ from typing import Any
from httpx import AsyncClient from httpx import AsyncClient
from ..post import Post from ..post import Post
from ..utils import Site
from .platform import NewMessage from .platform import NewMessage
from ..utils import SchedulerConfig
from ..types import Target, RawPost, ApiError from ..types import Target, RawPost, ApiError
class NcmSchedConf(SchedulerConfig): class NcmSite(Site):
name = "music.163.com" name = "music.163.com"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"minutes": 1} schedule_setting = {"minutes": 1}
@ -21,7 +21,7 @@ class NcmArtist(NewMessage):
enable_tag = False enable_tag = False
enabled = True enabled = True
is_common = True is_common = True
scheduler = NcmSchedConf site = NcmSite
name = "网易云-歌手" name = "网易云-歌手"
has_target = True has_target = True
parse_target_promot = "请输入歌手主页包含数字ID的链接" parse_target_promot = "请输入歌手主页包含数字ID的链接"
@ -78,7 +78,7 @@ class NcmRadio(NewMessage):
enable_tag = False enable_tag = False
enabled = True enabled = True
is_common = False is_common = False
scheduler = NcmSchedConf site = NcmSite
name = "网易云-电台" name = "网易云-电台"
has_target = True has_target = True
parse_target_promot = "请输入主播电台主页包含数字ID的链接" parse_target_promot = "请输入主播电台主页包含数字ID的链接"

View File

@ -14,8 +14,8 @@ from nonebot.log import logger
from nonebot_plugin_saa import PlatformTarget from nonebot_plugin_saa import PlatformTarget
from ..post import Post from ..post import Post
from ..utils import Site, ProcessContext
from ..plugin_config import plugin_config from ..plugin_config import plugin_config
from ..utils import ProcessContext, SchedulerConfig
from ..types import Tag, Target, RawPost, SubUnit, Category from ..types import Tag, Target, RawPost, SubUnit, Category
@ -81,7 +81,7 @@ class PlatformABCMeta(PlatformMeta, ABC): ...
class Platform(metaclass=PlatformABCMeta, base=True): class Platform(metaclass=PlatformABCMeta, base=True):
scheduler: type[SchedulerConfig] site: type[Site]
ctx: ProcessContext ctx: ProcessContext
is_common: bool is_common: bool
enabled: bool enabled: bool
@ -444,7 +444,7 @@ def make_no_target_group(platform_list: list[type[Platform]]) -> type[Platform]:
name = DUMMY_STR name = DUMMY_STR
categories_keys = set() categories_keys = set()
categories = {} categories = {}
scheduler = platform_list[0].scheduler site = platform_list[0].site
for platform in platform_list: for platform in platform_list:
if platform.has_target: if platform.has_target:
@ -458,7 +458,7 @@ def make_no_target_group(platform_list: list[type[Platform]]) -> type[Platform]:
raise RuntimeError(f"Platform categories for {platform_name} duplicate") raise RuntimeError(f"Platform categories for {platform_name} duplicate")
categories_keys |= platform_category_key_set categories_keys |= platform_category_key_set
categories.update(platform.categories) categories.update(platform.categories)
if platform.scheduler != scheduler: if platform.site != site:
raise RuntimeError(f"Platform scheduler for {platform_name} not fit") raise RuntimeError(f"Platform scheduler for {platform_name} not fit")
def __init__(self: "NoTargetGroup", ctx: ProcessContext): def __init__(self: "NoTargetGroup", ctx: ProcessContext):
@ -490,7 +490,7 @@ def make_no_target_group(platform_list: list[type[Platform]]) -> type[Platform]:
"platform_name": platform_list[0].platform_name, "platform_name": platform_list[0].platform_name,
"name": name, "name": name,
"categories": categories, "categories": categories,
"scheduler": scheduler, "site": site,
"is_common": platform_list[0].is_common, "is_common": platform_list[0].is_common,
"enabled": True, "enabled": True,
"has_target": False, "has_target": False,

View File

@ -9,10 +9,10 @@ from bs4 import BeautifulSoup as bs
from ..post import Post from ..post import Post
from .platform import NewMessage from .platform import NewMessage
from ..types import Target, RawPost from ..types import Target, RawPost
from ..utils import SchedulerConfig, text_similarity from ..utils import Site, text_similarity
class RssSchedConf(SchedulerConfig): class RssSite(Site):
name = "rss" name = "rss"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"seconds": 30} schedule_setting = {"seconds": 30}
@ -25,7 +25,7 @@ class Rss(NewMessage):
name = "Rss" name = "Rss"
enabled = True enabled = True
is_common = True is_common = True
scheduler = RssSchedConf site = RssSite
has_target = True has_target = True
@classmethod @classmethod

View File

@ -12,7 +12,7 @@ from bs4 import BeautifulSoup as bs
from ..post import Post from ..post import Post
from .platform import NewMessage from .platform import NewMessage
from ..utils import SchedulerConfig, http_client from ..utils import Site, http_client
from ..types import Tag, Target, RawPost, ApiError, Category from ..types import Tag, Target, RawPost, ApiError, Category
_HEADER = { _HEADER = {
@ -35,7 +35,7 @@ _HEADER = {
} }
class WeiboSchedConf(SchedulerConfig): class WeiboSite(Site):
name = "weibo.com" name = "weibo.com"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"seconds": 3} schedule_setting = {"seconds": 3}
@ -53,7 +53,7 @@ class Weibo(NewMessage):
name = "新浪微博" name = "新浪微博"
enabled = True enabled = True
is_common = True is_common = True
scheduler = WeiboSchedConf site = WeiboSite
has_target = True has_target = True
parse_target_promot = "请输入用户主页包含数字UID的链接" parse_target_promot = "请输入用户主页包含数字UID的链接"

View File

@ -1,37 +1,37 @@
from nonebot.log import logger from nonebot.log import logger
from ..utils import Site
from ..config import config from ..config import config
from .scheduler import Scheduler from .scheduler import Scheduler
from ..utils import SchedulerConfig
from ..config.db_model import Target from ..config.db_model import Target
from ..types import Target as T_Target from ..types import Target as T_Target
from ..platform import platform_manager from ..platform import platform_manager
from ..plugin_config import plugin_config from ..plugin_config import plugin_config
scheduler_dict: dict[type[SchedulerConfig], Scheduler] = {} scheduler_dict: dict[type[Site], Scheduler] = {}
async def init_scheduler(): async def init_scheduler():
_schedule_class_dict: dict[type[SchedulerConfig], list[Target]] = {} _schedule_class_dict: dict[type[Site], list[Target]] = {}
_schedule_class_platform_dict: dict[type[SchedulerConfig], list[str]] = {} _schedule_class_platform_dict: dict[type[Site], list[str]] = {}
for platform in platform_manager.values(): for platform in platform_manager.values():
scheduler_config = platform.scheduler site = platform.site
if not hasattr(scheduler_config, "name") or not scheduler_config.name: if not hasattr(site, "name") or not site.name:
scheduler_config.name = f"AnonymousScheduleConfig[{platform.platform_name}]" site.name = f"AnonymousScheduleConfig[{platform.platform_name}]"
platform_name = platform.platform_name platform_name = platform.platform_name
targets = await config.get_platform_target(platform_name) targets = await config.get_platform_target(platform_name)
if scheduler_config not in _schedule_class_dict: if site not in _schedule_class_dict:
_schedule_class_dict[scheduler_config] = list(targets) _schedule_class_dict[site] = list(targets)
else: else:
_schedule_class_dict[scheduler_config].extend(targets) _schedule_class_dict[site].extend(targets)
if scheduler_config not in _schedule_class_platform_dict: if site not in _schedule_class_platform_dict:
_schedule_class_platform_dict[scheduler_config] = [platform_name] _schedule_class_platform_dict[site] = [platform_name]
else: else:
_schedule_class_platform_dict[scheduler_config].append(platform_name) _schedule_class_platform_dict[site].append(platform_name)
for scheduler_config, target_list in _schedule_class_dict.items(): for site, target_list in _schedule_class_dict.items():
if not plugin_config.bison_use_browser and scheduler_config.require_browser: if not plugin_config.bison_use_browser and site.require_browser:
logger.warning(f"{scheduler_config.name} requires browser, it will not schedule.") logger.warning(f"{site.name} requires browser, it will not schedule.")
continue continue
schedulable_args = [] schedulable_args = []
@ -39,19 +39,19 @@ async def init_scheduler():
schedulable_args.append( schedulable_args.append(
(target.platform_name, T_Target(target.target), platform_manager[target.platform_name].use_batch) (target.platform_name, T_Target(target.target), platform_manager[target.platform_name].use_batch)
) )
platform_name_list = _schedule_class_platform_dict[scheduler_config] platform_name_list = _schedule_class_platform_dict[site]
scheduler_dict[scheduler_config] = Scheduler(scheduler_config, schedulable_args, platform_name_list) scheduler_dict[site] = Scheduler(site, schedulable_args, platform_name_list)
config.register_add_target_hook(handle_insert_new_target) config.register_add_target_hook(handle_insert_new_target)
config.register_delete_target_hook(handle_delete_target) config.register_delete_target_hook(handle_delete_target)
async def handle_insert_new_target(platform_name: str, target: T_Target): async def handle_insert_new_target(platform_name: str, target: T_Target):
platform = platform_manager[platform_name] platform = platform_manager[platform_name]
scheduler_obj = scheduler_dict[platform.scheduler] scheduler_obj = scheduler_dict[platform.site]
scheduler_obj.insert_new_schedulable(platform_name, target) scheduler_obj.insert_new_schedulable(platform_name, target)
async def handle_delete_target(platform_name: str, target: T_Target): async def handle_delete_target(platform_name: str, target: T_Target):
platform = platform_manager[platform_name] platform = platform_manager[platform_name]
scheduler_obj = scheduler_dict[platform.scheduler] scheduler_obj = scheduler_dict[platform.site]
scheduler_obj.delete_schedulable(platform_name, target) scheduler_obj.delete_schedulable(platform_name, target)

View File

@ -5,13 +5,13 @@ from nonebot.log import logger
from nonebot_plugin_apscheduler import scheduler from nonebot_plugin_apscheduler import scheduler
from nonebot_plugin_saa.utils.exceptions import NoBotFound from nonebot_plugin_saa.utils.exceptions import NoBotFound
from nonebot_bison.utils.scheduler_config import ClientManager from nonebot_bison.utils import ClientManager
from ..config import config from ..config import config
from ..send import send_msgs from ..send import send_msgs
from ..types import Target, SubUnit from ..types import Target, SubUnit
from ..platform import platform_manager from ..platform import platform_manager
from ..utils import ProcessContext, SchedulerConfig from ..utils import Site, ProcessContext
@dataclass @dataclass
@ -30,7 +30,7 @@ class Scheduler:
def __init__( def __init__(
self, self,
scheduler_config: type[SchedulerConfig], scheduler_config: type[Site],
schedulables: list[tuple[str, Target, bool]], # [(platform_name, target, use_batch)] schedulables: list[tuple[str, Target, bool]], # [(platform_name, target, use_batch)]
platform_name_list: list[str], platform_name_list: list[str],
): ):

View File

@ -8,27 +8,17 @@ from bs4 import BeautifulSoup as bs
from nonebot.log import logger, default_format from nonebot.log import logger, default_format
from nonebot_plugin_saa import Text, Image, MessageSegmentFactory from nonebot_plugin_saa import Text, Image, MessageSegmentFactory
from .http import http_client from .site import Site as Site
from .context import ProcessContext
from ..plugin_config import plugin_config from ..plugin_config import plugin_config
from .image import pic_merge, text_to_image, is_pics_mergable, pic_url_to_image from .image import pic_merge as pic_merge
from .scheduler_config import ClientManager, SchedulerConfig, DefaultClientManager, scheduler from .http import http_client as http_client
from .site import ClientManager as ClientManager
__all__ = [ from .image import text_to_image as text_to_image
"http_client", from .site import anonymous_site as anonymous_site
"Singleton", from .context import ProcessContext as ProcessContext
"parse_text", from .image import is_pics_mergable as is_pics_mergable
"ProcessContext", from .image import pic_url_to_image as pic_url_to_image
"ClientManager", from .site import DefaultClientManager as DefaultClientManager
"DefaultClientManager",
"html_to_text",
"SchedulerConfig",
"scheduler",
"pic_merge",
"pic_url_to_image",
"is_pics_mergable",
"text_to_image",
]
class Singleton(type): class Singleton(type):

View File

@ -4,7 +4,7 @@ from httpx import Response, AsyncClient
from nonebot_bison.types import Target from nonebot_bison.types import Target
from .scheduler_config import ClientManager from .site import ClientManager
class ProcessContext: class ProcessContext:

View File

@ -28,7 +28,7 @@ class DefaultClientManager(ClientManager):
return http_client() return http_client()
class SchedulerConfig: class Site:
schedule_type: Literal["date", "interval", "cron"] schedule_type: Literal["date", "interval", "cron"]
schedule_setting: dict schedule_setting: dict
name: str name: str
@ -42,10 +42,10 @@ class SchedulerConfig:
self.default_http_client = http_client() self.default_http_client = http_client()
def scheduler(schedule_type: Literal["date", "interval", "cron"], schedule_setting: dict) -> type[SchedulerConfig]: def anonymous_site(schedule_type: Literal["date", "interval", "cron"], schedule_setting: dict) -> type[Site]:
return type( return type(
"AnonymousScheduleConfig", "AnonymousSite",
(SchedulerConfig,), (Site,),
{ {
"schedule_type": schedule_type, "schedule_type": schedule_type,
"schedule_setting": schedule_setting, "schedule_setting": schedule_setting,

View File

@ -11,9 +11,8 @@ from .utils import get_file, get_json
@pytest.fixture() @pytest.fixture()
def arknights(app: App): def arknights(app: App):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
return platform_manager["arknights"](ProcessContext(DefaultClientManager())) return platform_manager["arknights"](ProcessContext(DefaultClientManager()))
@ -45,8 +44,7 @@ def monster_siren_list_1():
@respx.mock @respx.mock
async def test_url_parse(app: App): async def test_url_parse(app: App):
from nonebot_bison.utils import ProcessContext from nonebot_bison.utils import ProcessContext, DefaultClientManager
from nonebot_bison.utils.scheduler_config import DefaultClientManager
from nonebot_bison.platform.arknights import Arknights, BulletinData, BulletinListItem, ArkBulletinResponse from nonebot_bison.platform.arknights import Arknights, BulletinData, BulletinListItem, ArkBulletinResponse
cid_router = respx.get("https://ak-webview.hypergryph.com/api/game/bulletin/1") cid_router = respx.get("https://ak-webview.hypergryph.com/api/game/bulletin/1")
@ -114,8 +112,7 @@ async def test_url_parse(app: App):
@pytest.mark.asyncio() @pytest.mark.asyncio()
async def test_get_date_in_bulletin(app: App): async def test_get_date_in_bulletin(app: App):
from nonebot_bison.utils import ProcessContext from nonebot_bison.utils import ProcessContext, DefaultClientManager
from nonebot_bison.utils.scheduler_config import DefaultClientManager
from nonebot_bison.platform.arknights import Arknights, BulletinListItem from nonebot_bison.platform.arknights import Arknights, BulletinListItem
arknights = Arknights(ProcessContext(DefaultClientManager())) arknights = Arknights(ProcessContext(DefaultClientManager()))
@ -137,8 +134,7 @@ async def test_get_date_in_bulletin(app: App):
@pytest.mark.asyncio() @pytest.mark.asyncio()
@respx.mock @respx.mock
async def test_parse_with_breakline(app: App): async def test_parse_with_breakline(app: App):
from nonebot_bison.utils import ProcessContext from nonebot_bison.utils import ProcessContext, DefaultClientManager
from nonebot_bison.utils.scheduler_config import DefaultClientManager
from nonebot_bison.platform.arknights import Arknights, BulletinListItem from nonebot_bison.platform.arknights import Arknights, BulletinListItem
detail = get_json("arknights-detail-805") detail = get_json("arknights-detail-805")

View File

@ -23,9 +23,8 @@ if typing.TYPE_CHECKING:
@pytest.fixture() @pytest.fixture()
def bilibili(app: App) -> "Bilibili": def bilibili(app: App) -> "Bilibili":
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
return platform_manager["bilibili"](ProcessContext(DefaultClientManager())) # type: ignore return platform_manager["bilibili"](ProcessContext(DefaultClientManager())) # type: ignore

View File

@ -13,9 +13,8 @@ if typing.TYPE_CHECKING:
@pytest.fixture() @pytest.fixture()
def bili_bangumi(app: App): def bili_bangumi(app: App):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
return platform_manager["bilibili-bangumi"](ProcessContext(DefaultClientManager())) return platform_manager["bilibili-bangumi"](ProcessContext(DefaultClientManager()))

View File

@ -8,9 +8,8 @@ from .utils import get_json
@pytest.fixture() @pytest.fixture()
def ff14(app: App): def ff14(app: App):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
return platform_manager["ff14"](ProcessContext(DefaultClientManager())) return platform_manager["ff14"](ProcessContext(DefaultClientManager()))

View File

@ -14,9 +14,8 @@ if typing.TYPE_CHECKING:
@pytest.fixture() @pytest.fixture()
def ncm_artist(app: App): def ncm_artist(app: App):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
return platform_manager["ncm-artist"](ProcessContext(DefaultClientManager())) return platform_manager["ncm-artist"](ProcessContext(DefaultClientManager()))

View File

@ -14,9 +14,8 @@ if typing.TYPE_CHECKING:
@pytest.fixture() @pytest.fixture()
def ncm_radio(app: App): def ncm_radio(app: App):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
return platform_manager["ncm-radio"](ProcessContext(DefaultClientManager())) return platform_manager["ncm-radio"](ProcessContext(DefaultClientManager()))

View File

@ -84,12 +84,12 @@ def mock_platform_without_cats_tags(app: App):
@pytest.fixture() @pytest.fixture()
def mock_platform(app: App): def mock_platform(app: App):
from nonebot_bison.post import Post from nonebot_bison.post import Post
from nonebot_bison.utils import SchedulerConfig from nonebot_bison.utils import Site
from nonebot_bison.platform.platform import NewMessage from nonebot_bison.platform.platform import NewMessage
from nonebot_bison.types import Tag, Target, RawPost, Category from nonebot_bison.types import Tag, Target, RawPost, Category
class MockPlatformSchedConf(SchedulerConfig): class MockSite(Site):
name = "mock" name = "mock_site"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"seconds": 100} schedule_setting = {"seconds": 100}
@ -100,7 +100,7 @@ def mock_platform(app: App):
is_common = True is_common = True
enable_tag = True enable_tag = True
has_target = True has_target = True
scheduler = MockPlatformSchedConf site = MockSite
categories = { categories = {
Category(1): "转发", Category(1): "转发",
Category(2): "视频", Category(2): "视频",
@ -144,19 +144,19 @@ def mock_platform(app: App):
@pytest.fixture() @pytest.fixture()
def mock_scheduler_conf(app): def mock_site(app):
from nonebot_bison.utils import SchedulerConfig from nonebot_bison.utils import Site
class MockPlatformSchedConf(SchedulerConfig): class MockSite(Site):
name = "mock" name = "mock_site"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"seconds": 100} schedule_setting = {"seconds": 100}
return MockPlatformSchedConf return MockSite
@pytest.fixture() @pytest.fixture()
def mock_platform_no_target(app: App, mock_scheduler_conf): def mock_platform_no_target(app: App, mock_site):
from nonebot_bison.post import Post from nonebot_bison.post import Post
from nonebot_bison.types import Tag, Target, RawPost, Category from nonebot_bison.types import Tag, Target, RawPost, Category
from nonebot_bison.platform.platform import NewMessage, CategoryNotSupport from nonebot_bison.platform.platform import NewMessage, CategoryNotSupport
@ -166,7 +166,7 @@ def mock_platform_no_target(app: App, mock_scheduler_conf):
name = "Mock Platform" name = "Mock Platform"
enabled = True enabled = True
is_common = True is_common = True
scheduler = mock_scheduler_conf site = mock_site
enable_tag = True enable_tag = True
has_target = False has_target = False
categories = {Category(1): "转发", Category(2): "视频", Category(3): "不支持"} categories = {Category(1): "转发", Category(2): "视频", Category(3): "不支持"}
@ -211,7 +211,7 @@ def mock_platform_no_target(app: App, mock_scheduler_conf):
@pytest.fixture() @pytest.fixture()
def mock_platform_no_target_2(app: App, mock_scheduler_conf): def mock_platform_no_target_2(app: App, mock_site):
from nonebot_bison.post import Post from nonebot_bison.post import Post
from nonebot_bison.platform.platform import NewMessage from nonebot_bison.platform.platform import NewMessage
from nonebot_bison.types import Tag, Target, RawPost, Category from nonebot_bison.types import Tag, Target, RawPost, Category
@ -220,7 +220,7 @@ def mock_platform_no_target_2(app: App, mock_scheduler_conf):
platform_name = "mock_platform" platform_name = "mock_platform"
name = "Mock Platform" name = "Mock Platform"
enabled = True enabled = True
scheduler = mock_scheduler_conf site = mock_site
is_common = True is_common = True
enable_tag = True enable_tag = True
has_target = False has_target = False
@ -323,9 +323,8 @@ def mock_status_change(app: App):
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_new_message_target_without_cats_tags(mock_platform_without_cats_tags, user_info_factory): async def test_new_message_target_without_cats_tags(mock_platform_without_cats_tags, user_info_factory):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.types import Target, SubUnit from nonebot_bison.types import Target, SubUnit
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
res1 = await mock_platform_without_cats_tags(ProcessContext(DefaultClientManager())).fetch_new_post( res1 = await mock_platform_without_cats_tags(ProcessContext(DefaultClientManager())).fetch_new_post(
SubUnit(Target("dummy"), [user_info_factory([1, 2], [])]) SubUnit(Target("dummy"), [user_info_factory([1, 2], [])])
@ -345,9 +344,8 @@ async def test_new_message_target_without_cats_tags(mock_platform_without_cats_t
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_new_message_target(mock_platform, user_info_factory): async def test_new_message_target(mock_platform, user_info_factory):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.types import Target, SubUnit from nonebot_bison.types import Target, SubUnit
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
res1 = await mock_platform(ProcessContext(DefaultClientManager())).fetch_new_post( res1 = await mock_platform(ProcessContext(DefaultClientManager())).fetch_new_post(
SubUnit(Target("dummy"), [user_info_factory([1, 2], [])]) SubUnit(Target("dummy"), [user_info_factory([1, 2], [])])
@ -381,9 +379,8 @@ async def test_new_message_target(mock_platform, user_info_factory):
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_new_message_no_target(mock_platform_no_target, user_info_factory): async def test_new_message_no_target(mock_platform_no_target, user_info_factory):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.types import Target, SubUnit from nonebot_bison.types import Target, SubUnit
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
res1 = await mock_platform_no_target(ProcessContext(DefaultClientManager())).fetch_new_post( res1 = await mock_platform_no_target(ProcessContext(DefaultClientManager())).fetch_new_post(
SubUnit(Target("dummy"), [user_info_factory([1, 2], [])]) SubUnit(Target("dummy"), [user_info_factory([1, 2], [])])
@ -421,9 +418,8 @@ async def test_new_message_no_target(mock_platform_no_target, user_info_factory)
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_status_change(mock_status_change, user_info_factory): async def test_status_change(mock_status_change, user_info_factory):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.types import Target, SubUnit from nonebot_bison.types import Target, SubUnit
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
res1 = await mock_status_change(ProcessContext(DefaultClientManager())).fetch_new_post( res1 = await mock_status_change(ProcessContext(DefaultClientManager())).fetch_new_post(
SubUnit(Target("dummy"), [user_info_factory([1, 2], [])]) SubUnit(Target("dummy"), [user_info_factory([1, 2], [])])
@ -462,10 +458,9 @@ async def test_group(
mock_platform_no_target_2, mock_platform_no_target_2,
user_info_factory, user_info_factory,
): ):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.types import Target, SubUnit from nonebot_bison.types import Target, SubUnit
from nonebot_bison.platform.platform import make_no_target_group from nonebot_bison.platform.platform import make_no_target_group
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
dummy = Target("dummy") dummy = Target("dummy")
@ -488,10 +483,10 @@ async def test_batch_fetch_new_message(app: App):
from nonebot_plugin_saa import TargetQQGroup from nonebot_plugin_saa import TargetQQGroup
from nonebot_bison.post import Post from nonebot_bison.post import Post
from nonebot_bison.utils import DefaultClientManager
from nonebot_bison.platform.platform import NewMessage from nonebot_bison.platform.platform import NewMessage
from nonebot_bison.utils.context import ProcessContext from nonebot_bison.utils.context import ProcessContext
from nonebot_bison.types import Target, RawPost, SubUnit, UserSubInfo from nonebot_bison.types import Target, RawPost, SubUnit, UserSubInfo
from nonebot_bison.utils.scheduler_config import DefaultClientManager
class BatchNewMessage(NewMessage): class BatchNewMessage(NewMessage):
platform_name = "mock_platform" platform_name = "mock_platform"
@ -575,9 +570,9 @@ async def test_batch_fetch_compare_status(app: App):
from nonebot_plugin_saa import TargetQQGroup from nonebot_plugin_saa import TargetQQGroup
from nonebot_bison.post import Post from nonebot_bison.post import Post
from nonebot_bison.utils import DefaultClientManager
from nonebot_bison.utils.context import ProcessContext from nonebot_bison.utils.context import ProcessContext
from nonebot_bison.platform.platform import StatusChange from nonebot_bison.platform.platform import StatusChange
from nonebot_bison.utils.scheduler_config import DefaultClientManager
from nonebot_bison.types import Target, RawPost, SubUnit, Category, UserSubInfo from nonebot_bison.types import Target, RawPost, SubUnit, Category, UserSubInfo
class BatchStatusChange(StatusChange): class BatchStatusChange(StatusChange):

View File

@ -12,9 +12,8 @@ def test_cases():
# 测试正反tag的判断情况 # 测试正反tag的判断情况
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_filter_user_custom_tag(app: App, test_cases): async def test_filter_user_custom_tag(app: App, test_cases):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
bilibili = platform_manager["bilibili"](ProcessContext(DefaultClientManager())) bilibili = platform_manager["bilibili"](ProcessContext(DefaultClientManager()))
for case in test_cases: for case in test_cases:
@ -25,9 +24,8 @@ async def test_filter_user_custom_tag(app: App, test_cases):
# 测试正反tag的分离情况 # 测试正反tag的分离情况
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_tag_separator(app: App): async def test_tag_separator(app: App):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
bilibili = platform_manager["bilibili"](ProcessContext(DefaultClientManager())) bilibili = platform_manager["bilibili"](ProcessContext(DefaultClientManager()))
tags = ["~111", "222", "333", "~444", "555"] tags = ["~111", "222", "333", "~444", "555"]

View File

@ -34,9 +34,8 @@ def user_info_factory(app: App, dummy_user):
@pytest.fixture() @pytest.fixture()
def rss(app: App): def rss(app: App):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
return platform_manager["rss"](ProcessContext(DefaultClientManager())) return platform_manager["rss"](ProcessContext(DefaultClientManager()))

View File

@ -18,9 +18,8 @@ image_cdn_router = respx.route(host__regex=r"wx\d.sinaimg.cn", path__startswith=
@pytest.fixture() @pytest.fixture()
def weibo(app: App): def weibo(app: App):
from nonebot_bison.utils import ProcessContext
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
return platform_manager["weibo"](ProcessContext(DefaultClientManager())) return platform_manager["weibo"](ProcessContext(DefaultClientManager()))

View File

@ -170,9 +170,8 @@ async def test_generate_msg(mock_platform):
from nonebot_plugin_saa import Text, Image from nonebot_plugin_saa import Text, Image
from nonebot_bison.post import Post from nonebot_bison.post import Post
from nonebot_bison.utils import ProcessContext
from nonebot_bison.plugin_config import plugin_config from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
post: Post = await mock_platform(ProcessContext(DefaultClientManager())).parse(raw_post_list_1[0]) post: Post = await mock_platform(ProcessContext(DefaultClientManager())).parse(raw_post_list_1[0])
assert post.platform.default_theme == "basic" assert post.platform.default_theme == "basic"
@ -201,9 +200,8 @@ async def test_msg_segments_convert(mock_platform):
from nonebot_plugin_saa import Image from nonebot_plugin_saa import Image
from nonebot_bison.post import Post from nonebot_bison.post import Post
from nonebot_bison.utils import ProcessContext
from nonebot_bison.plugin_config import plugin_config from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.utils.scheduler_config import DefaultClientManager from nonebot_bison.utils import ProcessContext, DefaultClientManager
plugin_config.bison_use_pic = True plugin_config.bison_use_pic = True

View File

@ -6,13 +6,13 @@ from nonebug import App
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
if typing.TYPE_CHECKING: if typing.TYPE_CHECKING:
from nonebot_bison.utils.scheduler_config import SchedulerConfig from nonebot_bison.utils import Site
async def get_schedule_times(scheduler_config: type["SchedulerConfig"], time: int) -> dict[str, int]: async def get_schedule_times(site: type["Site"], time: int) -> dict[str, int]:
from nonebot_bison.scheduler import scheduler_dict from nonebot_bison.scheduler import scheduler_dict
scheduler = scheduler_dict[scheduler_config] scheduler = scheduler_dict[site]
res = {} res = {}
for _ in range(time): for _ in range(time):
schedulable = await scheduler.get_next_schedulable() schedulable = await scheduler.get_next_schedulable()
@ -28,8 +28,8 @@ async def test_scheduler_without_time(init_scheduler):
from nonebot_bison.config import config from nonebot_bison.config import config
from nonebot_bison.types import Target as T_Target from nonebot_bison.types import Target as T_Target
from nonebot_bison.config.db_config import WeightConfig from nonebot_bison.config.db_config import WeightConfig
from nonebot_bison.platform.bilibili import BilibiliSite
from nonebot_bison.scheduler.manager import init_scheduler from nonebot_bison.scheduler.manager import init_scheduler
from nonebot_bison.platform.bilibili import BilibiliSchedConf
await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili", [], []) await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili", [], [])
await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t2"), "target1", "bilibili", [], []) await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t2"), "target1", "bilibili", [], [])
@ -40,12 +40,12 @@ async def test_scheduler_without_time(init_scheduler):
await init_scheduler() await init_scheduler()
static_res = await get_schedule_times(BilibiliSchedConf, 6) static_res = await get_schedule_times(BilibiliSite, 6)
assert static_res["bilibili-t1"] == 1 assert static_res["bilibili-t1"] == 1
assert static_res["bilibili-t2"] == 2 assert static_res["bilibili-t2"] == 2
assert static_res["bilibili-bangumi-t2"] == 3 assert static_res["bilibili-bangumi-t2"] == 3
static_res = await get_schedule_times(BilibiliSchedConf, 6) static_res = await get_schedule_times(BilibiliSite, 6)
assert static_res["bilibili-t1"] == 1 assert static_res["bilibili-t1"] == 1
assert static_res["bilibili-t2"] == 2 assert static_res["bilibili-t2"] == 2
assert static_res["bilibili-bangumi-t2"] == 3 assert static_res["bilibili-bangumi-t2"] == 3
@ -58,14 +58,14 @@ async def test_scheduler_batch_api(init_scheduler, mocker: MockerFixture):
from nonebot_bison.types import UserSubInfo from nonebot_bison.types import UserSubInfo
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 import DefaultClientManager
from nonebot_bison.scheduler.manager import init_scheduler from nonebot_bison.scheduler.manager import init_scheduler
from nonebot_bison.platform.bilibili import BililiveSchedConf from nonebot_bison.platform.bilibili import BililiveSchedConf
from nonebot_bison.utils.scheduler_config import DefaultClientManager
await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili-live", [], []) await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili-live", [], [])
await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t2"), "target2", "bilibili-live", [], []) await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t2"), "target2", "bilibili-live", [], [])
mocker.patch.object(BililiveSchedConf, "client_man", DefaultClientManager) mocker.patch.object(BililiveSchedConf, "client_mgr", DefaultClientManager)
await init_scheduler() await init_scheduler()
@ -96,8 +96,8 @@ async def test_scheduler_with_time(app: App, init_scheduler, mocker: MockerFixtu
from nonebot_bison.config import config, db_config from nonebot_bison.config import config, db_config
from nonebot_bison.types import Target as T_Target from nonebot_bison.types import Target as T_Target
from nonebot_bison.platform.bilibili import BilibiliSite
from nonebot_bison.scheduler.manager import init_scheduler from nonebot_bison.scheduler.manager import init_scheduler
from nonebot_bison.platform.bilibili import BilibiliSchedConf
from nonebot_bison.config.db_config import WeightConfig, TimeWeightConfig from nonebot_bison.config.db_config import WeightConfig, TimeWeightConfig
await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili", [], []) await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili", [], [])
@ -118,19 +118,19 @@ async def test_scheduler_with_time(app: App, init_scheduler, mocker: MockerFixtu
mocker.patch.object(db_config, "_get_time", return_value=time(1, 30)) mocker.patch.object(db_config, "_get_time", return_value=time(1, 30))
static_res = await get_schedule_times(BilibiliSchedConf, 6) static_res = await get_schedule_times(BilibiliSite, 6)
assert static_res["bilibili-t1"] == 1 assert static_res["bilibili-t1"] == 1
assert static_res["bilibili-t2"] == 2 assert static_res["bilibili-t2"] == 2
assert static_res["bilibili-bangumi-t2"] == 3 assert static_res["bilibili-bangumi-t2"] == 3
static_res = await get_schedule_times(BilibiliSchedConf, 6) static_res = await get_schedule_times(BilibiliSite, 6)
assert static_res["bilibili-t1"] == 1 assert static_res["bilibili-t1"] == 1
assert static_res["bilibili-t2"] == 2 assert static_res["bilibili-t2"] == 2
assert static_res["bilibili-bangumi-t2"] == 3 assert static_res["bilibili-bangumi-t2"] == 3
mocker.patch.object(db_config, "_get_time", return_value=time(10, 30)) mocker.patch.object(db_config, "_get_time", return_value=time(10, 30))
static_res = await get_schedule_times(BilibiliSchedConf, 6) static_res = await get_schedule_times(BilibiliSite, 6)
assert static_res["bilibili-t2"] == 6 assert static_res["bilibili-t2"] == 6
@ -139,8 +139,8 @@ async def test_scheduler_add_new(init_scheduler):
from nonebot_bison.config import config from nonebot_bison.config import config
from nonebot_bison.types import Target as T_Target from nonebot_bison.types import Target as T_Target
from nonebot_bison.platform.bilibili import BilibiliSite
from nonebot_bison.scheduler.manager import init_scheduler from nonebot_bison.scheduler.manager import init_scheduler
from nonebot_bison.platform.bilibili import BilibiliSchedConf
await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili", [], []) await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili", [], [])
@ -148,7 +148,7 @@ async def test_scheduler_add_new(init_scheduler):
await config.add_subscribe(TargetQQGroup(group_id=2345), T_Target("t1"), "target1", "bilibili", [], []) await config.add_subscribe(TargetQQGroup(group_id=2345), T_Target("t1"), "target1", "bilibili", [], [])
await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t2"), "target2", "bilibili", [], []) await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t2"), "target2", "bilibili", [], [])
stat_res = await get_schedule_times(BilibiliSchedConf, 1) stat_res = await get_schedule_times(BilibiliSite, 1)
assert stat_res["bilibili-t2"] == 1 assert stat_res["bilibili-t2"] == 1
@ -157,34 +157,34 @@ async def test_schedule_delete(init_scheduler):
from nonebot_bison.config import config from nonebot_bison.config import config
from nonebot_bison.types import Target as T_Target from nonebot_bison.types import Target as T_Target
from nonebot_bison.platform.bilibili import BilibiliSite
from nonebot_bison.scheduler.manager import init_scheduler from nonebot_bison.scheduler.manager import init_scheduler
from nonebot_bison.platform.bilibili import BilibiliSchedConf
await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili", [], []) await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "target1", "bilibili", [], [])
await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t2"), "target1", "bilibili", [], []) await config.add_subscribe(TargetQQGroup(group_id=123), T_Target("t2"), "target1", "bilibili", [], [])
await init_scheduler() await init_scheduler()
stat_res = await get_schedule_times(BilibiliSchedConf, 2) stat_res = await get_schedule_times(BilibiliSite, 2)
assert stat_res["bilibili-t2"] == 1 assert stat_res["bilibili-t2"] == 1
assert stat_res["bilibili-t1"] == 1 assert stat_res["bilibili-t1"] == 1
await config.del_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "bilibili") await config.del_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "bilibili")
stat_res = await get_schedule_times(BilibiliSchedConf, 2) stat_res = await get_schedule_times(BilibiliSite, 2)
assert stat_res["bilibili-t2"] == 2 assert stat_res["bilibili-t2"] == 2
async def test_scheduler_skip_browser(mocker: MockerFixture): async def test_scheduler_skip_browser(mocker: MockerFixture):
from nonebot_bison.scheduler.scheduler import Site
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.plugin_config import plugin_config from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.platform.platform import NewMessage from nonebot_bison.platform.platform import NewMessage
from nonebot_bison.scheduler.scheduler import SchedulerConfig
from nonebot_bison.scheduler import init_scheduler, scheduler_dict from nonebot_bison.scheduler import init_scheduler, scheduler_dict
mocker.patch.object(plugin_config, "bison_use_browser", False) mocker.patch.object(plugin_config, "bison_use_browser", False)
class MockPlatformSchedConf(SchedulerConfig): class MockSite(Site):
name = "mock" name = "mock_site"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"seconds": 100} schedule_setting = {"seconds": 100}
require_browser = True require_browser = True
@ -196,26 +196,26 @@ async def test_scheduler_skip_browser(mocker: MockerFixture):
is_common = True is_common = True
enable_tag = True enable_tag = True
has_target = True has_target = True
scheduler = MockPlatformSchedConf site = MockSite
mocker.patch.dict(platform_manager, {"mock_platform": MockPlatform}) mocker.patch.dict(platform_manager, {"mock_platform": MockPlatform})
await init_scheduler() await init_scheduler()
assert MockPlatformSchedConf not in scheduler_dict.keys() assert MockSite not in scheduler_dict.keys()
async def test_scheduler_no_skip_not_require_browser(mocker: MockerFixture): async def test_scheduler_no_skip_not_require_browser(mocker: MockerFixture):
from nonebot_bison.scheduler.scheduler import Site
from nonebot_bison.platform import platform_manager from nonebot_bison.platform import platform_manager
from nonebot_bison.plugin_config import plugin_config from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.platform.platform import NewMessage from nonebot_bison.platform.platform import NewMessage
from nonebot_bison.scheduler.scheduler import SchedulerConfig
from nonebot_bison.scheduler import init_scheduler, scheduler_dict from nonebot_bison.scheduler import init_scheduler, scheduler_dict
mocker.patch.object(plugin_config, "bison_use_browser", False) mocker.patch.object(plugin_config, "bison_use_browser", False)
class MockPlatformSchedConf(SchedulerConfig): class MockSite(Site):
name = "mock" name = "mock_site"
schedule_type = "interval" schedule_type = "interval"
schedule_setting = {"seconds": 100} schedule_setting = {"seconds": 100}
@ -226,10 +226,10 @@ async def test_scheduler_no_skip_not_require_browser(mocker: MockerFixture):
is_common = True is_common = True
enable_tag = True enable_tag = True
has_target = True has_target = True
scheduler = MockPlatformSchedConf site = MockSite
mocker.patch.dict(platform_manager, {"mock_platform": MockPlatform}) mocker.patch.dict(platform_manager, {"mock_platform": MockPlatform})
await init_scheduler() await init_scheduler()
assert MockPlatformSchedConf in scheduler_dict.keys() assert MockSite in scheduler_dict.keys()

View File

@ -5,8 +5,7 @@ from nonebug.app import App
@respx.mock @respx.mock
async def test_http_error(app: App): async def test_http_error(app: App):
from nonebot_bison.utils import ProcessContext, http_client from nonebot_bison.utils import ProcessContext, DefaultClientManager, http_client
from nonebot_bison.utils.scheduler_config import DefaultClientManager
example_route = respx.get("https://example.com") example_route = respx.get("https://example.com")
example_route.mock(httpx.Response(403, json={"error": "gg"})) example_route.mock(httpx.Response(403, json={"error": "gg"}))

View File

@ -67,8 +67,7 @@ def mock_platform(app: App):
@pytest.fixture() @pytest.fixture()
def mock_post(app: App, mock_platform): def mock_post(app: App, mock_platform):
from nonebot_bison.post import Post from nonebot_bison.post import Post
from nonebot_bison.utils import ProcessContext from nonebot_bison.utils import ProcessContext, DefaultClientManager
from nonebot_bison.utils.scheduler_config import DefaultClientManager
return Post( return Post(
m := mock_platform(ProcessContext(DefaultClientManager())), m := mock_platform(ProcessContext(DefaultClientManager())),