Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

为 scheduler config 添加 require_browser 属性 #542

Merged
merged 1 commit into from
May 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions nonebot_bison/scheduler/manager.py
Original file line number Diff line number Diff line change
@@ -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] = {}

Expand All @@ -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(
Expand Down
1 change: 1 addition & 0 deletions nonebot_bison/utils/scheduler_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
Expand Down
61 changes: 61 additions & 0 deletions tests/scheduler/test_scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Loading