add require_brownser for scheduler config

This commit is contained in:
felinae98 2024-05-13 20:22:45 +08:00
parent c04710c7ae
commit 769b13ee4a
3 changed files with 69 additions and 0 deletions

View File

@ -1,9 +1,12 @@
from nonebot.log import logger
from ..config import config
from .scheduler import Scheduler
from ..utils import SchedulerConfig
from ..config.db_model import Target
from ..types import Target as T_Target
from ..platform import platform_manager
from ..plugin_config import plugin_config
scheduler_dict: dict[type[SchedulerConfig], Scheduler] = {}
@ -27,6 +30,10 @@ async def init_scheduler():
else:
_schedule_class_platform_dict[scheduler_config].append(platform_name)
for scheduler_config, target_list in _schedule_class_dict.items():
if not plugin_config.bison_use_browser and scheduler_config.require_browser:
logger.warning(f"{scheduler_config.name} requires browser, it will not schedule.")
continue
schedulable_args = []
for target in target_list:
schedulable_args.append(

View File

@ -10,6 +10,7 @@ class SchedulerConfig:
schedule_type: Literal["date", "interval", "cron"]
schedule_setting: dict
name: str
require_browser: bool = False
def __str__(self):
return f"[{self.name}]-{self.name}-{self.schedule_setting}"

View File

@ -172,3 +172,64 @@ async def test_schedule_delete(init_scheduler):
await config.del_subscribe(TargetQQGroup(group_id=123), T_Target("t1"), "bilibili")
stat_res = await get_schedule_times(BilibiliSchedConf, 2)
assert stat_res["bilibili-t2"] == 2
async def test_scheduler_skip_browser(mocker: MockerFixture):
from nonebot_bison.platform import platform_manager
from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.platform.platform import NewMessage
from nonebot_bison.scheduler.scheduler import SchedulerConfig
from nonebot_bison.scheduler import init_scheduler, scheduler_dict
mocker.patch.object(plugin_config, "bison_use_browser", False)
class MockPlatformSchedConf(SchedulerConfig):
name = "mock"
schedule_type = "interval"
schedule_setting = {"seconds": 100}
require_browser = True
class MockPlatform(NewMessage):
platform_name = "mock_platform"
name = "Mock Platform"
enabled = True
is_common = True
enable_tag = True
has_target = True
scheduler = MockPlatformSchedConf
mocker.patch.dict(platform_manager, {"mock_platform": MockPlatform})
await init_scheduler()
assert MockPlatformSchedConf not in scheduler_dict.keys()
async def test_scheduler_no_skip_not_require_browser(mocker: MockerFixture):
from nonebot_bison.platform import platform_manager
from nonebot_bison.plugin_config import plugin_config
from nonebot_bison.platform.platform import NewMessage
from nonebot_bison.scheduler.scheduler import SchedulerConfig
from nonebot_bison.scheduler import init_scheduler, scheduler_dict
mocker.patch.object(plugin_config, "bison_use_browser", False)
class MockPlatformSchedConf(SchedulerConfig):
name = "mock"
schedule_type = "interval"
schedule_setting = {"seconds": 100}
class MockPlatform(NewMessage):
platform_name = "mock_platform"
name = "Mock Platform"
enabled = True
is_common = True
enable_tag = True
has_target = True
scheduler = MockPlatformSchedConf
mocker.patch.dict(platform_manager, {"mock_platform": MockPlatform})
await init_scheduler()
assert MockPlatformSchedConf in scheduler_dict.keys()