This commit is contained in:
chenxiangtong
2026-03-26 17:38:47 +08:00
commit a05ce6e07e
54 changed files with 5779 additions and 0 deletions

74
src/services/__init__.py Normal file
View File

@@ -0,0 +1,74 @@
from typing import TYPE_CHECKING, Any
import aiohttp
from .calendar import CalendarService
from .contracts import (
CalendarDay,
CalendarWeekday,
EpisodeItem,
MessageResult,
RenderData,
)
from .exceptions import (
BangumiApiError,
BangumiRateLimitError,
DatabaseError,
NoSubjectFound,
SubscriptionError,
)
from .schemas import Episode
from .subjects import SubjectsService
from .types import ImageSize, SubjectType
if TYPE_CHECKING:
from .search import SearchService
from .subscription import SubscriptionService
# 聚合类继承所有子Service的功能
class BangumiService(SubjectsService, CalendarService):
def __init__(
self,
access_token: str,
user_agent: str,
proxy: str | None = None,
session: aiohttp.ClientSession | None = None,
) -> None:
# 初始化最基础的父类 (BaseBangumiService)
# 因为所有Service都继承自BaseBangumiServicesuper会自动处理MRO链
super().__init__(access_token, user_agent, proxy, session=session)
def __getattr__(name: str) -> Any:
if name == "SearchService":
from .search import SearchService
return SearchService
if name == "SubscriptionService":
from .subscription import SubscriptionService
return SubscriptionService
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
__all__ = [
"BangumiApiError",
"BangumiRateLimitError",
"BangumiService",
"CalendarDay",
"CalendarService",
"CalendarWeekday",
"DatabaseError",
"Episode",
"EpisodeItem",
"ImageSize",
"MessageResult",
"NoSubjectFound",
"RenderData",
"SearchService",
"SubjectType",
"SubjectsService",
"SubscriptionError",
"SubscriptionService",
]