♻️ 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
+1 -1
View File
@@ -5,7 +5,7 @@ from .platform import platform_manager
async def check_sub_target(platform_name: str, target: Target):
platform = platform_manager[platform_name]
scheduler_conf_class = platform.scheduler
scheduler_conf_class = platform.site
scheduler = scheduler_dict[scheduler_conf_class]
client = await scheduler.client_mgr.get_query_name_client()
+6 -6
View File
@@ -8,9 +8,9 @@ from pydantic import Field, BaseModel
from nonebot.compat import type_validate_python
from ..post import Post
from ..utils import Site
from ..types import Target, RawPost, Category
from .platform import NewMessage, StatusChange
from ..utils.scheduler_config import SchedulerConfig
class ArkResponseBase(BaseModel):
@@ -52,7 +52,7 @@ class ArkBulletinResponse(ArkResponseBase):
data: BulletinData
class ArknightsSchedConf(SchedulerConfig):
class ArknightsSite(Site):
name = "arknights"
schedule_type = "interval"
schedule_setting = {"seconds": 30}
@@ -65,7 +65,7 @@ class Arknights(NewMessage):
enable_tag = False
enabled = True
is_common = False
scheduler = ArknightsSchedConf
site = ArknightsSite
has_target = False
default_theme = "arknights"
@@ -127,7 +127,7 @@ class AkVersion(StatusChange):
enable_tag = False
enabled = True
is_common = False
scheduler = ArknightsSchedConf
site = ArknightsSite
has_target = False
default_theme = "brief"
@@ -172,7 +172,7 @@ class MonsterSiren(NewMessage):
enable_tag = False
enabled = True
is_common = False
scheduler = ArknightsSchedConf
site = ArknightsSite
has_target = False
@classmethod
@@ -220,7 +220,7 @@ class TerraHistoricusComic(NewMessage):
enable_tag = False
enabled = True
is_common = False
scheduler = ArknightsSchedConf
site = ArknightsSite
has_target = False
default_theme = "brief"
+9 -11
View File
@@ -11,12 +11,10 @@ from nonebot.log import logger
from pydantic import Field, BaseModel
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 ..compat import model_rebuild
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
TBaseModel = TypeVar("TBaseModel", bound=type[BaseModel])
@@ -133,18 +131,18 @@ class BilibiliClient(ClientManager):
return self._client
class BilibiliSchedConf(SchedulerConfig):
class BilibiliSite(Site):
name = "bilibili.com"
schedule_type = "interval"
schedule_setting = {"seconds": 10}
client_man = BilibiliClient
client_mgr = BilibiliClient
class BililiveSchedConf(SchedulerConfig):
class BililiveSchedConf(Site):
name = "live.bilibili.com"
schedule_type = "interval"
schedule_setting = {"seconds": 3}
client_man = BilibiliClient
client_mgr = BilibiliClient
class Bilibili(NewMessage):
@@ -160,7 +158,7 @@ class Bilibili(NewMessage):
enable_tag = True
enabled = True
is_common = True
scheduler = BilibiliSchedConf
site = BilibiliSite
name = "B站"
has_target = True
parse_target_promot = "请输入用户主页的链接"
@@ -333,7 +331,7 @@ class Bilibililive(StatusChange):
enable_tag = False
enabled = True
is_common = True
scheduler = BililiveSchedConf
site = BililiveSchedConf
name = "Bilibili直播"
has_target = True
use_batch = True
@@ -483,7 +481,7 @@ class BilibiliBangumi(StatusChange):
enable_tag = False
enabled = True
is_common = True
scheduler = BilibiliSchedConf
site = BilibiliSite
name = "Bilibili剧集"
has_target = True
parse_target_promot = "请输入剧集主页"
+2 -2
View File
@@ -3,8 +3,8 @@ from typing import Any
from httpx import AsyncClient
from ..post import Post
from ..utils import scheduler
from .platform import NewMessage
from ..utils import anonymous_site
from ..types import Target, RawPost
@@ -16,7 +16,7 @@ class FF14(NewMessage):
enabled = True
is_common = False
scheduler_class = "ff14"
scheduler = scheduler("interval", {"seconds": 60})
site = anonymous_site("interval", {"seconds": 60})
has_target = False
@classmethod
+4 -4
View File
@@ -4,12 +4,12 @@ from typing import Any
from httpx import AsyncClient
from ..post import Post
from ..utils import Site
from .platform import NewMessage
from ..utils import SchedulerConfig
from ..types import Target, RawPost, ApiError
class NcmSchedConf(SchedulerConfig):
class NcmSite(Site):
name = "music.163.com"
schedule_type = "interval"
schedule_setting = {"minutes": 1}
@@ -21,7 +21,7 @@ class NcmArtist(NewMessage):
enable_tag = False
enabled = True
is_common = True
scheduler = NcmSchedConf
site = NcmSite
name = "网易云-歌手"
has_target = True
parse_target_promot = "请输入歌手主页(包含数字ID)的链接"
@@ -78,7 +78,7 @@ class NcmRadio(NewMessage):
enable_tag = False
enabled = True
is_common = False
scheduler = NcmSchedConf
site = NcmSite
name = "网易云-电台"
has_target = True
parse_target_promot = "请输入主播电台主页(包含数字ID)的链接"
+5 -5
View File
@@ -14,8 +14,8 @@ from nonebot.log import logger
from nonebot_plugin_saa import PlatformTarget
from ..post import Post
from ..utils import Site, ProcessContext
from ..plugin_config import plugin_config
from ..utils import ProcessContext, SchedulerConfig
from ..types import Tag, Target, RawPost, SubUnit, Category
@@ -81,7 +81,7 @@ class PlatformABCMeta(PlatformMeta, ABC): ...
class Platform(metaclass=PlatformABCMeta, base=True):
scheduler: type[SchedulerConfig]
site: type[Site]
ctx: ProcessContext
is_common: bool
enabled: bool
@@ -444,7 +444,7 @@ def make_no_target_group(platform_list: list[type[Platform]]) -> type[Platform]:
name = DUMMY_STR
categories_keys = set()
categories = {}
scheduler = platform_list[0].scheduler
site = platform_list[0].site
for platform in platform_list:
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")
categories_keys |= platform_category_key_set
categories.update(platform.categories)
if platform.scheduler != scheduler:
if platform.site != site:
raise RuntimeError(f"Platform scheduler for {platform_name} not fit")
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,
"name": name,
"categories": categories,
"scheduler": scheduler,
"site": site,
"is_common": platform_list[0].is_common,
"enabled": True,
"has_target": False,
+3 -3
View File
@@ -9,10 +9,10 @@ from bs4 import BeautifulSoup as bs
from ..post import Post
from .platform import NewMessage
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"
schedule_type = "interval"
schedule_setting = {"seconds": 30}
@@ -25,7 +25,7 @@ class Rss(NewMessage):
name = "Rss"
enabled = True
is_common = True
scheduler = RssSchedConf
site = RssSite
has_target = True
@classmethod
+3 -3
View File
@@ -12,7 +12,7 @@ from bs4 import BeautifulSoup as bs
from ..post import Post
from .platform import NewMessage
from ..utils import SchedulerConfig, http_client
from ..utils import Site, http_client
from ..types import Tag, Target, RawPost, ApiError, Category
_HEADER = {
@@ -35,7 +35,7 @@ _HEADER = {
}
class WeiboSchedConf(SchedulerConfig):
class WeiboSite(Site):
name = "weibo.com"
schedule_type = "interval"
schedule_setting = {"seconds": 3}
@@ -53,7 +53,7 @@ class Weibo(NewMessage):
name = "新浪微博"
enabled = True
is_common = True
scheduler = WeiboSchedConf
site = WeiboSite
has_target = True
parse_target_promot = "请输入用户主页(包含数字UID)的链接"
+20 -20
View File
@@ -1,37 +1,37 @@
from nonebot.log import logger
from ..utils import Site
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] = {}
scheduler_dict: dict[type[Site], Scheduler] = {}
async def init_scheduler():
_schedule_class_dict: dict[type[SchedulerConfig], list[Target]] = {}
_schedule_class_platform_dict: dict[type[SchedulerConfig], list[str]] = {}
_schedule_class_dict: dict[type[Site], list[Target]] = {}
_schedule_class_platform_dict: dict[type[Site], list[str]] = {}
for platform in platform_manager.values():
scheduler_config = platform.scheduler
if not hasattr(scheduler_config, "name") or not scheduler_config.name:
scheduler_config.name = f"AnonymousScheduleConfig[{platform.platform_name}]"
site = platform.site
if not hasattr(site, "name") or not site.name:
site.name = f"AnonymousScheduleConfig[{platform.platform_name}]"
platform_name = platform.platform_name
targets = await config.get_platform_target(platform_name)
if scheduler_config not in _schedule_class_dict:
_schedule_class_dict[scheduler_config] = list(targets)
if site not in _schedule_class_dict:
_schedule_class_dict[site] = list(targets)
else:
_schedule_class_dict[scheduler_config].extend(targets)
if scheduler_config not in _schedule_class_platform_dict:
_schedule_class_platform_dict[scheduler_config] = [platform_name]
_schedule_class_dict[site].extend(targets)
if site not in _schedule_class_platform_dict:
_schedule_class_platform_dict[site] = [platform_name]
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.")
_schedule_class_platform_dict[site].append(platform_name)
for site, target_list in _schedule_class_dict.items():
if not plugin_config.bison_use_browser and site.require_browser:
logger.warning(f"{site.name} requires browser, it will not schedule.")
continue
schedulable_args = []
@@ -39,19 +39,19 @@ async def init_scheduler():
schedulable_args.append(
(target.platform_name, T_Target(target.target), platform_manager[target.platform_name].use_batch)
)
platform_name_list = _schedule_class_platform_dict[scheduler_config]
scheduler_dict[scheduler_config] = Scheduler(scheduler_config, schedulable_args, platform_name_list)
platform_name_list = _schedule_class_platform_dict[site]
scheduler_dict[site] = Scheduler(site, schedulable_args, platform_name_list)
config.register_add_target_hook(handle_insert_new_target)
config.register_delete_target_hook(handle_delete_target)
async def handle_insert_new_target(platform_name: str, target: T_Target):
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)
async def handle_delete_target(platform_name: str, target: T_Target):
platform = platform_manager[platform_name]
scheduler_obj = scheduler_dict[platform.scheduler]
scheduler_obj = scheduler_dict[platform.site]
scheduler_obj.delete_schedulable(platform_name, target)
+3 -3
View File
@@ -5,13 +5,13 @@ from nonebot.log import logger
from nonebot_plugin_apscheduler import scheduler
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 ..send import send_msgs
from ..types import Target, SubUnit
from ..platform import platform_manager
from ..utils import ProcessContext, SchedulerConfig
from ..utils import Site, ProcessContext
@dataclass
@@ -30,7 +30,7 @@ class Scheduler:
def __init__(
self,
scheduler_config: type[SchedulerConfig],
scheduler_config: type[Site],
schedulables: list[tuple[str, Target, bool]], # [(platform_name, target, use_batch)]
platform_name_list: list[str],
):
+10 -20
View File
@@ -8,27 +8,17 @@ from bs4 import BeautifulSoup as bs
from nonebot.log import logger, default_format
from nonebot_plugin_saa import Text, Image, MessageSegmentFactory
from .http import http_client
from .context import ProcessContext
from .site import Site as Site
from ..plugin_config import plugin_config
from .image import pic_merge, text_to_image, is_pics_mergable, pic_url_to_image
from .scheduler_config import ClientManager, SchedulerConfig, DefaultClientManager, scheduler
__all__ = [
"http_client",
"Singleton",
"parse_text",
"ProcessContext",
"ClientManager",
"DefaultClientManager",
"html_to_text",
"SchedulerConfig",
"scheduler",
"pic_merge",
"pic_url_to_image",
"is_pics_mergable",
"text_to_image",
]
from .image import pic_merge as pic_merge
from .http import http_client as http_client
from .site import ClientManager as ClientManager
from .image import text_to_image as text_to_image
from .site import anonymous_site as anonymous_site
from .context import ProcessContext as ProcessContext
from .image import is_pics_mergable as is_pics_mergable
from .image import pic_url_to_image as pic_url_to_image
from .site import DefaultClientManager as DefaultClientManager
class Singleton(type):
+1 -1
View File
@@ -4,7 +4,7 @@ from httpx import Response, AsyncClient
from nonebot_bison.types import Target
from .scheduler_config import ClientManager
from .site import ClientManager
class ProcessContext:
@@ -28,7 +28,7 @@ class DefaultClientManager(ClientManager):
return http_client()
class SchedulerConfig:
class Site:
schedule_type: Literal["date", "interval", "cron"]
schedule_setting: dict
name: str
@@ -42,10 +42,10 @@ class SchedulerConfig:
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(
"AnonymousScheduleConfig",
(SchedulerConfig,),
"AnonymousSite",
(Site,),
{
"schedule_type": schedule_type,
"schedule_setting": schedule_setting,