SYMBOL INDEX (5429 symbols across 416 files) FILE: app/agent/__init__.py class AgentChain (line 28) | class AgentChain(ChainBase): class MoviePilotAgent (line 32) | class MoviePilotAgent: method __init__ (line 37) | def __init__(self, session_id: str, user_id: str = None, method _initialize_llm (line 65) | def _initialize_llm(self): method _initialize_tools (line 71) | def _initialize_tools(self) -> List: method _initialize_session_store (line 85) | def _initialize_session_store() -> Dict[str, InMemoryChatMessageHistory]: method get_session_history (line 91) | def get_session_history(self, session_id: str) -> InMemoryChatMessageH... method _initialize_prompt (line 132) | def _initialize_prompt() -> ChatPromptTemplate: method _token_counter (line 150) | def _token_counter(messages: List[Union[HumanMessage, AIMessage, ToolM... method _create_agent_executor (line 196) | def _create_agent_executor(self) -> RunnableWithMessageHistory: method _summarize_history (line 303) | async def _summarize_history(self): method process_message (line 368) | async def process_message(self, message: str) -> str: method _execute_agent (line 425) | async def _execute_agent(self, input_context: Dict[str, Any]) -> Dict[... method send_agent_message (line 460) | async def send_agent_message(self, message: str, title: str = "MoviePi... method cleanup (line 475) | async def cleanup(self): class AgentManager (line 482) | class AgentManager: method __init__ (line 487) | def __init__(self): method initialize (line 491) | async def initialize(): method close (line 497) | async def close(self): method process_message (line 507) | async def process_message(self, session_id: str, user_id: str, message... method clear_session (line 537) | async def clear_session(self, session_id: str, user_id: str): FILE: app/agent/callback/__init__.py class StreamingCallbackHandler (line 8) | class StreamingCallbackHandler(AsyncCallbackHandler): method __init__ (line 13) | def __init__(self, session_id: str): method get_message (line 18) | async def get_message(self): method on_llm_new_token (line 30) | async def on_llm_new_token(self, token: str, **kwargs): FILE: app/agent/memory/__init__.py class ConversationMemoryManager (line 14) | class ConversationMemoryManager: method __init__ (line 19) | def __init__(self): method initialize (line 27) | async def initialize(self): method close (line 39) | async def close(self): method _get_memory_key (line 55) | def _get_memory_key(session_id: str, user_id: str): method _get_redis_key (line 62) | def _get_redis_key(session_id: str, user_id: str): method _get_memory (line 68) | def _get_memory(self, session_id: str, user_id: str): method _get_redis (line 75) | async def _get_redis(self, session_id: str, user_id: str) -> Optional[... method get_conversation (line 91) | async def get_conversation(self, session_id: str, user_id: str) -> Con... method set_title (line 113) | async def set_title(self, session_id: str, user_id: str, title: str): method get_title (line 122) | async def get_title(self, session_id: str, user_id: str) -> Optional[s... method list_sessions (line 129) | async def list_sessions(self, user_id: str, limit: int = 100) -> List[... method add_conversation (line 184) | async def add_conversation( method get_recent_messages_for_agent (line 219) | def get_recent_messages_for_agent( method get_recent_messages (line 237) | async def get_recent_messages( method get_context (line 255) | async def get_context(self, session_id: str, user_id: str) -> Dict[str... method clear_memory (line 262) | async def clear_memory(self, session_id: str, user_id: str): method _save_memory (line 276) | def _save_memory(self, memory: ConversationMemory): method _save_redis (line 283) | async def _save_redis(self, memory: ConversationMemory): method _save_conversation (line 301) | async def _save_conversation(self, memory: ConversationMemory): method _cleanup_expired_memories (line 314) | async def _cleanup_expired_memories(self): FILE: app/agent/prompt/__init__.py class PromptManager (line 9) | class PromptManager: method __init__ (line 14) | def __init__(self, prompts_dir: str = None): method load_prompt (line 21) | def load_prompt(self, prompt_name: str) -> str: method get_agent_prompt (line 43) | def get_agent_prompt(self, channel: str = None) -> str: method _generate_formatting_instructions (line 66) | def _generate_formatting_instructions(caps: ChannelCapabilities) -> str: method clear_cache (line 80) | def clear_cache(self): FILE: app/agent/tools/base.py class ToolChain (line 15) | class ToolChain(ChainBase): class MoviePilotTool (line 19) | class MoviePilotTool(BaseTool, metaclass=ABCMeta): method __init__ (line 31) | def __init__(self, session_id: str, user_id: str, **kwargs): method _run (line 36) | def _run(self, *args: Any, **kwargs: Any) -> Any: method _arun (line 39) | async def _arun(self, **kwargs) -> str: method get_tool_message (line 114) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 130) | async def run(self, **kwargs) -> str: method set_message_attr (line 133) | def set_message_attr(self, channel: str, source: str, username: str): method set_callback_handler (line 141) | def set_callback_handler(self, callback_handler: StreamingCallbackHand... method send_tool_message (line 147) | async def send_tool_message(self, message: str, title: str = ""): FILE: app/agent/tools/factory.py class MoviePilotToolFactory (line 49) | class MoviePilotToolFactory: method create_tools (line 55) | def create_tools(session_id: str, user_id: str, FILE: app/agent/tools/impl/_torrent_search_utils.py function build_torrent_ref (line 14) | def build_torrent_ref(context: Optional[Context]) -> str: function sort_season_options (line 21) | def sort_season_options(options: List[str]) -> List[str]: function append_option (line 66) | def append_option(options: List[str], value: Optional[str]) -> None: function build_filter_options (line 72) | def build_filter_options(items: List[Context]) -> dict: function match_filter (line 99) | def match_filter(filter_values: Optional[List[str]], value: Optional[str... function filter_contexts (line 104) | def filter_contexts(items: List[Context], function simplify_search_result (line 130) | def simplify_search_result(context: Context, index: int) -> dict: FILE: app/agent/tools/impl/add_download.py class AddDownloadInput (line 22) | class AddDownloadInput(BaseModel): class AddDownloadTool (line 37) | class AddDownloadTool(MoviePilotTool): method get_tool_message (line 42) | def get_tool_message(self, **kwargs) -> Optional[str]: method _build_torrent_ref (line 63) | def _build_torrent_ref(context: Context) -> str: method _is_torrent_ref (line 70) | def _is_torrent_ref(torrent_ref: Optional[str]) -> bool: method _is_direct_download_url (line 77) | def _is_direct_download_url(torrent_url: Optional[str]) -> bool: method _resolve_cached_context (line 85) | def _resolve_cached_context(cls, torrent_ref: str) -> Optional[Context]: method _merge_labels_with_system_tag (line 108) | def _merge_labels_with_system_tag(labels: Optional[str]) -> Optional[s... method _format_failed_result (line 119) | def _format_failed_result(failed_messages: List[str]) -> str: method _build_failure_message (line 124) | def _build_failure_message(torrent_ref: str, error_msg: Optional[str] ... method _normalize_torrent_urls (line 139) | def _normalize_torrent_urls(cls, torrent_url: Optional[List[str] | str... method _resolve_direct_download_dir (line 152) | def _resolve_direct_download_dir(save_path: Optional[str]) -> Optional... method run (line 167) | async def run(self, torrent_url: Optional[List[str]] = None, FILE: app/agent/tools/impl/add_subscribe.py class AddSubscribeInput (line 13) | class AddSubscribeInput(BaseModel): class AddSubscribeTool (line 42) | class AddSubscribeTool(MoviePilotTool): method get_tool_message (line 47) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 64) | async def run(self, title: str, year: str, media_type: str, FILE: app/agent/tools/impl/delete_download.py class DeleteDownloadInput (line 12) | class DeleteDownloadInput(BaseModel): class DeleteDownloadTool (line 20) | class DeleteDownloadTool(MoviePilotTool): method get_tool_message (line 25) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 39) | async def run(self, hash: str, downloader: Optional[str] = None, FILE: app/agent/tools/impl/delete_subscribe.py class DeleteSubscribeInput (line 15) | class DeleteSubscribeInput(BaseModel): class DeleteSubscribeTool (line 21) | class DeleteSubscribeTool(MoviePilotTool): method get_tool_message (line 26) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 31) | async def run(self, subscribe_id: int, **kwargs) -> str: FILE: app/agent/tools/impl/execute_command.py class ExecuteCommandInput (line 12) | class ExecuteCommandInput(BaseModel): class ExecuteCommandTool (line 19) | class ExecuteCommandTool(MoviePilotTool): method get_tool_message (line 24) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 29) | async def run(self, command: str, timeout: Optional[int] = 60, **kwarg... FILE: app/agent/tools/impl/get_recommendations.py class GetRecommendationsInput (line 14) | class GetRecommendationsInput(BaseModel): class GetRecommendationsTool (line 39) | class GetRecommendationsTool(MoviePilotTool): method get_tool_message (line 44) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 75) | async def run(self, source: Optional[str] = "tmdb_trending", FILE: app/agent/tools/impl/get_search_results.py class GetSearchResultsInput (line 20) | class GetSearchResultsInput(BaseModel): class GetSearchResultsTool (line 33) | class GetSearchResultsTool(MoviePilotTool): method get_tool_message (line 38) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 41) | async def run(self, site: Optional[List[str]] = None, season: Optional... FILE: app/agent/tools/impl/list_directory.py class ListDirectoryInput (line 17) | class ListDirectoryInput(BaseModel): class ListDirectoryTool (line 25) | class ListDirectoryTool(MoviePilotTool): method get_tool_message (line 30) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 41) | async def run(self, path: str, storage: Optional[str] = "local", FILE: app/agent/tools/impl/query_directory_settings.py class QueryDirectorySettingsInput (line 13) | class QueryDirectorySettingsInput(BaseModel): class QueryDirectorySettingsTool (line 24) | class QueryDirectorySettingsTool(MoviePilotTool): method get_tool_message (line 29) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 50) | async def run(self, directory_type: Optional[str] = "all", FILE: app/agent/tools/impl/query_download_tasks.py class QueryDownloadTasksInput (line 16) | class QueryDownloadTasksInput(BaseModel): class QueryDownloadTasksTool (line 27) | class QueryDownloadTasksTool(MoviePilotTool): method _get_all_torrents (line 33) | def _get_all_torrents(download_chain: DownloadChain, downloader: Optio... method _format_progress (line 55) | def _format_progress(progress: Optional[float]) -> Optional[str]: method get_tool_message (line 66) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 89) | async def run(self, downloader: Optional[str] = None, FILE: app/agent/tools/impl/query_downloaders.py class QueryDownloadersInput (line 14) | class QueryDownloadersInput(BaseModel): class QueryDownloadersTool (line 19) | class QueryDownloadersTool(MoviePilotTool): method get_tool_message (line 24) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 28) | async def run(self, **kwargs) -> str: FILE: app/agent/tools/impl/query_episode_schedule.py class QueryEpisodeScheduleInput (line 13) | class QueryEpisodeScheduleInput(BaseModel): class QueryEpisodeScheduleTool (line 21) | class QueryEpisodeScheduleTool(MoviePilotTool): method get_tool_message (line 26) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 38) | async def run(self, tmdb_id: int, season: int, episode_group: Optional... FILE: app/agent/tools/impl/query_library_exists.py class QueryLibraryExistsInput (line 14) | class QueryLibraryExistsInput(BaseModel): class QueryLibraryExistsTool (line 22) | class QueryLibraryExistsTool(MoviePilotTool): method get_tool_message (line 27) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 43) | async def run(self, tmdb_id: Optional[int] = None, douban_id: Optional... FILE: app/agent/tools/impl/query_library_latest.py class QueryLibraryLatestInput (line 14) | class QueryLibraryLatestInput(BaseModel): class QueryLibraryLatestTool (line 21) | class QueryLibraryLatestTool(MoviePilotTool): method get_tool_message (line 26) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 42) | async def run(self, server: Optional[str] = None, count: Optional[int]... FILE: app/agent/tools/impl/query_media_detail.py class QueryMediaDetailInput (line 14) | class QueryMediaDetailInput(BaseModel): class QueryMediaDetailTool (line 22) | class QueryMediaDetailTool(MoviePilotTool): method get_tool_message (line 27) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 35) | async def run(self, media_type: str, tmdb_id: Optional[int] = None, do... FILE: app/agent/tools/impl/query_popular_subscribes.py class QueryPopularSubscribesInput (line 16) | class QueryPopularSubscribesInput(BaseModel): class QueryPopularSubscribesTool (line 29) | class QueryPopularSubscribesTool(MoviePilotTool): method get_tool_message (line 34) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 55) | async def run(self, media_type: str, FILE: app/agent/tools/impl/query_rule_groups.py class QueryRuleGroupsInput (line 13) | class QueryRuleGroupsInput(BaseModel): class QueryRuleGroupsTool (line 18) | class QueryRuleGroupsTool(MoviePilotTool): method get_tool_message (line 23) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 27) | async def run(self, **kwargs) -> str: FILE: app/agent/tools/impl/query_schedulers.py class QuerySchedulersInput (line 13) | class QuerySchedulersInput(BaseModel): class QuerySchedulersTool (line 18) | class QuerySchedulersTool(MoviePilotTool): method get_tool_message (line 23) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 27) | async def run(self, **kwargs) -> str: FILE: app/agent/tools/impl/query_site_userdata.py class QuerySiteUserdataInput (line 15) | class QuerySiteUserdataInput(BaseModel): class QuerySiteUserdataTool (line 22) | class QuerySiteUserdataTool(MoviePilotTool): method get_tool_message (line 27) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 40) | async def run(self, site_id: int, workdate: Optional[str] = None, **kw... FILE: app/agent/tools/impl/query_sites.py class QuerySitesInput (line 13) | class QuerySitesInput(BaseModel): class QuerySitesTool (line 22) | class QuerySitesTool(MoviePilotTool): method get_tool_message (line 27) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 43) | async def run(self, status: Optional[str] = "all", name: Optional[str]... FILE: app/agent/tools/impl/query_subscribe_history.py class QuerySubscribeHistoryInput (line 15) | class QuerySubscribeHistoryInput(BaseModel): class QuerySubscribeHistoryTool (line 22) | class QuerySubscribeHistoryTool(MoviePilotTool): method get_tool_message (line 27) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 41) | async def run(self, media_type: Optional[str] = "all", FILE: app/agent/tools/impl/query_subscribe_shares.py class QuerySubscribeSharesInput (line 13) | class QuerySubscribeSharesInput(BaseModel): class QuerySubscribeSharesTool (line 25) | class QuerySubscribeSharesTool(MoviePilotTool): method get_tool_message (line 30) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 50) | async def run(self, name: Optional[str] = None, FILE: app/agent/tools/impl/query_subscribes.py class QuerySubscribesInput (line 14) | class QuerySubscribesInput(BaseModel): class QuerySubscribesTool (line 25) | class QuerySubscribesTool(MoviePilotTool): method get_tool_message (line 30) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 48) | async def run(self, status: Optional[str] = "all", media_type: Optiona... FILE: app/agent/tools/impl/query_transfer_history.py class QueryTransferHistoryInput (line 16) | class QueryTransferHistoryInput(BaseModel): class QueryTransferHistoryTool (line 25) | class QueryTransferHistoryTool(MoviePilotTool): method get_tool_message (line 30) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 48) | async def run(self, title: Optional[str] = None, FILE: app/agent/tools/impl/query_workflows.py class QueryWorkflowsInput (line 14) | class QueryWorkflowsInput(BaseModel): class QueryWorkflowsTool (line 22) | class QueryWorkflowsTool(MoviePilotTool): method get_tool_message (line 27) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 48) | async def run(self, state: Optional[str] = "all", FILE: app/agent/tools/impl/recognize_media.py class RecognizeMediaInput (line 16) | class RecognizeMediaInput(BaseModel): class RecognizeMediaTool (line 24) | class RecognizeMediaTool(MoviePilotTool): method get_tool_message (line 29) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 46) | async def run(self, title: Optional[str] = None, subtitle: Optional[st... method _format_context_result (line 102) | def _format_context_result(self, context: Context, source_type: str) -... FILE: app/agent/tools/impl/run_scheduler.py class RunSchedulerInput (line 12) | class RunSchedulerInput(BaseModel): class RunSchedulerTool (line 18) | class RunSchedulerTool(MoviePilotTool): method get_tool_message (line 23) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 28) | async def run(self, job_id: str, **kwargs) -> str: FILE: app/agent/tools/impl/run_workflow.py class RunWorkflowInput (line 14) | class RunWorkflowInput(BaseModel): class RunWorkflowTool (line 21) | class RunWorkflowTool(MoviePilotTool): method get_tool_message (line 26) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 39) | async def run(self, workflow_id: int, FILE: app/agent/tools/impl/scrape_metadata.py class ScrapeMetadataInput (line 17) | class ScrapeMetadataInput(BaseModel): class ScrapeMetadataTool (line 28) | class ScrapeMetadataTool(MoviePilotTool): method get_tool_message (line 33) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 47) | async def run(self, path: str, storage: Optional[str] = "local", FILE: app/agent/tools/impl/search_media.py class SearchMediaInput (line 14) | class SearchMediaInput(BaseModel): class SearchMediaTool (line 25) | class SearchMediaTool(MoviePilotTool): method get_tool_message (line 30) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 47) | async def run(self, title: str, year: Optional[str] = None, FILE: app/agent/tools/impl/search_person.py class SearchPersonInput (line 13) | class SearchPersonInput(BaseModel): class SearchPersonTool (line 19) | class SearchPersonTool(MoviePilotTool): method get_tool_message (line 24) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 29) | async def run(self, name: str, **kwargs) -> str: FILE: app/agent/tools/impl/search_person_credits.py class SearchPersonCreditsInput (line 15) | class SearchPersonCreditsInput(BaseModel): class SearchPersonCreditsTool (line 23) | class SearchPersonCreditsTool(MoviePilotTool): method get_tool_message (line 28) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 34) | async def run(self, person_id: int, source: str, page: Optional[int] =... FILE: app/agent/tools/impl/search_subscribe.py class SearchSubscribeInput (line 16) | class SearchSubscribeInput(BaseModel): class SearchSubscribeTool (line 25) | class SearchSubscribeTool(MoviePilotTool): method get_tool_message (line 30) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 41) | async def run(self, subscribe_id: int, manual: Optional[bool] = False, FILE: app/agent/tools/impl/search_torrents.py class SearchTorrentsInput (line 20) | class SearchTorrentsInput(BaseModel): class SearchTorrentsTool (line 30) | class SearchTorrentsTool(MoviePilotTool): method get_tool_message (line 37) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 53) | async def run(self, tmdb_id: Optional[int] = None, douban_id: Optional... FILE: app/agent/tools/impl/search_web.py class SearchWebInput (line 18) | class SearchWebInput(BaseModel): class SearchWebTool (line 26) | class SearchWebTool(MoviePilotTool): method get_tool_message (line 31) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 37) | async def run(self, query: str, max_results: Optional[int] = 5, **kwar... method _search_tavily (line 71) | async def _search_tavily(query: str, max_results: int) -> List[Dict]: method _get_proxy_url (line 104) | def _get_proxy_url(proxy_setting) -> Optional[str]: method _search_duckduckgo (line 112) | async def _search_duckduckgo(self, query: str, max_results: int) -> Li... method _format_and_truncate_results (line 150) | def _format_and_truncate_results(results: List[Dict], max_results: int... FILE: app/agent/tools/impl/send_message.py class SendMessageInput (line 11) | class SendMessageInput(BaseModel): class SendMessageTool (line 19) | class SendMessageTool(MoviePilotTool): method get_tool_message (line 24) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 38) | async def run(self, message: str, message_type: Optional[str] = None, ... FILE: app/agent/tools/impl/test_site.py class TestSiteInput (line 13) | class TestSiteInput(BaseModel): class TestSiteTool (line 19) | class TestSiteTool(MoviePilotTool): method get_tool_message (line 24) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 29) | async def run(self, site_identifier: int, **kwargs) -> str: FILE: app/agent/tools/impl/transfer_file.py class TransferFileInput (line 14) | class TransferFileInput(BaseModel): class TransferFileTool (line 29) | class TransferFileTool(MoviePilotTool): method get_tool_message (line 34) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 52) | async def run(self, file_path: str, storage: Optional[str] = "local", FILE: app/agent/tools/impl/update_site.py class UpdateSiteInput (line 17) | class UpdateSiteInput(BaseModel): class UpdateSiteTool (line 40) | class UpdateSiteTool(MoviePilotTool): method get_tool_message (line 45) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 71) | async def run(self, site_id: int, FILE: app/agent/tools/impl/update_site_cookie.py class UpdateSiteCookieInput (line 13) | class UpdateSiteCookieInput(BaseModel): class UpdateSiteCookieTool (line 22) | class UpdateSiteCookieTool(MoviePilotTool): method get_tool_message (line 27) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 39) | async def run(self, site_identifier: int, username: str, password: str, FILE: app/agent/tools/impl/update_subscribe.py class UpdateSubscribeInput (line 16) | class UpdateSubscribeInput(BaseModel): class UpdateSubscribeTool (line 42) | class UpdateSubscribeTool(MoviePilotTool): method get_tool_message (line 47) | def get_tool_message(self, **kwargs) -> Optional[str]: method run (line 74) | async def run(self, subscribe_id: int, FILE: app/agent/tools/manager.py class ToolDefinition (line 9) | class ToolDefinition: method __init__ (line 14) | def __init__(self, name: str, description: str, input_schema: Dict[str... class MoviePilotToolsManager (line 20) | class MoviePilotToolsManager: method __init__ (line 25) | def __init__(self, user_id: str = "api_user", session_id: str = uuid.u... method _load_tools (line 38) | def _load_tools(self): method list_tools (line 57) | def list_tools(self) -> List[ToolDefinition]: method get_tool (line 87) | def get_tool(self, tool_name: str) -> Optional[Any]: method _resolve_field_schema (line 103) | def _resolve_field_schema(field_info: Dict[str, Any]) -> Dict[str, Any]: method _normalize_scalar_value (line 126) | def _normalize_scalar_value(field_type: Optional[str], value: Any, key... method _parse_array_string (line 153) | def _parse_array_string(value: str, key: str, item_type: str = "string... method _normalize_arguments (line 166) | def _normalize_arguments(tool_instance: Any, arguments: Dict[str, Any]... method call_tool (line 212) | async def call_tool(self, tool_name: str, arguments: Dict[str, Any]) -... method _convert_to_json_schema (line 259) | def _convert_to_json_schema(args_schema: Any) -> Dict[str, Any]: FILE: app/api/endpoints/bangumi.py function bangumi_credits (line 14) | async def bangumi_credits(bangumiid: int, function bangumi_recommend (line 28) | async def bangumi_recommend(bangumiid: int, function bangumi_person (line 42) | async def bangumi_person(person_id: int, function bangumi_person_credits (line 51) | async def bangumi_person_credits(person_id: int, function bangumi_info (line 65) | async def bangumi_info(bangumiid: int, FILE: app/api/endpoints/dashboard.py function statistic (line 21) | def statistic(name: Optional[str] = None, _: schemas.TokenPayload = Depe... function statistic2 (line 46) | def statistic2(_: Annotated[str, Depends(verify_apitoken)]) -> Any: function storage (line 54) | def storage(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function storage2 (line 75) | def storage2(_: Annotated[str, Depends(verify_apitoken)]) -> Any: function processes (line 83) | def processes(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function downloader (line 91) | def downloader(name: Optional[str] = None, _: schemas.TokenPayload = Dep... function downloader2 (line 112) | def downloader2(_: Annotated[str, Depends(verify_apitoken)]) -> Any: function schedule (line 120) | async def schedule(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function schedule2 (line 128) | async def schedule2(_: Annotated[str, Depends(verify_apitoken)]) -> Any: function transfer (line 136) | async def transfer(days: Optional[int] = 7, function cpu (line 147) | def cpu(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function cpu2 (line 155) | def cpu2(_: Annotated[str, Depends(verify_apitoken)]) -> Any: function memory (line 163) | def memory(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function memory2 (line 171) | def memory2(_: Annotated[str, Depends(verify_apitoken)]) -> Any: function network (line 179) | def network(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function network2 (line 187) | def network2(_: Annotated[str, Depends(verify_apitoken)]) -> Any: FILE: app/api/endpoints/discover.py function source (line 18) | def source(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function bangumi (line 34) | async def bangumi(type: Optional[int] = 2, function douban_movies (line 52) | async def douban_movies(sort: Optional[str] = "R", function douban_tvs (line 66) | async def douban_tvs(sort: Optional[str] = "R", function tmdb_movies (line 80) | async def tmdb_movies(sort_by: Optional[str] = "popularity.desc", function tmdb_tvs (line 107) | async def tmdb_tvs(sort_by: Optional[str] = "popularity.desc", FILE: app/api/endpoints/douban.py function douban_person (line 15) | async def douban_person(person_id: int, function douban_person_credits (line 24) | async def douban_person_credits(person_id: int, function douban_credits (line 37) | async def douban_credits(doubanid: str, function douban_recommend (line 52) | async def douban_recommend(doubanid: str, function douban_info (line 71) | async def douban_info(doubanid: str, FILE: app/api/endpoints/download.py function current (line 22) | def current( function download (line 32) | def download( function add (line 67) | def add( function start (line 109) | def start( function stop (line 120) | def stop(hashString: str, name: Optional[str] = None, function clients (line 130) | async def clients(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function delete (line 141) | def delete(hashString: str, name: Optional[str] = None, FILE: app/api/endpoints/history.py function download_history (line 24) | async def download_history(page: Optional[int] = 1, function delete_download_history (line 35) | async def delete_download_history(history_in: schemas.DownloadHistory, function transfer_history (line 46) | async def transfer_history(title: Optional[str] = None, function delete_transfer_history (line 80) | def delete_transfer_history(history_in: schemas.TransferHistory, function empty_transfer_history (line 118) | async def empty_transfer_history(db: AsyncSession = Depends(get_async_db), FILE: app/api/endpoints/login.py function login_access_token (line 20) | def login_access_token( function wallpaper (line 65) | def wallpaper() -> Any: function wallpapers (line 79) | def wallpapers() -> Any: FILE: app/api/endpoints/mcp.py function list_exposed_tools (line 25) | def list_exposed_tools(): function create_jsonrpc_response (line 35) | def create_jsonrpc_response(request_id: Union[str, int, None], result: A... function create_jsonrpc_error (line 47) | def create_jsonrpc_error(request_id: Union[str, int, None], code: int, m... function mcp_jsonrpc (line 66) | async def mcp_jsonrpc( function handle_initialize (line 148) | async def handle_initialize(params: Dict[str, Any]) -> Dict[str, Any]: function handle_tools_list (line 184) | async def handle_tools_list() -> Dict[str, Any]: function handle_tools_call (line 205) | async def handle_tools_call(params: Dict[str, Any]) -> Dict[str, Any]: function delete_mcp_session (line 243) | async def delete_mcp_session( function list_tools (line 255) | async def list_tools( function call_tool (line 284) | async def call_tool( function get_tool_info (line 313) | async def get_tool_info( function get_tool_schema (line 345) | async def get_tool_schema( FILE: app/api/endpoints/media.py function recognize (line 24) | async def recognize(title: str, function recognize2 (line 39) | async def recognize2(_: Annotated[str, Depends(verify_apitoken)], function recognize_file (line 51) | async def recognize_file(path: str, function recognize_file2 (line 64) | async def recognize_file2(path: str, function search (line 74) | async def search(title: str, function scrape (line 114) | def scrape(fileitem: schemas.FileItem, function get_category_config (line 138) | def get_category_config(_: User = Depends(get_current_active_user)): function save_category_config (line 147) | def save_category_config(config: CategoryConfig, _: User = Depends(get_c... function category (line 158) | async def category(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function group_seasons (line 166) | async def group_seasons(episode_group: str, _: schemas.TokenPayload = De... function groups (line 174) | async def groups(tmdbid: int, _: schemas.TokenPayload = Depends(verify_t... function seasons (line 185) | async def seasons(mediaid: Optional[str] = None, function detail (line 228) | async def detail(mediaid: str, type_name: str, title: Optional[str] = No... FILE: app/api/endpoints/mediaserver.py function play_item (line 24) | def play_item(itemid: str, _: schemas.TokenPayload = Depends(verify_toke... function exists_local (line 46) | async def exists_local(title: Optional[str] = None, function exists (line 75) | def exists(media_in: schemas.MediaInfo, function not_exists (line 94) | def not_exists(media_in: schemas.MediaInfo, function latest (line 124) | def latest(server: str, count: Optional[int] = 20, function playing (line 133) | def playing(server: str, count: Optional[int] = 12, function library (line 142) | def library(server: str, hidden: Optional[bool] = False, function clients (line 151) | async def clients(_: schemas.TokenPayload = Depends(verify_token)) -> Any: FILE: app/api/endpoints/message.py function start_message_chain (line 25) | def start_message_chain(body: Any, form: Any, args: Any): function user_message (line 33) | async def user_message(background_tasks: BackgroundTasks, request: Request, function web_message (line 46) | def web_message(text: str, current_user: User = Depends(get_current_acti... function get_web_message (line 61) | async def get_web_message(_: schemas.TokenPayload = Depends(verify_token), function wechat_verify (line 79) | def wechat_verify(echostr: str, msg_signature: str, timestamp: Union[str... function vocechat_verify (line 112) | def vocechat_verify() -> Any: function incoming_verify (line 120) | def incoming_verify(token: Optional[str] = None, echostr: Optional[str] ... function subscribe (line 134) | async def subscribe(subscription: schemas.Subscription, _: schemas.Token... function send_notification (line 146) | def send_notification(payload: schemas.SubscriptionMessage, _: schemas.T... FILE: app/api/endpoints/mfa.py function _build_credential_list (line 29) | def _build_credential_list(passkeys: list[PassKey]) -> list[dict[str, An... function _extract_and_standardize_credential_id (line 45) | def _extract_and_standardize_credential_id(credential: dict) -> str: function _verify_passkey_and_update (line 59) | def _verify_passkey_and_update( function _check_user_has_passkey (line 85) | async def _check_user_has_passkey(db: AsyncSession, user_id: int) -> bool: class OtpVerifyRequest (line 98) | class OtpVerifyRequest(schemas.BaseModel): class OtpDisableRequest (line 103) | class OtpDisableRequest(schemas.BaseModel): class PassKeyDeleteRequest (line 107) | class PassKeyDeleteRequest(schemas.BaseModel): function mfa_status (line 115) | async def mfa_status(username: str, db: AsyncSession = Depends(get_async... function otp_generate (line 136) | def otp_generate( function otp_verify (line 145) | async def otp_verify( function otp_disable (line 158) | async def otp_disable( class PassKeyRegistrationStart (line 181) | class PassKeyRegistrationStart(schemas.BaseModel): class PassKeyRegistrationFinish (line 186) | class PassKeyRegistrationFinish(schemas.BaseModel): class PassKeyAuthenticationStart (line 193) | class PassKeyAuthenticationStart(schemas.BaseModel): class PassKeyAuthenticationFinish (line 198) | class PassKeyAuthenticationFinish(schemas.BaseModel): function passkey_register_start (line 205) | def passkey_register_start( function passkey_register_finish (line 245) | def passkey_register_finish( function passkey_authenticate_start (line 289) | def passkey_authenticate_start( function passkey_authenticate_finish (line 330) | def passkey_authenticate_finish( function passkey_list (line 389) | def passkey_list( function passkey_delete (line 421) | async def passkey_delete( function passkey_verify_mfa (line 453) | def passkey_verify_mfa( FILE: app/api/endpoints/plugin.py function register_plugin_api (line 32) | def register_plugin_api(plugin_id: Optional[str] = None): function remove_plugin_api (line 40) | def remove_plugin_api(plugin_id: str): function _update_plugin_api_routes (line 48) | def _update_plugin_api_routes(plugin_id: Optional[str], action: str): function _remove_routes (line 95) | def _remove_routes(plugin_id: str) -> bool: function _clean_protected_routes (line 116) | def _clean_protected_routes(existing_paths: dict): function register_plugin (line 130) | def register_plugin(plugin_id: str): function all_plugins (line 143) | async def all_plugins(_: User = Depends(get_current_active_superuser_asy... function installed (line 192) | async def installed(_: User = Depends(get_current_active_superuser_async... function statistic (line 200) | async def statistic(_: schemas.TokenPayload = Depends(verify_token)) -> ... function reload_plugin (line 208) | def reload_plugin(plugin_id: str, _: User = Depends(get_current_active_s... function install (line 220) | async def install(plugin_id: str, function remotes (line 254) | async def remotes(token: str) -> Any: function plugin_form (line 264) | def plugin_form(plugin_id: str, function plugin_page (line 289) | def plugin_page(plugin_id: str, _: User = Depends(get_current_active_sup... function plugin_dashboard_meta (line 311) | def plugin_dashboard_meta(_: schemas.TokenPayload = Depends(verify_token... function plugin_dashboard_by_key (line 319) | def plugin_dashboard_by_key(plugin_id: str, key: str, user_agent: Annota... function plugin_dashboard (line 328) | def plugin_dashboard(plugin_id: str, user_agent: Annotated[str | None, H... function reset_plugin (line 337) | def reset_plugin(plugin_id: str, function plugin_static_file (line 353) | async def plugin_static_file(plugin_id: str, filepath: str): function get_plugin_folders (line 410) | async def get_plugin_folders(_: User = Depends(get_current_active_superu... function save_plugin_folders (line 423) | async def save_plugin_folders(folders: dict, _: User = Depends(get_curre... function create_plugin_folder (line 436) | async def create_plugin_folder(folder_name: str, function delete_plugin_folder (line 451) | async def delete_plugin_folder(folder_name: str, function update_folder_plugins (line 466) | async def update_folder_plugins(folder_name: str, plugin_ids: List[str], function clone_plugin (line 478) | def clone_plugin(plugin_id: str, function plugin_config (line 508) | async def plugin_config(plugin_id: str, function set_plugin_config (line 517) | def set_plugin_config(plugin_id: str, conf: dict, function uninstall_plugin (line 533) | def uninstall_plugin(plugin_id: str, function _add_clone_to_plugin_folder (line 572) | def _add_clone_to_plugin_folder(original_plugin_id: str, clone_plugin_id... function _remove_plugin_from_folders (line 621) | def _remove_plugin_from_folders(plugin_id: str): FILE: app/api/endpoints/recommend.py function source (line 16) | def source(_: schemas.TokenPayload = Depends(verify_token)) -> Any: function bangumi_calendar (line 32) | async def bangumi_calendar(page: Optional[int] = 1, function douban_showing (line 42) | async def douban_showing(page: Optional[int] = 1, function douban_movies (line 52) | async def douban_movies(sort: Optional[str] = "R", function douban_tvs (line 64) | async def douban_tvs(sort: Optional[str] = "R", function douban_movie_top250 (line 76) | async def douban_movie_top250(page: Optional[int] = 1, function douban_tv_weekly_chinese (line 86) | async def douban_tv_weekly_chinese(page: Optional[int] = 1, function douban_tv_weekly_global (line 96) | async def douban_tv_weekly_global(page: Optional[int] = 1, function douban_tv_animation (line 106) | async def douban_tv_animation(page: Optional[int] = 1, function douban_movie_hot (line 116) | async def douban_movie_hot(page: Optional[int] = 1, function douban_tv_hot (line 126) | async def douban_tv_hot(page: Optional[int] = 1, function tmdb_movies (line 136) | async def tmdb_movies(sort_by: Optional[str] = "popularity.desc", function tmdb_tvs (line 161) | async def tmdb_tvs(sort_by: Optional[str] = "popularity.desc", function tmdb_trending (line 186) | async def tmdb_trending(page: Optional[int] = 1, FILE: app/api/endpoints/search.py function search_latest (line 21) | async def search_latest(_: schemas.TokenPayload = Depends(verify_token))... function search_by_id (line 30) | async def search_by_id(mediaid: str, function search_by_title (line 160) | async def search_by_title(keyword: Optional[str] = None, function recommend_search_results (line 181) | async def recommend_search_results( FILE: app/api/endpoints/site.py function read_sites (line 34) | async def read_sites(db: AsyncSession = Depends(get_async_db), function add_site (line 43) | async def add_site( function update_site (line 80) | async def update_site( function cookie_cloud_sync (line 108) | async def cookie_cloud_sync(background_tasks: BackgroundTasks, function reset (line 118) | def reset(db: AsyncSession = Depends(get_db), function update_sites_priority (line 137) | async def update_sites_priority( function update_cookie (line 152) | def update_cookie( function refresh_userdata (line 178) | def refresh_userdata( function read_userdata_latest (line 199) | async def read_userdata_latest( function read_userdata (line 212) | async def read_userdata( function test_site (line 233) | def test_site(site_id: int, function site_icon (line 250) | async def site_icon(site_id: int, function site_category (line 271) | async def site_category(site_id: int, function site_resource (line 301) | async def site_resource(site_id: int, function read_site_by_domain (line 323) | async def read_site_by_domain( function read_statistic_by_domain (line 342) | async def read_statistic_by_domain( function read_statistics (line 358) | async def read_statistics( function read_rss_sites (line 369) | async def read_rss_sites(db: AsyncSession = Depends(get_async_db), function read_auth_sites (line 388) | async def read_auth_sites(_: schemas.TokenPayload = Depends(verify_token... function auth_site (line 396) | def auth_site( function site_mapping (line 416) | async def site_mapping(_: User = Depends(get_current_active_superuser_as... function support_sites (line 431) | async def support_sites(_: User = Depends(get_current_active_superuser_a... function read_site (line 439) | async def read_site( function delete_site (line 457) | async def delete_site( FILE: app/api/endpoints/storage.py function qrcode (line 24) | def qrcode(name: str, _: schemas.TokenPayload = Depends(verify_token)) -... function auth_url (line 35) | def auth_url(name: str, _: schemas.TokenPayload = Depends(verify_token))... function check (line 46) | def check(name: str, ck: Optional[str] = None, t: Optional[str] = None, function save (line 61) | def save(name: str, function reset (line 72) | def reset(name: str, function list_files (line 82) | def list_files(fileitem: schemas.FileItem, function mkdir (line 102) | def mkdir(fileitem: schemas.FileItem, function delete (line 120) | def delete(fileitem: schemas.FileItem, function download (line 134) | def download(fileitem: schemas.FileItem, function image (line 149) | def image(fileitem: schemas.FileItem, function rename (line 164) | def rename(fileitem: schemas.FileItem, function usage (line 225) | def usage(name: str, _: User = Depends(get_current_active_superuser)) ->... function transtype (line 236) | async def transtype(name: str, _: User = Depends(get_current_active_supe... FILE: app/api/endpoints/subscribe.py function start_subscribe_add (line 28) | def start_subscribe_add(title: str, year: str, function read_subscribes (line 38) | async def read_subscribes( function list_subscribes (line 48) | async def list_subscribes(_: Annotated[str, Depends(verify_apitoken)]) -... function create_subscribe (line 56) | async def create_subscribe( function update_subscribe (line 95) | async def update_subscribe( function update_subscribe_status (line 136) | async def update_subscribe_status( function subscribe_mediaid (line 166) | async def subscribe_mediaid( function refresh_subscribes (line 210) | def refresh_subscribes( function reset_subscribes (line 220) | async def reset_subscribes( function check_subscribes (line 250) | def check_subscribes( function search_subscribes (line 260) | async def search_subscribes( function search_subscribe (line 279) | async def search_subscribe( function delete_subscribe_by_mediaid (line 299) | async def delete_subscribe_by_mediaid( function seerr_subscribe (line 340) | async def seerr_subscribe(request: Request, background_tasks: Background... function subscribe_history (line 393) | async def subscribe_history( function delete_subscribe (line 406) | async def delete_subscribe( function popular_subscribes (line 419) | async def popular_subscribes( function user_subscribes (line 476) | async def user_subscribes( function subscribe_files (line 487) | def subscribe_files( function subscribe_share (line 501) | async def subscribe_share( function subscribe_share_delete (line 515) | async def subscribe_share_delete( function subscribe_fork (line 526) | async def subscribe_fork( function followed_subscribers (line 545) | async def followed_subscribers(_: schemas.TokenPayload = Depends(verify_... function follow_subscriber (line 553) | async def follow_subscriber( function unfollow_subscriber (line 567) | async def unfollow_subscriber( function popular_subscribes (line 581) | async def popular_subscribes( function subscribe_share_statistics (line 605) | async def subscribe_share_statistics(_: schemas.TokenPayload = Depends(v... function read_subscribe (line 614) | async def read_subscribe( function delete_subscribe (line 627) | async def delete_subscribe( FILE: app/api/endpoints/system.py function fetch_image (line 49) | async def fetch_image( function proxy_img (line 91) | async def proxy_img( function cache_img (line 116) | async def cache_img( function get_global_setting (line 130) | def get_global_setting(token: str): function get_user_global_setting (line 156) | async def get_user_global_setting(_: User = Depends(get_current_active_u... function get_env_setting (line 186) | async def get_env_setting(_: User = Depends(get_current_active_user_asyn... function set_env_setting (line 204) | async def set_env_setting(env: dict, function get_progress (line 241) | async def get_progress(request: Request, process_type: str, _: schemas.T... function get_setting (line 262) | async def get_setting(key: str, function set_setting (line 277) | async def set_setting( function get_llm_models (line 315) | async def get_llm_models(provider: str, api_key: str, base_url: Optional... function get_message (line 327) | async def get_message(request: Request, role: Optional[str] = "system", function get_logging (line 349) | async def get_logging(request: Request, length: Optional[int] = 50, logf... function latest_version (line 451) | async def latest_version(_: schemas.TokenPayload = Depends(verify_token)): function ruletest (line 465) | def ruletest(title: str, function nettest (line 497) | async def nettest( function modulelist (line 574) | def modulelist(_: schemas.TokenPayload = Depends(verify_token)): function moduletest (line 588) | def moduletest(moduleid: str, _: schemas.TokenPayload = Depends(verify_t... function restart_system (line 597) | def restart_system(_: User = Depends(get_current_active_superuser)): function run_scheduler (line 611) | def run_scheduler(jobid: str, function run_scheduler2 (line 626) | def run_scheduler2(jobid: str, FILE: app/api/endpoints/tmdb.py function tmdb_seasons (line 14) | async def tmdb_seasons(tmdbid: int, _: schemas.TokenPayload = Depends(ve... function tmdb_similar (line 25) | async def tmdb_similar(tmdbid: int, function tmdb_recommend (line 44) | async def tmdb_recommend(tmdbid: int, function tmdb_collection (line 63) | async def tmdb_collection(collection_id: int, function tmdb_credits (line 77) | async def tmdb_credits(tmdbid: int, function tmdb_person (line 95) | async def tmdb_person(person_id: int, function tmdb_person_credits (line 104) | async def tmdb_person_credits(person_id: int, function tmdb_season_episodes (line 117) | async def tmdb_season_episodes(tmdbid: int, season: int, episode_group: ... FILE: app/api/endpoints/torrent.py function torrents_cache (line 19) | async def torrents_cache(_: User = Depends(get_current_active_superuser_... function delete_cache (line 66) | async def delete_cache(domain: str, torrent_hash: str, _: User = Depends... function clear_cache (line 102) | async def clear_cache(_: User = Depends(get_current_active_superuser_asy... function refresh_cache (line 116) | def refresh_cache(_: User = Depends(get_current_active_superuser)): function reidentify_cache (line 137) | async def reidentify_cache(domain: str, torrent_hash: str, FILE: app/api/endpoints/transfer.py function query_name (line 25) | def query_name(path: str, filetype: str, function query_queue (line 62) | async def query_queue(_: schemas.TokenPayload = Depends(verify_token)) -... function remove_queue (line 71) | async def remove_queue(fileitem: schemas.FileItem, _: schemas.TokenPaylo... function manual_transfer (line 84) | def manual_transfer(transer_item: ManualTransferItem, function now (line 195) | def now(_: Annotated[str, Depends(verify_apitoken)]) -> Any: FILE: app/api/endpoints/user.py function list_users (line 21) | async def list_users( function create_user (line 32) | async def create_user( function update_user (line 53) | async def update_user( function read_current_user (line 87) | async def read_current_user( function upload_avatar (line 97) | async def upload_avatar(user_id: int, db: AsyncSession = Depends(get_asy... function get_config (line 115) | def get_config(key: str, function set_config (line 127) | def set_config( function delete_user_by_id (line 140) | async def delete_user_by_id( function delete_user_by_name (line 157) | async def delete_user_by_name( function read_user_by_name (line 174) | async def read_user_by_name( FILE: app/api/endpoints/webhook.py function start_webhook_chain (line 12) | def start_webhook_chain(body: Any, form: Any, args: Any): function webhook_message (line 20) | async def webhook_message(background_tasks: BackgroundTasks, function webhook_message (line 35) | async def webhook_message(background_tasks: BackgroundTasks, FILE: app/api/endpoints/workflow.py function list_workflows (line 27) | async def list_workflows(db: AsyncSession = Depends(get_async_db), function create_workflow (line 36) | async def create_workflow(workflow: schemas.Workflow, function list_plugin_actions (line 56) | def list_plugin_actions(plugin_id: str = None, _: schemas.TokenPayload =... function list_actions (line 64) | async def list_actions(_: schemas.TokenPayload = Depends(verify_token)) ... function get_event_types (line 72) | async def get_event_types(_: schemas.TokenPayload = Depends(verify_token... function workflow_share (line 83) | async def workflow_share( function workflow_share_delete (line 100) | async def workflow_share_delete( function workflow_fork (line 111) | async def workflow_fork( function workflow_shares (line 167) | async def workflow_shares( function run_workflow (line 179) | def run_workflow(workflow_id: int, function start_workflow (line 192) | def start_workflow(workflow_id: int, function pause_workflow (line 213) | def pause_workflow(workflow_id: int, function reset_workflow (line 237) | async def reset_workflow(workflow_id: int, function get_workflow (line 256) | async def get_workflow(workflow_id: int, function update_workflow (line 266) | def update_workflow(workflow: schemas.Workflow, function delete_workflow (line 291) | def delete_workflow(workflow_id: int, FILE: app/api/servarr.py function arr_system_status (line 23) | async def arr_system_status(_: Annotated[str, Depends(verify_apikey)]) -... function arr_qualityProfile (line 77) | async def arr_qualityProfile(_: Annotated[str, Depends(verify_apikey)]) ... function arr_rootfolder (line 118) | async def arr_rootfolder(_: Annotated[str, Depends(verify_apikey)]) -> Any: function arr_tag (line 134) | async def arr_tag(_: Annotated[str, Depends(verify_apikey)]) -> Any: function arr_languageprofile (line 147) | async def arr_languageprofile(_: Annotated[str, Depends(verify_apikey)])... function arr_movies (line 173) | async def arr_movies(_: Annotated[str, Depends(verify_apikey)], db: Asyn... function arr_movie_lookup (line 264) | def arr_movie_lookup(term: str, _: Annotated[str, Depends(verify_apikey)... function arr_movie (line 310) | async def arr_movie(mid: int, _: Annotated[str, Depends(verify_apikey)], function arr_add_movie (line 337) | async def arr_add_movie(_: Annotated[str, Depends(verify_apikey)], function arr_remove_movie (line 368) | async def arr_remove_movie(mid: int, _: Annotated[str, Depends(verify_ap... function arr_series (line 385) | async def arr_series(_: Annotated[str, Depends(verify_apikey)], db: Asyn... function arr_series_lookup (line 521) | def arr_series_lookup(term: str, _: Annotated[str, Depends(verify_apikey... function arr_serie (line 611) | async def arr_serie(tid: int, _: Annotated[str, Depends(verify_apikey)], function arr_add_series (line 646) | async def arr_add_series(tv: schemas.SonarrSeries, function arr_update_series (line 690) | async def arr_update_series(tv: schemas.SonarrSeries, _: Annotated[str, ... function arr_remove_series (line 698) | async def arr_remove_series(tid: int, _: Annotated[str, Depends(verify_a... FILE: app/api/servcookie.py class GzipRequest (line 17) | class GzipRequest(Request): method body (line 19) | async def body(self) -> bytes: class GzipRoute (line 28) | class GzipRoute(APIRoute): method get_route_handler (line 30) | def get_route_handler(self) -> Callable: function verify_server_enabled (line 40) | async def verify_server_enabled(): function get_root (line 55) | async def get_root(): function post_root (line 60) | async def post_root(): function update_cookie (line 65) | async def update_cookie(req: schemas.CookieData): function load_encrypt_data (line 81) | async def load_encrypt_data(uuid: str) -> Dict[str, Any]: function get_decrypted_cookie_data (line 98) | def get_decrypted_cookie_data(uuid: str, password: str, function get_cookie (line 120) | async def get_cookie( function post_cookie (line 129) | async def post_cookie( FILE: app/chain/__init__.py class ChainBase (line 34) | class ChainBase(metaclass=ABCMeta): method __init__ (line 39) | def __init__(self): method load_cache (line 54) | def load_cache(self, filename: str) -> Any: method async_load_cache (line 67) | async def async_load_cache(self, filename: str) -> Any: method async_save_cache (line 80) | async def async_save_cache(self, cache: Any, filename: str) -> None: method save_cache (line 90) | def save_cache(self, cache: Any, filename: str) -> None: method remove_cache (line 100) | def remove_cache(self, filename: str) -> None: method async_remove_cache (line 106) | async def async_remove_cache(self, filename: str) -> None: method __is_valid_empty (line 113) | def __is_valid_empty(ret): method __handle_plugin_error (line 122) | def __handle_plugin_error(self, err: Exception, plugin_id: str, plugin... method __handle_system_error (line 145) | def __handle_system_error(self, err: Exception, module_id: str, module... method __execute_plugin_modules (line 168) | def __execute_plugin_modules(self, method: str, result: Any, *args, **... method __async_execute_plugin_modules (line 193) | async def __async_execute_plugin_modules(self, method: str, result: An... method __execute_system_modules (line 226) | def __execute_system_modules(self, method: str, result: Any, *args, **... method __async_execute_system_modules (line 259) | async def __async_execute_system_modules(self, method: str, result: An... method run_module (line 301) | def run_module(self, method: str, *args, **kwargs) -> Any: method async_run_module (line 318) | async def async_run_module(self, method: str, *args, **kwargs) -> Any: method recognize_media (line 336) | def recognize_media(self, meta: MetaBase = None, method async_recognize_media (line 370) | async def async_recognize_media(self, meta: MetaBase = None, method match_doubaninfo (line 404) | def match_doubaninfo(self, name: str, imdbid: Optional[str] = None, method async_match_doubaninfo (line 419) | async def async_match_doubaninfo(self, name: str, imdbid: Optional[str... method match_tmdbinfo (line 435) | def match_tmdbinfo(self, name: str, mtype: Optional[MediaType] = None, method async_match_tmdbinfo (line 447) | async def async_match_tmdbinfo(self, name: str, mtype: Optional[MediaT... method obtain_images (line 459) | def obtain_images(self, mediainfo: MediaInfo) -> Optional[MediaInfo]: method async_obtain_images (line 467) | async def async_obtain_images(self, mediainfo: MediaInfo) -> Optional[... method obtain_specific_image (line 475) | def obtain_specific_image(self, mediaid: Union[str, int], mtype: Media... method douban_info (line 491) | def douban_info(self, doubanid: str, mtype: Optional[MediaType] = None, method async_douban_info (line 502) | async def async_douban_info(self, doubanid: str, mtype: Optional[Media... method tvdb_info (line 514) | def tvdb_info(self, tvdbid: int) -> Optional[dict]: method tmdb_info (line 522) | def tmdb_info(self, tmdbid: int, mtype: MediaType, season: Optional[in... method async_tmdb_info (line 532) | async def async_tmdb_info(self, tmdbid: int, mtype: MediaType, season:... method bangumi_info (line 542) | def bangumi_info(self, bangumiid: int) -> Optional[dict]: method async_bangumi_info (line 550) | async def async_bangumi_info(self, bangumiid: int) -> Optional[dict]: method message_parser (line 558) | def message_parser(self, source: str, body: Any, form: Any, method webhook_parser (line 573) | def webhook_parser(self, body: Any, form: Any, args: Any) -> Optional[... method search_medias (line 583) | def search_medias(self, meta: MetaBase) -> Optional[List[MediaInfo]]: method async_search_medias (line 591) | async def async_search_medias(self, meta: MetaBase) -> Optional[List[M... method search_persons (line 599) | def search_persons(self, name: str) -> Optional[List[MediaPerson]]: method async_search_persons (line 606) | async def async_search_persons(self, name: str) -> Optional[List[Media... method search_collections (line 613) | def search_collections(self, name: str) -> Optional[List[MediaInfo]]: method async_search_collections (line 620) | async def async_search_collections(self, name: str) -> Optional[List[M... method search_torrents (line 627) | def search_torrents(self, site: dict, method async_search_torrents (line 642) | async def async_search_torrents(self, site: dict, method refresh_torrents (line 657) | def refresh_torrents(self, site: dict, keyword: Optional[str] = None, method async_refresh_torrents (line 669) | async def async_refresh_torrents(self, site: dict, keyword: Optional[s... method filter_torrents (line 682) | def filter_torrents(self, rule_groups: List[str], method download (line 695) | def download(self, content: Union[Path, str, bytes], download_dir: Pat... method download_added (line 714) | def download_added(self, context: Context, download_dir: Path, torrent... method list_torrents (line 726) | def list_torrents(self, status: TorrentStatus = None, method transfer (line 739) | def transfer(self, fileitem: FileItem, meta: MetaBase, mediainfo: Medi... method transfer_completed (line 773) | def transfer_completed(self, hashs: str, downloader: Optional[str] = N... method remove_torrents (line 781) | def remove_torrents(self, hashs: Union[str, list], delete_file: bool =... method start_torrents (line 792) | def start_torrents(self, hashs: Union[list, str], downloader: Optional... method stop_torrents (line 801) | def stop_torrents(self, hashs: Union[list, str], downloader: Optional[... method torrent_files (line 810) | def torrent_files(self, tid: str, method media_exists (line 820) | def media_exists(self, mediainfo: MediaInfo, itemid: Optional[str] = N... method media_files (line 831) | def media_files(self, mediainfo: MediaInfo) -> Optional[List[FileItem]]: method post_message (line 839) | def post_message(self, method async_post_message (line 924) | async def async_post_message(self, method post_medias_message (line 1010) | def post_medias_message(self, message: Notification, medias: List[Medi... method post_torrents_message (line 1023) | def post_torrents_message(self, message: Notification, torrents: List[... method delete_message (line 1036) | def delete_message(self, channel: MessageChannel, source: str, method metadata_img (line 1049) | def metadata_img(self, mediainfo: MediaInfo, method media_category (line 1059) | def media_category(self) -> Optional[Dict[str, list]]: method category_config (line 1066) | def category_config(self) -> CategoryConfig: method save_category_config (line 1072) | def save_category_config(self, config: CategoryConfig) -> bool: method register_commands (line 1078) | def register_commands(self, commands: Dict[str, dict]) -> None: method scheduler_job (line 1084) | def scheduler_job(self) -> None: method clear_cache (line 1090) | def clear_cache(self) -> None: FILE: app/chain/ai_recommend.py class AIRecommendChain (line 15) | class AIRecommendChain(ChainBase, metaclass=Singleton): method _calculate_request_hash (line 32) | def _calculate_request_hash( method is_enabled (line 47) | def is_enabled(self) -> bool: method _build_status (line 53) | def _build_status(self) -> Dict[str, Any]: method get_current_status_only (line 79) | def get_current_status_only(self) -> Dict[str, Any]: method get_status (line 85) | def get_status( method async_ai_recommend (line 108) | async def async_ai_recommend(self, items: List[str], preference: str =... method is_ai_recommend_running (line 162) | def is_ai_recommend_running(self) -> bool: method cancel_ai_recommend (line 168) | def cancel_ai_recommend(self): method start_recommend_task (line 181) | def start_recommend_task( FILE: app/chain/bangumi.py class BangumiChain (line 8) | class BangumiChain(ChainBase): method calendar (line 13) | def calendar(self) -> Optional[List[MediaInfo]]: method discover (line 19) | def discover(self, **kwargs) -> Optional[List[MediaInfo]]: method bangumi_info (line 25) | def bangumi_info(self, bangumiid: int) -> Optional[dict]: method bangumi_credits (line 33) | def bangumi_credits(self, bangumiid: int) -> List[schemas.MediaPerson]: method bangumi_recommend (line 40) | def bangumi_recommend(self, bangumiid: int) -> Optional[List[MediaInfo]]: method person_detail (line 47) | def person_detail(self, person_id: int) -> Optional[schemas.MediaPerson]: method person_credits (line 54) | def person_credits(self, person_id: int) -> Optional[List[MediaInfo]]: method async_calendar (line 61) | async def async_calendar(self) -> Optional[List[MediaInfo]]: method async_discover (line 67) | async def async_discover(self, **kwargs) -> Optional[List[MediaInfo]]: method async_bangumi_info (line 73) | async def async_bangumi_info(self, bangumiid: int) -> Optional[dict]: method async_bangumi_credits (line 81) | async def async_bangumi_credits(self, bangumiid: int) -> List[schemas.... method async_bangumi_recommend (line 88) | async def async_bangumi_recommend(self, bangumiid: int) -> Optional[Li... method async_person_detail (line 95) | async def async_person_detail(self, person_id: int) -> Optional[schema... method async_person_credits (line 102) | async def async_person_credits(self, person_id: int) -> Optional[List[... FILE: app/chain/dashboard.py class DashboardChain (line 7) | class DashboardChain(ChainBase): method media_statistic (line 11) | def media_statistic(self, server: Optional[str] = None) -> Optional[Li... method downloader_info (line 17) | def downloader_info(self, downloader: Optional[str] = None) -> Optiona... FILE: app/chain/douban.py class DoubanChain (line 9) | class DoubanChain(ChainBase): method person_detail (line 14) | def person_detail(self, person_id: int) -> Optional[schemas.MediaPerson]: method person_credits (line 21) | def person_credits(self, person_id: int, page: Optional[int] = 1) -> L... method movie_top250 (line 29) | def movie_top250(self, page: Optional[int] = 1, count: Optional[int] =... method movie_showing (line 37) | def movie_showing(self, page: Optional[int] = 1, count: Optional[int] ... method tv_weekly_chinese (line 43) | def tv_weekly_chinese(self, page: Optional[int] = 1, count: Optional[i... method tv_weekly_global (line 49) | def tv_weekly_global(self, page: Optional[int] = 1, count: Optional[in... method douban_discover (line 55) | def douban_discover(self, mtype: MediaType, sort: str, tags: str, method tv_animation (line 69) | def tv_animation(self, page: Optional[int] = 1, count: Optional[int] =... method movie_hot (line 75) | def movie_hot(self, page: Optional[int] = 1, count: Optional[int] = 30... method tv_hot (line 81) | def tv_hot(self, page: Optional[int] = 1, count: Optional[int] = 30) -... method movie_credits (line 87) | def movie_credits(self, doubanid: str) -> Optional[List[schemas.MediaP... method tv_credits (line 94) | def tv_credits(self, doubanid: str) -> Optional[List[schemas.MediaPers... method movie_recommend (line 101) | def movie_recommend(self, doubanid: str) -> List[MediaInfo]: method tv_recommend (line 108) | def tv_recommend(self, doubanid: str) -> List[MediaInfo]: method async_person_detail (line 115) | async def async_person_detail(self, person_id: int) -> Optional[schema... method async_person_credits (line 122) | async def async_person_credits(self, person_id: int, page: Optional[in... method async_movie_top250 (line 130) | async def async_movie_top250(self, page: Optional[int] = 1, method async_movie_showing (line 139) | async def async_movie_showing(self, page: Optional[int] = 1, method async_tv_weekly_chinese (line 146) | async def async_tv_weekly_chinese(self, page: Optional[int] = 1, method async_tv_weekly_global (line 153) | async def async_tv_weekly_global(self, page: Optional[int] = 1, method async_douban_discover (line 160) | async def async_douban_discover(self, mtype: MediaType, sort: str, tag... method async_tv_animation (line 174) | async def async_tv_animation(self, page: Optional[int] = 1, method async_movie_hot (line 181) | async def async_movie_hot(self, page: Optional[int] = 1, method async_tv_hot (line 188) | async def async_tv_hot(self, page: Optional[int] = 1, method async_movie_credits (line 195) | async def async_movie_credits(self, doubanid: str) -> Optional[List[sc... method async_tv_credits (line 202) | async def async_tv_credits(self, doubanid: str) -> Optional[List[schem... method async_movie_recommend (line 209) | async def async_movie_recommend(self, doubanid: str) -> List[MediaInfo]: method async_tv_recommend (line 216) | async def async_tv_recommend(self, doubanid: str) -> List[MediaInfo]: FILE: app/chain/download.py class DownloadChain (line 30) | class DownloadChain(ChainBase): method download_torrent (line 35) | def download_torrent(self, torrent: TorrentInfo, method download_single (line 145) | def download_single(self, context: Context, method batch_download (line 398) | def batch_download(self, method get_no_exists_info (line 780) | def get_no_exists_info(self, meta: MetaBase, method remote_downloading (line 912) | def remote_downloading(self, channel: MessageChannel, userid: Union[st... method downloading (line 946) | def downloading(self, name: Optional[str] = None) -> List[DownloadingT... method set_downloading (line 972) | def set_downloading(self, hash_str, oper: str, name: Optional[str] = N... method remove_downloading (line 982) | def remove_downloading(self, hash_str: str, name: Optional[str] = None... method download_file_deleted (line 989) | def download_file_deleted(self, event: Event): FILE: app/chain/media.py class ScrapingOption (line 32) | class ScrapingOption: method __init__ (line 38) | def __init__( method is_skip (line 63) | def is_skip(self) -> bool: method is_overwrite (line 68) | def is_overwrite(self) -> bool: class ScrapingConfig (line 73) | class ScrapingConfig: method __init__ (line 78) | def __init__(self, config_dict: dict[str, str] = None): method option (line 97) | def option(self, item: Union[str, ScrapingTarget], metadata: Union[str... method from_system_config (line 107) | def from_system_config(cls) -> 'ScrapingConfig': method get_default_config (line 117) | def get_default_config() -> dict[str, str]: class MediaChain (line 132) | class MediaChain(ChainBase, ConfigReloadMixin, metaclass=Singleton): method on_config_changed (line 153) | def on_config_changed(self): method _should_scrape (line 156) | def _should_scrape(self, scraping_option: ScrapingOption, file_exists:... method _save_file (line 184) | def _save_file(self, fileitem: schemas.FileItem, path: Path, content: ... method _download_and_save_image (line 215) | def _download_and_save_image(self, fileitem: schemas.FileItem, path: P... method _get_target_fileitem_and_path (line 256) | def _get_target_fileitem_and_path(self, current_fileitem: schemas.File... method metadata_nfo (line 319) | def metadata_nfo(self, meta: MetaBase, mediainfo: MediaInfo, method select_recognize_source (line 331) | def select_recognize_source(self, log_name: str, log_context: str, method recognize_by_meta (line 359) | def recognize_by_meta(self, metainfo: MetaBase, episode_group: Optiona... method recognize_help (line 381) | def recognize_help(self, title: str, org_meta: MetaBase) -> Optional[M... method recognize_by_path (line 430) | def recognize_by_path(self, path: str, episode_group: Optional[str] = ... method search (line 454) | def search(self, title: str) -> Tuple[Optional[MetaBase], List[MediaIn... method get_tmdbinfo_by_doubanid (line 486) | def get_tmdbinfo_by_doubanid(self, doubanid: str, mtype: MediaType = N... method get_tmdbinfo_by_bangumiid (line 522) | def get_tmdbinfo_by_bangumiid(self, bangumiid: int) -> Optional[dict]: method get_doubaninfo_by_tmdbid (line 548) | def get_doubaninfo_by_tmdbid(self, tmdbid: int, method get_doubaninfo_by_bangumiid (line 569) | def get_doubaninfo_by_bangumiid(self, bangumiid: int) -> Optional[dict]: method scrape_metadata_event (line 592) | def scrape_metadata_event(self, event: Event): method _scrape_nfo_generic (line 689) | def _scrape_nfo_generic(self, current_fileitem: schemas.FileItem, method _scrape_images_generic (line 731) | def _scrape_images_generic(self, current_fileitem: schemas.FileItem, method scrape_metadata (line 800) | def scrape_metadata(self, fileitem: schemas.FileItem, method _handle_movie_scraping (line 859) | def _handle_movie_scraping(self, fileitem: schemas.FileItem, method _handle_movie_directory (line 888) | def _handle_movie_directory(self, fileitem: schemas.FileItem, method _handle_tv_scraping (line 928) | def _handle_tv_scraping(self, fileitem: schemas.FileItem, method _handle_tv_episode_file (line 959) | def _handle_tv_episode_file(self, fileitem: schemas.FileItem, method _handle_tv_directory (line 1001) | def _handle_tv_directory(self, fileitem: schemas.FileItem, method _initialize_tv_directory_metadata (line 1037) | def _initialize_tv_directory_metadata(self, fileitem: schemas.FileItem, method async_select_recognize_source (line 1095) | async def async_select_recognize_source(self, log_name: str, log_conte... method async_recognize_by_meta (line 1123) | async def async_recognize_by_meta(self, metainfo: MetaBase, method async_recognize_help (line 1151) | async def async_recognize_help(self, title: str, org_meta: MetaBase) -... method async_recognize_by_path (line 1200) | async def async_recognize_by_path(self, path: str, episode_group: Opti... method async_search (line 1229) | async def async_search(self, title: str) -> Tuple[Optional[MetaBase], ... method _extract_year_from_bangumi (line 1262) | def _extract_year_from_bangumi(bangumiinfo: dict) -> Optional[str]: method _extract_year_from_tmdb (line 1272) | def _extract_year_from_tmdb(tmdbinfo: dict, season: Optional[int] = No... method _match_tmdb_with_names (line 1290) | def _match_tmdb_with_names(self, meta_names: list, year: Optional[str], method _async_match_tmdb_with_names (line 1306) | async def _async_match_tmdb_with_names(self, meta_names: list, year: O... method async_get_tmdbinfo_by_doubanid (line 1322) | async def async_get_tmdbinfo_by_doubanid(self, doubanid: str, mtype: M... method async_get_tmdbinfo_by_bangumiid (line 1358) | async def async_get_tmdbinfo_by_bangumiid(self, bangumiid: int) -> Opt... method async_get_doubaninfo_by_tmdbid (line 1384) | async def async_get_doubaninfo_by_tmdbid(self, tmdbid: int, mtype: Med... method async_get_doubaninfo_by_bangumiid (line 1405) | async def async_get_doubaninfo_by_bangumiid(self, bangumiid: int) -> O... FILE: app/chain/mediaserver.py class MediaServerChain (line 14) | class MediaServerChain(ChainBase): method librarys (line 19) | def librarys(self, server: str, username: Optional[str] = None, method items (line 26) | def items(self, server: str, library_id: Union[str, int], method iteminfo (line 68) | def iteminfo(self, server: str, item_id: Union[str, int]) -> MediaServ... method episodes (line 74) | def episodes(self, server: str, item_id: Union[str, int]) -> List[Medi... method playing (line 80) | def playing(self, server: str, count: Optional[int] = 20, method latest (line 87) | def latest(self, server: str, count: Optional[int] = 20, method get_latest_wallpapers (line 94) | def get_latest_wallpapers(self, server: Optional[str] = None, count: O... method get_latest_wallpaper (line 102) | def get_latest_wallpaper(self, server: Optional[str] = None, method get_play_url (line 110) | def get_play_url(self, server: str, item_id: Union[str, int]) -> Optio... method get_image_cookies (line 116) | def get_image_cookies( method sync (line 126) | def sync(self): FILE: app/chain/message.py class MessageChain (line 32) | class MessageChain(ChainBase): method __get_noexits_info (line 46) | def __get_noexits_info( method process (line 99) | def process(self, body: Any, form: Any, args: Any) -> None: method handle_message (line 134) | def handle_message(self, channel: MessageChannel, source: str, method _handle_callback (line 556) | def _handle_callback(self, text: str, channel: MessageChannel, source:... method __auto_download (line 605) | def __auto_download(self, channel: MessageChannel, source: str, cache_... method __post_medias_message (line 657) | def __post_medias_message(self, channel: MessageChannel, source: str, method _create_media_buttons (line 695) | def _create_media_buttons(self, channel: MessageChannel, items: list, ... method __post_torrents_message (line 746) | def __post_torrents_message(self, channel: MessageChannel, source: str, method _create_torrent_buttons (line 785) | def _create_torrent_buttons(self, channel: MessageChannel, items: list... method _get_or_create_session_id (line 841) | def _get_or_create_session_id(self, userid: Union[str, int]) -> str: method clear_user_session (line 869) | def clear_user_session(self, userid: Union[str, int]) -> bool: method remote_clear_session (line 880) | def remote_clear_session(self, channel: MessageChannel, userid: Union[... method _handle_ai_message (line 917) | def _handle_ai_message(self, text: str, channel: MessageChannel, sourc... FILE: app/chain/recommend.py class RecommendChain (line 18) | class RecommendChain(ChainBase, metaclass=Singleton): method refresh_recommend (line 30) | def refresh_recommend(self, manual: bool = False): method __cache_posters (line 83) | def __cache_posters(self, datas: List[dict]): method __fetch_and_save_image (line 100) | def __fetch_and_save_image(url: str): method tmdb_movies (line 109) | def tmdb_movies(self, sort_by: Optional[str] = "popularity.desc", method tmdb_tvs (line 135) | def tmdb_tvs(self, sort_by: Optional[str] = "popularity.desc", method tmdb_trending (line 161) | def tmdb_trending(self, page: Optional[int] = 1) -> List[dict]: method bangumi_calendar (line 170) | def bangumi_calendar(self, page: Optional[int] = 1, count: Optional[in... method douban_movie_showing (line 179) | def douban_movie_showing(self, page: Optional[int] = 1, count: Optiona... method douban_movies (line 188) | def douban_movies(self, sort: Optional[str] = "R", tags: Optional[str]... method douban_tvs (line 199) | def douban_tvs(self, sort: Optional[str] = "R", tags: Optional[str] = "", method douban_movie_top250 (line 210) | def douban_movie_top250(self, page: Optional[int] = 1, count: Optional... method douban_tv_weekly_chinese (line 219) | def douban_tv_weekly_chinese(self, page: Optional[int] = 1, count: Opt... method douban_tv_weekly_global (line 228) | def douban_tv_weekly_global(self, page: Optional[int] = 1, count: Opti... method douban_tv_animation (line 237) | def douban_tv_animation(self, page: Optional[int] = 1, count: Optional... method douban_movie_hot (line 246) | def douban_movie_hot(self, page: Optional[int] = 1, count: Optional[in... method douban_tv_hot (line 255) | def douban_tv_hot(self, page: Optional[int] = 1, count: Optional[int] ... method async_tmdb_movies (line 264) | async def async_tmdb_movies(self, sort_by: Optional[str] = "popularity... method async_tmdb_tvs (line 290) | async def async_tmdb_tvs(self, sort_by: Optional[str] = "popularity.de... method async_tmdb_trending (line 316) | async def async_tmdb_trending(self, page: Optional[int] = 1) -> List[d... method async_bangumi_calendar (line 325) | async def async_bangumi_calendar(self, page: Optional[int] = 1, count:... method async_douban_movie_showing (line 334) | async def async_douban_movie_showing(self, page: Optional[int] = 1, co... method async_douban_movies (line 343) | async def async_douban_movies(self, sort: Optional[str] = "R", tags: O... method async_douban_tvs (line 354) | async def async_douban_tvs(self, sort: Optional[str] = "R", tags: Opti... method async_douban_movie_top250 (line 365) | async def async_douban_movie_top250(self, page: Optional[int] = 1, cou... method async_douban_tv_weekly_chinese (line 374) | async def async_douban_tv_weekly_chinese(self, page: Optional[int] = 1... method async_douban_tv_weekly_global (line 383) | async def async_douban_tv_weekly_global(self, page: Optional[int] = 1,... method async_douban_tv_animation (line 392) | async def async_douban_tv_animation(self, page: Optional[int] = 1, cou... method async_douban_movie_hot (line 401) | async def async_douban_movie_hot(self, page: Optional[int] = 1, count:... method async_douban_tv_hot (line 410) | async def async_douban_tv_hot(self, page: Optional[int] = 1, count: Op... FILE: app/chain/search.py class SearchChain (line 26) | class SearchChain(ChainBase): method search_by_id (line 34) | def search_by_id(self, tmdbid: Optional[int] = None, doubanid: Optiona... method search_by_title (line 64) | def search_by_title(self, title: str, page: Optional[int] = 0, method last_search_results (line 90) | def last_search_results(self) -> Optional[List[Context]]: method async_last_search_results (line 96) | async def async_last_search_results(self) -> Optional[List[Context]]: method async_last_ai_results (line 102) | async def async_last_ai_results(self) -> Optional[List[Context]]: method async_save_ai_results (line 108) | async def async_save_ai_results(self, results: List[Context]): method async_search_by_id (line 114) | async def async_search_by_id(self, tmdbid: Optional[int] = None, douba... method async_search_by_title (line 144) | async def async_search_by_title(self, title: str, page: Optional[int] ... method __prepare_params (line 171) | def __prepare_params(mediainfo: MediaInfo, method __parse_result (line 207) | def __parse_result(self, torrents: List[TorrentInfo], method __remove_duplicate (line 334) | def __remove_duplicate(_torrents: List[Context]) -> List[Context]: method process (line 343) | def process(self, mediainfo: MediaInfo, method async_process (line 426) | async def async_process(self, mediainfo: MediaInfo, method __search_all_sites (line 506) | def __search_all_sites(self, keyword: str, method __async_search_all_sites (line 588) | async def __async_search_all_sites(self, keyword: str, method remove_site (line 674) | def remove_site(self, event: Event): FILE: app/chain/site.py class SiteChain (line 29) | class SiteChain(ChainBase): method __init__ (line 34) | def __init__(self): method refresh_userdata (line 50) | def refresh_userdata(self, site: dict = None) -> Optional[SiteUserData]: method refresh_userdatas (line 92) | def refresh_userdatas(self) -> Optional[Dict[str, SiteUserData]]: method is_special_site (line 113) | def is_special_site(self, domain: str) -> bool: method __zhuque_test (line 120) | def __zhuque_test(site: Site) -> Tuple[bool, str]: method __mteam_test (line 165) | def __mteam_test(site: Site) -> Tuple[bool, str]: method __yema_test (line 193) | def __yema_test(site: Site) -> Tuple[bool, str]: method __indexphp_test (line 220) | def __indexphp_test(self, site: Site) -> Tuple[bool, str]: method __hddolby_test (line 228) | def __hddolby_test(site: Site) -> Tuple[bool, str]: method __rousi_test (line 254) | def __rousi_test(site: Site) -> Tuple[bool, str]: method __parse_favicon (line 280) | def __parse_favicon(url: str, cookie: str, ua: str) -> Tuple[str, Opti... method sync_cookies (line 312) | def sync_cookies(self, manual=False) -> Tuple[bool, str]: method cache_site_icon (line 464) | def cache_site_icon(self, event: Event): method clear_site_data (line 506) | def clear_site_data(self, event: Event): method cache_site_userdata (line 528) | def cache_site_userdata(self, event: Event): method test (line 547) | def test(self, url: str) -> Tuple[bool, str]: method __test (line 581) | def __test(site_info: Site) -> Tuple[bool, str]: method remote_list (line 629) | def remote_list(self, channel: MessageChannel, method remote_disable (line 663) | def remote_disable(self, arg_str: str, channel: MessageChannel, method remote_enable (line 689) | def remote_enable(self, arg_str: str, channel: MessageChannel, method update_cookie (line 717) | def update_cookie(site_info: Site, method remote_cookie (line 747) | def remote_cookie(self, arg_str: str, channel: MessageChannel, method remote_refresh_userdatas (line 817) | def remote_refresh_userdatas(self, channel: MessageChannel, FILE: app/chain/storage.py class StorageChain (line 11) | class StorageChain(ChainBase): method save_config (line 16) | def save_config(self, storage: str, conf: dict) -> None: method reset_config (line 22) | def reset_config(self, storage: str) -> None: method generate_qrcode (line 28) | def generate_qrcode(self, storage: str) -> Optional[Tuple[dict, str]]: method generate_auth_url (line 34) | def generate_auth_url(self, storage: str) -> Optional[Tuple[dict, str]]: method check_login (line 40) | def check_login(self, storage: str, **kwargs) -> Optional[Tuple[dict, ... method list_files (line 46) | def list_files(self, fileitem: schemas.FileItem, recursion: bool = Fal... method any_files (line 52) | def any_files(self, fileitem: schemas.FileItem, extensions: list = Non... method create_folder (line 58) | def create_folder(self, fileitem: schemas.FileItem, name: str) -> Opti... method download_file (line 64) | def download_file(self, fileitem: schemas.FileItem, path: Path = None)... method upload_file (line 72) | def upload_file(self, fileitem: schemas.FileItem, path: Path, method delete_file (line 82) | def delete_file(self, fileitem: schemas.FileItem) -> Optional[bool]: method rename_file (line 88) | def rename_file(self, fileitem: schemas.FileItem, name: str) -> Option... method exists (line 94) | def exists(self, fileitem: schemas.FileItem) -> Optional[bool]: method get_item (line 100) | def get_item(self, fileitem: schemas.FileItem) -> Optional[schemas.Fil... method get_file_item (line 106) | def get_file_item(self, storage: str, path: Path) -> Optional[schemas.... method get_parent_item (line 112) | def get_parent_item(self, fileitem: schemas.FileItem) -> Optional[sche... method snapshot_storage (line 118) | def snapshot_storage(self, storage: str, path: Path, method storage_usage (line 130) | def storage_usage(self, storage: str) -> Optional[schemas.StorageUsage]: method support_transtype (line 136) | def support_transtype(self, storage: str) -> Optional[dict]: method is_bluray_folder (line 142) | def is_bluray_folder(self, fileitem: Optional[schemas.FileItem]) -> bool: method contains_bluray_subdirectories (line 155) | def contains_bluray_subdirectories(fileitems: Optional[List[schemas.Fi... method delete_media_file (line 165) | def delete_media_file(self, fileitem: schemas.FileItem, delete_self: b... FILE: app/chain/subscribe.py class SubscribeChain (line 35) | class SubscribeChain(ChainBase): method __get_event_media (line 45) | def __get_event_media(_mediaid: str, _meta: MetaBase) -> Optional[Medi... method __async_get_event_meida (line 67) | async def __async_get_event_meida(_mediaid: str, _meta: MetaBase) -> O... method __get_default_kwargs (line 88) | def __get_default_kwargs(self, mtype: MediaType, **kwargs) -> dict: method add (line 120) | def add(self, title: str, year: str, method async_add (line 297) | async def async_add(self, title: str, year: str, method exists (line 475) | def exists(mediainfo: MediaInfo, meta: MetaBase = None): method search (line 485) | def search(self, sid: Optional[int] = None, state: Optional[str] = 'N'... method update_subscribe_priority (line 663) | def update_subscribe_priority(self, subscribe: Subscribe, meta: MetaBase, method finish_subscribe_or_not (line 686) | def finish_subscribe_or_not(self, subscribe: Subscribe, meta: MetaBase... method refresh (line 723) | def refresh(self): method get_sub_sites (line 736) | def get_sub_sites(subscribe: Subscribe) -> List[int]: method get_subscribed_sites (line 757) | def get_subscribed_sites(self) -> Optional[List[int]]: method match (line 778) | def match(self, torrents: Dict[str, List[Context]]): method check (line 1067) | def check(self): method get_subscribe_by_source (line 1122) | def get_subscribe_by_source(self, source: str) -> Optional[Subscribe]: method follow (line 1136) | def follow(): method cache_calendar (line 1200) | async def cache_calendar(self): method __update_subscribe_note (line 1237) | def __update_subscribe_note(subscribe: Subscribe, downloads: Optional[... method __get_downloaded (line 1274) | def __get_downloaded(subscribe: Subscribe) -> List[int]: method __update_lack_episodes (line 1294) | def __update_lack_episodes(lefts: Dict[Union[int, str], Dict[int, sche... method __finish_subscribe (line 1329) | def __finish_subscribe(self, subscribe: Subscribe, mediainfo: MediaInf... method remote_list (line 1375) | def remote_list(self, channel: MessageChannel, method remote_delete (line 1403) | def remote_delete(self, arg_str: str, channel: MessageChannel, method __get_subscribe_no_exits (line 1437) | def __get_subscribe_no_exits(subscribe_name: str, method remove_site (line 1548) | def remove_site(self, event: Event): method __get_default_subscribe_config (line 1587) | def __get_default_subscribe_config(mtype: MediaType, default_config_ke... method get_params (line 1608) | def get_params(subscribe: Subscribe): method subscribe_files_info (line 1627) | def subscribe_files_info(self, subscribe: Subscribe) -> Optional[schem... method check_and_handle_existing_media (line 1740) | def check_and_handle_existing_media(self, subscribe: Subscribe, meta: ... method get_states_for_search (line 1825) | def get_states_for_search(state: str) -> str: method get_subscribe_source_keyword (line 1841) | def get_subscribe_source_keyword(subscribe: Subscribe) -> str: method parse_subscribe_source_keyword (line 1863) | def parse_subscribe_source_keyword(source_keyword_str: str) -> Optiona... FILE: app/chain/system.py class SystemChain (line 18) | class SystemChain(ChainBase): method remote_clear_cache (line 25) | def remote_clear_cache(self, channel: MessageChannel, userid: Union[in... method restart (line 33) | def restart(self, channel: MessageChannel, userid: Union[int, str], so... method backup_plugins (line 55) | def backup_plugins(): method restore_plugins (line 105) | def restore_plugins(): method __get_version_message (line 161) | def __get_version_message(self) -> str: method version (line 179) | def version(self, channel: MessageChannel, userid: Union[int, str], so... method restart_finish (line 187) | def restart_finish(self): method __get_server_release_version (line 211) | def __get_server_release_version(): method __get_front_release_version (line 238) | def __get_front_release_version(): method get_server_local_version (line 265) | def get_server_local_version(): method get_frontend_version (line 272) | def get_frontend_version(): FILE: app/chain/tmdb.py class TmdbChain (line 10) | class TmdbChain(ChainBase): method tmdb_discover (line 15) | def tmdb_discover(self, mtype: MediaType, method tmdb_trending (line 49) | def tmdb_trending(self, page: Optional[int] = 1) -> Optional[List[Medi... method tmdb_collection (line 57) | def tmdb_collection(self, collection_id: int) -> Optional[List[MediaIn... method tmdb_seasons (line 64) | def tmdb_seasons(self, tmdbid: int) -> List[schemas.TmdbSeason]: method tmdb_group_seasons (line 71) | def tmdb_group_seasons(self, group_id: str) -> List[schemas.TmdbSeason]: method tmdb_episodes (line 78) | def tmdb_episodes(self, tmdbid: int, season: int, episode_group: Optio... method movie_similar (line 87) | def movie_similar(self, tmdbid: int) -> Optional[List[MediaInfo]]: method tv_similar (line 94) | def tv_similar(self, tmdbid: int) -> Optional[List[MediaInfo]]: method movie_recommend (line 101) | def movie_recommend(self, tmdbid: int) -> Optional[List[MediaInfo]]: method tv_recommend (line 108) | def tv_recommend(self, tmdbid: int) -> Optional[List[MediaInfo]]: method movie_credits (line 115) | def movie_credits(self, tmdbid: int, page: Optional[int] = 1) -> Optio... method tv_credits (line 123) | def tv_credits(self, tmdbid: int, page: Optional[int] = 1) -> Optional... method person_detail (line 131) | def person_detail(self, person_id: int) -> Optional[schemas.MediaPerson]: method person_credits (line 138) | def person_credits(self, person_id: int, page: Optional[int] = 1) -> O... method get_random_wallpager (line 146) | def get_random_wallpager(self) -> Optional[str]: method get_trending_wallpapers (line 159) | def get_trending_wallpapers(self, num: Optional[int] = 10) -> List[str]: method async_tmdb_discover (line 168) | async def async_tmdb_discover(self, mtype: MediaType, method async_tmdb_trending (line 203) | async def async_tmdb_trending(self, page: Optional[int] = 1) -> Option... method async_tmdb_collection (line 211) | async def async_tmdb_collection(self, collection_id: int) -> Optional[... method async_tmdb_seasons (line 218) | async def async_tmdb_seasons(self, tmdbid: int) -> List[schemas.TmdbSe... method async_tmdb_group_seasons (line 225) | async def async_tmdb_group_seasons(self, group_id: str) -> List[schema... method async_tmdb_episodes (line 232) | async def async_tmdb_episodes(self, tmdbid: int, season: int, method async_movie_similar (line 243) | async def async_movie_similar(self, tmdbid: int) -> Optional[List[Medi... method async_tv_similar (line 250) | async def async_tv_similar(self, tmdbid: int) -> Optional[List[MediaIn... method async_movie_recommend (line 257) | async def async_movie_recommend(self, tmdbid: int) -> Optional[List[Me... method async_tv_recommend (line 264) | async def async_tv_recommend(self, tmdbid: int) -> Optional[List[Media... method async_movie_credits (line 271) | async def async_movie_credits(self, tmdbid: int, page: Optional[int] =... method async_tv_credits (line 279) | async def async_tv_credits(self, tmdbid: int, page: Optional[int] = 1)... method async_person_detail (line 287) | async def async_person_detail(self, person_id: int) -> Optional[schema... method async_person_credits (line 294) | async def async_person_credits(self, person_id: int, page: Optional[in... method async_get_random_wallpager (line 302) | async def async_get_random_wallpager(self) -> Optional[str]: method async_get_trending_wallpapers (line 315) | async def async_get_trending_wallpapers(self, num: Optional[int] = 10)... FILE: app/chain/torrents.py class TorrentsChain (line 21) | class TorrentsChain(ChainBase): method cache_file (line 30) | def cache_file(self) -> str: method remote_refresh (line 38) | def remote_refresh(self, channel: MessageChannel, userid: Union[str, i... method get_torrents (line 48) | def get_torrents(self, stype: Optional[str] = None) -> Dict[str, List[... method async_get_torrents (line 68) | async def async_get_torrents(self, stype: Optional[str] = None) -> Dic... method clear_torrents (line 88) | def clear_torrents(self): method async_clear_torrents (line 97) | async def async_clear_torrents(self): method browse (line 106) | def browse(self, domain: str, keyword: Optional[str] = None, cat: Opti... method async_browse (line 122) | async def async_browse(self, domain: str, keyword: Optional[str] = Non... method rss (line 138) | def rss(self, domain: str) -> List[TorrentInfo]: method refresh (line 187) | def refresh(self, stype: Optional[str] = None, sites: List[int] = None... method _ensure_context_compatibility (line 320) | def _ensure_context_compatibility(torrents_cache: Dict[str, List[Conte... method __renew_rss_url (line 334) | def __renew_rss_url(self, domain: str, site: dict): FILE: app/chain/transfer.py class JobManager (line 48) | class JobManager: method __init__ (line 59) | def __init__(self): method __get_meta_id (line 64) | def __get_meta_id(meta: MetaBase = None, season: Optional[int] = None)... method __get_media_id (line 71) | def __get_media_id(media: MediaInfo = None, season: Optional[int] = No... method __get_id (line 79) | def __get_id(self, task: TransferTask = None) -> Tuple: method __get_media (line 89) | def __get_media(task: TransferTask) -> schemas.MediaInfo: method __get_meta (line 109) | def __get_meta(task: TransferTask) -> schemas.MetaInfo: method add_task (line 115) | def add_task(self, task: TransferTask, state: Optional[str] = "waiting... method running_task (line 158) | def running_task(self, task: TransferTask): method finish_task (line 172) | def finish_task(self, task: TransferTask): method fail_task (line 186) | def fail_task(self, task: TransferTask): method remove_task (line 205) | def remove_task(self, fileitem: FileItem) -> Optional[TransferJobTask]: method remove_job (line 226) | def remove_job(self, task: TransferTask) -> Optional[TransferJob]: method try_remove_job (line 239) | def try_remove_job(self, task: TransferTask): method is_done (line 267) | def is_done(self, task: TransferTask) -> bool: method is_finished (line 288) | def is_finished(self, task: TransferTask) -> bool: method is_success (line 312) | def is_success(self, task: TransferTask) -> bool: method get_all_torrent_hashes (line 333) | def get_all_torrent_hashes(self) -> set[str]: method is_torrent_done (line 344) | def is_torrent_done(self, download_hash: str) -> bool: method is_torrent_success (line 358) | def is_torrent_success(self, download_hash: str) -> bool: method has_tasks (line 372) | def has_tasks(self, meta: MetaBase, mediainfo: Optional[MediaInfo] = N... method success_tasks (line 385) | def success_tasks(self, media: MediaInfo, season: Optional[int] = None... method all_tasks (line 395) | def all_tasks(self, media: MediaInfo, season: Optional[int] = None) ->... method count (line 405) | def count(self, media: MediaInfo, season: Optional[int] = None) -> int: method size (line 415) | def size(self, media: MediaInfo, season: Optional[int] = None) -> int: method total (line 431) | def total(self) -> int: method list_jobs (line 438) | def list_jobs(self) -> List[TransferJob]: method season_episodes (line 445) | def season_episodes(self, media: MediaInfo, season: Optional[int] = No... class TransferChain (line 454) | class TransferChain(ChainBase, ConfigReloadMixin, metaclass=Singleton): method __init__ (line 463) | def __init__(self): method __init (line 495) | def __init(self): method __stop (line 508) | def __stop(self): method on_config_changed (line 518) | def on_config_changed(self): method __is_subtitle_file (line 522) | def __is_subtitle_file(self, fileitem: FileItem) -> bool: method __is_audio_file (line 530) | def __is_audio_file(self, fileitem: FileItem) -> bool: method __is_media_file (line 538) | def __is_media_file(self, fileitem: FileItem) -> bool: method __is_allowed_file (line 549) | def __is_allowed_file(self, fileitem: FileItem) -> bool: method __is_allow_filesize (line 558) | def __is_allow_filesize(fileitem: FileItem, min_filesize: int) -> bool: method __default_callback (line 564) | def __default_callback(self, task: TransferTask, method put_to_queue (line 777) | def put_to_queue(self, task: TransferTask) -> bool: method __put_to_jobview (line 795) | def __put_to_jobview(self, task: TransferTask) -> bool: method remove_from_queue (line 802) | def remove_from_queue(self, fileitem: FileItem): method __start_transfer (line 810) | def __start_transfer(self): method __handle_transfer (line 900) | def __handle_transfer(self, task: TransferTask, method get_queue_tasks (line 1058) | def get_queue_tasks(self) -> List[TransferJob]: method recommend_name (line 1064) | def recommend_name(self, meta: MetaBase, mediainfo: MediaInfo) -> Opti... method process (line 1073) | def process(self) -> bool: method __get_trans_fileitems (line 1179) | def __get_trans_fileitems( method do_transfer (line 1262) | def do_transfer(self, fileitem: FileItem, method remote_transfer (line 1529) | def remote_transfer(self, arg_str: str, channel: MessageChannel, method __re_transfer (line 1571) | def __re_transfer(self, logid: int, mtype: MediaType = None, method manual_transfer (line 1621) | def manual_transfer(self, method send_transfer_message (line 1717) | def send_transfer_message(self, meta: MetaBase, mediainfo: MediaInfo, method _is_blocked_by_exclude_words (line 1739) | def _is_blocked_by_exclude_words(file_path: str, exclude_words: list) ... method _can_delete_torrent (line 1755) | def _can_delete_torrent(self, download_hash: str, downloader: str, tra... FILE: app/chain/tvdb.py class TvdbChain (line 6) | class TvdbChain(ChainBase): method get_tvdbid_by_name (line 11) | def get_tvdbid_by_name(self, title: str) -> List[int]: FILE: app/chain/user.py class UserChain (line 17) | class UserChain(ChainBase): method user_authenticate (line 22) | def user_authenticate( method password_authenticate (line 95) | def password_authenticate(credentials: AuthCredentials) -> Tuple[bool,... method auxiliary_authenticate (line 123) | def auxiliary_authenticate(self, credentials: AuthCredentials) -> Tupl... method _verify_mfa (line 168) | def _verify_mfa(user: User, mfa_code: Optional[str]) -> Union[bool, str]: method _process_auth_success (line 210) | def _process_auth_success(self, username: str, credentials: AuthCreden... FILE: app/chain/webhook.py class WebhookChain (line 7) | class WebhookChain(ChainBase): method message (line 12) | def message(self, body: Any, form: Any, args: Any) -> None: FILE: app/chain/workflow.py class WorkflowExecutor (line 22) | class WorkflowExecutor: method __init__ (line 27) | def __init__(self, workflow: Workflow, step_callback: Callable = None): method execute (line 86) | def execute(self): method execute_node (line 125) | def execute_node(self, workflow_id: int, node_id: int, method on_node_complete (line 134) | def on_node_complete(self, future): method merge_context (line 179) | def merge_context(self, context: ActionContext): class WorkflowChain (line 188) | class WorkflowChain(ChainBase): method event_process (line 194) | def event_process(self, event: Event): method process (line 204) | def process(workflow_id: int, from_begin: Optional[bool] = True) -> Tu... method get_workflows (line 257) | def get_workflows() -> List[Workflow]: method get_timer_workflows (line 264) | def get_timer_workflows() -> List[Workflow]: method get_event_workflows (line 271) | def get_event_workflows() -> List[Workflow]: FILE: app/command.py class CommandChain (line 26) | class CommandChain(ChainBase): class Command (line 30) | class Command(metaclass=Singleton): method __init__ (line 35) | def __init__(self): method init_commands (line 167) | def init_commands(self, pid: Optional[str] = None) -> None: method __init_commands_background (line 174) | def __init_commands_background(self, pid: Optional[str] = None) -> None: method __trigger_register_commands_event (line 225) | def __trigger_register_commands_event(self) -> tuple[Optional[Event], ... method __build_plugin_commands (line 260) | def __build_plugin_commands(self, _: Optional[str] = None) -> Dict[str... method __run_command (line 282) | def __run_command(self, command: Dict[str, any], data_str: Optional[st... method get_commands (line 336) | def get_commands(self): method get (line 342) | def get(self, cmd: str) -> Any: method register (line 348) | def register(self, cmd: str, func: Any, data: Optional[dict] = None, method execute (line 363) | def execute(self, cmd: str, data_str: Optional[str] = "", method send_plugin_event (line 392) | def send_plugin_event(etype: EventType, data: dict) -> None: method command_event (line 399) | def command_event(self, event: ManagerEvent) -> None: method module_reload_event (line 422) | def module_reload_event(self, _: ManagerEvent) -> None: FILE: app/core/cache.py class CacheBackend (line 34) | class CacheBackend(ABC): method __getitem__ (line 39) | def __getitem__(self, key: str) -> Any: method __setitem__ (line 48) | def __setitem__(self, key: str, value: Any) -> None: method __delitem__ (line 54) | def __delitem__(self, key: str) -> None: method __contains__ (line 62) | def __contains__(self, key: str) -> bool: method __iter__ (line 68) | def __iter__(self): method __len__ (line 75) | def __len__(self) -> int: method set (line 82) | def set(self, key: str, value: Any, ttl: Optional[int] = None, method exists (line 96) | def exists(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGIO... method get (line 107) | def get(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGION) ... method delete (line 118) | def delete(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGIO... method clear (line 128) | def clear(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> None: method items (line 137) | def items(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> Gener... method keys (line 146) | def keys(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> Genera... method values (line 153) | def values(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> Gene... method update (line 160) | def update(self, other: Dict[str, Any], region: Optional[str] = DEFAUL... method pop (line 168) | def pop(self, key: str, default: Any = None, region: Optional[str] = D... method popitem (line 180) | def popitem(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> Tup... method setdefault (line 191) | def setdefault(self, key: str, default: Any = None, region: Optional[s... method close (line 203) | def close(self) -> None: method get_region (line 210) | def get_region(region: Optional[str] = None) -> str: method is_redis (line 217) | def is_redis() -> bool: class AsyncCacheBackend (line 224) | class AsyncCacheBackend(CacheBackend): method set (line 230) | async def set(self, key: str, value: Any, ttl: Optional[int] = None, method exists (line 244) | async def exists(self, key: str, region: Optional[str] = DEFAULT_CACHE... method get (line 255) | async def get(self, key: str, region: Optional[str] = DEFAULT_CACHE_RE... method delete (line 266) | async def delete(self, key: str, region: Optional[str] = DEFAULT_CACHE... method clear (line 276) | async def clear(self, region: Optional[str] = DEFAULT_CACHE_REGION) ->... method items (line 285) | async def items(self, region: Optional[str] = DEFAULT_CACHE_REGION) ->... method keys (line 294) | async def keys(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> ... method values (line 301) | async def values(self, region: Optional[str] = DEFAULT_CACHE_REGION) -... method update (line 308) | async def update(self, other: Dict[str, Any], region: Optional[str] = ... method pop (line 316) | async def pop(self, key: str, default: Any = None, region: Optional[st... method popitem (line 328) | async def popitem(self, region: Optional[str] = DEFAULT_CACHE_REGION) ... method setdefault (line 341) | async def setdefault(self, key: str, default: Any = None, region: Opti... method close (line 353) | async def close(self) -> None: class MemoryBackend (line 360) | class MemoryBackend(CacheBackend): method __init__ (line 370) | def __init__(self, cache_type: Literal['ttl', 'lru'] = 'ttl', method __get_region_cache (line 383) | def __get_region_cache(self, region: str) -> Optional[Union[MemoryTTLC... method set (line 390) | def set(self, key: str, value: Any, ttl: Optional[int] = None, method exists (line 413) | def exists(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGIO... method get (line 426) | def get(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGION) ... method delete (line 439) | def delete(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGION): method clear (line 452) | def clear(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> None: method items (line 472) | def items(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> Gener... method close (line 490) | def close(self) -> None: class AsyncMemoryBackend (line 497) | class AsyncMemoryBackend(AsyncCacheBackend): method __init__ (line 502) | def __init__(self, cache_type: Literal['ttl', 'lru'] = 'ttl', method set (line 513) | async def set(self, key: str, value: Any, ttl: Optional[int] = None, method exists (line 525) | async def exists(self, key: str, region: Optional[str] = DEFAULT_CACHE... method get (line 535) | async def get(self, key: str, region: Optional[str] = DEFAULT_CACHE_RE... method delete (line 545) | async def delete(self, key: str, region: Optional[str] = DEFAULT_CACHE... method clear (line 554) | async def clear(self, region: Optional[str] = DEFAULT_CACHE_REGION) ->... method items (line 562) | async def items(self, region: Optional[str] = DEFAULT_CACHE_REGION) ->... method close (line 572) | async def close(self) -> None: class RedisBackend (line 579) | class RedisBackend(CacheBackend): method __init__ (line 584) | def __init__(self, ttl: Optional[int] = None): method set (line 593) | def set(self, key: str, value: Any, ttl: Optional[int] = None, method exists (line 607) | def exists(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGIO... method get (line 617) | def get(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGION) ... method delete (line 627) | def delete(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGIO... method clear (line 636) | def clear(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> None: method items (line 644) | def items(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> Gener... method close (line 653) | def close(self) -> None: class AsyncRedisBackend (line 660) | class AsyncRedisBackend(AsyncCacheBackend): method __init__ (line 665) | def __init__(self, ttl: Optional[int] = None): method set (line 674) | async def set(self, key: str, value: Any, ttl: Optional[int] = None, method exists (line 688) | async def exists(self, key: str, region: Optional[str] = DEFAULT_CACHE... method get (line 698) | async def get(self, key: str, region: Optional[str] = DEFAULT_CACHE_RE... method delete (line 708) | async def delete(self, key: str, region: Optional[str] = DEFAULT_CACHE... method clear (line 717) | async def clear(self, region: Optional[str] = DEFAULT_CACHE_REGION) ->... method items (line 725) | async def items(self, region: Optional[str] = DEFAULT_CACHE_REGION) ->... method close (line 735) | async def close(self) -> None: class FileBackend (line 742) | class FileBackend(CacheBackend): method __init__ (line 747) | def __init__(self, base: Path): method set (line 755) | def set(self, key: str, value: Any, region: Optional[str] = DEFAULT_CA... method exists (line 773) | def exists(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGIO... method get (line 784) | def get(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGION) ... method delete (line 798) | def delete(self, key: str, region: Optional[str] = DEFAULT_CACHE_REGIO... method clear (line 809) | def clear(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> None: method items (line 832) | def items(self, region: Optional[str] = DEFAULT_CACHE_REGION) -> Gener... method close (line 848) | def close(self) -> None: class AsyncFileBackend (line 855) | class AsyncFileBackend(AsyncCacheBackend): method __init__ (line 860) | def __init__(self, base: Path): method set (line 868) | async def set(self, key: str, value: Any, region: Optional[str] = DEFA... method exists (line 886) | async def exists(self, key: str, region: Optional[str] = DEFAULT_CACHE... method get (line 897) | async def get(self, key: str, region: Optional[str] = DEFAULT_CACHE_RE... method delete (line 911) | async def delete(self, key: str, region: Optional[str] = DEFAULT_CACHE... method clear (line 922) | async def clear(self, region: Optional[str] = DEFAULT_CACHE_REGION) ->... method items (line 945) | async def items(self, region: Optional[str] = DEFAULT_CACHE_REGION) ->... method close (line 961) | async def close(self) -> None: function fresh (line 969) | def fresh(fresh: bool = True): function async_fresh (line 984) | async def async_fresh(fresh: bool = True): function is_fresh (line 998) | def is_fresh() -> bool: function FileCache (line 1007) | def FileCache(base: Path = settings.TEMP_PATH, ttl: Optional[int] = None... function AsyncFileCache (line 1019) | def AsyncFileCache(base: Path = settings.TEMP_PATH, ttl: Optional[int] =... function Cache (line 1031) | def Cache(cache_type: Literal['ttl', 'lru'] = 'ttl', function AsyncCache (line 1049) | def AsyncCache(cache_type: Literal['ttl', 'lru'] = 'ttl', function cached (line 1067) | def cached(region: Optional[str] = None, maxsize: Optional[int] = 1024, ... class CacheProxy (line 1245) | class CacheProxy: method __init__ (line 1250) | def __init__(self, cache_backend: CacheBackend, region: str): method __getitem__ (line 1260) | def __getitem__(self, key): method __setitem__ (line 1269) | def __setitem__(self, key, value): method __delitem__ (line 1276) | def __delitem__(self, key): method __contains__ (line 1284) | def __contains__(self, key): method __iter__ (line 1290) | def __iter__(self): method __len__ (line 1297) | def __len__(self): method is_redis (line 1303) | def is_redis(self) -> bool: method get (line 1309) | def get(self, key: str, **kwargs) -> Any: method set (line 1316) | def set(self, key: str, value: Any, **kwargs) -> None: method delete (line 1323) | def delete(self, key: str, **kwargs) -> None: method exists (line 1330) | def exists(self, key: str, **kwargs) -> bool: method clear (line 1337) | def clear(self, **kwargs) -> None: method items (line 1344) | def items(self, **kwargs): method keys (line 1351) | def keys(self, **kwargs): method values (line 1358) | def values(self, **kwargs): method update (line 1365) | def update(self, other: Dict[str, Any], **kwargs) -> None: method pop (line 1372) | def pop(self, key: str, default: Any = None, **kwargs) -> Any: method popitem (line 1379) | def popitem(self, **kwargs) -> Tuple[str, Any]: method setdefault (line 1386) | def setdefault(self, key: str, default: Any = None, **kwargs) -> Any: method close (line 1393) | def close(self) -> None: class TTLCache (line 1400) | class TTLCache(CacheProxy): method __init__ (line 1406) | def __init__(self, class LRUCache (line 1420) | class LRUCache(CacheProxy): method __init__ (line 1426) | def __init__(self, FILE: app/core/config.py class SystemConfModel (line 26) | class SystemConfModel(BaseModel): class ConfigModel (line 50) | class ConfigModel(BaseModel): class Settings (line 469) | class Settings(BaseSettings, ConfigModel, LogConfigModel): method __init__ (line 480) | def __init__(self, **kwargs): method validate_api_token (line 493) | def validate_api_token(value: Any, original_value: Any) -> Tuple[Any, ... method generic_type_converter (line 510) | def generic_type_converter(value: Any, original_value: Any, expected_t... method generic_type_validator (line 577) | def generic_type_validator(cls, data: Any): # noqa method update_env_config (line 611) | def update_env_config(field_name: str, original_value: Any, converted_... method update_setting (line 638) | def update_setting(self, key: str, value: Any) -> Tuple[Optional[bool]... method update_settings (line 670) | def update_settings(self, env: Dict[str, Any]) -> Dict[str, Tuple[Opti... method VERSION_FLAG (line 680) | def VERSION_FLAG(self) -> str: method USER_AGENT (line 687) | def USER_AGENT(self) -> str: method NORMAL_USER_AGENT (line 694) | def NORMAL_USER_AGENT(self) -> str: method INNER_CONFIG_PATH (line 701) | def INNER_CONFIG_PATH(self): method CONFIG_PATH (line 705) | def CONFIG_PATH(self): method TEMP_PATH (line 715) | def TEMP_PATH(self): method CACHE_PATH (line 719) | def CACHE_PATH(self): method ROOT_PATH (line 723) | def ROOT_PATH(self): method PLUGIN_DATA_PATH (line 727) | def PLUGIN_DATA_PATH(self): method LOG_PATH (line 731) | def LOG_PATH(self): method COOKIE_PATH (line 735) | def COOKIE_PATH(self): method CONF (line 739) | def CONF(self) -> SystemConfModel: method PROXY (line 768) | def PROXY(self): method PROXY_SERVER (line 777) | def PROXY_SERVER(self): method GITHUB_HEADERS (line 798) | def GITHUB_HEADERS(self): method REPO_GITHUB_HEADERS (line 809) | def REPO_GITHUB_HEADERS(self, repo: str = None): method VAPID (line 842) | def VAPID(self): method MP_DOMAIN (line 849) | def MP_DOMAIN(self, url: str = None): method RENAME_FORMAT (line 854) | def RENAME_FORMAT(self, media_type: MediaType): method TMDB_IMAGE_URL (line 871) | def TMDB_IMAGE_URL( class GlobalVar (line 892) | class GlobalVar(object): method stop_system (line 907) | def stop_system(self): method is_system_stopped (line 914) | def is_system_stopped(self): method get_subscriptions (line 920) | def get_subscriptions(self): method push_subscription (line 926) | def push_subscription(self, subscription: dict): method stop_workflow (line 932) | def stop_workflow(self, workflow_id: int): method workflow_resume (line 939) | def workflow_resume(self, workflow_id: int): method is_workflow_stopped (line 946) | def is_workflow_stopped(self, workflow_id: int) -> bool: method stop_transfer (line 952) | def stop_transfer(self, path: str): method is_transfer_stopped (line 959) | def is_transfer_stopped(self, path: str) -> bool: method loop (line 971) | def loop(self) -> AbstractEventLoop: method set_loop (line 977) | def set_loop(self, loop: AbstractEventLoop): FILE: app/core/context.py class TorrentInfo (line 14) | class TorrentInfo: method __setattr__ (line 66) | def __setattr__(self, name: str, value: Any): method __get_properties (line 69) | def __get_properties(self): method from_dict (line 80) | def from_dict(self, data: dict): method get_free_string (line 91) | def get_free_string(upload_volume_factor: float, download_volume_facto... method volume_factor (line 114) | def volume_factor(self): method freedate_diff (line 121) | def freedate_diff(self): method pub_minutes (line 129) | def pub_minutes(self) -> float: method to_dict (line 143) | def to_dict(self): class MediaInfo (line 154) | class MediaInfo: method __post_init__ (line 276) | def __post_init__(self): method __setattr__ (line 285) | def __setattr__(self, name: str, value: Any): method __get_properties (line 288) | def __get_properties(self): method from_dict (line 299) | def from_dict(self, data: dict): method set_image (line 311) | def set_image(self, name: str, image: str): method get_image (line 317) | def get_image(self, name: str): method set_category (line 326) | def set_category(self, cat: str): method set_tmdb_info (line 332) | def set_tmdb_info(self, info: dict): method set_douban_info (line 505) | def set_douban_info(self, info: dict): method set_bangumi_info (line 646) | def set_bangumi_info(self, info: dict): method title_year (line 715) | def title_year(self): method detail_link (line 721) | def detail_link(self): method stars (line 737) | def stars(self): method vote_star (line 746) | def vote_star(self): method get_backdrop_image (line 751) | def get_backdrop_image(self, default: bool = False): method get_message_image (line 759) | def get_message_image(self, default: Optional[bool] = None): method get_poster_image (line 767) | def get_poster_image(self, default: Optional[bool] = None): method get_overview_string (line 775) | def get_overview_string(self, max_len: Optional[int] = 140): method to_dict (line 787) | def to_dict(self): method clear (line 800) | def clear(self): class Context (line 822) | class Context: method to_dict (line 836) | def to_dict(self): FILE: app/core/event.py class Event (line 28) | class Event: method __init__ (line 33) | def __init__(self, event_type: Union[EventType, ChainEventType], method __repr__ (line 46) | def __repr__(self) -> str: method __lt__ (line 53) | def __lt__(self, other): method get_event_kind (line 61) | def get_event_kind(event_type: Union[EventType, ChainEventType]) -> str: class EventManager (line 70) | class EventManager(metaclass=Singleton): method __init__ (line 75) | def __init__(self): method start (line 95) | def start(self): method stop (line 106) | def stop(self): method check (line 120) | def check(self, etype: Union[EventType, ChainEventType]) -> bool: method send_event (line 139) | def send_event(self, etype: Union[EventType, ChainEventType], data: Op... method async_send_event (line 157) | async def async_send_event(self, etype: Union[EventType, ChainEventType], method add_event_listener (line 176) | def add_event_listener(self, event_type: Union[EventType, ChainEventTy... method remove_event_listener (line 214) | def remove_event_listener(self, event_type: Union[EventType, ChainEven... method disable_event_handler (line 230) | def disable_event_handler(self, target: Union[Callable, type]): method enable_event_handler (line 245) | def enable_event_handler(self, target: Union[Callable, type]): method visualize_handlers (line 258) | def visualize_handlers(self) -> List[Dict]: method __get_handler_identifier (line 294) | def __get_handler_identifier(cls, target: Union[Callable, type]) -> Op... method __get_class_from_callable (line 309) | def __get_class_from_callable(cls, handler: Callable) -> Optional[str]: method __is_handler_enabled (line 333) | def __is_handler_enabled(self, handler: Callable) -> bool: method __trigger_chain_event (line 351) | def __trigger_chain_event(self, event: Event) -> Optional[Event]: method __trigger_chain_event_async (line 359) | async def __trigger_chain_event_async(self, event: Event) -> Optional[... method __trigger_broadcast_event (line 367) | def __trigger_broadcast_event(self, event: Event): method __dispatch_chain_event (line 375) | def __dispatch_chain_event(self, event: Event) -> bool: method __dispatch_chain_event_async (line 404) | async def __dispatch_chain_event_async(self, event: Event) -> bool: method __dispatch_broadcast_event (line 433) | def __dispatch_broadcast_event(self, event: Event): method __safe_invoke_handler (line 462) | def __safe_invoke_handler(self, handler: Callable, event: Event): method __safe_invoke_handler_async (line 474) | async def __safe_invoke_handler_async(self, handler: Callable, event: ... method __invoke_handler_by_type_sync (line 486) | def __invoke_handler_by_type_sync(self, handler: Callable, event: Event): method __invoke_handler_by_type_async (line 540) | async def __invoke_handler_by_type_async(self, handler: Callable, even... method __parse_handler_names (line 562) | def __parse_handler_names(handler: Callable) -> Tuple[str, str]: method __invoke_plugin_method_async (line 571) | async def __invoke_plugin_method_async(self, handler: Any, class_name:... method __invoke_module_method_async (line 591) | async def __invoke_module_method_async(self, handler: Any, class_name:... method __invoke_global_method_async (line 610) | async def __invoke_global_method_async(self, class_name: str, method_n... method __get_class_instance (line 630) | def __get_class_instance(class_name: str): method __broadcast_consumer_loop (line 672) | def __broadcast_consumer_loop(self): method __log_event_lifecycle (line 692) | def __log_event_lifecycle(event: Event, stage: str): method __handle_event_error (line 698) | def __handle_event_error(self, event: Event, module_name: str, method register (line 721) | def register(self, etype: Union[EventType, ChainEventType, List[Union[... FILE: app/core/meta/customization.py class CustomizationMatcher (line 8) | class CustomizationMatcher(metaclass=Singleton): method __init__ (line 13) | def __init__(self): method match (line 18) | def match(self, title=None): FILE: app/core/meta/metaanime.py class MetaAnime (line 14) | class MetaAnime(MetaBase): method __init__ (line 22) | def __init__(self, title: str, subtitle: str = None, isfile: bool = Fa... method __init_anime_fps (line 188) | def __init_anime_fps(self, anitopy_info: dict, original_title: str): method __prepare_title (line 203) | def __prepare_title(title: str): FILE: app/core/meta/metabase.py class MetaBase (line 14) | class MetaBase(object): method __init__ (line 82) | def __init__(self, title: str, subtitle: str = None, isfile: bool = Fa... method name (line 90) | def name(self) -> str: method name (line 103) | def name(self, name: str): method init_subtitle (line 113) | def init_subtitle(self, title_text: str): method season (line 272) | def season(self) -> str: method sea (line 289) | def sea(self) -> str: method season_seq (line 299) | def season_seq(self) -> str: method season_list (line 312) | def season_list(self) -> List[int]: method episode (line 327) | def episode(self) -> str: method episode_list (line 342) | def episode_list(self) -> List[int]: method episodes (line 354) | def episodes(self) -> str: method episode_seqs (line 361) | def episode_seqs(self) -> str: method episode_seq (line 376) | def episode_seq(self) -> str: method season_episode (line 387) | def season_episode(self) -> str: method resource_term (line 405) | def resource_term(self) -> str: method edition (line 419) | def edition(self) -> str: method release_group (line 431) | def release_group(self) -> str: method video_term (line 441) | def video_term(self) -> str: method audio_term (line 448) | def audio_term(self) -> str: method frame_rate (line 455) | def frame_rate(self) -> int: method is_in_season (line 461) | def is_in_season(self, season: Union[list, int, str]) -> bool: method is_in_episode (line 484) | def is_in_episode(self, episode: Union[list, int, str]) -> bool: method set_season (line 500) | def set_season(self, sea: Union[list, int, str]): method set_episode (line 517) | def set_episode(self, ep: Union[list, int, str]): method set_episodes (line 535) | def set_episodes(self, begin: int, end: int): method merge (line 546) | def merge(self, meta: Self): method to_dict (line 607) | def to_dict(self): FILE: app/core/meta/metavideo.py class MetaVideo (line 16) | class MetaVideo(MetaBase): method __init__ (line 57) | def __init__(self, title: str, subtitle: str = None, isfile: bool = Fa... method __get_title_from_description (line 173) | def __get_title_from_description(description: str) -> Optional[str]: method __is_pinyin (line 185) | def __is_pinyin(name_str: Optional[str]) -> bool: method __fix_name (line 196) | def __fix_name(self, name: Optional[str]): method __init_name (line 220) | def __init_name(self, token: Optional[str]): method __init_part (line 317) | def __init_part(self, token: str, tokens: Tokens): method __init_year (line 343) | def __init_year(self, token: str): method __init_resource_pix (line 368) | def __init_resource_pix(self, token: str): method __init_season (line 407) | def __init_season(self, token: str): method __init_episode (line 459) | def __init_episode(self, token: str): method __init_resource_type (line 532) | def __init_resource_type(self, token): method __init_web_source (line 588) | def __init_web_source(self, token: str, tokens: Tokens, streaming_plat... method __init_video_encode (line 639) | def __init_video_encode(self, token: str): method __init_audio_encode (line 687) | def __init_audio_encode(self, token: str): method __init_fps (line 723) | def __init_fps(self, token: str): FILE: app/core/meta/releasegroup.py class ReleaseGroupsMatcher (line 8) | class ReleaseGroupsMatcher(metaclass=Singleton): method __init__ (line 83) | def __init__(self): method match (line 90) | def match(self, title: str = None, groups: str = None): FILE: app/core/meta/streamingplatform.py class StreamingPlatforms (line 6) | class StreamingPlatforms(metaclass=Singleton): method __init__ (line 280) | def __init__(self): method _build_cache (line 285) | def _build_cache(self) -> None: method get_streaming_platform_name (line 300) | def get_streaming_platform_name(self, platform_code: str) -> Optional[... method is_streaming_platform (line 308) | def is_streaming_platform(self, name: str) -> bool: FILE: app/core/meta/words.py class WordsMatcher (line 12) | class WordsMatcher(metaclass=Singleton): method __init__ (line 14) | def __init__(self): method prepare (line 17) | def prepare(self, title: str, custom_words: List[str] = None) -> Tuple... method __replace_regex (line 72) | def __replace_regex(title: str, replaced: str, replace: str) -> Tuple[... method __episode_offset (line 86) | def __episode_offset(title: str, front: str, back: str, offset: str) -... FILE: app/core/metainfo.py function MetaInfo (line 13) | def MetaInfo(title: str, subtitle: Optional[str] = None, custom_words: L... function MetaInfoPath (line 66) | def MetaInfoPath(path: Path, custom_words: List[str] = None) -> MetaBase: function is_anime (line 87) | def is_anime(name: str) -> bool: function find_metainfo (line 108) | def find_metainfo(title: str) -> Tuple[str, dict]: FILE: app/core/module.py class ModuleManager (line 14) | class ModuleManager(metaclass=Singleton): method __init__ (line 22) | def __init__(self): method load_modules (line 29) | def load_modules(self): method stop (line 55) | def stop(self): method reload (line 69) | def reload(self): method test (line 77) | def test(self, modleid: str) -> Tuple[bool, str]: method check_setting (line 93) | def check_setting(setting: Optional[tuple]) -> bool: method get_running_module (line 109) | def get_running_module(self, module_id: str) -> Any: method get_running_modules (line 119) | def get_running_modules(self, method: str) -> Generator: method get_running_type_modules (line 130) | def get_running_type_modules(self, module_type: ModuleType) -> Generator: method get_running_subtype_module (line 141) | def get_running_subtype_module(self, module_subtype: SubType) -> Gener... method get_module (line 152) | def get_module(self, module_id: str) -> Any: method get_modules (line 162) | def get_modules(self) -> dict: method get_module_ids (line 168) | def get_module_ids(self) -> List[str]: FILE: app/core/plugin.py class PluginManager (line 39) | class PluginManager(ConfigReloadMixin, metaclass=Singleton): method __init__ (line 43) | def __init__(self): method init_config (line 58) | def init_config(self): method start (line 64) | def start(self, pid: Optional[str] = None): method init_plugin (line 112) | def init_plugin(self, plugin_id: str, conf: dict): method stop (line 131) | def stop(self, pid: Optional[str] = None): method _load_selective_plugins (line 166) | def _load_selective_plugins(pid: Optional[str], installed_plugins: Lis... method running_plugins (line 239) | def running_plugins(self) -> Dict[str, Any]: method plugins (line 247) | def plugins(self) -> Dict[str, Any]: method on_config_changed (line 254) | def on_config_changed(self): method get_reload_name (line 257) | def get_reload_name(self) -> str: method reload_monitor (line 260) | def reload_monitor(self): method __start_monitor (line 271) | def __start_monitor(self): method stop_monitor (line 291) | def stop_monitor(self): method _run_file_watcher (line 306) | def _run_file_watcher(self): method _get_plugin_id_from_path (line 347) | def _get_plugin_id_from_path(event_path: Path) -> Optional[str]: method __stop_plugin (line 393) | def __stop_plugin(plugin: Any): method remove_plugin (line 408) | def remove_plugin(self, plugin_id: str): method reload_plugin (line 415) | def reload_plugin(self, plugin_id: str): method _clear_plugin_modules (line 428) | def _clear_plugin_modules(plugin_id: Optional[str] = None): method sync (line 464) | def sync(self) -> List[str]: method install_plugin_missing_dependencies (line 523) | def install_plugin_missing_dependencies() -> List[str]: method get_plugin_config (line 544) | def get_plugin_config(self, pid: str) -> dict: method save_plugin_config (line 557) | def save_plugin_config(self, pid: str, conf: dict, force: bool = False... method delete_plugin_config (line 569) | def delete_plugin_config(self, pid: str) -> bool: method delete_plugin_data (line 578) | def delete_plugin_data(self, pid: str) -> bool: method get_plugin_state (line 588) | def get_plugin_state(self, pid: str) -> bool: method get_plugin_commands (line 596) | def get_plugin_commands(self, pid: Optional[str] = None) -> List[Dict[... method get_plugin_apis (line 625) | def get_plugin_apis(self, pid: Optional[str] = None) -> List[Dict[str,... method get_plugin_services (line 657) | def get_plugin_services(self, pid: Optional[str] = None) -> List[Dict[... method get_plugin_modules (line 685) | def get_plugin_modules(self, pid: Optional[str] = None) -> Dict[tuple,... method get_plugin_actions (line 710) | def get_plugin_actions(self, pid: Optional[str] = None) -> List[Dict[s... method get_plugin_agent_tools (line 741) | def get_plugin_agent_tools(self, pid: Optional[str] = None) -> List[Di... method get_plugin_remote_entry (line 772) | def get_plugin_remote_entry(plugin_id: str, dist_path: str) -> str: method get_plugin_remotes (line 791) | def get_plugin_remotes(self, pid: Optional[str] = None) -> List[Dict[s... method get_plugin_dashboard_meta (line 812) | def get_plugin_dashboard_meta(self) -> List[Dict[str, str]]: method get_plugin_dashboard (line 844) | def get_plugin_dashboard(self, pid: str, key: str, user_agent: str = N... method get_plugin_attr (line 888) | def get_plugin_attr(self, pid: str, attr: str) -> Any: method run_plugin_method (line 901) | def run_plugin_method(self, pid: str, method: str, *args, **kwargs) ->... method async_run_plugin_method (line 916) | async def async_run_plugin_method(self, pid: str, method: str, *args, ... method get_plugin_ids (line 935) | def get_plugin_ids(self) -> List[str]: method get_running_plugin_ids (line 941) | def get_running_plugin_ids(self) -> List[str]: method get_online_plugins (line 947) | def get_online_plugins(self, force: bool = False) -> List[schemas.Plug... method get_local_plugins (line 988) | def get_local_plugins(self) -> List[schemas.Plugin]: method is_plugin_exists (line 1062) | def is_plugin_exists(pid: str, version: str = None) -> bool: method get_plugins_from_market (line 1093) | def get_plugins_from_market(self, market: str, method _process_plugins_list (line 1125) | def _process_plugins_list(higher_version_plugins: List[schemas.Plugin], method _process_plugin_info (line 1154) | def _process_plugin_info(self, pid: str, plugin_info: dict, market: str, method async_get_online_plugins (line 1247) | async def async_get_online_plugins(self, force: bool = False) -> List[... method async_get_plugins_from_market (line 1301) | async def async_get_plugins_from_market(self, market: str, method __set_and_check_auth_level (line 1333) | def __set_and_check_auth_level(plugin: Union[schemas.Plugin, Type[Any]], method __get_plugin_private_key (line 1371) | def __get_plugin_private_key(plugin_id: str) -> Optional[str]: method clone_plugin (line 1386) | def clone_plugin(self, plugin_id: str, suffix: str, name: str, descrip... method _modify_plugin_files (line 1485) | def _modify_plugin_files(self, plugin_dir: Path, original_id: str, suf... method _modify_python_file (line 1542) | def _modify_python_file(file_path: Path, original_class_name: str, method _modify_federation_files (line 1620) | def _modify_federation_files(self, dist_dir: Path, original_class_name... method _rename_federation_assets (line 1690) | def _rename_federation_assets(dist_dir: Path, original_class_name: str... FILE: app/core/security.py function __get_api_token (line 46) | def __get_api_token( function __get_api_key (line 57) | def __get_api_key( function __create_superuser_token_payload (line 71) | def __create_superuser_token_payload() -> schemas.TokenPayload: function create_access_token (line 98) | def create_access_token( function __set_or_refresh_resource_token_cookie (line 145) | def __set_or_refresh_resource_token_cookie(request: Request, response: R... function __verify_token (line 193) | def __verify_token(token: str, purpose: Optional[str] = "authentication"... function verify_token (line 230) | def verify_token( function verify_resource_token (line 272) | def verify_resource_token( function __verify_key (line 285) | def __verify_key(key: str | None, expected_key: str, key_type: str) -> str: function verify_apitoken (line 302) | def verify_apitoken(token: Annotated[str | None, Security(__get_api_toke... function verify_apikey (line 311) | def verify_apikey(apikey: Annotated[str | None, Security(__get_api_key)]... function verify_password (line 320) | def verify_password(plain_password: str, hashed_password: str) -> bool: function get_password_hash (line 324) | def get_password_hash(password: str) -> str: function decrypt (line 328) | def decrypt(data: bytes, key: bytes) -> Optional[bytes]: function encrypt_message (line 340) | def encrypt_message(message: str, key: bytes) -> str: function hash_sha256 (line 349) | def hash_sha256(message: str) -> str: function aes_decrypt (line 356) | def aes_decrypt(data: str, key: str) -> str: function aes_encrypt (line 376) | def aes_encrypt(data: str, key: str) -> str: function nexusphp_encrypt (line 392) | def nexusphp_encrypt(data_str: str, key: bytes) -> str: FILE: app/db/__init__.py function get_id_column (line 12) | def get_id_column(): function _get_database_engine (line 24) | def _get_database_engine(is_async: bool = False): function _get_sqlite_engine (line 37) | def _get_sqlite_engine(is_async: bool = False): function _get_postgresql_engine (line 115) | def _get_postgresql_engine(is_async: bool = False): function get_db (line 192) | def get_db() -> Generator: function get_async_db (line 206) | async def get_async_db() -> AsyncGenerator[AsyncSession, None]: function close_database (line 218) | async def close_database(): function _get_args_db (line 231) | def _get_args_db(args: tuple, kwargs: dict) -> Optional[Session]: function _get_args_async_db (line 249) | def _get_args_async_db(args: tuple, kwargs: dict) -> Optional[AsyncSessi... function _update_args_db (line 267) | def _update_args_db(args: tuple, kwargs: dict, db: Session) -> Tuple[tup... function _update_args_async_db (line 281) | def _update_args_async_db(args: tuple, kwargs: dict, db: AsyncSession) -... function db_update (line 295) | def db_update(func): function async_db_update (line 330) | def async_db_update(func): function db_query (line 365) | def db_query(func): function async_db_query (line 397) | def async_db_query(func): class Base (line 430) | class Base: method create (line 435) | def create(self, db: Session): method async_create (line 439) | async def async_create(self, db: AsyncSession): method get (line 446) | def get(cls, db: Session, rid: int) -> Self: method async_get (line 451) | async def async_get(cls, db: AsyncSession, rid: int) -> Self: method update (line 456) | def update(self, db: Session, payload: dict): method async_update (line 463) | async def async_update(self, db: AsyncSession, payload: dict): method delete (line 471) | def delete(cls, db: Session, rid): method async_delete (line 476) | async def async_delete(cls, db: AsyncSession, rid): method truncate (line 484) | def truncate(cls, db: Session): method async_truncate (line 489) | async def async_truncate(cls, db: AsyncSession): method list (line 494) | def list(cls, db: Session) -> List[Self]: method async_list (line 499) | async def async_list(cls, db: AsyncSession) -> Sequence[Self]: method to_dict (line 503) | def to_dict(self): method __tablename__ (line 507) | def __tablename__(self) -> str: class DbOper (line 511) | class DbOper: method __init__ (line 516) | def __init__(self, db: Union[Session, AsyncSession] = None): FILE: app/db/downloadhistory_oper.py class DownloadHistoryOper (line 7) | class DownloadHistoryOper(DbOper): method get_by_path (line 12) | def get_by_path(self, path: str) -> DownloadHistory: method get_by_hash (line 19) | def get_by_hash(self, download_hash: str) -> DownloadHistory: method get_by_mediaid (line 26) | def get_by_mediaid(self, tmdbid: int, doubanid: str) -> List[DownloadH... method add (line 34) | def add(self, **kwargs): method add_files (line 40) | def add_files(self, file_items: List[dict]): method truncate_files (line 48) | def truncate_files(self): method get_files_by_hash (line 54) | def get_files_by_hash(self, download_hash: str, state: Optional[int] =... method get_file_by_fullpath (line 62) | def get_file_by_fullpath(self, fullpath: str) -> DownloadFiles: method get_files_by_fullpath (line 69) | def get_files_by_fullpath(self, fullpath: str) -> List[DownloadFiles]: method get_files_by_savepath (line 76) | def get_files_by_savepath(self, fullpath: str) -> List[DownloadFiles]: method delete_file_by_fullpath (line 83) | def delete_file_by_fullpath(self, fullpath: str): method get_hash_by_fullpath (line 90) | def get_hash_by_fullpath(self, fullpath: str) -> str: method list_by_page (line 100) | def list_by_page(self, page: Optional[int] = 1, count: Optional[int] =... method truncate (line 106) | def truncate(self): method get_last_by (line 112) | def get_last_by(self, mtype=None, title: Optional[str] = None, year: O... method list_by_user_date (line 126) | def list_by_user_date(self, date: str, username: Optional[str] = None)... method list_by_date (line 134) | def list_by_date(self, date: str, type: str, tmdbid: str, seasons: Opt... method list_by_type (line 144) | def list_by_type(self, mtype: str, days: Optional[int] = 7) -> List[Do... method delete_history (line 152) | def delete_history(self, historyid): method delete_downloadfile (line 158) | def delete_downloadfile(self, downloadfileid): FILE: app/db/init.py function init_db (line 9) | def init_db(): function update_db (line 17) | def update_db(): FILE: app/db/mediaserver_oper.py class MediaServerOper (line 9) | class MediaServerOper(DbOper): method __init__ (line 14) | def __init__(self, db: Session = None): method add (line 17) | def add(self, **kwargs) -> bool: method empty (line 29) | def empty(self, server: Optional[str] = None): method exists (line 35) | def exists(self, **kwargs) -> Optional[MediaServerItem]: method async_exists (line 61) | async def async_exists(self, **kwargs) -> Optional[MediaServerItem]: method get_item_id (line 87) | def get_item_id(self, **kwargs) -> Optional[str]: method async_get_item_id (line 96) | async def async_get_item_id(self, **kwargs) -> Optional[str]: FILE: app/db/message_oper.py class MessageOper (line 11) | class MessageOper(DbOper): method __init__ (line 16) | def __init__(self, db: Session = None): method add (line 19) | def add(self, method async_add (line 65) | async def async_add(self, method list_by_page (line 101) | def list_by_page(self, page: Optional[int] = 1, count: Optional[int] =... FILE: app/db/models/downloadhistory.py class DownloadHistory (line 11) | class DownloadHistory(Base): method get_by_hash (line 63) | def get_by_hash(cls, db: Session, download_hash: str): method get_by_mediaid (line 70) | def get_by_mediaid(cls, db: Session, tmdbid: int, doubanid: str): method list_by_page (line 79) | def list_by_page(cls, db: Session, page: Optional[int] = 1, count: Opt... method async_list_by_page (line 84) | async def async_list_by_page(cls, db: AsyncSession, page: Optional[int... method get_by_path (line 92) | def get_by_path(cls, db: Session, path: str): method get_last_by (line 97) | def get_last_by(cls, db: Session, mtype: Optional[str] = None, title: ... method list_by_user_date (line 149) | def list_by_user_date(cls, db: Session, date: str, username: Optional[... method list_by_date (line 163) | def list_by_date(cls, db: Session, date: str, type: str, tmdbid: str, ... method list_by_type (line 181) | def list_by_type(cls, db: Session, mtype: str, days: int): class DownloadFiles (line 189) | class DownloadFiles(Base): method get_by_hash (line 211) | def get_by_hash(cls, db: Session, download_hash: str, state: Optional[... method get_by_fullpath (line 220) | def get_by_fullpath(cls, db: Session, fullpath: str, all_files: bool =... method get_by_savepath (line 230) | def get_by_savepath(cls, db: Session, savepath: str): method delete_by_fullpath (line 235) | def delete_by_fullpath(cls, db: Session, fullpath: str): FILE: app/db/models/mediaserver.py class MediaServerItem (line 12) | class MediaServerItem(Base): method get_by_itemid (line 48) | def get_by_itemid(cls, db: Session, item_id: str): method empty (line 53) | def empty(cls, db: Session, server: Optional[str] = None): method exist_by_tmdbid (line 61) | def exist_by_tmdbid(cls, db: Session, tmdbid: int, mtype: str): method exists_by_title (line 67) | def exists_by_title(cls, db: Session, title: str, mtype: str, year: str): method async_get_by_itemid (line 82) | async def async_get_by_itemid(cls, db: AsyncSession, item_id: str): method async_exist_by_tmdbid (line 88) | async def async_exist_by_tmdbid(cls, db: AsyncSession, tmdbid: int, mt... method async_exists_by_title (line 95) | async def async_exists_by_title(cls, db: AsyncSession, title: str, mty... FILE: app/db/models/message.py class Message (line 10) | class Message(Base): method list_by_page (line 40) | def list_by_page(cls, db: Session, page: Optional[int] = 1, count: Opt... method async_list_by_page (line 45) | async def async_list_by_page(cls, db: AsyncSession, page: Optional[int... FILE: app/db/models/passkey.py class PassKey (line 9) | class PassKey(Base): method get_by_user_id (line 38) | def get_by_user_id(cls, db: Session, user_id: int): method async_get_by_user_id (line 44) | async def async_get_by_user_id(cls, db: AsyncSession, user_id: int): method get_by_credential_id (line 53) | def get_by_credential_id(cls, db: Session, credential_id: str): method async_get_by_credential_id (line 59) | async def async_get_by_credential_id(cls, db: AsyncSession, credential... method get_by_id (line 68) | def get_by_id(cls, db: Session, passkey_id: int): method async_get_by_id (line 74) | async def async_get_by_id(cls, db: AsyncSession, passkey_id: int): method delete_by_id (line 83) | def delete_by_id(cls, db: Session, passkey_id: int, user_id: int): method async_delete_by_id (line 96) | async def async_delete_by_id(cls, db: AsyncSession, passkey_id: int, u... method update_last_used (line 111) | def update_last_used(self, db: Session, sign_count: int): method async_update_last_used (line 120) | async def async_update_last_used(self, db: AsyncSession, sign_count: i... FILE: app/db/models/plugindata.py class PluginData (line 7) | class PluginData(Base): method get_plugin_data (line 18) | def get_plugin_data(cls, db: Session, plugin_id: str): method get_plugin_data_by_key (line 23) | def get_plugin_data_by_key(cls, db: Session, plugin_id: str, key: str): method del_plugin_data_by_key (line 28) | def del_plugin_data_by_key(cls, db: Session, plugin_id: str, key: str): method del_plugin_data (line 33) | def del_plugin_data(cls, db: Session, plugin_id: str): method get_plugin_data_by_plugin_id (line 38) | def get_plugin_data_by_plugin_id(cls, db: Session, plugin_id: str): FILE: app/db/models/site.py class Site (line 10) | class Site(Base): method get_by_domain (line 60) | def get_by_domain(cls, db: Session, domain: str): method async_get_by_domain (line 65) | async def async_get_by_domain(cls, db: AsyncSession, domain: str): method async_get_by_name (line 71) | async def async_get_by_name(cls, db: AsyncSession, name: str): method get_actives (line 77) | def get_actives(cls, db: Session): method async_get_actives (line 82) | async def async_get_actives(cls, db: AsyncSession): method list_order_by_pri (line 88) | def list_order_by_pri(cls, db: Session): method async_list_order_by_pri (line 93) | async def async_list_order_by_pri(cls, db: AsyncSession): method get_domains_by_ids (line 99) | def get_domains_by_ids(cls, db: Session, ids: list): method reset (line 104) | def reset(cls, db: Session): method async_reset (line 109) | async def async_reset(cls, db: AsyncSession): FILE: app/db/models/siteicon.py class SiteIcon (line 8) | class SiteIcon(Base): method get_by_domain (line 24) | def get_by_domain(cls, db: Session, domain: str): method async_get_by_domain (line 29) | async def async_get_by_domain(cls, db: AsyncSession, domain: str): FILE: app/db/models/sitestatistic.py class SiteStatistic (line 10) | class SiteStatistic(Base): method get_by_domain (line 32) | def get_by_domain(cls, db: Session, domain: str): method async_get_by_domain (line 37) | async def async_get_by_domain(cls, db: AsyncSession, domain: str): method reset (line 43) | def reset(cls, db: Session): FILE: app/db/models/siteuserdata.py class SiteUserData (line 11) | class SiteUserData(Base): method get_by_domain (line 59) | def get_by_domain(cls, db: Session, domain: str, workdate: Optional[st... method async_get_by_domain (line 71) | async def async_get_by_domain(cls, db: AsyncSession, domain: str, work... method get_by_date (line 82) | def get_by_date(cls, db: Session, date: str): method get_latest (line 87) | def get_latest(cls, db: Session): method async_get_latest (line 110) | async def async_get_latest(cls, db: AsyncSession): FILE: app/db/models/subscribe.py class Subscribe (line 11) | class Subscribe(Base): method exists (line 93) | def exists(cls, db: Session, tmdbid: Optional[int] = None, doubanid: O... method async_exists (line 106) | async def async_exists(cls, db: AsyncSession, tmdbid: Optional[int] = ... method get_by_state (line 127) | def get_by_state(cls, db: Session, state: str): method async_get_by_state (line 137) | async def async_get_by_state(cls, db: AsyncSession, state: str): method get_by_title (line 150) | def get_by_title(cls, db: Session, title: str, season: Optional[int] =... method async_get_by_title (line 158) | async def async_get_by_title(cls, db: AsyncSession, title: str, season... method get_by_tmdbid (line 171) | def get_by_tmdbid(cls, db: Session, tmdbid: int, season: Optional[int]... method async_get_by_tmdbid (line 180) | async def async_get_by_tmdbid(cls, db: AsyncSession, tmdbid: int, seas... method get_by_doubanid (line 193) | def get_by_doubanid(cls, db: Session, doubanid: str): method async_get_by_doubanid (line 198) | async def async_get_by_doubanid(cls, db: AsyncSession, doubanid: str): method get_by_bangumiid (line 206) | def get_by_bangumiid(cls, db: Session, bangumiid: int): method async_get_by_bangumiid (line 211) | async def async_get_by_bangumiid(cls, db: AsyncSession, bangumiid: int): method get_by_mediaid (line 219) | def get_by_mediaid(cls, db: Session, mediaid: str): method async_get_by_mediaid (line 224) | async def async_get_by_mediaid(cls, db: AsyncSession, mediaid: str): method get_by (line 232) | def get_by(cls, db: Session, type: str, season: Optional[str] = None, method async_get_by (line 258) | async def async_get_by(cls, db: AsyncSession, type: str, season: Optio... method delete_by_tmdbid (line 291) | def delete_by_tmdbid(self, db: Session, tmdbid: int, season: int): method async_delete_by_tmdbid (line 298) | async def async_delete_by_tmdbid(self, db: AsyncSession, tmdbid: int, ... method delete_by_doubanid (line 305) | def delete_by_doubanid(self, db: Session, doubanid: str): method async_delete_by_doubanid (line 312) | async def async_delete_by_doubanid(self, db: AsyncSession, doubanid: s... method delete_by_mediaid (line 319) | def delete_by_mediaid(self, db: Session, mediaid: str): method async_delete_by_mediaid (line 326) | async def async_delete_by_mediaid(self, db: AsyncSession, mediaid: str): method list_by_username (line 334) | def list_by_username(cls, db: Session, username: str, state: Optional[... method async_list_by_username (line 352) | async def async_list_by_username(cls, db: AsyncSession, username: str,... method list_by_type (line 376) | def list_by_type(cls, db: Session, mtype: str, days: int): method async_list_by_type (line 385) | async def async_list_by_type(cls, db: AsyncSession, mtype: str, days: ... FILE: app/db/models/subscribehistory.py class SubscribeHistory (line 10) | class SubscribeHistory(Base): method list_by_type (line 78) | def list_by_type(cls, db: Session, mtype: str, page: Optional[int] = 1... method async_list_by_type (line 87) | async def async_list_by_type(cls, db: AsyncSession, mtype: str, page: ... method exists (line 99) | def exists(cls, db: Session, tmdbid: Optional[int] = None, doubanid: O... method async_exists (line 112) | async def async_exists(cls, db: AsyncSession, tmdbid: Optional[int] = ... FILE: app/db/models/systemconfig.py class SystemConfig (line 8) | class SystemConfig(Base): method get_by_key (line 20) | def get_by_key(cls, db: Session, key: str): method async_get_by_key (line 25) | async def async_get_by_key(cls, db: AsyncSession, key: str): method delete_by_key (line 30) | def delete_by_key(self, db: Session, key: str): FILE: app/db/models/transferhistory.py class TransferHistory (line 11) | class TransferHistory(Base): method list_by_title (line 65) | def list_by_title(cls, db: Session, title: str, page: Optional[int] = ... method async_list_by_title (line 90) | async def async_list_by_title(cls, db: AsyncSession, title: str, page:... method list_by_page (line 116) | def list_by_page(cls, db: Session, page: Optional[int] = 1, count: Opt... method async_list_by_page (line 136) | async def async_list_by_page(cls, db: AsyncSession, page: Optional[int... method get_by_hash (line 158) | def get_by_hash(cls, db: Session, download_hash: str): method get_by_src (line 163) | def get_by_src(cls, db: Session, src: str, storage: Optional[str] = No... method get_by_dest (line 172) | def get_by_dest(cls, db: Session, dest: str): method list_by_hash (line 177) | def list_by_hash(cls, db: Session, download_hash: str): method statistic (line 182) | def statistic(cls, db: Session, days: Optional[int] = 7): method async_statistic (line 194) | async def async_statistic(cls, db: AsyncSession, days: Optional[int] =... method count (line 209) | def count(cls, db: Session, status: bool = None): method async_count (line 217) | async def async_count(cls, db: AsyncSession, status: bool = None): method count_by_title (line 230) | def count_by_title(cls, db: Session, title: str, status: bool = None): method async_count_by_title (line 242) | async def async_count_by_title(cls, db: AsyncSession, title: str, stat... method list_by (line 259) | def list_by(cls, db: Session, mtype: Optional[str] = None, title: Opti... method get_by_type_tmdbid (line 324) | def get_by_type_tmdbid(cls, db: Session, mtype: Optional[str] = None, ... method update_download_hash (line 333) | def update_download_hash(cls, db: Session, historyid: Optional[int] = ... method list_by_date (line 342) | def list_by_date(cls, db: Session, date: str): FILE: app/db/models/user.py class User (line 8) | class User(Base): method get_by_name (line 37) | def get_by_name(cls, db: Session, name: str): method async_get_by_name (line 42) | async def async_get_by_name(cls, db: AsyncSession, name: str): method get_by_id (line 50) | def get_by_id(cls, db: Session, user_id: int): method async_get_by_id (line 55) | async def async_get_by_id(cls, db: AsyncSession, user_id: int): method delete_by_name (line 62) | def delete_by_name(self, db: Session, name: str): method async_delete_by_name (line 69) | async def async_delete_by_name(self, db: AsyncSession, name: str): method delete_by_id (line 76) | def delete_by_id(self, db: Session, user_id: int): method async_delete_by_id (line 83) | async def async_delete_by_id(self, db: AsyncSession, user_id: int): method update_otp_by_name (line 90) | def update_otp_by_name(self, db: Session, name: str, otp: bool, secret... method async_update_otp_by_name (line 101) | async def async_update_otp_by_name(self, db: AsyncSession, name: str, ... FILE: app/db/models/userconfig.py class UserConfig (line 7) | class UserConfig(Base): method get_by_key (line 27) | def get_by_key(cls, db: Session, username: str, key: str): method delete_by_key (line 34) | def delete_by_key(self, db: Session, username: str, key: str): FILE: app/db/models/workflow.py class Workflow (line 10) | class Workflow(Base): method list (line 49) | def list(cls, db): method async_list (line 54) | async def async_list(cls, db: AsyncSession): method get_enabled_workflows (line 60) | def get_enabled_workflows(cls, db): method async_get_enabled_workflows (line 65) | async def async_get_enabled_workflows(cls, db: AsyncSession): method get_timer_triggered_workflows (line 71) | def get_timer_triggered_workflows(cls, db): method async_get_timer_triggered_workflows (line 85) | async def async_get_timer_triggered_workflows(cls, db: AsyncSession): method get_event_triggered_workflows (line 100) | def get_event_triggered_workflows(cls, db): method async_get_event_triggered_workflows (line 111) | async def async_get_event_triggered_workflows(cls, db: AsyncSession): method get_by_name (line 123) | def get_by_name(cls, db, name: str): method async_get_by_name (line 128) | async def async_get_by_name(cls, db: AsyncSession, name: str): method update_state (line 134) | def update_state(cls, db, wid: int, state: str): method async_update_state (line 140) | async def async_update_state(cls, db: AsyncSession, wid: int, state: s... method start (line 147) | def start(cls, db, wid: int): method async_start (line 155) | async def async_start(cls, db: AsyncSession, wid: int): method fail (line 162) | def fail(cls, db, wid: int, result: str): method async_fail (line 172) | async def async_fail(cls, db: AsyncSession, wid: int, result: str): method success (line 185) | def success(cls, db, wid: int, result: Optional[str] = None): method async_success (line 196) | async def async_success(cls, db: AsyncSession, wid: int, result: Optio... method reset (line 210) | def reset(cls, db, wid: int, reset_count: Optional[bool] = False): method async_reset (line 221) | async def async_reset(cls, db: AsyncSession, wid: int, reset_count: Op... method update_current_action (line 233) | def update_current_action(cls, db, wid: int, action_id: str, context: ... method async_update_current_action (line 242) | async def async_update_current_action(cls, db: AsyncSession, wid: int,... FILE: app/db/plugindata_oper.py class PluginDataOper (line 7) | class PluginDataOper(DbOper): method save (line 12) | def save(self, plugin_id: str, key: str, value: Any): method get_data (line 27) | def get_data(self, plugin_id: str, key: Optional[str] = None) -> Any: method del_data (line 41) | def del_data(self, plugin_id: str, key: Optional[str] = None) -> Any: method truncate (line 52) | def truncate(self): method get_data_all (line 58) | def get_data_all(self, plugin_id: str) -> Any: FILE: app/db/site_oper.py class SiteOper (line 11) | class SiteOper(DbOper): method add (line 16) | def add(self, **kwargs) -> Tuple[bool, str]: method get (line 26) | def get(self, sid: int) -> Site: method async_get (line 32) | async def async_get(self, sid: int) -> Site: method list (line 38) | def list(self) -> List[Site]: method async_list (line 44) | async def async_list(self) -> List[Site]: method list_order_by_pri (line 50) | def list_order_by_pri(self) -> List[Site]: method list_active (line 56) | def list_active(self) -> List[Site]: method async_list_active (line 62) | async def async_list_active(self) -> List[Site]: method delete (line 68) | def delete(self, sid: int): method update (line 74) | def update(self, sid: int, payload: dict) -> Site: method get_by_domain (line 82) | def get_by_domain(self, domain: str) -> Site: method async_get_by_domain (line 88) | async def async_get_by_domain(self, domain: str) -> Site: method async_get_by_name (line 94) | async def async_get_by_name(self, name: str) -> Site: method get_domains_by_ids (line 100) | def get_domains_by_ids(self, ids: List[int]) -> List[str]: method exists (line 106) | def exists(self, domain: str) -> bool: method update_cookie (line 112) | def update_cookie(self, domain: str, cookies: str) -> Tuple[bool, str]: method update_rss (line 124) | def update_rss(self, domain: str, rss: str) -> Tuple[bool, str]: method update_userdata (line 136) | def update_userdata(self, domain: str, name: str, payload: dict) -> Tu... method get_userdata (line 161) | def get_userdata(self) -> List[SiteUserData]: method get_userdata_by_domain (line 167) | def get_userdata_by_domain(self, domain: str, workdate: Optional[str] ... method get_userdata_by_date (line 173) | def get_userdata_by_date(self, date: str) -> List[SiteUserData]: method get_userdata_latest (line 179) | def get_userdata_latest(self) -> List[SiteUserData]: method get_icon_by_domain (line 185) | def get_icon_by_domain(self, domain: str) -> SiteIcon: method update_icon (line 191) | def update_icon(self, name: str, domain: str, icon_url: str, icon_base... method success (line 206) | def success(self, domain: str, seconds: Optional[int] = None): method fail (line 247) | def fail(self, domain: str): method async_success (line 268) | async def async_success(self, domain: str, seconds: Optional[int] = No... method async_fail (line 309) | async def async_fail(self, domain: str): FILE: app/db/subscribe_oper.py class SubscribeOper (line 10) | class SubscribeOper(DbOper): method add (line 15) | def add(self, mediainfo: MediaInfo, **kwargs) -> Tuple[int, str]: method async_add (line 52) | async def async_add(self, mediainfo: MediaInfo, **kwargs) -> Tuple[int... method exists (line 89) | def exists(self, tmdbid: Optional[int] = None, doubanid: Optional[str]... method get (line 103) | def get(self, sid: int) -> Subscribe: method async_get (line 109) | async def async_get(self, sid: int) -> Subscribe: method get_by (line 115) | def get_by(self, type: str, season: Optional[str] = None, tmdbid: Opti... method async_get_by (line 122) | async def async_get_by(self, type: str, season: Optional[str] = None, ... method list (line 129) | def list(self, state: Optional[str] = None) -> List[Subscribe]: method async_list (line 137) | async def async_list(self, state: Optional[str] = None) -> List[Subscr... method delete (line 145) | def delete(self, sid: int): method update (line 151) | def update(self, sid: int, payload: dict) -> Subscribe: method list_by_tmdbid (line 160) | def list_by_tmdbid(self, tmdbid: int, season: Optional[int] = None) ->... method list_by_username (line 166) | def list_by_username(self, username: str, state: Optional[str] = None, method list_by_type (line 173) | def list_by_type(self, mtype: str, days: Optional[int] = 7) -> Subscribe: method add_history (line 179) | def add_history(self, **kwargs): method exist_history (line 193) | def exist_history(self, tmdbid: Optional[int] = None, doubanid: Option... FILE: app/db/systemconfig_oper.py class SystemConfigOper (line 12) | class SystemConfigOper(DbOper, metaclass=Singleton): method __init__ (line 16) | def __init__(self): method set (line 27) | def set(self, key: Union[str, SystemConfigKey], value: Any) -> Optiona... method async_set (line 55) | async def async_set(self, key: Union[str, SystemConfigKey], value: Any... method get (line 92) | def get(self, key: Union[str, SystemConfigKey] = None) -> Any: method all (line 104) | def all(self): method delete (line 112) | def delete(self, key: Union[str, SystemConfigKey]) -> bool: FILE: app/db/transferhistory_oper.py class TransferHistoryOper (line 11) | class TransferHistoryOper(DbOper): method get (line 16) | def get(self, historyid: int) -> TransferHistory: method get_by_title (line 23) | def get_by_title(self, title: str) -> List[TransferHistory]: method get_by_src (line 30) | def get_by_src(self, src: str, storage: Optional[str] = None) -> Trans... method get_by_dest (line 38) | def get_by_dest(self, dest: str) -> TransferHistory: method list_by_hash (line 45) | def list_by_hash(self, download_hash: str) -> List[TransferHistory]: method add (line 52) | def add(self, **kwargs): method statistic (line 61) | def statistic(self, days: Optional[int] = 7) -> List[Any]: method get_by (line 67) | def get_by(self, title: Optional[str] = None, year: Optional[str] = No... method get_by_type_tmdbid (line 82) | def get_by_type_tmdbid(self, mtype: Optional[str] = None, tmdbid: Opti... method delete (line 90) | def delete(self, historyid): method truncate (line 96) | def truncate(self): method add_force (line 102) | def add_force(self, **kwargs) -> TransferHistory: method update_download_hash (line 116) | def update_download_hash(self, historyid, download_hash): method add_success (line 122) | def add_success(self, fileitem: FileItem, mode: str, meta: MetaBase, method add_fail (line 153) | def add_fail(self, fileitem: FileItem, mode: str, meta: MetaBase, medi... method list_by_date (line 202) | def list_by_date(self, date: str) -> List[TransferHistory]: FILE: app/db/user_oper.py function get_current_user (line 13) | def get_current_user( function get_current_user_async (line 26) | async def get_current_user_async( function get_current_active_user (line 39) | def get_current_active_user( function get_current_active_user_async (line 50) | async def get_current_active_user_async( function get_current_active_superuser (line 61) | def get_current_active_superuser( function get_current_active_superuser_async (line 74) | async def get_current_active_superuser_async( class UserOper (line 87) | class UserOper(DbOper): method list (line 92) | def list(self) -> List[User]: method add (line 98) | def add(self, **kwargs): method get_by_name (line 105) | def get_by_name(self, name: str) -> User: method get_permissions (line 111) | def get_permissions(self, name: str) -> dict: method get_settings (line 120) | def get_settings(self, name: str) -> Optional[dict]: method get_setting (line 129) | def get_setting(self, name: str, key: str) -> Optional[str]: method get_name (line 138) | def get_name(self, **kwargs) -> Optional[str]: FILE: app/db/userconfig_oper.py class UserConfigOper (line 9) | class UserConfigOper(DbOper, metaclass=Singleton): method __init__ (line 13) | def __init__(self): method set (line 22) | def set(self, username: str, key: Union[str, UserConfigKey], value: Any): method get (line 41) | def get(self, username: str, key: Union[str, UserConfigKey] = None) ->... method __set_config_cache (line 53) | def __set_config_cache(self, username: str, key: str, value: Any): method __get_config_caches (line 69) | def __get_config_caches(self, username: str) -> Optional[Dict[str, Any]]: method __get_config_cache (line 77) | def __get_config_cache(self, username: str, key: str) -> Any: FILE: app/db/workflow_oper.py class WorkflowOper (line 7) | class WorkflowOper(DbOper): method add (line 12) | def add(self, **kwargs) -> Tuple[bool, str]: method get (line 22) | def get(self, wid: int) -> Workflow: method async_get (line 28) | async def async_get(self, wid: int) -> Workflow: method list (line 34) | def list(self) -> List[Workflow]: method async_list (line 40) | async def async_list(self) -> Coroutine[Any, Any, Sequence[Any]]: method list_enabled (line 46) | def list_enabled(self) -> List[Workflow]: method get_timer_triggered_workflows (line 52) | def get_timer_triggered_workflows(self) -> List[Workflow]: method get_event_triggered_workflows (line 58) | def get_event_triggered_workflows(self) -> List[Workflow]: method get_by_name (line 64) | def get_by_name(self, name: str) -> Workflow: method async_get_by_name (line 70) | async def async_get_by_name(self, name: str) -> Workflow: method start (line 76) | def start(self, wid: int) -> bool: method success (line 82) | def success(self, wid: int, result: Optional[str] = None) -> bool: method fail (line 88) | def fail(self, wid: int, result: str) -> bool: method step (line 94) | def step(self, wid: int, action_id: str, context: dict) -> bool: method reset (line 100) | def reset(self, wid: int, reset_count: bool = False) -> bool: FILE: app/factory.py function create_app (line 8) | def create_app() -> FastAPI: FILE: app/helper/browser.py class PlaywrightHelper (line 12) | class PlaywrightHelper: method __init__ (line 13) | def __init__(self, browser_type=settings.PLAYWRIGHT_BROWSER_TYPE): method __pass_cloudflare (line 17) | def __pass_cloudflare(url: str, page: Page) -> bool: method __fs_cookie_str (line 26) | def __fs_cookie_str(cookies: list) -> str: method __flaresolverr_request (line 32) | def __flaresolverr_request(url: str, method action (line 132) | def action(self, url: str, method get_page_source (line 199) | def get_page_source(self, url: str, FILE: app/helper/cloudflare.py function under_challenge (line 26) | def under_challenge(html_text: str): FILE: app/helper/cookie.py class CookieHelper (line 16) | class CookieHelper: method parse_cookies (line 62) | def parse_cookies(cookies: list) -> str: method get_site_cookie_ua (line 73) | def get_site_cookie_ua(self, method __get_captcha_text (line 240) | def __get_captcha_text(cookie: str, ua: str, code_url: str) -> str: method __get_captcha_url (line 257) | def __get_captcha_url(siteurl: str, imageurl: str) -> str: FILE: app/helper/cookiecloud.py class CookieCloudHelper (line 12) | class CookieCloudHelper: method __init__ (line 15) | def __init__(self): method __sync_setting (line 18) | def __sync_setting(self): method download (line 28) | def download(self) -> Tuple[Optional[dict], str]: method __get_crypt_key (line 111) | def __get_crypt_key(self) -> bytes: method __load_local_encrypt_data (line 118) | def __load_local_encrypt_data(self, uuid: str) -> Dict[str, Any]: FILE: app/helper/directory.py class DirectoryHelper (line 15) | class DirectoryHelper: method get_dirs (line 21) | def get_dirs() -> List[schemas.TransferDirectoryConf]: method get_download_dirs (line 30) | def get_download_dirs(self) -> List[schemas.TransferDirectoryConf]: method get_local_download_dirs (line 36) | def get_local_download_dirs(self) -> List[schemas.TransferDirectoryConf]: method get_library_dirs (line 42) | def get_library_dirs(self) -> List[schemas.TransferDirectoryConf]: method get_local_library_dirs (line 48) | def get_local_library_dirs(self) -> List[schemas.TransferDirectoryConf]: method get_dir (line 54) | def get_dir(self, media: Optional[MediaInfo], include_unsorted: Option... method _is_same_source (line 115) | def _is_same_source(src: Tuple[Path, str], tar: Tuple[Path, str]) -> ... method get_media_root_path (line 131) | def get_media_root_path(rename_format: str, rename_path: Path) -> Opti... FILE: app/helper/display.py class DisplayHelper (line 10) | class DisplayHelper(metaclass=Singleton): method __init__ (line 12) | def __init__(self): method stop (line 22) | def stop(self): FILE: app/helper/doh.py function enable_doh (line 32) | def enable_doh(enable: bool): class DohHelper (line 70) | class DohHelper(ConfigReloadMixin, metaclass=Singleton): method __init__ (line 76) | def __init__(self): method on_config_changed (line 79) | def on_config_changed(self): method get_reload_name (line 85) | def get_reload_name(self): function _doh_query (line 88) | def _doh_query(resolver: str, host: str) -> Optional[str]: function doh_query_json (line 145) | def doh_query_json(resolver: str, host: str) -> Optional[str]: FILE: app/helper/downloader.py class DownloaderHelper (line 8) | class DownloaderHelper(ServiceBaseHelper[DownloaderConf]): method __init__ (line 13) | def __init__(self): method is_downloader (line 20) | def is_downloader( FILE: app/helper/format.py class FormatParser (line 9) | class FormatParser(object): method __init__ (line 13) | def __init__(self, eformat: str, details: Optional[str] = None, part: ... method format (line 51) | def format(self): method start_ep (line 55) | def start_ep(self): method end_ep (line 59) | def end_ep(self): method part (line 63) | def part(self): method offset (line 67) | def offset(self): method match (line 70) | def match(self, file: str) -> bool: method split_episode (line 82) | def split_episode(self, file_name: str, file_meta: MetaBase) -> Tuple[... method __handle_single (line 119) | def __handle_single(self, file: str) -> Tuple[Optional[int], Optional[... FILE: app/helper/image.py class WallpaperHelper (line 18) | class WallpaperHelper(metaclass=Singleton): method get_wallpaper (line 23) | def get_wallpaper(self) -> Optional[str]: method get_wallpapers (line 37) | def get_wallpapers(self, num: int = 10) -> List[str]: method get_tmdb_wallpaper (line 52) | def get_tmdb_wallpaper(self) -> Optional[str]: method get_tmdb_wallpapers (line 59) | def get_tmdb_wallpapers(self, num: int = 10) -> List[str]: method get_bing_wallpaper (line 66) | def get_bing_wallpaper(self) -> Optional[str]: method get_bing_wallpapers (line 83) | def get_bing_wallpapers(self, num: int = 7) -> List[str]: method get_mediaserver_wallpaper (line 99) | def get_mediaserver_wallpaper(self) -> Optional[str]: method get_mediaserver_wallpapers (line 106) | def get_mediaserver_wallpapers(self, num: int = 10) -> List[str]: method get_customize_wallpaper (line 113) | def get_customize_wallpaper(self) -> Optional[str]: method get_customize_wallpapers (line 123) | def get_customize_wallpapers(self) -> List[str]: class ImageHelper (line 173) | class ImageHelper(metaclass=Singleton): method __init__ (line 175) | def __init__(self): method _prepare_cache_path (line 182) | def _prepare_cache_path(url: str) -> str: method _validate_image (line 191) | def _validate_image(content: bytes) -> bool: method _get_request_params (line 203) | def _get_request_params(url: str, proxy: Optional[bool], cookies: Opti... method fetch_image (line 218) | def fetch_image( method async_fetch_image (line 254) | async def async_fetch_image( FILE: app/helper/llm.py class LLMHelper (line 8) | class LLMHelper: method get_llm (line 12) | def get_llm(streaming: bool = False, callbacks: Optional[list] = None): method get_models (line 74) | def get_models(self, provider: str, api_key: str, base_url: str = None... method _get_google_models (line 83) | def _get_google_models(api_key: str) -> List[str]: method _get_openai_compatible_models (line 95) | def _get_openai_compatible_models(provider: str, api_key: str, base_ur... FILE: app/helper/mediaserver.py class MediaServerHelper (line 8) | class MediaServerHelper(ServiceBaseHelper[MediaServerConf]): method __init__ (line 13) | def __init__(self): method is_media_server (line 20) | def is_media_server( FILE: app/helper/message.py class TemplateContextBuilder (line 29) | class TemplateContextBuilder: method __init__ (line 34) | def __init__(self): method build (line 37) | def build( method _add_media_info (line 73) | def _add_media_info(self, mediainfo: MediaInfo): method _add_episode_details (line 126) | def _add_episode_details(self, meta: Optional[MetaBase], episodes: Opt... method _add_torrent_info (line 193) | def _add_torrent_info(self, torrentinfo: Optional[TorrentInfo]): method _add_transfer_info (line 236) | def _add_transfer_info(self, transferinfo: Optional[TransferInfo]) -> ... method _add_file_info (line 250) | def _add_file_info(self, file_extension: Optional[str]): method _add_raw_objects (line 262) | def _add_raw_objects( method __convert_invalid_characters (line 288) | def __convert_invalid_characters(filename: str): class TemplateHelper (line 305) | class TemplateHelper(metaclass=SingletonClass): method __init__ (line 310) | def __init__(self): method _generate_cache_key (line 315) | def _generate_cache_key(cuntent: Union[str, dict]) -> str: method get_cache_context (line 325) | def get_cache_context(self, cuntent: Union[str, dict]) -> Optional[dict]: method set_cache_context (line 332) | def set_cache_context(self, cuntent: Union[str, dict], context: dict) ... method render (line 339) | def render(self, method render_with_context (line 375) | def render_with_context(template_content: str, context: dict) -> str: method parse_template_content (line 386) | def parse_template_content(template_content: Union[str, dict], method __process_formatted_string (line 436) | def __process_formatted_string(rendered: str) -> Optional[Union[dict, ... method close (line 475) | def close(self): class MessageTemplateHelper (line 483) | class MessageTemplateHelper: method render (line 489) | def render(message: Notification, *args, **kwargs) -> Optional[Notific... method is_instance_valid (line 500) | def is_instance_valid(message: Notification) -> bool: method meets_update_conditions (line 509) | def meets_update_conditions(message: Notification, *args, **kwargs) ->... method _apply_template_data (line 523) | def _apply_template_data(message: Notification, *args, **kwargs) -> Op... method _get_template (line 539) | def _get_template(message: Notification) -> Optional[str]: class MessageQueueManager (line 547) | class MessageQueueManager(metaclass=SingletonClass): method __init__ (line 552) | def __init__( method init_config (line 575) | def init_config(self): method _parse_schedule (line 584) | def _parse_schedule(periods: Union[list, dict]) -> List[tuple[int, int... method _time_to_minutes (line 627) | def _time_to_minutes(time_str: str) -> int: method _is_in_scheduled_time (line 634) | def _is_in_scheduled_time(self, current_time: datetime) -> bool: method send_message (line 654) | def send_message(self, *args, **kwargs) -> None: method async_send_message (line 668) | async def async_send_message(self, *args, **kwargs) -> None: method _send (line 679) | def _send(self, *args, **kwargs) -> None: method _monitor_loop (line 690) | def _monitor_loop(self) -> None: method stop (line 710) | def stop(self) -> None: class MessageHelper (line 720) | class MessageHelper(metaclass=Singleton): method __init__ (line 725) | def __init__(self): method put (line 729) | def put(self, message: Any, role: str = "plugin", title: str = None, n... method get (line 766) | def get(self, role: str = "system") -> Optional[str]: function stop_message (line 780) | def stop_message(): FILE: app/helper/module.py function _default_filter (line 13) | def _default_filter(name: str, obj: Any) -> bool: class ModuleHelper (line 20) | class ModuleHelper: method load (line 26) | def load(cls, package_path: str, filter_func: FilterFuncType = _defaul... method load_with_pre_filter (line 58) | def load_with_pre_filter(cls, package_path: str, filter_func: FilterFu... method dynamic_import_all_modules (line 110) | def dynamic_import_all_modules(base_path: Path, package_name: str): FILE: app/helper/nfo.py class NfoReader (line 6) | class NfoReader: method __init__ (line 7) | def __init__(self, xml_file_path: Path): method get_element_value (line 12) | def get_element_value(self, element_path) -> Optional[str]: method get_elements (line 16) | def get_elements(self, element_path) -> List[ET.Element]: FILE: app/helper/notification.py class NotificationHelper (line 8) | class NotificationHelper(ServiceBaseHelper[NotificationConf]): method __init__ (line 13) | def __init__(self): method is_notification (line 20) | def is_notification( FILE: app/helper/ocr.py class OcrHelper (line 8) | class OcrHelper: method get_captcha_text (line 12) | def get_captcha_text(self, image_url: Optional[str] = None, image_b64:... FILE: app/helper/passkey.py class PassKeyHelper (line 35) | class PassKeyHelper: method get_rp_id (line 41) | def get_rp_id() -> str: method get_rp_name (line 64) | def get_rp_name() -> str: method get_origin (line 71) | def get_origin() -> str: method standardize_credential_id (line 81) | def standardize_credential_id(credential_id: str) -> str: method _base64_encode_urlsafe (line 94) | def _base64_encode_urlsafe(data: bytes) -> str: method _base64_decode_urlsafe (line 104) | def _base64_decode_urlsafe(data: str) -> bytes: method _parse_credential_list (line 114) | def _parse_credential_list(credentials: List[Dict[str, Any]]) -> List[... method _get_user_verification_requirement (line 138) | def _get_user_verification_requirement(user_verification: Optional[str... method _get_verification_params (line 151) | def _get_verification_params( method generate_registration_options (line 167) | def generate_registration_options( method verify_registration_response (line 225) | def verify_registration_response( method generate_authentication_options (line 278) | def generate_authentication_options( method verify_authentication_response (line 317) | def verify_authentication_response( FILE: app/helper/plugin.py class PluginHelper (line 35) | class PluginHelper(metaclass=WeakSingleton): method __init__ (line 45) | def __init__(self): method get_plugins (line 53) | def get_plugins(self, repo_url: str, method get_plugin_package_version (line 83) | def get_plugin_package_version(self, pid: str, repo_url: str, method get_repo_info (line 114) | def get_repo_info(repo_url: str) -> Tuple[Optional[str], Optional[str]]: method get_statistic (line 132) | def get_statistic(self) -> Dict: method install_reg (line 143) | def install_reg(self, pid: str, repo_url: Optional[str] = None) -> bool: method install_report (line 164) | def install_report(self, items: Optional[List[Tuple[str, Optional[str]... method install (line 187) | def install(self, pid: str, repo_url: str, package_version: Optional[s... method __get_file_list (line 260) | def __get_file_list(self, pid: str, user_repo: str, package_version: O... method __download_files (line 294) | def __download_files(self, pid: str, file_list: List[dict], user_repo:... method __download_and_install_requirements (line 348) | def __download_and_install_requirements(self, requirements_file_info: ... method __install_dependencies_if_required (line 377) | def __install_dependencies_if_required(self, pid: str) -> Tuple[bool, ... method __backup_plugin (line 399) | def __backup_plugin(pid: str) -> str: method __restore_plugin (line 420) | def __restore_plugin(pid: str, backup_dir: str): method __remove_old_plugin (line 438) | def __remove_old_plugin(pid: str): method pip_install_with_fallback (line 448) | def pip_install_with_fallback(requirements_file: Path) -> Tuple[bool, ... method __request_with_fallback (line 501) | def __request_with_fallback(url: str, method __get_plugin_meta (line 541) | def __get_plugin_meta(self, pid: str, repo_url: str, method __install_flow_sync (line 554) | def __install_flow_sync(self, pid: str, force_install: bool, method __install_from_release (line 592) | def __install_from_release(self, pid: str, user_repo: str, release_tag... method find_missing_dependencies (line 667) | def find_missing_dependencies(self) -> List[str]: method install_dependencies (line 703) | def install_dependencies(self, dependencies: List[str]) -> Tuple[bool,... method __get_installed_packages (line 730) | def __get_installed_packages(self) -> Dict[str, Version]: method __find_plugin_dependencies (line 759) | def __find_plugin_dependencies(self) -> Dict[str, str]: method __parse_requirements (line 796) | def __parse_requirements(self, requirements_file: Path) -> Dict[str, L... method __merge_dependencies (line 827) | def __merge_dependencies(dependencies: Dict[str, Set[str]]) -> Dict[st... method __standardize_pkg_name (line 854) | def __standardize_pkg_name(name: str) -> str: method async_get_plugin_package_version (line 865) | async def async_get_plugin_package_version(self, pid: str, repo_url: str, method __async_request_with_fallback (line 883) | async def __async_request_with_fallback(url: str, method async_get_plugins (line 924) | async def async_get_plugins(self, repo_url: str, method async_get_statistic (line 955) | async def async_get_statistic(self) -> Dict: method async_install_reg (line 966) | async def async_install_reg(self, pid: str, repo_url: Optional[str] = ... method async_install_report (line 987) | async def async_install_report(self, items: Optional[List[Tuple[str, O... method __async_get_file_list (line 1010) | async def __async_get_file_list(self, pid: str, user_repo: str, packag... method __async_download_files (line 1044) | async def __async_download_files(self, pid: str, file_list: List[dict]... method __async_download_and_install_requirements (line 1099) | async def __async_download_and_install_requirements(self, requirements... method __async_backup_plugin (line 1128) | async def __async_backup_plugin(self, pid: str) -> str: method __async_restore_plugin (line 1149) | async def __async_restore_plugin(self, pid: str, backup_dir: str): method __async_remove_old_plugin (line 1168) | async def __async_remove_old_plugin(pid: str): method _async_copytree (line 1177) | async def _async_copytree(self, src: AsyncPath, dst: AsyncPath): method __async_install_dependencies_if_required (line 1198) | async def __async_install_dependencies_if_required(self, pid: str) -> ... method async_install_dependencies (line 1219) | async def async_install_dependencies(self, dependencies: List[str]) ->... method __async_find_plugin_dependencies (line 1248) | async def __async_find_plugin_dependencies(self) -> Dict[str, str]: method __async_parse_requirements (line 1287) | async def __async_parse_requirements(self, requirements_file: AsyncPat... method async_find_missing_dependencies (line 1317) | async def async_find_missing_dependencies(self) -> List[str]: method async_install (line 1353) | async def async_install(self, pid: str, repo_url: str, package_version... method __async_get_plugin_meta (line 1426) | async def __async_get_plugin_meta(self, pid: str, repo_url: str, method __install_flow_async (line 1439) | async def __install_flow_async(self, pid: str, force_install: bool, method __prepare_content_via_filelist_sync (line 1476) | def __prepare_content_via_filelist_sync(self, pid: str, user_repo: str, method __prepare_content_via_filelist_async (line 1496) | async def __prepare_content_via_filelist_async(self, pid: str, user_re... method __async_install_from_release (line 1516) | async def __async_install_from_release(self, pid: str, user_repo: str,... FILE: app/helper/progress.py class ProgressHelper (line 8) | class ProgressHelper: method __init__ (line 13) | def __init__(self, key: Union[ProgressKey, str]): method __reset (line 19) | def __reset(self): method start (line 30) | def start(self): method end (line 41) | def end(self): method update (line 57) | def update(self, value: Union[float, int] = None, text: Optional[str] ... method get (line 74) | def get(self) -> dict: FILE: app/helper/redis.py function serialize (line 24) | def serialize(value: Any) -> bytes: function deserialize (line 62) | def deserialize(value: bytes) -> Any: class RedisHelper (line 75) | class RedisHelper(ConfigReloadMixin, metaclass=Singleton): method __init__ (line 87) | def __init__(self): method _connect (line 94) | def _connect(self): method on_config_changed (line 116) | def on_config_changed(self): method get_reload_name (line 120) | def get_reload_name(self): method set_memory_limit (line 123) | def set_memory_limit(self, policy: Optional[str] = "allkeys-lru"): method __get_region (line 139) | def __get_region(region: Optional[str] = None): method __make_redis_key (line 145) | def __make_redis_key(self, region: str, key: str) -> str: method __get_original_key (line 154) | def __get_original_key(redis_key: Union[str, bytes]) -> str: method set (line 167) | def set(self, key: str, value: Any, ttl: Optional[int] = None, method exists (line 188) | def exists(self, key: str, region: Optional[str] = "DEFAULT") -> bool: method get (line 204) | def get(self, key: str, region: Optional[str] = "DEFAULT") -> Optional... method delete (line 223) | def delete(self, key: str, region: Optional[str] = "DEFAULT") -> None: method clear (line 237) | def clear(self, region: Optional[str] = None) -> None: method items (line 259) | def items(self, region: Optional[str] = None) -> Generator[Tuple[str, ... method test (line 283) | def test(self) -> bool: method close (line 294) | def close(self) -> None: class AsyncRedisHelper (line 304) | class AsyncRedisHelper(ConfigReloadMixin, metaclass=Singleton): method __init__ (line 317) | def __init__(self): method _connect (line 324) | async def _connect(self): method on_config_changed (line 346) | async def on_config_changed(self): method get_reload_name (line 350) | def get_reload_name(self): method set_memory_limit (line 353) | async def set_memory_limit(self, policy: Optional[str] = "allkeys-lru"): method __get_region (line 369) | def __get_region(region: Optional[str] = "DEFAULT"): method __make_redis_key (line 375) | def __make_redis_key(self, region: str, key: str) -> str: method __get_original_key (line 384) | def __get_original_key(redis_key: Union[str, bytes]) -> str: method set (line 397) | async def set(self, key: str, value: Any, ttl: Optional[int] = None, method exists (line 418) | async def exists(self, key: str, region: Optional[str] = "DEFAULT") ->... method get (line 435) | async def get(self, key: str, region: Optional[str] = "DEFAULT") -> Op... method delete (line 454) | async def delete(self, key: str, region: Optional[str] = "DEFAULT") ->... method clear (line 468) | async def clear(self, region: Optional[str] = None) -> None: method items (line 490) | async def items(self, region: Optional[str] = None) -> AsyncGenerator[... method test (line 514) | async def test(self) -> bool: method close (line 525) | async def close(self) -> None: FILE: app/helper/resource.py class ResourceHelper (line 13) | class ResourceHelper: method __init__ (line 22) | def __init__(self): method proxies (line 26) | def proxies(self): method check (line 29) | def check(self): FILE: app/helper/rss.py class RssHelper (line 16) | class RssHelper: method parse (line 230) | def parse(self, url, proxy: bool = False, method get_rss_link (line 440) | def get_rss_link(self, url: str, cookie: str, ua: str, proxy: bool = F... FILE: app/helper/rule.py class RuleHelper (line 9) | class RuleHelper: method get_rule_groups (line 15) | def get_rule_groups() -> List[FilterRuleGroup]: method get_rule_group (line 24) | def get_rule_group(self, group_name: str) -> Optional[FilterRuleGroup]: method get_rule_group_by_media (line 34) | def get_rule_group_by_media(self, media: MediaInfo = None, group_names... method get_custom_rules (line 52) | def get_custom_rules() -> List[CustomRule]: method get_custom_rule (line 61) | def get_custom_rule(self, rule_id: str) -> Optional[CustomRule]: FILE: app/helper/service.py class ServiceConfigHelper (line 11) | class ServiceConfigHelper: method get_configs (line 17) | def get_configs(config_key: SystemConfigKey, conf_type: Type) -> List: method get_downloader_configs (line 32) | def get_downloader_configs() -> List[DownloaderConf]: method get_mediaserver_configs (line 39) | def get_mediaserver_configs() -> List[MediaServerConf]: method get_notification_configs (line 46) | def get_notification_configs() -> List[NotificationConf]: method get_notification_switches (line 53) | def get_notification_switches() -> List[NotificationSwitchConf]: method get_notification_switch (line 60) | def get_notification_switch(mtype: NotificationType) -> Optional[str]: class ServiceBaseHelper (line 71) | class ServiceBaseHelper(Generic[TConf]): method __init__ (line 76) | def __init__(self, config_key: SystemConfigKey, conf_type: Type[TConf]... method get_configs (line 82) | def get_configs(self, include_disabled: bool = False) -> Dict[str, TCo... method get_config (line 96) | def get_config(self, name: str) -> Optional[TConf]: method iterate_module_instances (line 105) | def iterate_module_instances(self) -> Iterator[ServiceInfo]: method get_services (line 129) | def get_services(self, type_filter: Optional[str] = None, name_filters... method get_service (line 149) | def get_service(self, name: str, type_filter: Optional[str] = None) ->... FILE: app/helper/storage.py class StorageHelper (line 8) | class StorageHelper: method get_storagies (line 14) | def get_storagies() -> List[schemas.StorageConf]: method get_storage (line 23) | def get_storage(self, storage: str) -> Optional[schemas.StorageConf]: method set_storage (line 33) | def set_storage(self, storage: str, conf: dict): method add_storage (line 52) | def add_storage(self, storage: str, name: str, conf: dict): method reset_storage (line 73) | def reset_storage(self, storage: str): FILE: app/helper/subscribe.py class SubscribeHelper (line 15) | class SubscribeHelper(metaclass=WeakSingleton): method __init__ (line 54) | def __init__(self): method _check_subscribe_share_enabled (line 64) | def _check_subscribe_share_enabled() -> Tuple[bool, str]: method _validate_subscribe (line 73) | def _validate_subscribe(subscribe) -> Tuple[bool, str]: method _prepare_subscribe_data (line 82) | def _prepare_subscribe_data(subscribe) -> dict: method _build_share_payload (line 90) | def _build_share_payload(self, share_title: str, share_comment: str, method _handle_response (line 103) | def _handle_response(self, res, clear_cache: bool = True) -> Tuple[boo... method _handle_list_response (line 125) | def _handle_list_response(res) -> List[dict]: method get_statistic (line 134) | def get_statistic(self, stype: str, page: Optional[int] = 1, count: Op... method async_get_statistic (line 165) | async def async_get_statistic(self, stype: str, page: Optional[int] = ... method sub_reg (line 195) | def sub_reg(self, sub: dict) -> bool: method async_sub_reg (line 209) | async def async_sub_reg(self, sub: dict) -> bool: method sub_done (line 223) | def sub_done(self, sub: dict) -> bool: method sub_reg_async (line 237) | def sub_reg_async(self, sub: dict) -> bool: method sub_done_async (line 245) | def sub_done_async(self, sub: dict) -> bool: method sub_report (line 253) | def sub_report(self) -> bool: method sub_share (line 272) | def sub_share(self, subscribe_id: int, method async_sub_share (line 300) | async def async_sub_share(self, subscribe_id: int, method share_delete (line 328) | def share_delete(self, share_id: int) -> Tuple[bool, str]: method async_share_delete (line 343) | async def async_share_delete(self, share_id: int) -> Tuple[bool, str]: method sub_fork (line 358) | def sub_fork(self, share_id: int) -> Tuple[bool, str]: method async_sub_fork (line 373) | async def async_sub_fork(self, share_id: int) -> Tuple[bool, str]: method get_shares (line 389) | def get_shares(self, name: Optional[str] = None, page: Optional[int] =... method async_get_shares (line 420) | async def async_get_shares(self, name: Optional[str] = None, page: Opt... method get_share_statistics (line 451) | def get_share_statistics(self) -> List[dict]: method async_get_share_statistics (line 464) | async def async_get_share_statistics(self) -> List[dict]: method get_user_uuid (line 476) | def get_user_uuid(self) -> str: method get_github_user (line 485) | def get_github_user(self) -> str: method is_admin_user (line 498) | def is_admin_user(self) -> bool: FILE: app/helper/system.py class SystemHelper (line 16) | class SystemHelper(ConfigReloadMixin): method on_config_changed (line 31) | def on_config_changed(self): method get_reload_name (line 34) | def get_reload_name(self): method can_restart (line 38) | def can_restart() -> bool: method _get_container_id (line 48) | def _get_container_id() -> str: method _check_restart_policy (line 74) | def _check_restart_policy() -> bool: method restart (line 102) | def restart() -> Tuple[bool, str]: method _start_graceful_shutdown_monitor (line 131) | def _start_graceful_shutdown_monitor(): method _docker_api_restart (line 150) | def _docker_api_restart() -> Tuple[bool, str]: method set_system_modified (line 166) | def set_system_modified(self): method is_system_reset (line 176) | def is_system_reset(self) -> bool: FILE: app/helper/thread.py class ThreadHelper (line 7) | class ThreadHelper(metaclass=Singleton): method __init__ (line 11) | def __init__(self): method submit (line 14) | def submit(self, func, *args, **kwargs): method shutdown (line 24) | def shutdown(self): FILE: app/helper/torrent.py class TorrentHelper (line 22) | class TorrentHelper: method __init__ (line 27) | def __init__(self): method download_torrent (line 30) | def download_torrent(self, url: str, method get_torrent_info (line 148) | def get_torrent_info(self, torrent_path: Path) -> Tuple[str, List[str]]: method get_fileinfo_from_torrent (line 165) | def get_fileinfo_from_torrent(torrent: Torrent) -> Tuple[str, List[str]]: method get_fileinfo_from_torrent_content (line 195) | def get_fileinfo_from_torrent_content(self, torrent_content: Union[str... method get_url_filename (line 219) | def get_url_filename(req: Any, url: str) -> str: method sort_torrents (line 238) | def sort_torrents(torrent_list: List[Context]) -> List[Context]: method sort_group_torrents (line 295) | def sort_group_torrents(self, torrent_list: List[Context]) -> List[Con... method get_torrent_episodes (line 325) | def get_torrent_episodes(files: list) -> list: method is_invalid (line 343) | def is_invalid(self, url: Optional[str]) -> bool: method add_invalid (line 349) | def add_invalid(self, url: str): method match_torrent (line 357) | def match_torrent(mediainfo: MediaInfo, torrent_meta: MetaBase, torren... method filter_torrent (line 445) | def filter_torrent(torrent_info: TorrentInfo, method match_season_episodes (line 515) | def match_season_episodes(torrent: TorrentInfo, meta: MetaBase, season... FILE: app/helper/twofa.py class TwoFactorAuth (line 11) | class TwoFactorAuth: method __init__ (line 12) | def __init__(self, code_or_secret: str): method __calc (line 21) | def __calc(secret_key: str) -> str: method get_code (line 42) | def get_code(self) -> str: FILE: app/helper/workflow.py class WorkflowHelper (line 14) | class WorkflowHelper(metaclass=WeakSingleton): method __init__ (line 29) | def __init__(self): method _check_workflow_share_enabled (line 33) | def _check_workflow_share_enabled() -> Tuple[bool, str]: method _validate_workflow (line 42) | def _validate_workflow(workflow: Workflow) -> Tuple[bool, str]: method _prepare_workflow_data (line 55) | def _prepare_workflow_data(workflow: Workflow) -> dict: method _build_share_payload (line 66) | def _build_share_payload(self, share_title: str, share_comment: str, method _handle_response (line 79) | def _handle_response(self, res, clear_cache: bool = True) -> Tuple[boo... method _handle_list_response (line 104) | def _handle_list_response(res) -> List[dict]: method workflow_share (line 116) | def workflow_share(self, workflow_id: int, method async_workflow_share (line 145) | async def async_workflow_share(self, workflow_id: int, method share_delete (line 174) | def share_delete(self, share_id: int) -> Tuple[bool, str]: method async_share_delete (line 189) | async def async_share_delete(self, share_id: int) -> Tuple[bool, str]: method workflow_fork (line 204) | def workflow_fork(self, share_id: int) -> Tuple[bool, str]: method async_workflow_fork (line 219) | async def async_workflow_fork(self, share_id: int) -> Tuple[bool, str]: method get_shares (line 237) | def get_shares(self, name: Optional[str] = None, page: Optional[int] =... method async_get_shares (line 253) | async def async_get_shares(self, name: Optional[str] = None, page: Opt... method get_user_uuid (line 269) | def get_user_uuid(self) -> str: FILE: app/log.py class LogConfigModel (line 20) | class LogConfigModel(BaseModel): class LogSettings (line 51) | class LogSettings(BaseSettings, LogConfigModel): method CONFIG_PATH (line 57) | def CONFIG_PATH(self): method LOG_PATH (line 61) | def LOG_PATH(self): method LOG_MAX_FILE_SIZE_BYTES (line 68) | def LOG_MAX_FILE_SIZE_BYTES(self): class CustomFormatter (line 94) | class CustomFormatter(logging.Formatter): method __init__ (line 99) | def __init__(self, fmt=None): method format (line 102) | def format(self, record): class LogEntry (line 108) | class LogEntry: method __init__ (line 113) | def __init__(self, level: str, message: str, file_path: Path, timestam... class NonBlockingFileHandler (line 120) | class NonBlockingFileHandler: method __new__ (line 128) | def __new__(cls): method __init__ (line 135) | def __init__(self): method _get_rotating_handler (line 149) | def _get_rotating_handler(self, file_path: Path) -> RotatingFileHandler: method write_log (line 173) | def write_log(self, level: str, message: str, file_path: Path): method _is_in_event_loop (line 188) | def _is_in_event_loop() -> bool: method _write_non_blocking (line 198) | def _write_non_blocking(self, entry: LogEntry): method _write_sync (line 209) | def _write_sync(entry: LogEntry): method _batch_writer (line 233) | def _batch_writer(self): method _write_batch (line 258) | def _write_batch(self, batch: list): method shutdown (line 294) | def shutdown(self): class LoggerManager (line 308) | class LoggerManager: method get_logger (line 321) | def get_logger(self, name: str) -> logging.Logger: method __get_caller (line 340) | def __get_caller(): method __setup_console_logger (line 393) | def __setup_console_logger(log_file: str): method update_loggers (line 421) | def update_loggers(self): method __update_logger_handlers (line 430) | def __update_logger_handlers(_logger: logging.Logger): method __get_log_level (line 448) | def __get_log_level(): method logger (line 454) | def logger(self, method: str, msg: str, *args, **kwargs): method info (line 506) | def info(self, msg: str, *args, **kwargs): method debug (line 512) | def debug(self, msg: str, *args, **kwargs): method warning (line 518) | def warning(self, msg: str, *args, **kwargs): method warn (line 524) | def warn(self, msg: str, *args, **kwargs): method error (line 530) | def error(self, msg: str, *args, **kwargs): method critical (line 536) | def critical(self, msg: str, *args, **kwargs): method shutdown (line 543) | def shutdown(cls): FILE: app/main.py function start_tray (line 32) | def start_tray(): function signal_handler (line 78) | def signal_handler(signum, frame): FILE: app/modules/__init__.py class _ModuleBase (line 12) | class _ModuleBase(ConfigReloadMixin, metaclass=ABCMeta): method on_config_changed (line 18) | def on_config_changed(self): method get_reload_name (line 21) | def get_reload_name(self): method init_module (line 25) | def init_module(self) -> None: method init_setting (line 32) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method get_name (line 40) | def get_name() -> str: method get_type (line 47) | def get_type() -> ModuleType: method get_subtype (line 54) | def get_subtype() -> Union[DownloaderType, MediaServerType, MessageCha... method get_priority (line 61) | def get_priority() -> int: method stop (line 68) | def stop(self) -> None: method test (line 76) | def test(self) -> Optional[Tuple[bool, str]]: class ServiceBase (line 88) | class ServiceBase(Generic[TService, TConf], metaclass=ABCMeta): method __init__ (line 93) | def __init__(self): method init_service (line 101) | def init_service(self, service_name: str, method get_instances (line 128) | def get_instances(self) -> Dict[str, TService]: method get_instance (line 136) | def get_instance(self, name: Optional[str] = None) -> Optional[TService]: method get_configs (line 151) | def get_configs(self) -> Dict[str, TConf]: method get_config (line 159) | def get_config(self, name: Optional[str] = None) -> Optional[TConf]: method get_default_config_name (line 173) | def get_default_config_name(self) -> Optional[str]: class _MessageBase (line 184) | class _MessageBase(ServiceBase[TService, NotificationConf]): method __init__ (line 190) | def __init__(self): method get_configs (line 197) | def get_configs(self) -> Dict[str, NotificationConf]: method check_message (line 208) | def check_message(self, message: Notification, source: str = None) -> ... class _DownloaderBase (line 232) | class _DownloaderBase(ServiceBase[TService, DownloaderConf]): method __init__ (line 238) | def __init__(self): method init_service (line 245) | def init_service(self, service_name: str, method get_default_config_name (line 258) | def get_default_config_name(self) -> Optional[str]: method get_configs (line 278) | def get_configs(self) -> Dict[str, DownloaderConf]: method reset_default_config_name (line 289) | def reset_default_config_name(self): method normalize_path (line 295) | def normalize_path(self, path: Path, downloader: Optional[str]) -> str: class _MediaServerBase (line 320) | class _MediaServerBase(ServiceBase[TService, MediaServerConf]): method get_configs (line 326) | def get_configs(self) -> Dict[str, MediaServerConf]: FILE: app/modules/bangumi/__init__.py class BangumiModule (line 14) | class BangumiModule(_ModuleBase): method init_module (line 17) | def init_module(self) -> None: method stop (line 20) | def stop(self): method test (line 23) | def test(self) -> Tuple[bool, str]: method init_setting (line 34) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method get_name (line 38) | def get_name() -> str: method get_type (line 42) | def get_type() -> ModuleType: method get_subtype (line 49) | def get_subtype() -> MediaRecognizeType: method get_priority (line 56) | def get_priority() -> int: method recognize_media (line 62) | def recognize_media(self, bangumiid: int = None, method async_recognize_media (line 85) | async def async_recognize_media(self, bangumiid: int = None, method search_medias (line 108) | def search_medias(self, meta: MetaBase) -> Optional[List[MediaInfo]]: method async_search_medias (line 125) | async def async_search_medias(self, meta: MetaBase) -> Optional[List[M... method bangumi_info (line 142) | def bangumi_info(self, bangumiid: int) -> Optional[dict]: method async_bangumi_info (line 153) | async def async_bangumi_info(self, bangumiid: int) -> Optional[dict]: method bangumi_calendar (line 164) | def bangumi_calendar(self) -> Optional[List[MediaInfo]]: method async_bangumi_calendar (line 173) | async def async_bangumi_calendar(self) -> Optional[List[MediaInfo]]: method bangumi_credits (line 182) | def bangumi_credits(self, bangumiid: int) -> List[schemas.MediaPerson]: method async_bangumi_credits (line 192) | async def async_bangumi_credits(self, bangumiid: int) -> List[schemas.... method bangumi_recommend (line 202) | def bangumi_recommend(self, bangumiid: int) -> List[MediaInfo]: method async_bangumi_recommend (line 212) | async def async_bangumi_recommend(self, bangumiid: int) -> List[MediaI... method bangumi_person_detail (line 222) | def bangumi_person_detail(self, person_id: int) -> Optional[schemas.Me... method async_bangumi_person_detail (line 239) | async def async_bangumi_person_detail(self, person_id: int) -> Optiona... method bangumi_person_credits (line 256) | def bangumi_person_credits(self, person_id: int) -> List[MediaInfo]: method async_bangumi_person_credits (line 266) | async def async_bangumi_person_credits(self, person_id: int) -> List[M... method bangumi_discover (line 276) | def bangumi_discover(self, **kwargs) -> Optional[List[MediaInfo]]: method async_bangumi_discover (line 285) | async def async_bangumi_discover(self, **kwargs) -> Optional[List[Medi... method clear_cache (line 294) | def clear_cache(self): FILE: app/modules/bangumi/bangumi.py class BangumiApi (line 11) | class BangumiApi(object): method __init__ (line 29) | def __init__(self): method __invoke (line 35) | def __invoke(self, url, key: Optional[str] = None, **kwargs): method __async_invoke (line 51) | async def __async_invoke(self, url, key: Optional[str] = None, **kwargs): method search (line 66) | def search(self, name): method async_search (line 75) | async def async_search(self, name): method calendar (line 84) | def calendar(self): method async_calendar (line 182) | async def async_calendar(self): method detail (line 193) | def detail(self, bid: int): method async_detail (line 199) | async def async_detail(self, bid: int): method credits (line 205) | def credits(self, bid: int): method async_credits (line 221) | async def async_credits(self, bid: int): method subjects (line 238) | def subjects(self, bid: int): method async_subjects (line 244) | async def async_subjects(self, bid: int): method person_detail (line 250) | def person_detail(self, person_id: int): method async_person_detail (line 256) | async def async_person_detail(self, person_id: int): method person_credits (line 263) | def person_credits(self, person_id: int): method async_person_credits (line 275) | async def async_person_credits(self, person_id: int): method discover (line 287) | def discover(self, **kwargs): method async_discover (line 295) | async def async_discover(self, **kwargs): method clear_cache (line 303) | def clear_cache(self): method close (line 309) | def close(self): FILE: app/modules/discord/__init__.py class DiscordModule (line 17) | class DiscordModule(_ModuleBase, _MessageBase[Discord]): method init_module (line 19) | def init_module(self) -> None: method get_name (line 32) | def get_name() -> str: method get_type (line 36) | def get_type() -> ModuleType: method get_subtype (line 43) | def get_subtype() -> MessageChannel: method get_priority (line 50) | def get_priority() -> int: method stop (line 56) | def stop(self): method test (line 63) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 75) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method message_parser (line 78) | def message_parser(self, source: str, body: Any, form: Any, args: Any)... method post_message (line 137) | def post_message(self, message: Notification, **kwargs) -> None: method post_medias_message (line 180) | def post_medias_message(self, message: Notification, medias: List[Medi... method post_torrents_message (line 197) | def post_torrents_message(self, message: Notification, torrents: List[... method delete_message (line 214) | def delete_message(self, channel: MessageChannel, source: str, FILE: app/modules/discord/discord.py class Discord (line 28) | class Discord: method __init__ (line 33) | def __init__(self, DISCORD_BOT_TOKEN: Optional[str] = None, method _to_int (line 78) | def _to_int(val: Optional[Union[str, int]]) -> Optional[int]: method _register_events (line 84) | def _register_events(self): method _start (line 144) | def _start(self): method stop (line 164) | def stop(self): method get_state (line 178) | def get_state(self) -> bool: method send_msg (line 181) | def send_msg(self, title: str, text: Optional[str] = None, image: Opti... method send_medias_msg (line 214) | def send_medias_msg(self, medias: List[MediaInfo], userid: Optional[st... method send_torrents_msg (line 238) | def send_torrents_msg(self, torrents: List[Context], userid: Optional[... method delete_msg (line 262) | def delete_msg(self, message_id: Union[str, int], chat_id: Optional[st... method _send_message (line 275) | async def _send_message(self, title: str, text: Optional[str], image: ... method _send_list_message (line 306) | async def _send_list_message(self, embeds: List[discord.Embed], method _edit_message (line 329) | async def _edit_message(self, chat_id: Union[str, int], message_id: Un... method _delete_message (line 352) | async def _delete_message(self, message_id: Union[str, int], chat_id: ... method _build_embed (line 366) | def _build_embed(title: str, text: Optional[str], image: Optional[str], method _build_media_embeds (line 463) | def _build_media_embeds(medias: List[MediaInfo], title: str) -> List[d... method _build_torrent_embeds (line 485) | def _build_torrent_embeds(torrents: List[Context], title: str) -> List... method _build_default_buttons (line 512) | def _build_default_buttons(count: int) -> List[List[dict]]: method _build_view (line 527) | def _build_view(buttons: Optional[List[List[dict]]], link: Optional[st... method _resolve_channel (line 550) | async def _resolve_channel(self, userid: Optional[str] = None, chat_id... method _get_dm_channel (line 641) | async def _get_dm_channel(self, userid: str) -> Optional[discord.DMCha... method _update_user_chat_mapping (line 668) | def _update_user_chat_mapping(self, userid: str, chat_id: str) -> None: method _get_user_chat_id (line 679) | def _get_user_chat_id(self, userid: str) -> Optional[str]: method _should_process_message (line 687) | def _should_process_message(self, message: discord.Message) -> bool: method _clean_bot_mention (line 698) | def _clean_bot_mention(self, content: str) -> str: method _post_to_ds (line 706) | async def _post_to_ds(self, payload: Dict[str, Any]) -> None: FILE: app/modules/douban/__init__.py class DoubanModule (line 24) | class DoubanModule(_ModuleBase): method init_module (line 29) | def init_module(self) -> None: method stop (line 34) | def stop(self): method test (line 37) | def test(self) -> Tuple[bool, str]: method init_setting (line 46) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method get_name (line 50) | def get_name() -> str: method get_type (line 54) | def get_type() -> ModuleType: method get_subtype (line 61) | def get_subtype() -> MediaRecognizeType: method get_priority (line 68) | def get_priority() -> int: method _recognize_media_core (line 74) | def _recognize_media_core(self, meta: MetaBase = None, method _async_recognize_media_core (line 175) | async def _async_recognize_media_core(self, meta: MetaBase = None, method recognize_media (line 276) | def recognize_media(self, meta: MetaBase = None, method async_recognize_media (line 299) | async def async_recognize_media(self, meta: MetaBase = None, method douban_info (line 323) | def douban_info(self, doubanid: str, mtype: MediaType = None, raise_ex... method async_douban_info (line 640) | async def async_douban_info(self, doubanid: str, mtype: MediaType = None, method douban_discover (line 695) | def douban_discover(self, mtype: MediaType, sort: str, tags: str, method async_douban_discover (line 723) | async def async_douban_discover(self, mtype: MediaType, sort: str, tag... method movie_showing (line 751) | def movie_showing(self, page: int = 1, count: int = 30) -> List[MediaI... method async_movie_showing (line 761) | async def async_movie_showing(self, page: int = 1, count: int = 30) ->... method tv_weekly_chinese (line 771) | def tv_weekly_chinese(self, page: int = 1, count: int = 30) -> List[Me... method async_tv_weekly_chinese (line 781) | async def async_tv_weekly_chinese(self, page: int = 1, count: int = 30... method tv_weekly_global (line 791) | def tv_weekly_global(self, page: int = 1, count: int = 30) -> List[Med... method async_tv_weekly_global (line 801) | async def async_tv_weekly_global(self, page: int = 1, count: int = 30)... method tv_animation (line 811) | def tv_animation(self, page: int = 1, count: int = 30) -> List[MediaIn... method async_tv_animation (line 821) | async def async_tv_animation(self, page: int = 1, count: int = 30) -> ... method movie_hot (line 831) | def movie_hot(self, page: int = 1, count: int = 30) -> List[MediaInfo]: method async_movie_hot (line 841) | async def async_movie_hot(self, page: int = 1, count: int = 30) -> Lis... method tv_hot (line 851) | def tv_hot(self, page: int = 1, count: int = 30) -> List[MediaInfo]: method async_tv_hot (line 861) | async def async_tv_hot(self, page: int = 1, count: int = 30) -> List[M... method search_medias (line 871) | def search_medias(self, meta: MetaBase) -> Optional[List[MediaInfo]]: method async_search_medias (line 904) | async def async_search_medias(self, meta: MetaBase) -> Optional[List[M... method search_persons (line 937) | def search_persons(self, name: str) -> Optional[List[MediaPerson]]: method async_search_persons (line 957) | async def async_search_persons(self, name: str) -> Optional[List[Media... method _process_imdbid_result (line 978) | def _process_imdbid_result(result: dict, imdbid: str) -> Optional[dict]: method _process_search_results (line 997) | def _process_search_results(result: dict, name: str, mtype: MediaType ... method match_doubaninfo (line 1047) | def match_doubaninfo(self, name: str, imdbid: str = None, method async_match_doubaninfo (line 1074) | async def async_match_doubaninfo(self, name: str, imdbid: str = None, method movie_top250 (line 1099) | def movie_top250(self, page: int = 1, count: int = 30) -> List[MediaIn... method async_movie_top250 (line 1109) | async def async_movie_top250(self, page: int = 1, count: int = 30) -> ... method metadata_nfo (line 1119) | def metadata_nfo(self, mediainfo: MediaInfo, season: int = None, **kwa... method metadata_img (line 1129) | def metadata_img(self, mediainfo: MediaInfo, season: int = None, episo... method _validate_douban_obtain_images_params (line 1141) | def _validate_douban_obtain_images_params(mediainfo: MediaInfo) -> Opt... method _process_douban_images (line 1157) | def _process_douban_images(mediainfo: MediaInfo, info: dict) -> MediaI... method obtain_images (line 1174) | def obtain_images(self, mediainfo: MediaInfo) -> Optional[MediaInfo]: method async_obtain_images (line 1194) | async def async_obtain_images(self, mediainfo: MediaInfo) -> Optional[... method clear_cache (line 1214) | def clear_cache(self): method douban_movie_credits (line 1223) | def douban_movie_credits(self, doubanid: str) -> List[schemas.MediaPer... method douban_tv_credits (line 1231) | def douban_tv_credits(self, doubanid: str) -> List[schemas.MediaPerson]: method douban_movie_recommend (line 1239) | def douban_movie_recommend(self, doubanid: str) -> List[MediaInfo]: method douban_tv_recommend (line 1249) | def douban_tv_recommend(self, doubanid: str) -> List[MediaInfo]: method douban_person_detail (line 1259) | def douban_person_detail(self, person_id: int) -> schemas.MediaPerson: method douban_person_credits (line 1282) | def douban_person_credits(self, person_id: int, page: int = 1) -> List... method _process_celebrity_data (line 1305) | def _process_celebrity_data(result: dict) -> List[schemas.MediaPerson]: method async_douban_movie_credits (line 1321) | async def async_douban_movie_credits(self, doubanid: str) -> List[sche... method async_douban_tv_credits (line 1329) | async def async_douban_tv_credits(self, doubanid: str) -> List[schemas... method async_douban_movie_recommend (line 1337) | async def async_douban_movie_recommend(self, doubanid: str) -> List[Me... method async_douban_tv_recommend (line 1347) | async def async_douban_tv_recommend(self, doubanid: str) -> List[Media... method async_douban_person_detail (line 1357) | async def async_douban_person_detail(self, person_id: int) -> schemas.... method async_douban_person_credits (line 1380) | async def async_douban_person_credits(self, person_id: int, page: int ... FILE: app/modules/douban/apiv2.py class DoubanApi (line 19) | class DoubanApi(metaclass=WeakSingleton): method __init__ (line 156) | def __init__(self): method __sign (line 160) | def __sign(cls, url: str, ts: str, method='GET') -> str: method __invoke_recommend (line 174) | def __invoke_recommend(self, url: str, **kwargs) -> dict: method __async_invoke_recommend (line 180) | async def __async_invoke_recommend(self, url: str, **kwargs) -> dict: method __invoke_search (line 186) | def __invoke_search(self, url: str, **kwargs) -> dict: method __async_invoke_search (line 192) | async def __async_invoke_search(self, url: str, **kwargs) -> dict: method _prepare_get_request (line 198) | def _prepare_get_request(self, url: str, **kwargs) -> tuple[str, dict]: method _handle_response (line 221) | def _handle_response(resp: Union[requests.Response, httpx.Response]) -... method __invoke (line 228) | def __invoke(self, url: str, **kwargs) -> dict: method __async_invoke (line 240) | async def __async_invoke(self, url: str, **kwargs) -> dict: method _prepare_post_request (line 250) | def _prepare_post_request(self, url: str, **kwargs) -> tuple[str, dict]: method __post (line 263) | def __post(self, url: str, **kwargs) -> dict: method __async_post (line 285) | async def __async_post(self, url: str, **kwargs) -> dict: method imdbid (line 295) | def imdbid(self, imdbid: str, method async_imdbid (line 302) | async def async_imdbid(self, imdbid: str, method search (line 309) | def search(self, keyword: str, start: Optional[int] = 0, count: Option... method async_search (line 317) | async def async_search(self, keyword: str, start: Optional[int] = 0, c... method movie_search (line 325) | def movie_search(self, keyword: str, start: Optional[int] = 0, count: ... method async_movie_search (line 333) | async def async_movie_search(self, keyword: str, start: Optional[int] ... method tv_search (line 341) | def tv_search(self, keyword: str, start: Optional[int] = 0, count: Opt... method async_tv_search (line 349) | async def async_tv_search(self, keyword: str, start: Optional[int] = 0... method book_search (line 357) | def book_search(self, keyword: str, start: Optional[int] = 0, count: O... method async_book_search (line 365) | async def async_book_search(self, keyword: str, start: Optional[int] =... method group_search (line 373) | def group_search(self, keyword: str, start: Optional[int] = 0, count: ... method async_group_search (line 381) | async def async_group_search(self, keyword: str, start: Optional[int] ... method person_search (line 389) | def person_search(self, keyword: str, start: Optional[int] = 0, count:... method async_person_search (line 397) | async def async_person_search(self, keyword: str, start: Optional[int]... method movie_showing (line 405) | def movie_showing(self, start: Optional[int] = 0, count: Optional[int]... method async_movie_showing (line 413) | async def async_movie_showing(self, start: Optional[int] = 0, count: O... method movie_soon (line 421) | def movie_soon(self, start: Optional[int] = 0, count: Optional[int] = 20, method async_movie_soon (line 429) | async def async_movie_soon(self, start: Optional[int] = 0, count: Opti... method movie_hot_gaia (line 437) | def movie_hot_gaia(self, start: Optional[int] = 0, count: Optional[int... method async_movie_hot_gaia (line 445) | async def async_movie_hot_gaia(self, start: Optional[int] = 0, count: ... method tv_hot (line 453) | def tv_hot(self, start: Optional[int] = 0, count: Optional[int] = 20, method async_tv_hot (line 461) | async def async_tv_hot(self, start: Optional[int] = 0, count: Optional... method tv_animation (line 469) | def tv_animation(self, start: Optional[int] = 0, count: Optional[int] ... method async_tv_animation (line 477) | async def async_tv_animation(self, start: Optional[int] = 0, count: Op... method tv_variety_show (line 485) | def tv_variety_show(self, start: Optional[int] = 0, count: Optional[in... method async_tv_variety_show (line 493) | async def async_tv_variety_show(self, start: Optional[int] = 0, count:... method tv_rank_list (line 501) | def tv_rank_list(self, start: Optional[int] = 0, count: Optional[int] ... method async_tv_rank_list (line 509) | async def async_tv_rank_list(self, start: Optional[int] = 0, count: Op... method show_hot (line 517) | def show_hot(self, start: Optional[int] = 0, count: Optional[int] = 20, method async_show_hot (line 525) | async def async_show_hot(self, start: Optional[int] = 0, count: Option... method movie_detail (line 533) | def movie_detail(self, subject_id: str): method async_movie_detail (line 539) | async def async_movie_detail(self, subject_id: str): method movie_celebrities (line 545) | def movie_celebrities(self, subject_id: str): method async_movie_celebrities (line 551) | async def async_movie_celebrities(self, subject_id: str): method tv_detail (line 557) | def tv_detail(self, subject_id: str): method async_tv_detail (line 563) | async def async_tv_detail(self, subject_id: str): method tv_celebrities (line 569) | def tv_celebrities(self, subject_id: str): method async_tv_celebrities (line 575) | async def async_tv_celebrities(self, subject_id: str): method book_detail (line 581) | def book_detail(self, subject_id: str): method async_book_detail (line 587) | async def async_book_detail(self, subject_id: str): method movie_top250 (line 593) | def movie_top250(self, start: Optional[int] = 0, count: Optional[int] ... method async_movie_top250 (line 601) | async def async_movie_top250(self, start: Optional[int] = 0, count: Op... method movie_recommend (line 609) | def movie_recommend(self, tags='', sort='R', start: Optional[int] = 0,... method async_movie_recommend (line 617) | async def async_movie_recommend(self, tags='', sort='R', start: Option... method tv_recommend (line 625) | def tv_recommend(self, tags='', sort='R', start: Optional[int] = 0, co... method async_tv_recommend (line 633) | async def async_tv_recommend(self, tags='', sort='R', start: Optional[... method tv_chinese_best_weekly (line 641) | def tv_chinese_best_weekly(self, start: Optional[int] = 0, count: Opti... method async_tv_chinese_best_weekly (line 649) | async def async_tv_chinese_best_weekly(self, start: Optional[int] = 0,... method tv_global_best_weekly (line 657) | def tv_global_best_weekly(self, start: Optional[int] = 0, count: Optio... method async_tv_global_best_weekly (line 665) | async def async_tv_global_best_weekly(self, start: Optional[int] = 0, ... method doulist_detail (line 673) | def doulist_detail(self, subject_id: str): method async_doulist_detail (line 680) | async def async_doulist_detail(self, subject_id: str): method doulist_items (line 687) | def doulist_items(self, subject_id: str, start: Optional[int] = 0, cou... method async_doulist_items (line 699) | async def async_doulist_items(self, subject_id: str, start: Optional[i... method movie_recommendations (line 711) | def movie_recommendations(self, subject_id: str, start: Optional[int] ... method async_movie_recommendations (line 723) | async def async_movie_recommendations(self, subject_id: str, start: Op... method tv_recommendations (line 735) | def tv_recommendations(self, subject_id: str, start: Optional[int] = 0... method async_tv_recommendations (line 747) | async def async_tv_recommendations(self, subject_id: str, start: Optio... method movie_photos (line 759) | def movie_photos(self, subject_id: str, start: Optional[int] = 0, coun... method async_movie_photos (line 771) | async def async_movie_photos(self, subject_id: str, start: Optional[in... method tv_photos (line 783) | def tv_photos(self, subject_id: str, start: Optional[int] = 0, count: ... method async_tv_photos (line 795) | async def async_tv_photos(self, subject_id: str, start: Optional[int] ... method person_detail (line 807) | def person_detail(self, subject_id: int): method async_person_detail (line 815) | async def async_person_detail(self, subject_id: int): method person_work (line 823) | def person_work(self, subject_id: int, start: Optional[int] = 0, count... method async_person_work (line 841) | async def async_person_work(self, subject_id: int, start: Optional[int... method clear_cache (line 859) | def clear_cache(self): method close (line 866) | def close(self): FILE: app/modules/douban/douban_cache.py class DoubanCache (line 18) | class DoubanCache(metaclass=WeakSingleton): method __init__ (line 31) | def __init__(self): method clear (line 43) | def clear(self): method __get_key (line 51) | def __get_key(meta: MetaBase) -> str: method get (line 58) | def get(self, meta: MetaBase): method delete (line 66) | def delete(self, key: str) -> dict: method modify (line 79) | def modify(self, key: str, title: str) -> dict: method __load (line 95) | def __load(path: Path) -> dict: method update (line 108) | def update(self, meta: MetaBase, info: dict) -> None: method save (line 151) | def save(self, force: Optional[bool] = False) -> None: method __del__ (line 171) | def __del__(self): FILE: app/modules/douban/scraper.py class DoubanScraper (line 10) | class DoubanScraper: method get_metadata_nfo (line 14) | def get_metadata_nfo(self, mediainfo: MediaInfo, season: Optional[int]... method get_metadata_img (line 36) | def get_metadata_img(mediainfo: MediaInfo, season: Optional[int] = Non... method __gen_common_nfo (line 57) | def __gen_common_nfo(mediainfo: MediaInfo, doc: minidom.Document, root... method __gen_movie_nfo_file (line 79) | def __gen_movie_nfo_file(self, mediainfo: MediaInfo) -> minidom.Document: method __gen_tv_nfo_file (line 98) | def __gen_tv_nfo_file(self, mediainfo: MediaInfo) -> minidom.Document: method __gen_tv_season_nfo_file (line 120) | def __gen_tv_season_nfo_file(mediainfo: MediaInfo, FILE: app/modules/emby/__init__.py class EmbyModule (line 12) | class EmbyModule(_ModuleBase, _MediaServerBase[Emby]): method init_module (line 14) | def init_module(self) -> None: method get_name (line 22) | def get_name() -> str: method get_type (line 26) | def get_type() -> ModuleType: method get_subtype (line 33) | def get_subtype() -> MediaServerType: method get_priority (line 40) | def get_priority() -> int: method stop (line 46) | def stop(self): method test (line 49) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 62) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method scheduler_job (line 65) | def scheduler_job(self) -> None: method user_authenticate (line 75) | def user_authenticate(self, credentials: schemas.AuthCredentials, serv... method webhook_parser (line 113) | def webhook_parser(self, body: Any, form: Any, args: Any) -> Optional[... method media_exists (line 138) | def media_exists(self, mediainfo: MediaInfo, itemid: Optional[str] = N... method media_statistic (line 198) | def media_statistic(self, server: Optional[str] = None) -> Optional[Li... method mediaserver_librarys (line 218) | def mediaserver_librarys(self, server: str, method mediaserver_items (line 229) | def mediaserver_items(self, server: str, library_id: Union[str, int], ... method mediaserver_iteminfo (line 246) | def mediaserver_iteminfo(self, server: str, item_id: str) -> Optional[... method mediaserver_tv_episodes (line 255) | def mediaserver_tv_episodes(self, server: str, method mediaserver_playing (line 271) | def mediaserver_playing(self, server: str, count: Optional[int] = 20, method mediaserver_play_url (line 281) | def mediaserver_play_url(self, server: str, item_id: Union[str, int]) ... method mediaserver_latest (line 290) | def mediaserver_latest(self, server: Optional[str] = None, count: Opti... method mediaserver_latest_images (line 300) | def mediaserver_latest_images(self, FILE: app/modules/emby/emby.py class Emby (line 19) | class Emby: method __init__ (line 27) | def __init__(self, host: Optional[str] = None, apikey: Optional[str] =... method is_inactive (line 45) | def is_inactive(self) -> bool: method reconnect (line 53) | def reconnect(self): method get_emby_folders (line 60) | def get_emby_folders(self) -> List[dict]: method get_emby_virtual_folders (line 81) | def get_emby_virtual_folders(self) -> List[dict]: method __get_emby_librarys (line 121) | def __get_emby_librarys(self, username: Optional[str] = None) -> List[... method get_librarys (line 144) | def get_librarys(self, username: Optional[str] = None, hidden: Optiona... method get_user (line 178) | def get_user(self, user_name: Optional[str] = None) -> Optional[Union[... method authenticate (line 207) | def authenticate(self, username: str, password: str) -> Optional[str]: method get_server_id (line 244) | def get_server_id(self) -> Optional[str]: method get_user_count (line 265) | def get_user_count(self) -> int: method get_medias_count (line 286) | def get_medias_count(self) -> schemas.Statistic: method __get_emby_series_id_by_name (line 313) | def __get_emby_series_id_by_name(self, name: str, year: str) -> Option... method get_movies (line 347) | def get_movies(self, method get_tv_episodes (line 392) | def get_tv_episodes(self, method get_remote_image_by_id (line 457) | def get_remote_image_by_id(self, item_id: str, image_type: str) -> Opt... method generate_external_image_link (line 485) | def generate_external_image_link(self, item_id: str, image_type: str) ... method __refresh_emby_library_by_id (line 509) | def __refresh_emby_library_by_id(self, item_id: str) -> bool: method refresh_root_library (line 531) | def refresh_root_library(self) -> bool: method refresh_library_by_items (line 552) | def refresh_library_by_items(self, items: List[schemas.RefreshMediaIte... method __get_emby_library_id_by_item (line 575) | def __get_emby_library_id_by_item(self, item: schemas.RefreshMediaItem... method __format_item_info (line 613) | def __format_item_info(item) -> Optional[schemas.MediaServerItem]: method get_iteminfo (line 655) | def get_iteminfo(self, itemid: str) -> Optional[schemas.MediaServerItem]: method get_items (line 676) | def get_items(self, parent: Union[str, int], start_index: Optional[int... method get_webhook_message (line 717) | def get_webhook_message(self, form: any, args: dict) -> Optional[schem... method get_data (line 1043) | def get_data(self, url: str) -> Optional[Response]: method post_data (line 1059) | def post_data(self, url: str, data: Optional[str] = None, headers: dic... method get_play_url (line 1079) | def get_play_url(self, item_id: str) -> str: method get_backdrop_url (line 1087) | def get_backdrop_url(self, item_id: str, image_tag: str, remote: Optio... method __get_local_image_by_id (line 1105) | def __get_local_image_by_id(self, item_id: str) -> str: method get_resume (line 1116) | def get_resume(self, num: Optional[int] = 12, username: Optional[str] ... method get_latest (line 1186) | def get_latest(self, num: Optional[int] = 20, username: Optional[str] ... method get_user_library_folders (line 1240) | def get_user_library_folders(self): FILE: app/modules/fanart/__init__.py class FanartModule (line 12) | class FanartModule(_ModuleBase): method init_module (line 313) | def init_module(self) -> None: method stop (line 316) | def stop(self): method test (line 319) | def test(self) -> Tuple[bool, str]: method init_setting (line 330) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method get_name (line 334) | def get_name() -> str: method get_type (line 338) | def get_type() -> ModuleType: method get_subtype (line 345) | def get_subtype() -> OtherModulesType: method get_priority (line 352) | def get_priority() -> int: method obtain_images (line 358) | def obtain_images(self, mediainfo: MediaInfo) -> Optional[MediaInfo]: method __name (line 433) | def __name(fanart_name: str) -> str: method __request_fanart (line 444) | def __request_fanart(cls, media_type: MediaType, queryid: Union[str, i... method clear_cache (line 460) | def clear_cache(self): FILE: app/modules/filemanager/__init__.py class FileManagerModule (line 21) | class FileManagerModule(_ModuleBase): method __init__ (line 29) | def __init__(self): method init_module (line 34) | def init_module(self) -> None: method get_name (line 42) | def get_name() -> str: method get_type (line 46) | def get_type() -> ModuleType: method get_subtype (line 53) | def get_subtype() -> OtherModulesType: method get_priority (line 60) | def get_priority() -> int: method stop (line 66) | def stop(self): method test (line 69) | def test(self) -> Tuple[bool, str]: method __get_storage_oper (line 107) | def __get_storage_oper(self, _storage: str, _func: Optional[str] = Non... method init_setting (line 118) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method support_transtype (line 121) | def support_transtype(self, storage: str) -> Optional[dict]: method recommend_name (line 134) | def recommend_name(meta: MetaBase, mediainfo: MediaInfo) -> Optional[s... method save_config (line 170) | def save_config(self, storage: str, conf: Dict) -> None: method reset_config (line 180) | def reset_config(self, storage: str) -> None: method generate_qrcode (line 190) | def generate_qrcode(self, storage: str) -> Optional[Tuple[dict, str]]: method generate_auth_url (line 200) | def generate_auth_url(self, storage: str) -> Optional[Tuple[dict, str]]: method check_login (line 210) | def check_login(self, storage: str, **kwargs) -> Optional[Dict[str, st... method list_files (line 220) | def list_files(self, fileitem: FileItem, recursion: Optional[bool] = F... method any_files (line 255) | def any_files(self, fileitem: FileItem, extensions: list = None) -> Op... method create_folder (line 287) | def create_folder(self, fileitem: FileItem, name: str) -> Optional[Fil... method delete_file (line 302) | def delete_file(self, fileitem: FileItem) -> Optional[bool]: method rename_file (line 314) | def rename_file(self, fileitem: FileItem, name: str) -> Optional[bool]: method download_file (line 326) | def download_file(self, fileitem: FileItem, path: Path = None) -> Opti... method upload_file (line 338) | def upload_file(self, fileitem: FileItem, path: Path, new_name: Option... method get_file_item (line 350) | def get_file_item(self, storage: str, path: Path) -> Optional[FileItem]: method get_parent_item (line 362) | def get_parent_item(self, fileitem: FileItem) -> Optional[FileItem]: method snapshot_storage (line 374) | def snapshot_storage(self, storage: str, path: Path, method storage_usage (line 391) | def storage_usage(self, storage: str) -> Optional[StorageUsage]: method transfer (line 403) | def transfer(self, fileitem: FileItem, meta: MetaBase, mediainfo: Medi... method media_files (line 528) | def media_files(self, mediainfo: MediaInfo) -> List[FileItem]: method media_exists (line 591) | def media_exists(self, mediainfo: MediaInfo, **kwargs) -> Optional[Exi... FILE: app/modules/filemanager/storages/__init__.py function transfer_process (line 14) | def transfer_process(path: str) -> Callable[[int | float], None]: class StorageBase (line 39) | class StorageBase(metaclass=ABCMeta): method __init__ (line 47) | def __init__(self): method init_storage (line 51) | def init_storage(self): method generate_qrcode (line 57) | def generate_qrcode(self, *args, **kwargs) -> Optional[Tuple[dict, str]]: method generate_auth_url (line 60) | def generate_auth_url(self, *args, **kwargs) -> Optional[Tuple[dict, s... method check_login (line 66) | def check_login(self, *args, **kwargs) -> Optional[Dict[str, str]]: method get_config (line 69) | def get_config(self) -> Optional[schemas.StorageConf]: method get_conf (line 75) | def get_conf(self) -> dict: method set_config (line 82) | def set_config(self, conf: dict): method support_transtype (line 89) | def support_transtype(self) -> dict: method is_support_transtype (line 95) | def is_support_transtype(self, transtype: str) -> bool: method reset_config (line 101) | def reset_config(self): method check (line 109) | def check(self) -> bool: method list (line 116) | def list(self, fileitem: schemas.FileItem) -> List[schemas.FileItem]: method create_folder (line 123) | def create_folder(self, fileitem: schemas.FileItem, name: str) -> Opti... method get_folder (line 132) | def get_folder(self, path: Path) -> Optional[schemas.FileItem]: method get_item (line 139) | def get_item(self, path: Path) -> Optional[schemas.FileItem]: method get_parent (line 145) | def get_parent(self, fileitem: schemas.FileItem) -> Optional[schemas.F... method delete (line 152) | def delete(self, fileitem: schemas.FileItem) -> bool: method rename (line 159) | def rename(self, fileitem: schemas.FileItem, name: str) -> bool: method download (line 166) | def download(self, fileitem: schemas.FileItem, path: Path = None) -> P... method upload (line 175) | def upload(self, fileitem: schemas.FileItem, path: Path, method detail (line 186) | def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileI... method copy (line 193) | def copy(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method move (line 203) | def move(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method link (line 213) | def link(self, fileitem: schemas.FileItem, target_file: Path) -> bool: method softlink (line 220) | def softlink(self, fileitem: schemas.FileItem, target_file: Path) -> b... method usage (line 227) | def usage(self) -> Optional[schemas.StorageUsage]: method snapshot (line 233) | def snapshot(self, path: Path, last_snapshot_time: float = None, max_d... FILE: app/modules/filemanager/storages/alipan.py class NoCheckInException (line 24) | class NoCheckInException(Exception): class SessionInvalidException (line 28) | class SessionInvalidException(Exception): class AliPan (line 32) | class AliPan(StorageBase, metaclass=WeakSingleton): method __init__ (line 52) | def __init__(self): method _init_session (line 58) | def _init_session(self): method _check_session (line 64) | def _check_session(self): method _default_drive_id (line 72) | def _default_drive_id(self) -> str: method access_token (line 87) | def access_token(self) -> Optional[str]: method generate_qrcode (line 105) | def generate_qrcode(self) -> Tuple[dict, str]: method check_login (line 137) | def check_login(self) -> Optional[Tuple[dict, str]]: method __get_access_token (line 171) | def __get_access_token(self) -> dict: method __refresh_access_token (line 195) | def __refresh_access_token(self, refresh_token: str) -> Optional[dict]: method __get_drive_id (line 221) | def __get_drive_id(self): method _request_api (line 249) | def _request_api( method __get_fileitem (line 289) | def __get_fileitem(self, fileinfo: dict, parent: str = "/") -> schemas... method _calc_sha1 (line 327) | def _calc_sha1(filepath: Path, size: Optional[int] = None) -> str: method init_storage (line 342) | def init_storage(self): method list (line 345) | def list(self, fileitem: schemas.FileItem) -> List[schemas.FileItem]: method _delay_get_item (line 387) | def _delay_get_item(self, path: Path) -> Optional[schemas.FileItem]: method create_folder (line 398) | def create_folder( method _calculate_pre_hash (line 424) | def _calculate_pre_hash(file_path: Path): method _calculate_proof_code (line 434) | def _calculate_proof_code(self, file_path: Path): method _calculate_content_hash (line 469) | def _calculate_content_hash(file_path: Path): method _create_file (line 482) | def _create_file( method _refresh_upload_urls (line 535) | def _refresh_upload_urls( method _upload_part (line 557) | def _upload_part(upload_url: str, data: bytes): method _list_uploaded_parts (line 563) | def _list_uploaded_parts(self, drive_id: str, file_id: str, upload_id:... method _complete_upload (line 577) | def _complete_upload(self, drive_id: str, file_id: str, upload_id: str): method upload (line 587) | def upload( method download (line 722) | def download(self, fileitem: schemas.FileItem, path: Path = None) -> O... method check (line 797) | def check(self) -> bool: method delete (line 800) | def delete(self, fileitem: schemas.FileItem) -> bool: method rename (line 814) | def rename(self, fileitem: schemas.FileItem, name: str) -> bool: method get_item (line 834) | def get_item(self, path: Path, drive_id: str = None) -> Optional[schem... method get_folder (line 858) | def get_folder(self, path: Path) -> Optional[schemas.FileItem]: method detail (line 896) | def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileI... method copy (line 902) | def copy(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method move (line 934) | def move(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method link (line 964) | def link(self, fileitem: schemas.FileItem, target_file: Path) -> bool: method softlink (line 967) | def softlink(self, fileitem: schemas.FileItem, target_file: Path) -> b... method usage (line 970) | def usage(self) -> Optional[schemas.StorageUsage]: FILE: app/modules/filemanager/storages/alist.py class Alist (line 19) | class Alist(StorageBase, metaclass=WeakSingleton): method __init__ (line 38) | def __init__(self): method init_storage (line 41) | def init_storage(self): method _delay_get_item (line 47) | def _delay_get_item( method __get_base_url (line 65) | def __get_base_url(self) -> str: method __get_api_url (line 74) | def __get_api_url(self, path: str) -> str: method __get_valuable_toke (line 84) | def __get_valuable_toke(self) -> str: method __generate_token (line 93) | def __generate_token(self) -> str: method __get_header_with_token (line 145) | def __get_header_with_token(self) -> dict: method check (line 151) | def check(self) -> bool: method list (line 157) | def list( method create_folder (line 260) | def create_folder( method get_folder (line 303) | def get_folder(self, path: Path) -> Optional[schemas.FileItem]: method get_item (line 326) | def get_item( method get_parent (line 412) | def get_parent(self, fileitem: schemas.FileItem) -> Optional[schemas.F... method __is_empty_dir (line 421) | def __is_empty_dir(self, fileitem: schemas.FileItem) -> bool: method delete (line 434) | def delete(self, fileitem: schemas.FileItem) -> bool: method rename (line 492) | def rename(self, fileitem: schemas.FileItem, name: str) -> bool: method download (line 539) | def download( method upload (line 632) | def upload( method detail (line 726) | def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileI... method copy (line 732) | def copy(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method move (line 787) | def move(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method link (line 840) | def link(self, fileitem: schemas.FileItem, target_file: Path) -> bool: method softlink (line 846) | def softlink(self, fileitem: schemas.FileItem, target_file: Path) -> b... method usage (line 852) | def usage(self) -> Optional[schemas.StorageUsage]: method __parse_timestamp (line 859) | def __parse_timestamp(time_str: str) -> float: FILE: app/modules/filemanager/storages/local.py class LocalStorage (line 14) | class LocalStorage(StorageBase): method init_storage (line 32) | def init_storage(self): method check (line 38) | def check(self) -> bool: method __get_fileitem (line 44) | def __get_fileitem(self, path: Path) -> schemas.FileItem: method __get_diritem (line 59) | def __get_diritem(self, path: Path) -> schemas.FileItem: method list (line 72) | def list(self, fileitem: schemas.FileItem) -> List[schemas.FileItem]: method create_folder (line 119) | def create_folder(self, fileitem: schemas.FileItem, name: str) -> Opti... method get_folder (line 132) | def get_folder(self, path: Path) -> Optional[schemas.FileItem]: method get_item (line 140) | def get_item(self, path: Path) -> Optional[schemas.FileItem]: method detail (line 150) | def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileI... method delete (line 159) | def delete(self, fileitem: schemas.FileItem) -> bool: method rename (line 178) | def rename(self, fileitem: schemas.FileItem, name: str) -> bool: method download (line 192) | def download(self, fileitem: schemas.FileItem, path: Path = None) -> O... method _copy_with_progress (line 198) | def _copy_with_progress(self, src: Path, dest: Path): method upload (line 229) | def upload( method __should_show_progress (line 250) | def __should_show_progress(src: Path, dest: Path): method copy (line 260) | def copy( method move (line 285) | def move( method link (line 315) | def link(self, fileitem: schemas.FileItem, target_file: Path) -> bool: method softlink (line 326) | def softlink(self, fileitem: schemas.FileItem, target_file: Path) -> b... method usage (line 337) | def usage(self) -> Optional[schemas.StorageUsage]: FILE: app/modules/filemanager/storages/rclone.py class Rclone (line 15) | class Rclone(StorageBase): method init_storage (line 31) | def init_storage(self): method set_config (line 37) | def set_config(self, conf: dict): method __get_hidden_shell (line 52) | def __get_hidden_shell(): method __parse_rclone_progress (line 62) | def __parse_rclone_progress(line: str) -> Optional[float]: method __get_rcloneitem (line 96) | def __get_rcloneitem(self, item: dict, parent: Optional[str] = "/") ->... method check (line 123) | def check(self) -> bool: method list (line 138) | def list(self, fileitem: schemas.FileItem) -> List[schemas.FileItem]: method create_folder (line 160) | def create_folder(self, fileitem: schemas.FileItem, name: str) -> Opti... method get_folder (line 180) | def get_folder(self, path: Path) -> Optional[schemas.FileItem]: method get_item (line 214) | def get_item(self, path: Path) -> Optional[schemas.FileItem]: method delete (line 237) | def delete(self, fileitem: schemas.FileItem) -> bool: method rename (line 255) | def rename(self, fileitem: schemas.FileItem, name: str) -> bool: method download (line 274) | def download(self, fileitem: schemas.FileItem, path: Path = None) -> O... method upload (line 329) | def upload(self, fileitem: schemas.FileItem, path: Path, method detail (line 386) | def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileI... method move (line 406) | def move(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method copy (line 461) | def copy(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method link (line 516) | def link(self, fileitem: schemas.FileItem, target_file: Path) -> bool: method softlink (line 519) | def softlink(self, fileitem: schemas.FileItem, target_file: Path) -> b... method usage (line 522) | def usage(self) -> Optional[schemas.StorageUsage]: FILE: app/modules/filemanager/storages/smb.py class SMBConnectionError (line 25) | class SMBConnectionError(Exception): class SMB (line 33) | class SMB(StorageBase, metaclass=WeakSingleton): method __init__ (line 51) | def __init__(self): method _init_connection (line 61) | def _init_connection(self): method _test_connection (line 121) | def _test_connection(self): method _is_anonymous_access (line 137) | def _is_anonymous_access(self) -> bool: method _check_connection (line 143) | def _check_connection(self): method _normalize_path (line 150) | def _normalize_path(self, path: Union[str, Path]) -> str: method _create_fileitem (line 170) | def _create_fileitem( method init_storage (line 226) | def init_storage(self): method check (line 234) | def check(self) -> bool: method list (line 249) | def list(self, fileitem: schemas.FileItem) -> List[schemas.FileItem]: method create_folder (line 294) | def create_folder( method get_folder (line 322) | def get_folder(self, path: Path) -> Optional[schemas.FileItem]: method get_item (line 349) | def get_item(self, path: Path) -> Optional[schemas.FileItem]: method detail (line 382) | def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileI... method delete (line 388) | def delete(self, fileitem: schemas.FileItem) -> bool: method _recursive_delete (line 427) | def _recursive_delete(self, smb_path: str): method rename (line 490) | def rename(self, fileitem: schemas.FileItem, name: str) -> bool: method download (line 510) | def download(self, fileitem: schemas.FileItem, path: Path = None) -> O... method upload (line 559) | def upload( method copy (line 608) | def copy(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method move (line 635) | def move(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method link (line 654) | def link(self, fileitem: schemas.FileItem, target_file: Path) -> bool: method softlink (line 687) | def softlink(self, fileitem: schemas.FileItem, target_file: Path) -> b... method usage (line 690) | def usage(self) -> Optional[schemas.StorageUsage]: method __del__ (line 706) | def __del__(self): FILE: app/modules/filemanager/storages/u115.py class NoCheckInException (line 29) | class NoCheckInException(Exception): class U115Pan (line 33) | class U115Pan(StorageBase, metaclass=WeakSingleton): method __init__ (line 54) | def __init__(self): method _init_session (line 67) | def _init_session(self): method _check_session (line 79) | def _check_session(self): method access_token (line 87) | def access_token(self) -> Optional[str]: method generate_auth_url (line 109) | def generate_auth_url(self) -> Tuple[dict, str]: method generate_qrcode (line 136) | def generate_qrcode(self) -> Tuple[dict, str]: method check_login (line 170) | def check_login(self) -> Optional[Tuple[dict, str]]: method __check_oauth_login (line 203) | def __check_oauth_login(self) -> Tuple[dict, str]: method __get_access_token (line 244) | def __get_access_token(self) -> dict: method __refresh_access_token (line 264) | def __refresh_access_token(self, refresh_token: str) -> Optional[dict]: method _request_api (line 285) | def _request_api( method _calc_sha1 (line 398) | def _calc_sha1(filepath: Path, size: Optional[int] = None) -> str: method init_storage (line 413) | def init_storage(self): method list (line 416) | def list(self, fileitem: schemas.FileItem) -> List[schemas.FileItem]: method create_folder (line 483) | def create_folder( method upload (line 516) | def upload( method download (line 745) | def download(self, fileitem: schemas.FileItem, path: Path = None) -> O... method check (line 810) | def check(self) -> bool: method delete (line 813) | def delete(self, fileitem: schemas.FileItem) -> bool: method rename (line 825) | def rename(self, fileitem: schemas.FileItem, name: str) -> bool: method get_item (line 840) | def get_item(self, path: Path) -> Optional[schemas.FileItem]: method get_folder (line 872) | def get_folder(self, path: Path) -> Optional[schemas.FileItem]: method detail (line 908) | def detail(self, fileitem: schemas.FileItem) -> Optional[schemas.FileI... method copy (line 914) | def copy(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method move (line 947) | def move(self, fileitem: schemas.FileItem, path: Path, new_name: str) ... method link (line 979) | def link(self, fileitem: schemas.FileItem, target_file: Path) -> bool: method softlink (line 982) | def softlink(self, fileitem: schemas.FileItem, target_file: Path) -> b... method usage (line 985) | def usage(self) -> Optional[schemas.StorageUsage]: FILE: app/modules/filemanager/transhandler.py class TransHandler (line 22) | class TransHandler: method __init__ (line 27) | def __init__(self): method __update_result (line 31) | def __update_result(result: TransferInfo, **kwargs): method transfer_media (line 59) | def transfer_media(self, method __transfer_command (line 357) | def __transfer_command(fileitem: FileItem, target_storage: str, method __rename_subtitles (line 499) | def __rename_subtitles(sub_item: FileItem, new_file: Path) -> Path: method __transfer_dir (line 548) | def __transfer_dir(self, fileitem: FileItem, mediainfo: MediaInfo, method __transfer_dir_files (line 595) | def __transfer_dir_files(self, fileitem: FileItem, target_storage: str, method __transfer_file (line 642) | def __transfer_file(self, fileitem: FileItem, mediainfo: MediaInfo, method get_dest_path (line 717) | def get_dest_path(mediainfo: MediaInfo, target_path: Path, method get_dest_dir (line 729) | def get_dest_dir(mediainfo: MediaInfo, target_dir: TransferDirectoryConf, method get_naming_dict (line 760) | def get_naming_dict(meta: MetaBase, mediainfo: MediaInfo, file_ext: Op... method __delete_version_files (line 773) | def __delete_version_files(storage_oper: StorageBase, path: Path) -> b... method get_rename_path (line 817) | def get_rename_path(template_string: str, rename_dict: dict, path: Pat... FILE: app/modules/filter/RuleParser.py class RuleParser (line 6) | class RuleParser: method __init__ (line 11) | def __init__(self): method parse (line 41) | def parse(self, expression: str) -> ParseResults: FILE: app/modules/filter/__init__.py class FilterModule (line 14) | class FilterModule(_ModuleBase): method __init__ (line 144) | def __init__(self): method init_module (line 148) | def init_module(self) -> None: method __init_custom_rules (line 152) | def __init_custom_rules(self): method get_name (line 162) | def get_name() -> str: method get_type (line 166) | def get_type() -> ModuleType: method get_subtype (line 173) | def get_subtype() -> OtherModulesType: method get_priority (line 180) | def get_priority() -> int: method stop (line 186) | def stop(self): method test (line 189) | def test(self): method init_setting (line 192) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method filter_torrents (line 195) | def filter_torrents(self, rule_groups: List[str], method __filter_torrents (line 220) | def __filter_torrents(self, rule_string: str, rule_name: str, method __get_order (line 237) | def __get_order(self, torrent: TorrentInfo, rule_str: str) -> Optional... method __match_group (line 262) | def __match_group(self, torrent: TorrentInfo, rule_group: Union[list, ... method __match_rule (line 282) | def __match_rule(self, torrent: TorrentInfo, rule_name: str) -> bool: method __match_tmdb (line 374) | def __match_tmdb(self, tmdb: dict) -> bool: method __match_size (line 417) | def __match_size(torrent: TorrentInfo, size_range: str) -> bool: FILE: app/modules/indexer/__init__.py class IndexerModule (line 24) | class IndexerModule(_ModuleBase): method init_module (line 31) | def init_module(self) -> None: method get_name (line 39) | def get_name() -> str: method get_type (line 43) | def get_type() -> ModuleType: method get_subtype (line 50) | def get_subtype() -> OtherModulesType: method get_priority (line 57) | def get_priority() -> int: method stop (line 63) | def stop(self): method test (line 66) | def test(self) -> Tuple[bool, str]: method init_setting (line 75) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method __search_check (line 79) | def __search_check(site: dict, search_word: Optional[str] = None) -> b... method __clear_search_text (line 100) | def __clear_search_text(text: Optional[str]) -> Optional[str]: method __indexer_statistic (line 112) | def __indexer_statistic(site: dict, error_flag: bool = False, seconds:... method __async_indexer_statistic (line 123) | async def __async_indexer_statistic(site: dict, error_flag: bool = Fal... method __parse_result (line 134) | def __parse_result(site: dict, result_array: list, seconds: int) -> To... method search_torrents (line 152) | def search_torrents(self, site: dict, method async_search_torrents (line 247) | async def async_search_torrents(self, site: dict, method __spider_search (line 343) | def __spider_search(indexer: dict, method __async_spider_search (line 370) | async def __async_spider_search(indexer: dict, method refresh_torrents (line 397) | def refresh_torrents(self, site: dict, method async_refresh_torrents (line 411) | async def async_refresh_torrents(self, site: dict, method refresh_userdata (line 425) | def refresh_userdata(self, site: dict) -> Optional[SiteUserData]: FILE: app/modules/indexer/parser/__init__.py class SiteSchema (line 19) | class SiteSchema(Enum): class SiteParserBase (line 41) | class SiteParserBase(metaclass=ABCMeta): method __init__ (line 47) | def __init__(self, site_name: str, method site_schema (line 150) | def site_schema(self) -> SiteSchema: method parse (line 157) | def parse(self): method _pase_unread_msgs (line 214) | def _pase_unread_msgs(self): method _parse_seeding_pages (line 259) | def _parse_seeding_pages(self): method _prepare_html_text (line 284) | def _prepare_html_text(html_text): method _parse_message_unread_links (line 291) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _get_page_content (line 299) | def _get_page_content(self, url: str, params: dict = None, headers: di... method _parse_site_page (line 376) | def _parse_site_page(self, html_text: str): method _parse_user_base_info (line 385) | def _parse_user_base_info(self, html_text: str): method _parse_logged_in (line 393) | def _parse_logged_in(self, html_text): method _parse_user_traffic_info (line 407) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 416) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_user_detail_info (line 426) | def _parse_user_detail_info(self, html_text: str): method _parse_message_content (line 436) | def _parse_message_content(self, html_text): method close (line 444) | def close(self): method clear (line 452) | def clear(self): method to_dict (line 460) | def to_dict(self): FILE: app/modules/indexer/parser/bitpt.py class BitptSiteUserInfo (line 15) | class BitptSiteUserInfo(SiteParserBase): method _parse_site_page (line 18) | def _parse_site_page(self, html_text: str): method _parse_logged_in (line 31) | def _parse_logged_in(self, html_text): method _parse_user_base_info (line 35) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 79) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 82) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_page_info (line 85) | def _parse_user_torrent_seeding_page_info(self, html_text: str) -> Tup... method _parse_message_unread_links (line 108) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 111) | def _parse_message_content(self, html_text) -> Tuple[Optional[str], Op... method _parse_user_torrent_seeding_info (line 114) | def _parse_user_torrent_seeding_info(self, html_text: str): method parse (line 117) | def parse(self): FILE: app/modules/indexer/parser/discuz.py class DiscuzUserInfo (line 11) | class DiscuzUserInfo(SiteParserBase): method _parse_user_base_info (line 14) | def _parse_user_base_info(self, html_text: str): method _parse_site_page (line 30) | def _parse_site_page(self, html_text: str): method _parse_user_detail_info (line 33) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 79) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_user_traffic_info (line 132) | def _parse_user_traffic_info(self, html_text: str): method _parse_message_unread_links (line 135) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 138) | def _parse_message_content(self, html_text): FILE: app/modules/indexer/parser/file_list.py class FileListSiteUserInfo (line 11) | class FileListSiteUserInfo(SiteParserBase): method _parse_site_page (line 14) | def _parse_site_page(self, html_text: str): method _parse_user_base_info (line 24) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 35) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 43) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 82) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_message_unread_links (line 119) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 122) | def _parse_message_content(self, html_text): FILE: app/modules/indexer/parser/gazelle.py class GazelleSiteUserInfo (line 11) | class GazelleSiteUserInfo(SiteParserBase): method _parse_user_base_info (line 14) | def _parse_user_base_info(self, html_text: str): method _parse_site_page (line 61) | def _parse_site_page(self, html_text: str): method _parse_user_detail_info (line 64) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 97) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_user_traffic_info (line 154) | def _parse_user_traffic_info(self, html_text: str): method _parse_message_unread_links (line 157) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 160) | def _parse_message_content(self, html_text): FILE: app/modules/indexer/parser/hddolby.py class HDDolbySiteUserInfo (line 9) | class HDDolbySiteUserInfo(SiteParserBase): method _parse_site_page (line 40) | def _parse_site_page(self, html_text: str): method _parse_logged_in (line 67) | def _parse_logged_in(self, html_text): method _parse_user_base_info (line 76) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 112) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 118) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 124) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_message_unread_links (line 147) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 153) | def _parse_message_content(self, html_text) -> Tuple[Optional[str], Op... FILE: app/modules/indexer/parser/ipt_project.py class IptSiteUserInfo (line 11) | class IptSiteUserInfo(SiteParserBase): method _parse_user_base_info (line 14) | def _parse_user_base_info(self, html_text: str): method _parse_site_page (line 41) | def _parse_site_page(self, html_text: str): method _parse_user_detail_info (line 44) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 62) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_user_traffic_info (line 91) | def _parse_user_traffic_info(self, html_text: str): method _parse_message_unread_links (line 94) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 97) | def _parse_message_content(self, html_text): FILE: app/modules/indexer/parser/mtorrent.py class MTorrentSiteUserInfo (line 11) | class MTorrentSiteUserInfo(SiteParserBase): method _parse_site_page (line 37) | def _parse_site_page(self, html_text: str): method _parse_logged_in (line 66) | def _parse_logged_in(self, html_text): method _parse_user_base_info (line 75) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 102) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 108) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 114) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_message_unread_links (line 156) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 182) | def _parse_message_content(self, html_text) -> Tuple[Optional[str], Op... FILE: app/modules/indexer/parser/nexus_audiences.py class NexusAudiencesSiteUserInfo (line 11) | class NexusAudiencesSiteUserInfo(NexusPhpSiteUserInfo): method _parse_seeding_pages (line 14) | def _parse_seeding_pages(self): FILE: app/modules/indexer/parser/nexus_hhanclub.py class NexusHhanclubSiteUserInfo (line 11) | class NexusHhanclubSiteUserInfo(NexusPhpSiteUserInfo): method _parse_user_traffic_info (line 14) | def _parse_user_traffic_info(self, html_text): method _parse_user_detail_info (line 40) | def _parse_user_detail_info(self, html_text: str): method _get_user_level (line 60) | def _get_user_level(self, html): FILE: app/modules/indexer/parser/nexus_php.py class NexusPhpSiteUserInfo (line 12) | class NexusPhpSiteUserInfo(SiteParserBase): method _parse_site_page (line 15) | def _parse_site_page(self, html_text: str): method _parse_message_unread (line 30) | def _parse_message_unread(self, html_text): method _parse_user_base_info (line 57) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 89) | def _parse_user_traffic_info(self, html_text): method _parse_ucoin (line 138) | def _parse_ucoin(html): method _parse_user_torrent_seeding_info (line 163) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_user_detail_info (line 244) | def _parse_user_detail_info(self, html_text: str): method _fixup_torrent_seeding_page (line 307) | def _fixup_torrent_seeding_page(self, html): method _get_user_level (line 340) | def _get_user_level(self, html): method _parse_message_unread_links (line 370) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 389) | def _parse_message_content(self, html_text): method _fixup_traffic_info (line 420) | def _fixup_traffic_info(self, html): FILE: app/modules/indexer/parser/nexus_project.py class NexusProjectSiteUserInfo (line 8) | class NexusProjectSiteUserInfo(NexusPhpSiteUserInfo): method _parse_site_page (line 11) | def _parse_site_page(self, html_text: str): FILE: app/modules/indexer/parser/nexus_rabbit.py class NexusRabbitSiteUserInfo (line 13) | class NexusRabbitSiteUserInfo(SiteParserBase): method _parse_site_page (line 16) | def _parse_site_page(self, html_text: str): method _parse_user_torrent_seeding_info (line 55) | def _parse_user_torrent_seeding_info( method _parse_message_unread_links (line 84) | def _parse_message_unread_links( method _parse_user_base_info (line 114) | def _parse_user_base_info(self, html_text: str): method _parse_user_detail_info (line 129) | def _parse_user_detail_info(self, html_text: str): method _parse_message_content (line 168) | def _parse_message_content(self, html_text): method _parse_user_traffic_info (line 176) | def _parse_user_traffic_info(self, html_text: str): FILE: app/modules/indexer/parser/rousi.py class RousiSiteUserInfo (line 13) | class RousiSiteUserInfo(SiteParserBase): method _parse_site_page (line 21) | def _parse_site_page(self, html_text: str): method _parse_logged_in (line 42) | def _parse_logged_in(self, html_text): method _parse_user_base_info (line 49) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 123) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 130) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 137) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_message_unread_links (line 148) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 159) | def _parse_message_content(self, html_text) -> Tuple[Optional[str], Op... method _pase_unread_msgs (line 169) | def _pase_unread_msgs(self): FILE: app/modules/indexer/parser/small_horse.py class SmallHorseSiteUserInfo (line 11) | class SmallHorseSiteUserInfo(SiteParserBase): method _parse_site_page (line 14) | def _parse_site_page(self, html_text: str): method _parse_user_base_info (line 24) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 35) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 63) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 66) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_message_unread_links (line 112) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 115) | def _parse_message_content(self, html_text): FILE: app/modules/indexer/parser/tnode.py class TNodeSiteUserInfo (line 11) | class TNodeSiteUserInfo(SiteParserBase): method _parse_site_page (line 14) | def _parse_site_page(self, html_text: str): method _parse_logged_in (line 24) | def _parse_logged_in(self, html_text): method _parse_user_base_info (line 33) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 36) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 39) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 63) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_message_unread_links (line 100) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 103) | def _parse_message_content(self, html_text): FILE: app/modules/indexer/parser/torrent_leech.py class TorrentLeechSiteUserInfo (line 11) | class TorrentLeechSiteUserInfo(SiteParserBase): method _parse_site_page (line 14) | def _parse_site_page(self, html_text: str): method _parse_user_base_info (line 24) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 27) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 63) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 66) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_message_unread_links (line 108) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 111) | def _parse_message_content(self, html_text): FILE: app/modules/indexer/parser/unit3d.py class Unit3dSiteUserInfo (line 11) | class Unit3dSiteUserInfo(SiteParserBase): method _parse_user_base_info (line 14) | def _parse_user_base_info(self, html_text: str): method _parse_site_page (line 36) | def _parse_site_page(self, html_text: str): method _parse_user_detail_info (line 39) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 66) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_user_traffic_info (line 119) | def _parse_user_traffic_info(self, html_text: str): method _parse_message_unread_links (line 131) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 134) | def _parse_message_content(self, html_text): FILE: app/modules/indexer/parser/yema.py class TYemaSiteUserInfo (line 9) | class TYemaSiteUserInfo(SiteParserBase): method _parse_site_page (line 12) | def _parse_site_page(self, html_text: str): method _parse_logged_in (line 34) | def _parse_logged_in(self, html_text): method _parse_user_base_info (line 43) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 68) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 74) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_info (line 80) | def _parse_user_torrent_seeding_info(self, html_text: str, multi_page:... method _parse_message_unread_links (line 100) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 106) | def _parse_message_content(self, html_text) -> Tuple[Optional[str], Op... FILE: app/modules/indexer/parser/zhixing.py class ZhixingSiteUserInfo (line 16) | class ZhixingSiteUserInfo(SiteParserBase): method _parse_site_page (line 19) | def _parse_site_page(self, html_text: str): method _parse_logged_in (line 35) | def _parse_logged_in(self, html_text): method _parse_user_base_info (line 42) | def _parse_user_base_info(self, html_text: str): method _parse_user_traffic_info (line 90) | def _parse_user_traffic_info(self, html_text: str): method _parse_user_detail_info (line 93) | def _parse_user_detail_info(self, html_text: str): method _parse_user_torrent_seeding_page_info (line 96) | def _parse_user_torrent_seeding_page_info(self, html_text: str) -> Tup... method _parse_message_unread_links (line 114) | def _parse_message_unread_links(self, html_text: str, msg_links: list)... method _parse_message_content (line 117) | def _parse_message_content(self, html_text) -> Tuple[Optional[str], Op... method _parse_user_torrent_seeding_info (line 120) | def _parse_user_torrent_seeding_info(self, html_text: str): method parse (line 126) | def parse(self): FILE: app/modules/indexer/spider/__init__.py class SiteSpider (line 19) | class SiteSpider: method __class__ (line 25) | def __class__(self): method __dict__ (line 29) | def __dict__(self): method __dir__ (line 33) | def __dir__(self): method __init__ (line 36) | def __init__(self, method __get_search_url (line 84) | def __get_search_url(self): method get_torrents (line 203) | def get_torrents(self) -> List[dict]: method async_get_torrents (line 232) | async def async_get_torrents(self) -> List[dict]: method __get_title (line 262) | def __get_title(self, torrent: Any): method __get_description (line 283) | def __get_description(self, torrent: Any): method __get_detail (line 316) | def __get_detail(self, torrent: Any): method __get_download (line 334) | def __get_download(self, torrent: Any): method __get_imdbid (line 358) | def __get_imdbid(self, torrent: Any): method __get_size (line 366) | def __get_size(self, torrent: Any): method __get_leechers (line 380) | def __get_leechers(self, torrent: Any): method __get_seeders (line 394) | def __get_seeders(self, torrent: Any): method __get_grabs (line 408) | def __get_grabs(self, torrent: Any): method __get_pubdate (line 422) | def __get_pubdate(self, torrent: Any): method __get_date_elapsed (line 438) | def __get_date_elapsed(self, torrent: Any): method __get_downloadvolumefactor (line 446) | def __get_downloadvolumefactor(self, torrent: Any): method __get_uploadvolumefactor (line 470) | def __get_uploadvolumefactor(self, torrent: Any): method __get_labels (line 494) | def __get_labels(self, torrent: Any): method __get_free_date (line 516) | def __get_free_date(self, torrent: Any): method __get_hit_and_run (line 524) | def __get_hit_and_run(self, torrent: Any): method __get_category (line 539) | def __get_category(self, torrent: Any): method _safe_query (line 559) | def _safe_query(self, torrent: Any, selector_config: Optional[dict]) -... method get_info (line 578) | def get_info(self, torrent: Any) -> dict: method __filter_text (line 628) | def __filter_text(text: Optional[str], filters: Optional[List[dict]]) ... method __remove (line 667) | def __remove(item: Any, selector: Optional[dict]): method __attribute_or_text (line 677) | def __attribute_or_text(item: Any, selector: Optional[dict]) -> list: method __index (line 689) | def __index(items: Optional[list], selector: Optional[dict]) -> Option... method parse (line 705) | def parse(self, html_text: str) -> List[dict]: FILE: app/modules/indexer/spider/haidan.py class HaiDanSpider (line 12) | class HaiDanSpider: method __init__ (line 52) | def __init__(self, indexer: dict): method __get_params (line 66) | def __get_params(self, keyword: str, mtype: MediaType = None) -> dict: method __parse_result (line 101) | def __parse_result(self, result: dict): method search (line 134) | def search(self, keyword: str, mtype: MediaType = None) -> Tuple[bool,... method async_search (line 167) | async def async_search(self, keyword: str, mtype: MediaType = None) ->... method __get_downloadvolumefactor (line 200) | def __get_downloadvolumefactor(self, discount: str) -> float: method __get_uploadvolumefactor (line 208) | def __get_uploadvolumefactor(self, discount: str) -> float: FILE: app/modules/indexer/spider/hddolby.py class HddolbySpider (line 11) | class HddolbySpider: method __init__ (line 60) | def __init__(self, indexer: dict): method __get_params (line 76) | def __get_params(self, keyword: str, mtype: MediaType = None, page: Op... method __parse_result (line 96) | def __parse_result(self, results: List[dict]) -> List[dict]: method search (line 165) | def search(self, keyword: str, mtype: MediaType = None, page: Optional... method async_search (line 198) | async def async_search(self, keyword: str, mtype: MediaType = None, pa... method __get_downloadvolumefactor (line 231) | def __get_downloadvolumefactor(discount: int) -> float: method __get_uploadvolumefactor (line 246) | def __get_uploadvolumefactor(discount: int) -> float: method __get_download_url (line 259) | def __get_download_url(self, torrent_id: int, downhash: str) -> str: FILE: app/modules/indexer/spider/mtorrent.py class MTorrentSpider (line 15) | class MTorrentSpider: method __init__ (line 56) | def __init__(self, indexer: dict): method __get_params (line 72) | def __get_params(self, keyword: str, mtype: MediaType = None, page: Op... method __parse_result (line 93) | def __parse_result(self, results: List[dict]): method search (line 154) | def search(self, keyword: str, mtype: MediaType = None, page: Optional... method async_search (line 186) | async def async_search(self, keyword: str, mtype: MediaType = None, pa... method __find_imdbid (line 219) | def __find_imdbid(imdb: str) -> str: method __get_downloadvolumefactor (line 230) | def __get_downloadvolumefactor(discount: str) -> float: method __get_uploadvolumefactor (line 246) | def __get_uploadvolumefactor(discount: str) -> float: method __get_download_url (line 259) | def __get_download_url(self, torrent_id: str) -> str: method get_subtitle_links (line 282) | def get_subtitle_links(self, page_url: str) -> List[str]: method get_subtitle_links_by_id (line 299) | def get_subtitle_links_by_id(self, torrent_id: str) -> List[str]: method __subtitle_ids (line 317) | def __subtitle_ids(self, torrent_id: str) -> Optional[List[str]]: method __subtitle_genlink (line 353) | def __subtitle_genlink(self, subtitle_id: str) -> Optional[str]: FILE: app/modules/indexer/spider/rousi.py class RousiSpider (line 13) | class RousiSpider: method __init__ (line 42) | def __init__(self, indexer: dict): method __get_params (line 58) | def __get_params(self, keyword: str, mtype: MediaType = None, cat: Opt... method __get_category_names_by_ids (line 92) | def __get_category_names_by_ids(self, cat: str) -> Optional[list]: method __process_response (line 117) | def __process_response(self, res) -> Tuple[bool, List[dict]]: method __parse_result (line 143) | def __parse_result(self, results: List[dict]) -> List[dict]: method search (line 210) | def search(self, keyword: str, mtype: MediaType = None, cat: Optional[... method async_search (line 238) | async def async_search(self, keyword: str, mtype: MediaType = None, ca... method __get_download_url (line 266) | def __get_download_url(self, torrent_id: int) -> str: FILE: app/modules/indexer/spider/tnode.py class TNodeSpider (line 12) | class TNodeSpider(metaclass=SingletonClass): method __init__ (line 20) | def __init__(self, indexer: dict): method __get_token (line 33) | def __get_token(self) -> Optional[str]: method __async_get_token (line 47) | async def __async_get_token(self) -> Optional[str]: method __get_params (line 60) | def __get_params(self, keyword: str = None, page: Optional[int] = 0) -... method __parse_result (line 81) | def __parse_result(self, results: List[dict]) -> List[dict]: method search (line 108) | def search(self, keyword: str, page: Optional[int] = 0) -> Tuple[bool,... method async_search (line 142) | async def async_search(self, keyword: str, page: Optional[int] = 0) ->... FILE: app/modules/indexer/spider/torrentleech.py class TorrentLeech (line 10) | class TorrentLeech: method __init__ (line 20) | def __init__(self, indexer: dict): method __parse_result (line 26) | def __parse_result(self, results: List[dict]) -> List[dict]: method search (line 53) | def search(self, keyword: str, page: Optional[int] = 0) -> Tuple[bool,... method async_search (line 85) | async def async_search(self, keyword: str, page: Optional[int] = 0) ->... FILE: app/modules/indexer/spider/yema.py class YemaSpider (line 11) | class YemaSpider: method __init__ (line 47) | def __init__(self, indexer: dict): method __get_params (line 60) | def __get_params(self, keyword: str = None, page: Optional[int] = 0) -... method __parse_result (line 78) | def __parse_result(self, results: List[dict]) -> List[dict]: method search (line 123) | def search(self, keyword: str, method async_search (line 150) | async def async_search(self, keyword: str, method __get_downloadvolumefactor (line 178) | def __get_downloadvolumefactor(discount: str) -> float: method __get_uploadvolumefactor (line 192) | def __get_uploadvolumefactor(discount: str) -> float: method __get_download_url (line 205) | def __get_download_url(self, torrent_id: str) -> str: FILE: app/modules/jellyfin/__init__.py class JellyfinModule (line 13) | class JellyfinModule(_ModuleBase, _MediaServerBase[Jellyfin]): method init_module (line 15) | def init_module(self) -> None: method get_name (line 23) | def get_name() -> str: method get_type (line 27) | def get_type() -> ModuleType: method get_subtype (line 34) | def get_subtype() -> MediaServerType: method get_priority (line 41) | def get_priority() -> int: method init_setting (line 47) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method scheduler_job (line 50) | def scheduler_job(self) -> None: method stop (line 60) | def stop(self): method test (line 63) | def test(self) -> Optional[Tuple[bool, str]]: method user_authenticate (line 76) | def user_authenticate(self, credentials: AuthCredentials, service_name... method webhook_parser (line 114) | def webhook_parser(self, body: Any, form: Any, args: Any) -> Optional[... method media_exists (line 139) | def media_exists(self, mediainfo: MediaInfo, itemid: Optional[str] = N... method media_statistic (line 197) | def media_statistic(self, server: Optional[str] = None) -> Optional[Li... method mediaserver_librarys (line 217) | def mediaserver_librarys(self, server: Optional[str] = None, method mediaserver_items (line 228) | def mediaserver_items(self, server: str, library_id: Union[str, int], ... method mediaserver_iteminfo (line 245) | def mediaserver_iteminfo(self, server: str, item_id: str) -> Optional[... method mediaserver_tv_episodes (line 254) | def mediaserver_tv_episodes(self, server: str, method mediaserver_playing (line 270) | def mediaserver_playing(self, server: str, method mediaserver_play_url (line 280) | def mediaserver_play_url(self, server: str, item_id: Union[str, int]) ... method mediaserver_latest (line 289) | def mediaserver_latest(self, server: Optional[str] = None, count: Opti... method mediaserver_latest_images (line 299) | def mediaserver_latest_images(self, FILE: app/modules/jellyfin/jellyfin.py class Jellyfin (line 16) | class Jellyfin: method __init__ (line 23) | def __init__(self, host: Optional[str] = None, apikey: Optional[str] =... method is_inactive (line 39) | def is_inactive(self) -> bool: method reconnect (line 47) | def reconnect(self): method get_jellyfin_folders (line 54) | def get_jellyfin_folders(self) -> List[dict]: method get_jellyfin_virtual_folders (line 75) | def get_jellyfin_virtual_folders(self) -> List[dict]: method __get_jellyfin_librarys (line 116) | def __get_jellyfin_librarys(self, username: Optional[str] = None) -> L... method get_librarys (line 139) | def get_librarys(self, username: Optional[str] = None, hidden: Optiona... method get_user_count (line 176) | def get_user_count(self) -> int: method get_user (line 197) | def get_user(self, user_name: Optional[str] = None) -> Optional[Union[... method authenticate (line 226) | def authenticate(self, username: str, password: str) -> Optional[str]: method get_server_id (line 263) | def get_server_id(self) -> Optional[str]: method get_medias_count (line 283) | def get_medias_count(self) -> schemas.Statistic: method __get_jellyfin_series_id_by_name (line 310) | def __get_jellyfin_series_id_by_name(self, name: str, year: str) -> Op... method get_movies (line 338) | def get_movies(self, method get_tv_episodes (line 382) | def get_tv_episodes(self, method get_remote_image_by_id (line 446) | def get_remote_image_by_id(self, item_id: str, image_type: str) -> Opt... method get_item_path_by_id (line 473) | def get_item_path_by_id(self, item_id: str) -> Optional[str]: method generate_image_link (line 497) | def generate_image_link(self, item_id: str, image_type: str, host_type... method get_itemId_ancestors (line 529) | def get_itemId_ancestors(self, item_id: str, index: int, key: str) -> ... method refresh_root_library (line 552) | def refresh_root_library(self) -> Optional[bool]: method get_webhook_message (line 572) | def get_webhook_message(self, body: any) -> Optional[schemas.WebhookEv... method __format_item_info (line 705) | def __format_item_info(item) -> Optional[schemas.MediaServerItem]: method get_iteminfo (line 747) | def get_iteminfo(self, itemid: str) -> Optional[schemas.MediaServerItem]: method get_items (line 767) | def get_items(self, parent: Union[str, int], start_index: Optional[int... method get_data (line 807) | def get_data(self, url: str) -> Optional[Response]: method post_data (line 823) | def post_data(self, url: str, data: Optional[str] = None, headers: dic... method get_play_url (line 843) | def get_play_url(self, item_id: str) -> str: method __get_local_image_by_id (line 851) | def __get_local_image_by_id(self, item_id: str) -> str: method get_backdrop_url (line 862) | def get_backdrop_url(self, item_id: str, image_tag: str, remote: Optio... method get_resume (line 880) | def get_resume(self, num: Optional[int] = 12, username: Optional[str] ... method get_latest (line 948) | def get_latest(self, num=20, username: Optional[str] = None) -> Option... method get_user_library_folders (line 1001) | def get_user_library_folders(self): FILE: app/modules/plex/__init__.py class PlexModule (line 13) | class PlexModule(_ModuleBase, _MediaServerBase[Plex]): method init_module (line 15) | def init_module(self) -> None: method get_name (line 23) | def get_name() -> str: method get_type (line 27) | def get_type() -> ModuleType: method get_subtype (line 34) | def get_subtype() -> MediaServerType: method get_priority (line 41) | def get_priority() -> int: method stop (line 47) | def stop(self): method test (line 55) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 68) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method scheduler_job (line 71) | def scheduler_job(self) -> None: method user_authenticate (line 81) | def user_authenticate(self, credentials: AuthCredentials, service_name... method webhook_parser (line 122) | def webhook_parser(self, body: Any, form: Any, args: Any) -> Optional[... method media_exists (line 147) | def media_exists(self, mediainfo: MediaInfo, itemid: Optional[str] = N... method media_statistic (line 209) | def media_statistic(self, server: Optional[str] = None) -> Optional[Li... method mediaserver_librarys (line 229) | def mediaserver_librarys(self, server: Optional[str] = None, hidden: O... method mediaserver_items (line 239) | def mediaserver_items(self, server: str, library_id: Union[str, int], ... method mediaserver_iteminfo (line 256) | def mediaserver_iteminfo(self, server: str, item_id: str) -> Optional[... method mediaserver_tv_episodes (line 265) | def mediaserver_tv_episodes(self, server: str, method mediaserver_playing (line 281) | def mediaserver_playing(self, server: str, count: Optional[int] = 20, method mediaserver_latest (line 291) | def mediaserver_latest(self, server: Optional[str] = None, count: Opti... method mediaserver_latest_images (line 301) | def mediaserver_latest_images(self, method mediaserver_play_url (line 330) | def mediaserver_play_url(self, server: str, item_id: Union[str, int]) ... FILE: app/modules/plex/plex.py class Plex (line 20) | class Plex: method __init__ (line 25) | def __init__(self, host: Optional[str] = None, token: Optional[str] = ... method is_inactive (line 47) | def is_inactive(self) -> bool: method reconnect (line 55) | def reconnect(self): method authenticate (line 66) | def authenticate(self, username: str, password: str) -> Optional[Tuple... method __get_library_images (line 88) | def __get_library_images(self, library_key: str, mtype: int) -> Option... method get_librarys (line 125) | def get_librarys(self, hidden: Optional[bool] = False) -> List[schemas... method get_medias_count (line 163) | def get_medias_count(self) -> schemas.Statistic: method get_movies (line 188) | def get_movies(self, method get_tv_episodes (line 244) | def get_tv_episodes(self, method get_remote_image_by_id (line 297) | def get_remote_image_by_id(self, method refresh_root_library (line 363) | def refresh_root_library(self) -> bool: method refresh_library_by_items (line 371) | def refresh_library_by_items(self, items: List[schemas.RefreshMediaIte... method __find_librarie (line 398) | def __find_librarie(path: Path, libraries: List[Any]) -> Tuple[str, Op... method get_iteminfo (line 425) | def get_iteminfo(self, itemid: str) -> Optional[schemas.MediaServerItem]: method __get_ids (line 439) | def __get_ids(guids: List[Any]) -> dict: method __fetch_item (line 470) | def __fetch_item(self, item_id: Union[int, str]): method __build_media_server_item (line 479) | def __build_media_server_item(self, item) -> Optional[schemas.MediaSer... method get_items (line 520) | def get_items(self, parent: Union[str, int], start_index: Optional[int... method get_webhook_message (line 552) | def get_webhook_message(self, form: any) -> Optional[schemas.WebhookEv... method get_plex (line 717) | def get_plex(self): method get_play_url (line 723) | def get_play_url(self, item_id: str) -> str: method get_resume (line 730) | def get_resume(self, num: Optional[int] = 12) -> Optional[List[schemas... method get_latest (line 767) | def get_latest(self, num: Optional[int] = 20) -> Optional[List[schemas... method get_data (line 837) | def get_data(self, endpoint: str, **kwargs) -> Optional[Response]: method post_data (line 845) | def post_data(self, endpoint: str, **kwargs) -> Optional[Response]: method put_data (line 853) | def put_data(self, endpoint: str, **kwargs) -> Optional[Response]: method __request (line 861) | def __request(self, method: str, endpoint: str, **kwargs) -> Optional[... method __get_request_headers (line 884) | def __get_request_headers(self) -> dict: method __adapt_plex_session (line 892) | def __adapt_plex_session(self) -> Session: method close (line 903) | def close(self): FILE: app/modules/postgresql/__init__.py class PostgreSQLModule (line 10) | class PostgreSQLModule(_ModuleBase): method init_module (line 15) | def init_module(self) -> None: method get_name (line 19) | def get_name() -> str: method get_type (line 23) | def get_type() -> ModuleType: method get_subtype (line 30) | def get_subtype() -> OtherModulesType: method get_priority (line 37) | def get_priority() -> int: method init_setting (line 43) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method stop (line 46) | def stop(self) -> None: method test (line 49) | def test(self): FILE: app/modules/qbittorrent/__init__.py class QbittorrentModule (line 19) | class QbittorrentModule(_ModuleBase, _DownloaderBase[Qbittorrent]): method init_module (line 21) | def init_module(self) -> None: method get_name (line 29) | def get_name() -> str: method get_type (line 33) | def get_type() -> ModuleType: method get_subtype (line 40) | def get_subtype() -> DownloaderType: method get_priority (line 47) | def get_priority() -> int: method stop (line 53) | def stop(self): method test (line 56) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 69) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method scheduler_job (line 72) | def scheduler_job(self) -> None: method download (line 81) | def download(self, content: Union[Path, str, bytes], download_dir: Pat... method list_torrents (line 233) | def list_torrents(self, status: TorrentStatus = None, method transfer_completed (line 333) | def transfer_completed(self, hashs: str, downloader: Optional[str] = N... method remove_torrents (line 345) | def remove_torrents(self, hashs: Union[str, list], delete_file: Option... method start_torrents (line 359) | def start_torrents(self, hashs: Union[list, str], method stop_torrents (line 372) | def stop_torrents(self, hashs: Union[list, str], downloader: Optional[... method torrent_files (line 384) | def torrent_files(self, tid: str, downloader: Optional[str] = None) ->... method downloader_info (line 393) | def downloader_info(self, downloader: Optional[str] = None) -> Optiona... FILE: app/modules/qbittorrent/qbittorrent.py class Qbittorrent (line 14) | class Qbittorrent: method __init__ (line 18) | def __init__(self, host: Optional[str] = None, port: int = None, method is_inactive (line 42) | def is_inactive(self) -> bool: method reconnect (line 50) | def reconnect(self): method __login_qbittorrent (line 56) | def __login_qbittorrent(self) -> Optional[Client]: method get_torrents (line 86) | def get_torrents(self, ids: Optional[Union[str, list]] = None, method get_completed_torrents (line 116) | def get_completed_torrents(self, ids: Union[str, list] = None, method get_downloading_torrents (line 128) | def get_downloading_torrents(self, ids: Union[str, list] = None, method delete_torrents_tag (line 141) | def delete_torrents_tag(self, ids: Union[str, list], tag: Union[str, l... method remove_torrents_tag (line 156) | def remove_torrents_tag(self, ids: Union[str, list], tag: Union[str, l... method set_torrents_tag (line 171) | def set_torrents_tag(self, ids: Union[str, list], tags: list): method is_force_resume (line 183) | def is_force_resume(self) -> bool: method torrents_set_force_start (line 189) | def torrents_set_force_start(self, ids: Union[str, list]): method __get_last_add_torrentid_by_tag (line 202) | def __get_last_add_torrentid_by_tag(self, tags: Union[str, list], method get_torrent_id_by_tag (line 218) | def get_torrent_id_by_tag(self, tags: Union[str, list], method add_torrent (line 236) | def add_torrent(self, method start_torrents (line 307) | def start_torrents(self, ids: Union[str, list]) -> bool: method stop_torrents (line 320) | def stop_torrents(self, ids: Union[str, list]) -> bool: method delete_torrents (line 333) | def delete_torrents(self, delete_file: bool, ids: Union[str, list]) ->... method get_files (line 348) | def get_files(self, tid: str) -> Optional[TorrentFilesList]: method set_files (line 360) | def set_files(self, **kwargs) -> bool: method transfer_info (line 377) | def transfer_info(self) -> Optional[TransferInfoDictionary]: method set_speed_limit (line 389) | def set_speed_limit(self, download_limit: float = None, upload_limit: ... method get_speed_limit (line 407) | def get_speed_limit(self) -> Optional[Tuple[float, float]]: method recheck_torrents (line 425) | def recheck_torrents(self, ids: Union[str, list]) -> bool: method update_tracker (line 438) | def update_tracker(self, hash_string: str, tracker_list: list) -> bool: method get_content_layout (line 451) | def get_content_layout(self) -> Optional[str]: FILE: app/modules/qqbot/__init__.py class QQBotModule (line 18) | class QQBotModule(_ModuleBase, _MessageBase[QQBot]): method init_module (line 21) | def init_module(self) -> None: method get_name (line 26) | def get_name() -> str: method get_type (line 30) | def get_type() -> ModuleType: method get_subtype (line 34) | def get_subtype() -> MessageChannel: method get_priority (line 38) | def get_priority() -> int: method stop (line 41) | def stop(self) -> None: method test (line 46) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 54) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method message_parser (line 57) | def message_parser( method post_message (line 112) | def post_message(self, message: Notification, **kwargs) -> None: method post_medias_message (line 136) | def post_medias_message(self, message: Notification, medias: List[Medi... method post_torrents_message (line 158) | def post_torrents_message( FILE: app/modules/qqbot/api.py function get_access_token (line 19) | def get_access_token(app_id: str, client_secret: str) -> str: function clear_token_cache (line 60) | def clear_token_cache() -> None: function _api_request (line 66) | def _api_request( function send_proactive_c2c_message (line 98) | def send_proactive_c2c_message( function send_proactive_group_message (line 121) | def send_proactive_group_message( function send_c2c_message (line 144) | def send_c2c_message( function send_group_message (line 159) | def send_group_message( function get_gateway_url (line 174) | def get_gateway_url(access_token: str) -> str: function send_message (line 185) | def send_message( FILE: app/modules/qqbot/gateway.py function run_gateway (line 19) | def run_gateway( FILE: app/modules/qqbot/qqbot.py class QQBot (line 33) | class QQBot: method __init__ (line 36) | def __init__( method _load_known_targets (line 82) | def _load_known_targets(self) -> None: method _save_known_targets (line 93) | def _save_known_targets(self) -> None: method _forward_to_message_chain (line 100) | def _forward_to_message_chain(self, payload: dict) -> None: method _on_gateway_message (line 114) | def _on_gateway_message(self, payload: dict) -> None: method _start_gateway (line 140) | def _start_gateway(self) -> None: method stop (line 161) | def stop(self) -> None: method get_state (line 168) | def get_state(self) -> bool: method _get_target (line 172) | def _get_target(self, userid: Optional[str] = None, targets: Optional[... method _get_broadcast_targets (line 201) | def _get_broadcast_targets(self) -> list: method _get_image_size (line 206) | def _get_image_size(url: str) -> Optional[Tuple[int, int]]: method _escape_markdown (line 226) | def _escape_markdown(text: str) -> str: method _format_message_markdown (line 236) | def _format_message_markdown( method send_msg (line 273) | def send_msg( method send_medias_msg (line 351) | def send_medias_msg( method send_torrents_msg (line 372) | def send_torrents_msg( FILE: app/modules/redis/__init__.py class RedisModule (line 9) | class RedisModule(_ModuleBase): method init_module (line 14) | def init_module(self) -> None: method get_name (line 18) | def get_name() -> str: method get_type (line 22) | def get_type() -> ModuleType: method get_subtype (line 29) | def get_subtype() -> OtherModulesType: method get_priority (line 36) | def get_priority() -> int: method init_setting (line 42) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method stop (line 45) | def stop(self) -> None: method test (line 48) | def test(self): FILE: app/modules/rtorrent/__init__.py class RtorrentModule (line 18) | class RtorrentModule(_ModuleBase, _DownloaderBase[Rtorrent]): method init_module (line 19) | def init_module(self) -> None: method get_name (line 28) | def get_name() -> str: method get_type (line 32) | def get_type() -> ModuleType: method get_subtype (line 39) | def get_subtype() -> DownloaderType: method get_priority (line 46) | def get_priority() -> int: method stop (line 52) | def stop(self): method test (line 55) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 68) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method scheduler_job (line 71) | def scheduler_job(self) -> None: method download (line 80) | def download( method list_torrents (line 281) | def list_torrents( method transfer_completed (line 408) | def transfer_completed( method remove_torrents (line 430) | def remove_torrents( method start_torrents (line 448) | def start_torrents( method stop_torrents (line 462) | def stop_torrents( method torrent_files (line 476) | def torrent_files( method downloader_info (line 487) | def downloader_info( FILE: app/modules/rtorrent/rtorrent.py class SCGITransport (line 11) | class SCGITransport(xmlrpc.client.Transport): method single_request (line 16) | def single_request(self, host, handler, request_body, verbose=False): method _build_response (line 53) | def _build_response(data: bytes): class Rtorrent (line 70) | class Rtorrent: method __init__ (line 75) | def __init__( method __login_rtorrent (line 95) | def __login_rtorrent(self) -> Optional[xmlrpc.client.ServerProxy]: method is_inactive (line 133) | def is_inactive(self) -> bool: method reconnect (line 141) | def reconnect(self): method get_torrents (line 147) | def get_torrents( method get_completed_torrents (line 232) | def get_completed_torrents( method get_downloading_torrents (line 245) | def get_downloading_torrents( method add_torrent (line 258) | def add_torrent( method start_torrents (line 310) | def start_torrents(self, ids: Union[str, list]) -> bool: method stop_torrents (line 326) | def stop_torrents(self, ids: Union[str, list]) -> bool: method delete_torrents (line 342) | def delete_torrents(self, delete_file: bool, ids: Union[str, list]) ->... method get_files (line 377) | def get_files(self, tid: str) -> Optional[List[Dict]]: method set_files (line 411) | def set_files( method set_torrents_tag (line 431) | def set_torrents_tag( method remove_torrents_tag (line 467) | def remove_torrents_tag(self, ids: Union[str, list], tag: Union[str, l... method get_torrent_tags (line 494) | def get_torrent_tags(self, ids: str) -> List[str]: method get_torrent_id_by_tag (line 511) | def get_torrent_id_by_tag( method transfer_info (line 533) | def transfer_info(self) -> Optional[Dict]: FILE: app/modules/slack/__init__.py class SlackModule (line 13) | class SlackModule(_ModuleBase, _MessageBase[Slack]): method init_module (line 15) | def init_module(self) -> None: method get_name (line 24) | def get_name() -> str: method get_type (line 28) | def get_type() -> ModuleType: method get_subtype (line 35) | def get_subtype() -> MessageChannel: method get_priority (line 42) | def get_priority() -> int: method stop (line 48) | def stop(self): method test (line 55) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 67) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method message_parser (line 70) | def message_parser(self, source: str, body: Any, form: Any, args: Any)... method post_message (line 252) | def post_message(self, message: Notification, **kwargs) -> None: method post_medias_message (line 276) | def post_medias_message(self, message: Notification, medias: List[Medi... method post_torrents_message (line 293) | def post_torrents_message(self, message: Notification, torrents: List[... method delete_message (line 310) | def delete_message(self, channel: MessageChannel, source: str, FILE: app/modules/slack/slack.py class Slack (line 20) | class Slack: method __init__ (line 26) | def __init__(self, SLACK_OAUTH_TOKEN: Optional[str] = None, SLACK_APP_... method stop (line 91) | def stop(self): method get_state (line 99) | def get_state(self) -> bool: method send_msg (line 105) | def send_msg(self, title: str, text: Optional[str] = None, method send_medias_msg (line 224) | def send_medias_msg(self, medias: List[MediaInfo], userid: Optional[st... method send_torrents_msg (line 392) | def send_torrents_msg(self, torrents: List[Context], userid: Optional[... method delete_msg (line 556) | def delete_msg(self, message_id: str, chat_id: Optional[str] = None) -... method __find_public_channel (line 593) | def __find_public_channel(self): FILE: app/modules/subtitle/__init__.py class SubtitleModule (line 25) | class SubtitleModule(_ModuleBase): method init_module (line 37) | def init_module(self) -> None: method get_name (line 41) | def get_name() -> str: method get_type (line 45) | def get_type() -> ModuleType: method get_subtype (line 52) | def get_subtype() -> OtherModulesType: method get_priority (line 59) | def get_priority() -> int: method init_setting (line 65) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method stop (line 68) | def stop(self) -> None: method test (line 71) | def test(self): method _get_subtitle_links (line 74) | def _get_subtitle_links(self, torrent: TorrentInfo): method download_added (line 126) | def download_added(self, context: Context, download_dir: Path, torrent... FILE: app/modules/synologychat/__init__.py class SynologyChatModule (line 11) | class SynologyChatModule(_ModuleBase, _MessageBase[SynologyChat]): method init_module (line 13) | def init_module(self) -> None: method get_name (line 22) | def get_name() -> str: method get_type (line 26) | def get_type() -> ModuleType: method get_subtype (line 33) | def get_subtype() -> MessageChannel: method get_priority (line 40) | def get_priority() -> int: method stop (line 46) | def stop(self): method test (line 49) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 61) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method message_parser (line 64) | def message_parser(self, source: str, body: Any, form: Any, method post_message (line 108) | def post_message(self, message: Notification, **kwargs) -> None: method post_medias_message (line 129) | def post_medias_message(self, message: Notification, medias: List[Medi... method post_torrents_message (line 144) | def post_torrents_message(self, message: Notification, torrents: List[... FILE: app/modules/synologychat/synologychat.py class SynologyChat (line 16) | class SynologyChat: method __init__ (line 17) | def __init__(self, SYNOLOGYCHAT_WEBHOOK: Optional[str] = None, SYNOLOG... method check_token (line 27) | def check_token(self, token: str) -> bool: method get_state (line 30) | def get_state(self) -> bool: method send_msg (line 41) | def send_msg(self, title: str, text: Optional[str] = None, image: Opti... method send_medias_msg (line 93) | def send_medias_msg(self, medias: List[MediaInfo], userid: Optional[st... method send_torrents_msg (line 137) | def send_torrents_msg(self, torrents: List[Context], method __get_bot_users (line 185) | def __get_bot_users(self): method __send_request (line 201) | def __send_request(self, payload_data): FILE: app/modules/telegram/__init__.py class TelegramModule (line 17) | class TelegramModule(_ModuleBase, _MessageBase[Telegram]): method init_module (line 19) | def init_module(self) -> None: method get_name (line 28) | def get_name() -> str: method get_type (line 32) | def get_type() -> ModuleType: method get_subtype (line 39) | def get_subtype() -> MessageChannel: method get_priority (line 46) | def get_priority() -> int: method stop (line 52) | def stop(self): method test (line 59) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 71) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method message_parser (line 74) | def message_parser(self, source: str, body: Any, form: Any, method _handle_callback_query (line 143) | def _handle_callback_query(message: dict, client_config: NotificationC... method _handle_text_message (line 175) | def _handle_text_message(self, msg: dict, method _clean_bot_mention (line 222) | def _clean_bot_mention(text: str, bot_username: Optional[str]) -> str: method post_message (line 248) | def post_message(self, message: Notification, **kwargs) -> None: method post_medias_message (line 272) | def post_medias_message(self, message: Notification, medias: List[Medi... method post_torrents_message (line 290) | def post_torrents_message(self, message: Notification, torrents: List[... method delete_message (line 308) | def delete_message(self, channel: MessageChannel, source: str, method register_commands (line 331) | def register_commands(self, commands: Dict[str, dict]): FILE: app/modules/telegram/telegram.py class RetryException (line 23) | class RetryException(Exception): class Telegram (line 27) | class Telegram: method __init__ (line 34) | def __init__(self, TELEGRAM_TOKEN: Optional[str] = None, TELEGRAM_CHAT... method bot_username (line 151) | def bot_username(self) -> Optional[str]: method _update_user_chat_mapping (line 158) | def _update_user_chat_mapping(self, userid: int, chat_id: int) -> None: method _get_user_chat_id (line 167) | def _get_user_chat_id(self, userid: str) -> Optional[str]: method _should_process_message (line 175) | def _should_process_message(self, message) -> bool: method get_state (line 220) | def get_state(self) -> bool: method send_msg (line 226) | def send_msg(self, title: str, text: Optional[str] = None, image: Opti... method _determine_target_chat_id (line 287) | def _determine_target_chat_id(self, userid: Optional[str] = None, method send_medias_msg (line 310) | def send_medias_msg(self, medias: List[MediaInfo], userid: Optional[st... method send_torrents_msg (line 371) | def send_torrents_msg(self, torrents: List[Context], method _create_inline_keyboard (line 432) | def _create_inline_keyboard(buttons: List[List[Dict]]) -> InlineKeyboa... method answer_callback_query (line 452) | def answer_callback_query(self, callback_query_id: int, text: Optional... method delete_msg (line 467) | def delete_msg(self, message_id: int, chat_id: Optional[int] = None) -... method __edit_message (line 496) | def __edit_message(self, chat_id: str, message_id: int, text: str, method __send_request (line 541) | def __send_request(self, userid: Optional[str] = None, image="", capti... method __process_image (line 571) | def __process_image(image_url: Optional[str]) -> Optional[bytes]: method __send_short_message (line 583) | def __send_short_message(self, image: Optional[bytes], caption: str, *... method __send_long_message (line 603) | def __send_long_message(self, image: Optional[bytes], caption: str, se... method register_commands (line 650) | def register_commands(self, commands: Dict[str, dict]): method delete_commands (line 666) | def delete_commands(self): method stop (line 675) | def stop(self): FILE: app/modules/themoviedb/__init__.py class TheMovieDbModule (line 23) | class TheMovieDbModule(_ModuleBase): method init_module (line 38) | def init_module(self) -> None: method on_config_changed (line 44) | def on_config_changed(self): method get_name (line 51) | def get_name() -> str: method get_type (line 55) | def get_type() -> ModuleType: method get_subtype (line 62) | def get_subtype() -> MediaRecognizeType: method get_priority (line 69) | def get_priority() -> int: method stop (line 75) | def stop(self): method test (line 79) | def test(self) -> Tuple[bool, str]: method init_setting (line 91) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method _validate_recognize_params (line 95) | def _validate_recognize_params(meta: MetaBase, tmdbid: Optional[int]) ... method _prepare_search_names (line 112) | def _prepare_search_names(meta: MetaBase) -> List[str]: method _search_by_name (line 121) | def _search_by_name(self, name: str, meta: MetaBase, group_seasons: Li... method _async_search_by_name (line 157) | async def _async_search_by_name(self, name: str, meta: MetaBase, group... method _process_episode_groups (line 193) | def _process_episode_groups(self, mediainfo: MediaInfo, episode_group:... method _async_process_episode_groups (line 254) | async def _async_process_episode_groups(self, mediainfo: MediaInfo, ep... method _build_media_info_result (line 315) | def _build_media_info_result(self, info: dict, meta: MetaBase, tmdbid:... method _async_build_media_info_result (line 341) | async def _async_build_media_info_result(self, info: dict, meta: MetaB... method recognize_media (line 367) | def recognize_media(self, meta: MetaBase = None, method async_recognize_media (line 448) | async def async_recognize_media(self, meta: MetaBase = None, method match_tmdbinfo (line 529) | def match_tmdbinfo(self, name: str, mtype: MediaType = None, method async_match_tmdbinfo (line 550) | async def async_match_tmdbinfo(self, name: str, mtype: MediaType = None, method tmdb_info (line 571) | def tmdb_info(self, tmdbid: int, mtype: MediaType, season: Optional[in... method async_tmdb_info (line 584) | async def async_tmdb_info(self, tmdbid: int, mtype: MediaType, season:... method media_category (line 597) | def media_category(self) -> Optional[Dict[str, list]]: method search_medias (line 607) | def search_medias(self, meta: MetaBase) -> Optional[List[MediaInfo]]: method search_persons (line 646) | def search_persons(self, name: str) -> Optional[List[schemas.MediaPers... method async_search_persons (line 659) | async def async_search_persons(self, name: str) -> Optional[List[schem... method search_collections (line 672) | def search_collections(self, name: str) -> Optional[List[MediaInfo]]: method async_search_collections (line 683) | async def async_search_collections(self, name: str) -> Optional[List[M... method tmdb_collection (line 694) | def tmdb_collection(self, collection_id: int) -> Optional[List[MediaIn... method metadata_nfo (line 704) | def metadata_nfo(self, meta: MetaBase, mediainfo: MediaInfo, method metadata_img (line 717) | def metadata_img(self, mediainfo: MediaInfo, season: Optional[int] = N... method tmdb_discover (line 729) | def tmdb_discover(self, mtype: MediaType, sort_by: str, method tmdb_trending (line 781) | def tmdb_trending(self, page: Optional[int] = 1) -> List[MediaInfo]: method tmdb_seasons (line 792) | def tmdb_seasons(self, tmdbid: int) -> List[schemas.TmdbSeason]: method tmdb_group_seasons (line 803) | def tmdb_group_seasons(self, group_id: str) -> List[schemas.TmdbSeason]: method tmdb_episodes (line 818) | def tmdb_episodes(self, tmdbid: int, season: int, episode_group: Optio... method scheduler_job (line 833) | def scheduler_job(self) -> None: method _validate_obtain_images_params (line 840) | def _validate_obtain_images_params(mediainfo: MediaInfo) -> Optional[M... method _process_tmdb_images (line 858) | def _process_tmdb_images(mediainfo: MediaInfo, images: dict) -> MediaI... method obtain_images (line 887) | def obtain_images(self, mediainfo: MediaInfo) -> Optional[MediaInfo]: method async_obtain_images (line 909) | async def async_obtain_images(self, mediainfo: MediaInfo) -> Optional[... method obtain_specific_image (line 931) | def obtain_specific_image(self, mediaid: Union[str, int], mtype: Media... method tmdb_movie_similar (line 965) | def tmdb_movie_similar(self, tmdbid: int) -> List[MediaInfo]: method tmdb_tv_similar (line 975) | def tmdb_tv_similar(self, tmdbid: int) -> List[MediaInfo]: method tmdb_movie_recommend (line 985) | def tmdb_movie_recommend(self, tmdbid: int) -> List[MediaInfo]: method tmdb_tv_recommend (line 995) | def tmdb_tv_recommend(self, tmdbid: int) -> List[MediaInfo]: method tmdb_movie_credits (line 1005) | def tmdb_movie_credits(self, tmdbid: int, page: Optional[int] = 1) -> ... method tmdb_tv_credits (line 1016) | def tmdb_tv_credits(self, tmdbid: int, page: Optional[int] = 1) -> Lis... method tmdb_person_detail (line 1027) | def tmdb_person_detail(self, person_id: int) -> schemas.MediaPerson: method tmdb_person_credits (line 1037) | def tmdb_person_credits(self, person_id: int, page: Optional[int] = 1)... method async_search_medias (line 1049) | async def async_search_medias(self, meta: MetaBase) -> Optional[List[M... method async_tmdb_discover (line 1088) | async def async_tmdb_discover(self, mtype: MediaType, sort_by: str, method async_tmdb_trending (line 1141) | async def async_tmdb_trending(self, page: Optional[int] = 1) -> List[M... method async_tmdb_collection (line 1152) | async def async_tmdb_collection(self, collection_id: int) -> Optional[... method async_tmdb_seasons (line 1162) | async def async_tmdb_seasons(self, tmdbid: int) -> List[schemas.TmdbSe... method async_tmdb_group_seasons (line 1173) | async def async_tmdb_group_seasons(self, group_id: str) -> List[schema... method async_tmdb_episodes (line 1188) | async def async_tmdb_episodes(self, tmdbid: int, season: int, method async_tmdb_movie_similar (line 1204) | async def async_tmdb_movie_similar(self, tmdbid: int) -> List[MediaInfo]: method async_tmdb_tv_similar (line 1214) | async def async_tmdb_tv_similar(self, tmdbid: int) -> List[MediaInfo]: method async_tmdb_movie_recommend (line 1224) | async def async_tmdb_movie_recommend(self, tmdbid: int) -> List[MediaI... method async_tmdb_tv_recommend (line 1234) | async def async_tmdb_tv_recommend(self, tmdbid: int) -> List[MediaInfo]: method async_tmdb_movie_credits (line 1244) | async def async_tmdb_movie_credits(self, tmdbid: int, page: Optional[i... method async_tmdb_tv_credits (line 1255) | async def async_tmdb_tv_credits(self, tmdbid: int, page: Optional[int]... method async_tmdb_person_detail (line 1266) | async def async_tmdb_person_detail(self, person_id: int) -> schemas.Me... method async_tmdb_person_credits (line 1276) | async def async_tmdb_person_credits(self, person_id: int, page: Option... method clear_cache (line 1287) | def clear_cache(self): method load_category_config (line 1296) | def load_category_config(self) -> CategoryConfig: method save_category_config (line 1302) | def save_category_config(self, config: CategoryConfig) -> bool: FILE: app/modules/themoviedb/category.py class CategoryHelper (line 28) | class CategoryHelper(metaclass=WeakSingleton): method __init__ (line 33) | def __init__(self): method init (line 40) | def init(self): method load (line 62) | def load(self) -> CategoryConfig: method save (line 79) | def save(self, config: CategoryConfig) -> bool: method is_movie_category (line 97) | def is_movie_category(self) -> bool: method is_tv_category (line 106) | def is_tv_category(self) -> bool: method movie_categorys (line 115) | def movie_categorys(self) -> list: method tv_categorys (line 124) | def tv_categorys(self) -> list: method get_movie_category (line 132) | def get_movie_category(self, tmdb_info) -> str: method get_tv_category (line 140) | def get_tv_category(self, tmdb_info) -> str: method get_category (line 149) | def get_category(categorys: Union[dict, CommentedMap], tmdb_info: dict... FILE: app/modules/themoviedb/scraper.py class TmdbScraper (line 13) | class TmdbScraper: method default_tmdb (line 18) | def default_tmdb(self): method original_tmdb (line 26) | def original_tmdb(self, mediainfo: Optional[MediaInfo] = None): method get_metadata_nfo (line 34) | def get_metadata_nfo(self, meta: MetaBase, mediainfo: MediaInfo, method get_metadata_img (line 69) | def get_metadata_img(self, mediainfo: MediaInfo, season: Optional[int]... method get_season_poster (line 124) | def get_season_poster(seasoninfo: dict, season: int) -> Tuple[str, str]: method __get_episode_detail (line 144) | def __get_episode_detail(seasoninfo: dict, episode: int) -> dict: method __gen_common_nfo (line 154) | def __gen_common_nfo(mediainfo: MediaInfo, doc: minidom.Document, root... method __gen_movie_nfo_file (line 209) | def __gen_movie_nfo_file(self, mediainfo: MediaInfo) -> minidom.Document: method __gen_tv_nfo_file (line 230) | def __gen_tv_nfo_file(self, mediainfo: MediaInfo) -> minidom.Document: method __gen_tv_season_nfo_file (line 255) | def __gen_tv_season_nfo_file(seasoninfo: dict, season: int) -> minidom... method __gen_tv_episode_nfo_file (line 281) | def __gen_tv_episode_nfo_file(tmdbid: int, FILE: app/modules/themoviedb/tmdb_cache.py class TmdbCache (line 16) | class TmdbCache(metaclass=WeakSingleton): method __init__ (line 29) | def __init__(self): method clear (line 41) | def clear(self): method __get_key (line 49) | def __get_key(meta: MetaBase) -> str: method get (line 55) | def get(self, meta: MetaBase): method delete (line 64) | def delete(self, key: str) -> dict: method modify (line 77) | def modify(self, key: str, title: str) -> dict: method __load (line 93) | def __load(path: Path) -> dict: method update (line 106) | def update(self, meta: MetaBase, info: dict) -> None: method save (line 138) | def save(self, force: bool = False) -> None: method __del__ (line 158) | def __del__(self): FILE: app/modules/themoviedb/tmdbapi.py class TmdbApi (line 21) | class TmdbApi: method __init__ (line 26) | def __init__(self, language: Optional[str] = None): method search_multiis (line 40) | def search_multiis(self, title: str) -> List[dict]: method search_movies (line 54) | def search_movies(self, title: str, year: str) -> List[dict]: method search_tvs (line 71) | def search_tvs(self, title: str, year: str) -> List[dict]: method search_persons (line 88) | def search_persons(self, name: str) -> List[dict]: method search_collections (line 96) | def search_collections(self, name: str) -> List[dict]: method get_collection (line 108) | def get_collection(self, collection_id: int) -> List[dict]: method __compare_names (line 123) | def __compare_names(file_name: str, tmdb_names: list) -> bool: method _validate_match_params (line 143) | def _validate_match_params(name: str, search_obj) -> bool: method _generate_year_range (line 154) | def _generate_year_range(year: Optional[str]) -> List[Optional[str]]: method _log_match_debug (line 165) | def _log_match_debug(mtype: MediaType, name: str, year: Optional[str] ... method _set_media_type (line 176) | def _set_media_type(info: dict, mtype: MediaType) -> dict: method _sort_multi_results (line 185) | def _sort_multi_results(multis: List[dict]) -> List[dict]: method _convert_media_type (line 200) | def _convert_media_type(ret_info: dict) -> dict: method _match_multi_item (line 209) | def _match_multi_item(self, name: str, multi: dict, get_info_func) -> ... method _async_match_multi_item (line 237) | async def _async_match_multi_item(self, name: str, multi: dict) -> Opt... method _validate_web_params (line 266) | def _validate_web_params(name: str) -> Optional[dict]: method _build_tmdb_search_url (line 278) | def _build_tmdb_search_url(name: str) -> str: method _validate_response (line 285) | def _validate_response(res) -> Optional[dict]: method _extract_tmdb_links (line 299) | def _extract_tmdb_links(html_text: str, mtype: MediaType) -> List[str]: method _log_web_search_result (line 328) | def _log_web_search_result(name: str, tmdbinfo: dict): method _process_web_search_links (line 345) | def _process_web_search_links(self, name: str, mtype: MediaType, method _async_process_web_search_links (line 369) | async def _async_process_web_search_links(self, name: str, method _parse_tmdb_id_from_link (line 394) | def _parse_tmdb_id_from_link(link: str) -> Optional[int]: method __get_names (line 411) | def __get_names(tmdb_info: dict) -> List[str]: method match (line 444) | def match(self, name: str, method __search_movie_by_name (line 492) | def __search_movie_by_name(self, name: str, year: str) -> Optional[dict]: method __search_tv_by_name (line 539) | def __search_tv_by_name(self, name: str, year: str) -> Optional[dict]: method __search_tv_by_season (line 585) | def __search_tv_by_season(self, name: str, season_year: str, season_nu... method __get_tv_seasons (line 668) | def __get_tv_seasons(tv_info: dict) -> Optional[dict]: method match_multi (line 705) | def match_multi(self, name: str) -> Optional[dict]: method match_web (line 742) | def match_web(self, name: str, mtype: MediaType) -> Optional[dict]: method get_info (line 774) | def get_info(self, method __get_content_rating (line 835) | def __get_content_rating(tmdb_info: dict) -> Optional[str]: method __update_tmdbinfo_cn_title (line 897) | def __update_tmdbinfo_cn_title(tmdb_info: dict): method __update_tmdbinfo_extra_title (line 944) | def __update_tmdbinfo_extra_title(tmdb_info: dict): method __get_movie_detail (line 982) | def __get_movie_detail(self, method __get_tv_detail (line 1095) | def __get_tv_detail(self, method get_tv_season_detail (line 1280) | def get_tv_season_detail(self, tmdbid: int, season: int): method get_tv_episode_detail (line 1354) | def get_tv_episode_detail(self, tmdbid: int, season: int, episode: int... method discover_movies (line 1371) | def discover_movies(self, params: dict) -> List[dict]: method discover_tvs (line 1390) | def discover_tvs(self, params: dict) -> List[dict]: method discover_trending (line 1409) | def discover_trending(self, page: Optional[int] = 1) -> List[dict]: method get_movie_images (line 1422) | def get_movie_images(self, tmdbid: int) -> dict: method get_tv_images (line 1435) | def get_tv_images(self, tmdbid: int) -> dict: method get_movie_similar (line 1448) | def get_movie_similar(self, tmdbid: int) -> List[dict]: method get_tv_similar (line 1461) | def get_tv_similar(self, tmdbid: int) -> List[dict]: method get_movie_recommend (line 1474) | def get_movie_recommend(self, tmdbid: int) -> List[dict]: method get_tv_recommend (line 1487) | def get_tv_recommend(self, tmdbid: int) -> List[dict]: method get_movie_credits (line 1500) | def get_movie_credits(self, tmdbid: int, page: Optional[int] = 1, coun... method get_tv_credits (line 1517) | def get_tv_credits(self, tmdbid: int, page: Optional[int] = 1, count: ... method get_tv_group_seasons (line 1534) | def get_tv_group_seasons(self, group_id: str) -> List[dict]: method get_tv_group_detail (line 1558) | def get_tv_group_detail(self, group_id: str, season: int) -> dict: method get_person_detail (line 1570) | def get_person_detail(self, person_id: int) -> dict: method get_person_credits (line 1603) | def get_person_credits(self, person_id: int, page: Optional[int] = 1, ... method clear_cache (line 1624) | def clear_cache(self): method __async_search_movie_by_name (line 1634) | async def __async_search_movie_by_name(self, name: str, year: str) -> ... method __async_search_tv_by_name (line 1681) | async def __async_search_tv_by_name(self, name: str, year: str) -> Opt... method __async_search_tv_by_season (line 1727) | async def __async_search_tv_by_season(self, name: str, season_year: st... method __async_get_movie_detail (line 1803) | async def __async_get_movie_detail(self, method __async_get_tv_detail (line 1828) | async def __async_get_tv_detail(self, method async_match_web (line 1857) | async def async_match_web(self, name: str, mtype: MediaType) -> Option... method async_search_multiis (line 1890) | async def async_search_multiis(self, title: str) -> List[dict]: method async_search_movies (line 1904) | async def async_search_movies(self, title: str, year: str) -> List[dict]: method async_search_tvs (line 1921) | async def async_search_tvs(self, title: str, year: str) -> List[dict]: method async_discover_movies (line 1938) | async def async_discover_movies(self, params: dict) -> List[dict]: method async_discover_tvs (line 1953) | async def async_discover_tvs(self, params: dict) -> List[dict]: method async_search_persons (line 1968) | async def async_search_persons(self, name: str) -> List[dict]: method async_search_collections (line 1976) | async def async_search_collections(self, name: str) -> List[dict]: method async_get_collection (line 1988) | async def async_get_collection(self, collection_id: int) -> List[dict]: method async_match (line 2002) | async def async_match(self, name: str, method async_match_multi (line 2050) | async def async_match_multi(self, name: str) -> Optional[dict]: method async_get_info (line 2085) | async def async_get_info(self, method async_get_tv_season_detail (line 2145) | async def async_get_tv_season_detail(self, tmdbid: int, season: int): method async_get_tv_episode_detail (line 2162) | async def async_get_tv_episode_detail(self, tmdbid: int, season: int, ... method async_discover_trending (line 2179) | async def async_discover_trending(self, page: Optional[int] = 1) -> Li... method async_get_movie_images (line 2192) | async def async_get_movie_images(self, tmdbid: int) -> dict: method async_get_tv_images (line 2205) | async def async_get_tv_images(self, tmdbid: int) -> dict: method async_get_movie_similar (line 2218) | async def async_get_movie_similar(self, tmdbid: int) -> List[dict]: method async_get_tv_similar (line 2231) | async def async_get_tv_similar(self, tmdbid: int) -> List[dict]: method async_get_movie_recommend (line 2244) | async def async_get_movie_recommend(self, tmdbid: int) -> List[dict]: method async_get_tv_recommend (line 2257) | async def async_get_tv_recommend(self, tmdbid: int) -> List[dict]: method async_get_movie_credits (line 2270) | async def async_get_movie_credits(self, tmdbid: int, method async_get_tv_credits (line 2288) | async def async_get_tv_credits(self, tmdbid: int, page: Optional[int] ... method async_get_tv_group_seasons (line 2305) | async def async_get_tv_group_seasons(self, group_id: str) -> List[dict]: method async_get_tv_group_detail (line 2329) | async def async_get_tv_group_detail(self, group_id: str, season: int) ... method async_get_person_detail (line 2341) | async def async_get_person_detail(self, person_id: int) -> dict: method async_get_person_credits (line 2354) | async def async_get_person_credits(self, person_id: int, method close (line 2376) | def close(self): FILE: app/modules/themoviedb/tmdbv3api/as_obj.py class AsObj (line 5) | class AsObj: method __init__ (line 6) | def __init__(self, json=None, key=None, dict_key=False, dict_key_name=... method _dict (line 36) | def _dict(self): method to_dict (line 39) | def to_dict(self): method __delitem__ (line 42) | def __delitem__(self, key): method __getitem__ (line 45) | def __getitem__(self, key): method __iter__ (line 51) | def __iter__(self): method __len__ (line 54) | def __len__(self): method __repr__ (line 57) | def __repr__(self): method __setitem__ (line 60) | def __setitem__(self, key, value): method __str__ (line 63) | def __str__(self): method __reversed__ (line 67) | def __reversed__(self): method __class_getitem__ (line 71) | def __class_getitem__(cls, key): method __ior__ (line 74) | def __ior__(self, value): method __or__ (line 77) | def __or__(self, value): method copy (line 80) | def copy(self): method get (line 83) | def get(self, key, value=None): method items (line 86) | def items(self): method keys (line 89) | def keys(self): method pop (line 92) | def pop(self, key, value=None): method popitem (line 95) | def popitem(self): method setdefault (line 98) | def setdefault(self, key, value=None): method update (line 101) | def update(self, entries): method values (line 104) | def values(self): FILE: app/modules/themoviedb/tmdbv3api/exceptions.py class TMDbException (line 1) | class TMDbException(Exception): FILE: app/modules/themoviedb/tmdbv3api/objs/account.py class Account (line 7) | class Account(TMDb): method account_id (line 23) | def account_id(self): method details (line 28) | def details(self): method async_details (line 38) | async def async_details(self): method created_lists (line 48) | def created_lists(self, page=1): method async_created_lists (line 60) | async def async_created_lists(self, page=1): method _get_list (line 72) | def _get_list(self, url, asc_sort=True, page=1): method _async_get_list (line 82) | async def _async_get_list(self, url, asc_sort=True, page=1): method favorite_movies (line 92) | def favorite_movies(self, asc_sort=True, page=1): method async_favorite_movies (line 101) | async def async_favorite_movies(self, asc_sort=True, page=1): method favorite_tv_shows (line 110) | def favorite_tv_shows(self, asc_sort=True, page=1): method async_favorite_tv_shows (line 119) | async def async_favorite_tv_shows(self, asc_sort=True, page=1): method mark_as_favorite (line 128) | def mark_as_favorite(self, media_id, media_type, favorite=True): method async_mark_as_favorite (line 148) | async def async_mark_as_favorite(self, media_id, media_type, favorite=... method unmark_as_favorite (line 168) | def unmark_as_favorite(self, media_id, media_type): method async_unmark_as_favorite (line 176) | async def async_unmark_as_favorite(self, media_id, media_type): method rated_movies (line 184) | def rated_movies(self, asc_sort=True, page=1): method async_rated_movies (line 193) | async def async_rated_movies(self, asc_sort=True, page=1): method rated_tv_shows (line 202) | def rated_tv_shows(self, asc_sort=True, page=1): method async_rated_tv_shows (line 211) | async def async_rated_tv_shows(self, asc_sort=True, page=1): method rated_episodes (line 220) | def rated_episodes(self, asc_sort=True, page=1): method async_rated_episodes (line 229) | async def async_rated_episodes(self, asc_sort=True, page=1): method movie_watchlist (line 238) | def movie_watchlist(self, asc_sort=True, page=1): method async_movie_watchlist (line 247) | async def async_movie_watchlist(self, asc_sort=True, page=1): method tv_show_watchlist (line 256) | def tv_show_watchlist(self, asc_sort=True, page=1): method async_tv_show_watchlist (line 265) | async def async_tv_show_watchlist(self, asc_sort=True, page=1): method add_to_watchlist (line 274) | def add_to_watchlist(self, media_id, media_type, watchlist=True): method async_add_to_watchlist (line 294) | async def async_add_to_watchlist(self, media_id, media_type, watchlist... method remove_from_watchlist (line 314) | def remove_from_watchlist(self, media_id, media_type): method async_remove_from_watchlist (line 322) | async def async_remove_from_watchlist(self, media_id, media_type): FILE: app/modules/themoviedb/tmdbv3api/objs/auth.py class Authentication (line 4) | class Authentication(TMDb): method __init__ (line 12) | def __init__(self, username, password): method _create_request_token (line 21) | def _create_request_token(self): method _create_session (line 29) | def _create_session(self): method _authorise_request_token_with_login (line 40) | def _authorise_request_token_with_login(self): method delete_session (line 54) | def delete_session(self): FILE: app/modules/themoviedb/tmdbv3api/objs/certification.py class Certification (line 4) | class Certification(TMDb): method movie_list (line 10) | def movie_list(self): method async_movie_list (line 17) | async def async_movie_list(self): method tv_list (line 24) | def tv_list(self): method async_tv_list (line 31) | async def async_tv_list(self): FILE: app/modules/themoviedb/tmdbv3api/objs/change.py class Change (line 4) | class Change(TMDb): method _change_list (line 11) | def _change_list(self, change_type, start_date="", end_date="", page=1): method _async_change_list (line 23) | async def _async_change_list(self, change_type, start_date="", end_dat... method movie_change_list (line 35) | def movie_change_list(self, start_date="", end_date="", page=1): method async_movie_change_list (line 46) | async def async_movie_change_list(self, start_date="", end_date="", pa... method tv_change_list (line 57) | def tv_change_list(self, start_date="", end_date="", page=1): method async_tv_change_list (line 68) | async def async_tv_change_list(self, start_date="", end_date="", page=1): method person_change_list (line 79) | def person_change_list(self, start_date="", end_date="", page=1): method async_person_change_list (line 90) | async def async_person_change_list(self, start_date="", end_date="", p... FILE: app/modules/themoviedb/tmdbv3api/objs/collection.py class Collection (line 4) | class Collection(TMDb): method details (line 11) | def details(self, collection_id): method images (line 19) | def images(self, collection_id): method translations (line 27) | def translations(self, collection_id): method async_details (line 36) | async def async_details(self, collection_id): method async_images (line 44) | async def async_images(self, collection_id): method async_translations (line 52) | async def async_translations(self, collection_id): FILE: app/modules/themoviedb/tmdbv3api/objs/company.py class Company (line 4) | class Company(TMDb): method details (line 12) | def details(self, company_id): method alternative_names (line 20) | def alternative_names(self, company_id): method images (line 28) | def images(self, company_id): method movies (line 36) | def movies(self, company_id, page=1): method async_details (line 50) | async def async_details(self, company_id): method async_alternative_names (line 58) | async def async_alternative_names(self, company_id): method async_images (line 66) | async def async_images(self, company_id): method async_movies (line 74) | async def async_movies(self, company_id, page=1): FILE: app/modules/themoviedb/tmdbv3api/objs/configuration.py class Configuration (line 6) | class Configuration(TMDb): method info (line 16) | def info(self): method api_configuration (line 21) | def api_configuration(self): method countries (line 27) | def countries(self): method jobs (line 33) | def jobs(self): method languages (line 39) | def languages(self): method primary_translations (line 45) | def primary_translations(self): method timezones (line 51) | def timezones(self): method async_api_configuration (line 58) | async def async_api_configuration(self): method async_countries (line 64) | async def async_countries(self): method async_jobs (line 70) | async def async_jobs(self): method async_languages (line 76) | async def async_languages(self): method async_primary_translations (line 82) | async def async_primary_translations(self): method async_timezones (line 88) | async def async_timezones(self): FILE: app/modules/themoviedb/tmdbv3api/objs/credit.py class Credit (line 4) | class Credit(TMDb): method details (line 9) | def details(self, credit_id): method async_details (line 17) | async def async_details(self, credit_id): FILE: app/modules/themoviedb/tmdbv3api/objs/discover.py class Discover (line 10) | class Discover(TMDb): method discover_movies (line 17) | def discover_movies(self, params_tuple): method discover_tv_shows (line 27) | def discover_tv_shows(self, params_tuple): method async_discover_movies (line 37) | async def async_discover_movies(self, params_tuple): method async_discover_tv_shows (line 47) | async def async_discover_tv_shows(self, params_tuple): FILE: app/modules/themoviedb/tmdbv3api/objs/episode.py class Episode (line 4) | class Episode(TMDb): method details (line 18) | def details(self, tv_id, season_num, episode_num, append_to_response="... method account_states (line 32) | def account_states(self, tv_id, season_num, episode_num): method changes (line 45) | def changes(self, episode_id, start_date=None, end_date=None, page=1): method credits (line 66) | def credits(self, tv_id, season_num, episode_num): method external_ids (line 76) | def external_ids(self, tv_id, season_num, episode_num): method images (line 86) | def images(self, tv_id, season_num, episode_num, include_image_languag... method translations (line 101) | def translations(self, tv_id, season_num, episode_num): method rate_tv_episode (line 114) | def rate_tv_episode(self, tv_id, season_num, episode_num, rating): method delete_rating (line 129) | def delete_rating(self, tv_id, season_num, episode_num): method videos (line 142) | def videos(self, tv_id, season_num, episode_num, include_video_languag... method async_details (line 160) | async def async_details(self, tv_id, season_num, episode_num, method async_account_states (line 175) | async def async_account_states(self, tv_id, season_num, episode_num): method async_changes (line 188) | async def async_changes(self, episode_id, start_date=None, end_date=No... method async_credits (line 209) | async def async_credits(self, tv_id, season_num, episode_num): method async_external_ids (line 219) | async def async_external_ids(self, tv_id, season_num, episode_num): method async_images (line 229) | async def async_images(self, tv_id, season_num, episode_num, include_i... method async_translations (line 244) | async def async_translations(self, tv_id, season_num, episode_num): method async_rate_tv_episode (line 257) | async def async_rate_tv_episode(self, tv_id, season_num, episode_num, ... method async_delete_rating (line 272) | async def async_delete_rating(self, tv_id, season_num, episode_num): method async_videos (line 285) | async def async_videos(self, tv_id, season_num, episode_num, include_v... FILE: app/modules/themoviedb/tmdbv3api/objs/find.py class Find (line 4) | class Find(TMDb): method find (line 9) | def find(self, external_id, external_source): method find_by_imdb_id (line 21) | def find_by_imdb_id(self, imdb_id): method find_by_tvdb_id (line 29) | def find_by_tvdb_id(self, tvdb_id): method find_by_freebase_mid (line 37) | def find_by_freebase_mid(self, freebase_mid): method find_by_freebase_id (line 45) | def find_by_freebase_id(self, freebase_id): method find_by_tvrage_id (line 53) | def find_by_tvrage_id(self, tvrage_id): method find_by_facebook_id (line 61) | def find_by_facebook_id(self, facebook_id): method find_by_instagram_id (line 69) | def find_by_instagram_id(self, instagram_id): method find_by_twitter_id (line 77) | def find_by_twitter_id(self, twitter_id): method async_find (line 86) | async def async_find(self, external_id, external_source): method async_find_by_imdb_id (line 98) | async def async_find_by_imdb_id(self, imdb_id): method async_find_by_tvdb_id (line 106) | async def async_find_by_tvdb_id(self, tvdb_id): method async_find_by_freebase_mid (line 114) | async def async_find_by_freebase_mid(self, freebase_mid): method async_find_by_freebase_id (line 122) | async def async_find_by_freebase_id(self, freebase_id): method async_find_by_tvrage_id (line 130) | async def async_find_by_tvrage_id(self, tvrage_id): method async_find_by_facebook_id (line 138) | async def async_find_by_facebook_id(self, facebook_id): method async_find_by_instagram_id (line 146) | async def async_find_by_instagram_id(self, instagram_id): method async_find_by_twitter_id (line 154) | async def async_find_by_twitter_id(self, twitter_id): FILE: app/modules/themoviedb/tmdbv3api/objs/genre.py class Genre (line 4) | class Genre(TMDb): method movie_list (line 10) | def movie_list(self): method tv_list (line 17) | def tv_list(self): method async_movie_list (line 25) | async def async_movie_list(self): method async_tv_list (line 32) | async def async_tv_list(self): FILE: app/modules/themoviedb/tmdbv3api/objs/group.py class Group (line 4) | class Group(TMDb): method details (line 9) | def details(self, group_id): method async_details (line 17) | async def async_details(self, group_id): FILE: app/modules/themoviedb/tmdbv3api/objs/keyword.py class Keyword (line 4) | class Keyword(TMDb): method details (line 10) | def details(self, keyword_id): method movies (line 18) | def movies(self, keyword_id): method async_details (line 27) | async def async_details(self, keyword_id): method async_movies (line 35) | async def async_movies(self, keyword_id): FILE: app/modules/themoviedb/tmdbv3api/objs/list.py class List (line 4) | class List(TMDb): method details (line 15) | def details(self, list_id): method check_item_status (line 23) | def check_item_status(self, list_id, movie_id): method create_list (line 32) | def create_list(self, name, description): method add_movie (line 50) | def add_movie(self, list_id, movie_id): method remove_movie (line 63) | def remove_movie(self, list_id, movie_id): method clear_list (line 76) | def clear_list(self, list_id): method delete_list (line 87) | def delete_list(self, list_id): method async_details (line 99) | async def async_details(self, list_id): method async_check_item_status (line 107) | async def async_check_item_status(self, list_id, movie_id): method async_create_list (line 117) | async def async_create_list(self, name, description): method async_add_movie (line 136) | async def async_add_movie(self, list_id, movie_id): method async_remove_movie (line 149) | async def async_remove_movie(self, list_id, movie_id): method async_clear_list (line 162) | async def async_clear_list(self, list_id): method async_delete_list (line 173) | async def async_delete_list(self, list_id): FILE: app/modules/themoviedb/tmdbv3api/objs/movie.py class Movie (line 4) | class Movie(TMDb): method details (line 31) | def details(self, movie_id, append_to_response="videos,trailers,images... method account_states (line 43) | def account_states(self, movie_id): method alternative_titles (line 55) | def alternative_titles(self, movie_id, country=None): method changes (line 68) | def changes(self, movie_id, start_date=None, end_date=None, page=1): method credits (line 89) | def credits(self, movie_id): method external_ids (line 97) | def external_ids(self, movie_id): method images (line 105) | def images(self, movie_id, include_image_language=None): method keywords (line 121) | def keywords(self, movie_id): method lists (line 132) | def lists(self, movie_id, page=1): method recommendations (line 145) | def recommendations(self, movie_id, page=1): method release_dates (line 158) | def release_dates(self, movie_id): method reviews (line 169) | def reviews(self, movie_id, page=1): method similar (line 182) | def similar(self, movie_id, page=1): method translations (line 195) | def translations(self, movie_id): method videos (line 206) | def videos(self, movie_id, page=1): method watch_providers (line 219) | def watch_providers(self, movie_id): method rate_movie (line 230) | def rate_movie(self, movie_id, rating): method delete_rating (line 243) | def delete_rating(self, movie_id): method latest (line 254) | def latest(self): method now_playing (line 261) | def now_playing(self, region=None, page=1): method popular (line 277) | def popular(self, region=None, page=1): method top_rated (line 293) | def top_rated(self, region=None, page=1): method upcoming (line 309) | def upcoming(self, region=None, page=1): method async_details (line 326) | async def async_details(self, movie_id, method async_account_states (line 339) | async def async_account_states(self, movie_id): method async_alternative_titles (line 351) | async def async_alternative_titles(self, movie_id, country=None): method async_changes (line 364) | async def async_changes(self, movie_id, start_date=None, end_date=None... method async_credits (line 385) | async def async_credits(self, movie_id): method async_external_ids (line 393) | async def async_external_ids(self, movie_id): method async_images (line 401) | async def async_images(self, movie_id, include_image_language=None): method async_keywords (line 417) | async def async_keywords(self, movie_id): method async_lists (line 428) | async def async_lists(self, movie_id, page=1): method async_recommendations (line 441) | async def async_recommendations(self, movie_id, page=1): method async_release_dates (line 454) | async def async_release_dates(self, movie_id): method async_reviews (line 465) | async def async_reviews(self, movie_id, page=1): method async_similar (line 478) | async def async_similar(self, movie_id, page=1): method async_translations (line 491) | async def async_translations(self, movie_id): method async_videos (line 502) | async def async_videos(self, movie_id, page=1): method async_watch_providers (line 515) | async def async_watch_providers(self, movie_id): method async_rate_movie (line 526) | async def async_rate_movie(self, movie_id, rating): method async_delete_rating (line 539) | async def async_delete_rating(self, movie_id): method async_latest (line 550) | async def async_latest(self): method async_now_playing (line 557) | async def async_now_playing(self, region=None, page=1): method async_popular (line 573) | async def async_popular(self, region=None, page=1): method async_top_rated (line 589) | async def async_top_rated(self, region=None, page=1): method async_upcoming (line 605) | async def async_upcoming(self, region=None, page=1): FILE: app/modules/themoviedb/tmdbv3api/objs/network.py class Network (line 4) | class Network(TMDb): method details (line 11) | def details(self, network_id): method async_details (line 19) | async def async_details(self, network_id): method alternative_names (line 27) | def alternative_names(self, network_id): method async_alternative_names (line 38) | async def async_alternative_names(self, network_id): method images (line 49) | def images(self, network_id): method async_images (line 60) | async def async_images(self, network_id): FILE: app/modules/themoviedb/tmdbv3api/objs/person.py class Person (line 4) | class Person(TMDb): method details (line 19) | def details(self, person_id, append_to_response="videos,images"): method changes (line 31) | def changes(self, person_id, start_date=None, end_date=None, page=1): method movie_credits (line 52) | def movie_credits(self, person_id): method tv_credits (line 60) | def tv_credits(self, person_id): method combined_credits (line 68) | def combined_credits(self, person_id): method external_ids (line 76) | def external_ids(self, person_id): method images (line 85) | def images(self, person_id): method tagged_images (line 96) | def tagged_images(self, person_id, page=1): method translations (line 109) | def translations(self, person_id): method latest (line 120) | def latest(self): method popular (line 127) | def popular(self, page=1): method async_details (line 140) | async def async_details(self, person_id, append_to_response="videos,im... method async_changes (line 152) | async def async_changes(self, person_id, start_date=None, end_date=Non... method async_movie_credits (line 173) | async def async_movie_credits(self, person_id): method async_tv_credits (line 181) | async def async_tv_credits(self, person_id): method async_combined_credits (line 189) | async def async_combined_credits(self, person_id): method async_external_ids (line 197) | async def async_external_ids(self, person_id): method async_images (line 206) | async def async_images(self, person_id): method async_tagged_images (line 217) | async def async_tagged_images(self, person_id, page=1): method async_translations (line 230) | async def async_translations(self, person_id): method async_latest (line 241) | async def async_latest(self): method async_popular (line 248) | async def async_popular(self, page=1): FILE: app/modules/themoviedb/tmdbv3api/objs/provider.py class Provider (line 4) | class Provider(TMDb): method available_regions (line 11) | def available_regions(self): method async_available_regions (line 21) | async def async_available_regions(self): method movie_providers (line 31) | def movie_providers(self, region=None): method async_movie_providers (line 42) | async def async_movie_providers(self, region=None): method tv_providers (line 53) | def tv_providers(self, region=None): method async_tv_providers (line 64) | async def async_tv_providers(self, region=None): FILE: app/modules/themoviedb/tmdbv3api/objs/review.py class Review (line 4) | class Review(TMDb): method details (line 9) | def details(self, review_id): method async_details (line 17) | async def async_details(self, review_id): FILE: app/modules/themoviedb/tmdbv3api/objs/search.py class Search (line 9) | class Search(TMDb): method companies (line 20) | def companies(self, term, page=1): method collections (line 33) | def collections(self, term, page=1): method keywords (line 46) | def keywords(self, term, page=1): method movies (line 59) | def movies(self, term, adult=None, region=None, year=None, release_yea... method multi (line 85) | def multi(self, term, adult=None, region=None, page=1): method people (line 106) | def people(self, term, adult=None, region=None, page=1): method tv_shows (line 126) | def tv_shows(self, term, adult=None, release_year=None, page=1): method async_companies (line 147) | async def async_companies(self, term, page=1): method async_collections (line 160) | async def async_collections(self, term, page=1): method async_keywords (line 173) | async def async_keywords(self, term, page=1): method async_people (line 186) | async def async_people(self, term, adult=None, region=None, page=1): method async_multi (line 206) | async def async_multi(self, term, adult=None, region=None, page=1): method async_movies (line 227) | async def async_movies(self, term, adult=None, region=None, year=None,... method async_tv_shows (line 254) | async def async_tv_shows(self, term, adult=None, release_year=None, pa... FILE: app/modules/themoviedb/tmdbv3api/objs/season.py class Season (line 4) | class Season(TMDb): method details (line 17) | def details(self, tv_id, season_num, append_to_response="videos,traile... method account_states (line 30) | def account_states(self, tv_id, season_num): method aggregate_credits (line 43) | def aggregate_credits(self, tv_id, season_num): method changes (line 54) | def changes(self, season_id, start_date=None, end_date=None, page=1): method credits (line 75) | def credits(self, tv_id, season_num): method external_ids (line 84) | def external_ids(self, tv_id, season_num): method images (line 93) | def images(self, tv_id, season_num, include_image_language=None): method translations (line 107) | def translations(self, tv_id, season_num): method videos (line 118) | def videos(self, tv_id, season_num, include_video_language=None, page=1): method async_details (line 136) | async def async_details(self, tv_id, season_num, append_to_response="v... method async_account_states (line 149) | async def async_account_states(self, tv_id, season_num): method async_aggregate_credits (line 162) | async def async_aggregate_credits(self, tv_id, season_num): method async_changes (line 173) | async def async_changes(self, season_id, start_date=None, end_date=Non... method async_credits (line 194) | async def async_credits(self, tv_id, season_num): method async_external_ids (line 203) | async def async_external_ids(self, tv_id, season_num): method async_images (line 212) | async def async_images(self, tv_id, season_num, include_image_language... method async_translations (line 226) | async def async_translations(self, tv_id, season_num): method async_videos (line 237) | async def async_videos(self, tv_id, season_num, include_video_language... FILE: app/modules/themoviedb/tmdbv3api/objs/trending.py class Trending (line 4) | class Trending(TMDb): method _trending (line 7) | def _trending(self, media_type="all", time_window="day", page=1): method all_day (line 18) | def all_day(self, page=1): method all_week (line 26) | def all_week(self, page=1): method movie_day (line 34) | def movie_day(self, page=1): method movie_week (line 42) | def movie_week(self, page=1): method tv_day (line 50) | def tv_day(self, page=1): method tv_week (line 58) | def tv_week(self, page=1): method person_day (line 66) | def person_day(self, page=1): method person_week (line 74) | def person_week(self, page=1): method _async_trending (line 83) | async def _async_trending(self, media_type="all", time_window="day", p... method async_all_day (line 94) | async def async_all_day(self, page=1): method async_all_week (line 102) | async def async_all_week(self, page=1): method async_movie_day (line 110) | async def async_movie_day(self, page=1): method async_movie_week (line 118) | async def async_movie_week(self, page=1): method async_tv_day (line 126) | async def async_tv_day(self, page=1): method async_tv_week (line 134) | async def async_tv_week(self, page=1): method async_person_day (line 142) | async def async_person_day(self, page=1): method async_person_week (line 150) | async def async_person_week(self, page=1): FILE: app/modules/themoviedb/tmdbv3api/objs/tv.py class TV (line 9) | class TV(TMDb): method details (line 39) | def details(self, tv_id, append_to_response="videos,trailers,images,cr... method account_states (line 51) | def account_states(self, tv_id): method aggregate_credits (line 63) | def aggregate_credits(self, tv_id): method alternative_titles (line 73) | def alternative_titles(self, tv_id): method changes (line 84) | def changes(self, tv_id, start_date=None, end_date=None, page=1): method content_ratings (line 104) | def content_ratings(self, tv_id): method credits (line 115) | def credits(self, tv_id): method episode_groups (line 123) | def episode_groups(self, tv_id): method group_episodes (line 134) | def group_episodes(self, group_id): method external_ids (line 145) | def external_ids(self, tv_id): method images (line 153) | def images(self, tv_id, include_image_language=None): method keywords (line 169) | def keywords(self, tv_id): method recommendations (line 180) | def recommendations(self, tv_id, page=1): method reviews (line 193) | def reviews(self, tv_id, page=1): method screened_theatrically (line 206) | def screened_theatrically(self, tv_id): method similar (line 217) | def similar(self, tv_id, page=1): method translations (line 230) | def translations(self, tv_id): method videos (line 241) | def videos(self, tv_id, include_video_language=None, page=1): method watch_providers (line 257) | def watch_providers(self, tv_id): method rate_tv_show (line 268) | def rate_tv_show(self, tv_id, rating): method delete_rating (line 281) | def delete_rating(self, tv_id): method latest (line 292) | def latest(self): method airing_today (line 299) | def airing_today(self, page=1): method on_the_air (line 312) | def on_the_air(self, page=1): method popular (line 324) | def popular(self, page=1): method top_rated (line 336) | def top_rated(self, page=1): method async_details (line 349) | async def async_details(self, tv_id, append_to_response="videos,traile... method async_account_states (line 361) | async def async_account_states(self, tv_id): method async_aggregate_credits (line 373) | async def async_aggregate_credits(self, tv_id): method async_alternative_titles (line 383) | async def async_alternative_titles(self, tv_id): method async_changes (line 394) | async def async_changes(self, tv_id, start_date=None, end_date=None, p... method async_content_ratings (line 414) | async def async_content_ratings(self, tv_id): method async_credits (line 425) | async def async_credits(self, tv_id): method async_episode_groups (line 433) | async def async_episode_groups(self, tv_id): method async_group_episodes (line 444) | async def async_group_episodes(self, group_id): method async_external_ids (line 455) | async def async_external_ids(self, tv_id): method async_images (line 463) | async def async_images(self, tv_id, include_image_language=None): method async_keywords (line 479) | async def async_keywords(self, tv_id): method async_recommendations (line 490) | async def async_recommendations(self, tv_id, page=1): method async_reviews (line 503) | async def async_reviews(self, tv_id, page=1): method async_screened_theatrically (line 516) | async def async_screened_theatrically(self, tv_id): method async_similar (line 527) | async def async_similar(self, tv_id, page=1): method async_translations (line 540) | async def async_translations(self, tv_id): method async_videos (line 551) | async def async_videos(self, tv_id, include_video_language=None, page=1): method async_watch_providers (line 567) | async def async_watch_providers(self, tv_id): method async_rate_tv_show (line 578) | async def async_rate_tv_show(self, tv_id, rating): method async_delete_rating (line 591) | async def async_delete_rating(self, tv_id): method async_latest (line 602) | async def async_latest(self): method async_airing_today (line 609) | async def async_airing_today(self, page=1): method async_on_the_air (line 622) | async def async_on_the_air(self, page=1): method async_popular (line 634) | async def async_popular(self, page=1): method async_top_rated (line 646) | async def async_top_rated(self, page=1): FILE: app/modules/themoviedb/tmdbv3api/tmdb.py class TMDb (line 19) | class TMDb(object): method __init__ (line 21) | def __init__(self, session=None, language=None): method page (line 44) | def page(self): method total_results (line 48) | def total_results(self): method total_pages (line 52) | def total_pages(self): method api_key (line 56) | def api_key(self): method domain (line 60) | def domain(self): method proxies (line 64) | def proxies(self): method proxies (line 68) | def proxies(self, proxies): method api_key (line 72) | def api_key(self, api_key): method domain (line 76) | def domain(self, domain): method language (line 80) | def language(self): method language (line 84) | def language(self, language): method has_session (line 88) | def has_session(self): method session_id (line 92) | def session_id(self): method session_id (line 98) | def session_id(self, session_id): method wait_on_rate_limit (line 102) | def wait_on_rate_limit(self): method wait_on_rate_limit (line 106) | def wait_on_rate_limit(self, wait_on_rate_limit): method request (line 110) | def request(self, method, url, data, json, **kwargs): method async_request (line 120) | async def async_request(self, method, url, data, json, **kwargs): method cache_clear (line 129) | def cache_clear(self): method _validate_api_key (line 132) | def _validate_api_key(self): method _build_url (line 136) | def _build_url(self, action, params=""): method _handle_headers (line 145) | def _handle_headers(self, headers): method _handle_rate_limit (line 152) | def _handle_rate_limit(self): method _process_json_response (line 164) | def _process_json_response(self, json_data, is_async=False): method _handle_errors (line 175) | def _handle_errors(json_data): method _request_obj (line 182) | def _request_obj(self, action, params="", call_cached=True, method _async_request_obj (line 210) | async def _async_request_obj(self, action, params="", call_cached=True, method close (line 238) | def close(self): FILE: app/modules/thetvdb/__init__.py class TheTvDbModule (line 11) | class TheTvDbModule(_ModuleBase): method init_module (line 19) | def init_module(self) -> None: method _initialize_tvdb_session (line 22) | def _initialize_tvdb_session(self, is_retry: bool = False) -> None: method _ensure_tvdb_session (line 44) | def _ensure_tvdb_session(self, is_retry: bool = False) -> None: method _handle_tvdb_call (line 56) | def _handle_tvdb_call(self, method_name: str, *args, **kwargs): method get_name (line 92) | def get_name() -> str: method get_type (line 96) | def get_type() -> ModuleType: method get_subtype (line 103) | def get_subtype() -> MediaRecognizeType: method get_priority (line 110) | def get_priority() -> int: method stop (line 116) | def stop(self): method test (line 121) | def test(self) -> Tuple[bool, str]: method init_setting (line 131) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method tvdb_info (line 134) | def tvdb_info(self, tvdbid: int) -> Optional[dict]: method search_tvdb (line 147) | def search_tvdb(self, title: str) -> list: method clear_cache (line 166) | def clear_cache(self): FILE: app/modules/thetvdb/tvdb_v4_official.py class Auth (line 15) | class Auth: method __init__ (line 20) | def __init__(self, url: str, apikey: str, pin: str = "", proxy: dict =... method get_token (line 52) | def get_token(self): class Request (line 59) | class Request: method __init__ (line 64) | def __init__(self, auth_token: str, proxy: dict = None, timeout: int =... method make_request (line 71) | def make_request(self, url: str, if_modified_since: bool = None): class Url (line 117) | class Url: method __init__ (line 122) | def __init__(self): method construct (line 125) | def construct(self, url_sect: str, url_id: int = None, class TVDB (line 144) | class TVDB: method __init__ (line 149) | def __init__(self, apikey: str, pin: str = "", proxy: dict = None, tim... method get_req_links (line 156) | def get_req_links(self) -> dict: method get_artwork_statuses (line 162) | def get_artwork_statuses(self, meta: str = None, if_modified_since: bo... method get_artwork_types (line 169) | def get_artwork_types(self, meta: str = None, if_modified_since: bool ... method get_artwork (line 176) | def get_artwork(self, id: int, meta: str = None, if_modified_since: bo... method get_artwork_extended (line 183) | def get_artwork_extended(self, id: int, meta: str = None, if_modified_... method get_all_awards (line 190) | def get_all_awards(self, meta: str = None, if_modified_since: bool = N... method get_award (line 197) | def get_award(self, id: int, meta: str = None, if_modified_since: bool... method get_award_extended (line 204) | def get_award_extended(self, id: int, meta: str = None, if_modified_si... method get_all_award_categories (line 211) | def get_all_award_categories(self, meta: str = None, if_modified_since... method get_award_category (line 218) | def get_award_category(self, id: int, meta: str = None, if_modified_si... method get_award_category_extended (line 225) | def get_award_category_extended(self, id: int, meta: str = None, if_mo... method get_content_ratings (line 232) | def get_content_ratings(self, meta: str = None, if_modified_since: boo... method get_countries (line 239) | def get_countries(self, meta: str = None, if_modified_since: bool = No... method get_all_companies (line 246) | def get_all_companies(self, page: int = None, meta: str = None, if_mod... method get_company_types (line 253) | def get_company_types(self, meta: str = None, if_modified_since: bool ... method get_company (line 260) | def get_company(self, id: int, meta: str = None, if_modified_since: bo... method get_all_series (line 267) | def get_all_series(self, page: int = None, meta: str = None, if_modifi... method get_series (line 274) | def get_series(self, id: int, meta: str = None, if_modified_since: boo... method get_series_by_slug (line 281) | def get_series_by_slug(self, slug: str, meta: str = None, if_modified_... method get_series_extended (line 288) | def get_series_extended(self, id: int, meta=None, short=False, if_modi... method get_series_episodes (line 295) | def get_series_episodes(self, id: int, season_type: str = "default", p... method get_series_translation (line 305) | def get_series_translation(self, id: int, lang: str, meta: str = None,... method get_series_artworks (line 312) | def get_series_artworks(self, id: int, lang: str, type=None, if_modifi... method get_series_next_aired (line 319) | def get_series_next_aired(self, id: int, if_modified_since=None) -> dict: method get_all_movies (line 326) | def get_all_movies(self, page: int = None, meta: str = None, if_modifi... method get_movie (line 333) | def get_movie(self, id: int, meta: str = None, if_modified_since: bool... method get_movie_by_slug (line 340) | def get_movie_by_slug(self, slug: str, meta: str = None, if_modified_s... method get_movie_extended (line 347) | def get_movie_extended(self, id: int, meta=None, short=False, if_modif... method get_movie_translation (line 354) | def get_movie_translation(self, id: int, lang: str, meta: str = None, ... method get_all_seasons (line 361) | def get_all_seasons(self, page: int = None, meta: str = None, if_modif... method get_season (line 368) | def get_season(self, id: int, meta: str = None, if_modified_since: boo... method get_season_extended (line 375) | def get_season_extended(self, id: int, meta: str = None, if_modified_s... method get_season_types (line 382) | def get_season_types(self, meta: str = None, if_modified_since: bool =... method get_season_translation (line 389) | def get_season_translation(self, id: int, lang: str, meta: str = None,... method get_all_episodes (line 396) | def get_all_episodes(self, page: int = None, meta: str = None, if_modi... method get_episode (line 403) | def get_episode(self, id: int, meta: str = None, if_modified_since: bo... method get_episode_extended (line 410) | def get_episode_extended(self, id: int, meta: str = None, if_modified_... method get_episode_translation (line 417) | def get_episode_translation(self, id: int, lang: str, meta: str = None... method get_all_genders (line 427) | def get_all_genders(self, meta: str = None, if_modified_since: bool = ... method get_all_genres (line 434) | def get_all_genres(self, meta: str = None, if_modified_since: bool = N... method get_genre (line 441) | def get_genre(self, id: int, meta: str = None, if_modified_since: bool... method get_all_languages (line 448) | def get_all_languages(self, meta: str = None, if_modified_since: bool ... method get_all_people (line 455) | def get_all_people(self, page: int = None, meta: str = None, if_modifi... method get_person (line 462) | def get_person(self, id: int, meta: str = None, if_modified_since: boo... method get_person_extended (line 469) | def get_person_extended(self, id: int, meta: str = None, if_modified_s... method get_person_translation (line 476) | def get_person_translation(self, id: int, lang: str, meta: str = None,... method get_character (line 483) | def get_character(self, id: int, meta: str = None, if_modified_since: ... method get_people_types (line 490) | def get_people_types(self, meta: str = None, if_modified_since: bool =... method get_source_types (line 500) | def get_source_types(self, meta: str = None, if_modified_since: bool =... method get_updates (line 510) | def get_updates(self, since: int, **kwargs) -> list: method get_all_tag_options (line 517) | def get_all_tag_options(self, page: int = None, meta: str = None, if_m... method get_tag_option (line 524) | def get_tag_option(self, id: int, meta: str = None, if_modified_since:... method get_all_lists (line 531) | def get_all_lists(self, page: int = None, meta=None) -> dict: method get_list (line 538) | def get_list(self, id: int, meta: str = None, if_modified_since: bool ... method get_list_by_slug (line 545) | def get_list_by_slug(self, slug: str, meta: str = None, if_modified_si... method get_list_extended (line 552) | def get_list_extended(self, id: int, meta: str = None, if_modified_sin... method get_list_translation (line 559) | def get_list_translation(self, id: int, lang: str, meta: str = None, i... method get_inspiration_types (line 566) | def get_inspiration_types(self, meta: str = None, if_modified_since: b... method search (line 573) | def search(self, query: str, **kwargs) -> list: method search_by_remote_id (line 580) | def search_by_remote_id(self, remoteid: str) -> list: method get_tags (line 587) | def get_tags(self, slug: str, if_modified_since=None) -> dict: method get_entities_types (line 594) | def get_entities_types(self, if_modified_since=None) -> dict: method get_user_by_id (line 601) | def get_user_by_id(self, id: int) -> dict: method get_user (line 608) | def get_user(self) -> dict: method get_user_favorites (line 615) | def get_user_favorites(self) -> dict: method clear_cache (line 622) | def clear_cache(self): FILE: app/modules/transmission/__init__.py class TransmissionModule (line 19) | class TransmissionModule(_ModuleBase, _DownloaderBase[Transmission]): method init_module (line 21) | def init_module(self) -> None: method get_name (line 29) | def get_name() -> str: method get_type (line 33) | def get_type() -> ModuleType: method get_subtype (line 40) | def get_subtype() -> DownloaderType: method get_priority (line 47) | def get_priority() -> int: method stop (line 53) | def stop(self): method test (line 56) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 69) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method scheduler_job (line 72) | def scheduler_job(self) -> None: method download (line 82) | def download(self, content: Union[Path, str, bytes], download_dir: Pat... method list_torrents (line 226) | def list_torrents(self, status: TorrentStatus = None, method transfer_completed (line 321) | def transfer_completed(self, hashs: str, downloader: Optional[str] = N... method remove_torrents (line 341) | def remove_torrents(self, hashs: Union[str, list], delete_file: Option... method start_torrents (line 356) | def start_torrents(self, hashs: Union[list, str], method stop_torrents (line 370) | def stop_torrents(self, hashs: Union[list, str], method torrent_files (line 384) | def torrent_files(self, tid: str, downloader: Optional[str] = None) ->... method downloader_info (line 394) | def downloader_info(self, downloader: Optional[str] = None) -> Optiona... FILE: app/modules/transmission/transmission.py class Transmission (line 11) | class Transmission: method __init__ (line 22) | def __init__(self, host: Optional[str] = None, port: Optional[int] = N... method __login_transmission (line 44) | def __login_transmission(self) -> Optional[Client]: method is_inactive (line 65) | def is_inactive(self) -> bool: method reconnect (line 73) | def reconnect(self): method get_torrents (line 79) | def get_torrents(self, ids: Union[str, list] = None, status: Union[str... method get_completed_torrents (line 113) | def get_completed_torrents(self, ids: Union[str, list] = None, method get_downloading_torrents (line 128) | def get_downloading_torrents(self, ids: Union[str, list] = None, method set_torrent_tag (line 145) | def set_torrent_tag(self, ids: str, tags: list, org_tags: list = None)... method get_torrent_tags (line 160) | def get_torrent_tags(self, ids: str) -> List[str]: method add_torrent (line 178) | def add_torrent(self, content: Union[str, bytes], method start_torrents (line 204) | def start_torrents(self, ids: Union[str, list]) -> bool: method stop_torrents (line 217) | def stop_torrents(self, ids: Union[str, list]) -> bool: method delete_torrents (line 230) | def delete_torrents(self, delete_file: bool, ids: Union[str, list]) ->... method get_files (line 245) | def get_files(self, tid: str) -> Optional[List[File]]: method set_files (line 263) | def set_files(self, tid: str, file_ids: list) -> bool: method set_unwanted_files (line 276) | def set_unwanted_files(self, tid: str, file_ids: list) -> bool: method transfer_info (line 289) | def transfer_info(self) -> Optional[SessionStats]: method set_speed_limit (line 301) | def set_speed_limit(self, download_limit: float = None, upload_limit: ... method get_speed_limit (line 323) | def get_speed_limit(self) -> Optional[Tuple[float, float]]: method recheck_torrents (line 346) | def recheck_torrents(self, ids: Union[str, list]) -> bool: method change_torrent (line 359) | def change_torrent(self, method update_tracker (line 415) | def update_tracker(self, hash_string: str, tracker_list: list = None) ... method get_session (line 430) | def get_session(self) -> Optional[Session]: FILE: app/modules/trimemedia/__init__.py class TrimeMediaModule (line 13) | class TrimeMediaModule(_ModuleBase, _MediaServerBase[TrimeMedia]): method init_module (line 15) | def init_module(self) -> None: method get_name (line 27) | def get_name() -> str: method get_type (line 31) | def get_type() -> ModuleType: method get_subtype (line 38) | def get_subtype() -> MediaServerType: method get_priority (line 45) | def get_priority() -> int: method init_setting (line 51) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method scheduler_job (line 54) | def scheduler_job(self) -> None: method stop (line 64) | def stop(self): method test (line 69) | def test(self) -> Optional[Tuple[bool, str]]: method user_authenticate (line 82) | def user_authenticate( method webhook_parser (line 130) | def webhook_parser( method media_exists (line 158) | def media_exists( method media_statistic (line 229) | def media_statistic( method mediaserver_librarys (line 251) | def mediaserver_librarys( method mediaserver_items (line 262) | def mediaserver_items( method mediaserver_iteminfo (line 284) | def mediaserver_iteminfo( method mediaserver_tv_episodes (line 295) | def mediaserver_tv_episodes( method mediaserver_playing (line 314) | def mediaserver_playing( method mediaserver_play_url (line 325) | def mediaserver_play_url( method mediaserver_latest (line 338) | def mediaserver_latest( method mediaserver_latest_images (line 352) | def mediaserver_latest_images( method mediaserver_image_cookies (line 372) | def mediaserver_image_cookies( FILE: app/modules/trimemedia/api.py class User (line 15) | class User: class Category (line 21) | class Category(Enum): method _missing_ (line 28) | def _missing_(cls, value): class Type (line 32) | class Type(Enum): method _missing_ (line 41) | def _missing_(cls, value): class MediaDb (line 46) | class MediaDb: class MediaDbSummary (line 55) | class MediaDbSummary: class Version (line 64) | class Version: class Item (line 71) | class Item: method tmdb_id (line 97) | def tmdb_id(self) -> Optional[int]: class Api (line 106) | class Api: method token (line 118) | def token(self) -> Optional[str]: method host (line 122) | def host(self) -> str: method apikey (line 126) | def apikey(self) -> str: method version (line 130) | def version(self) -> Optional[Version]: method __init__ (line 133) | def __init__(self, host: str, apikey: str): method sys_version (line 145) | def sys_version(self) -> Optional[Version]: method login (line 158) | def login(self, username, password) -> Optional[str]: method logout (line 177) | def logout(self) -> bool: method user_list (line 189) | def user_list(self) -> Optional[list[User]]: method user_info (line 206) | def user_info(self) -> Optional[User]: method mediadb_sum (line 216) | def mediadb_sum(self) -> Optional[MediaDbSummary]: method mediadb_list (line 226) | def mediadb_list(self) -> Optional[List[MediaDb]]: method __build_img_api_url (line 246) | def __build_img_api_url(self, img_path: Optional[str]) -> Optional[str]: method mdb_list (line 253) | def mdb_list(self) -> Optional[list[MediaDb]]: method mdb_scanall (line 274) | def mdb_scanall(self) -> bool: method mdb_scan (line 283) | def mdb_scan(self, mdb: MediaDb) -> bool: method task_running (line 292) | def task_running(self): method __build_item (line 302) | def __build_item(self, info: dict) -> Item: method item_list (line 317) | def item_list( method search_list (line 350) | def search_list(self, keywords: str) -> Optional[list[Item]]: method item (line 362) | def item(self, guid: str) -> Optional[Item]: method del_item (line 370) | def del_item(self, guid: str, delete_file: bool) -> bool: method season_list (line 387) | def season_list(self, tv_guid: str) -> Optional[list[Item]]: method episode_list (line 397) | def episode_list(self, season_guid: str) -> Optional[list[Item]]: method play_list (line 407) | def play_list(self) -> Optional[list[Item]]: method __get_authx (line 417) | def __get_authx(self, api_path: str, body: Optional[str]): method request (line 444) | def request( method close (line 521) | def close(self): FILE: app/modules/trimemedia/trimemedia.py class TrimeMedia (line 12) | class TrimeMedia: method __init__ (line 26) | def __init__( method api (line 54) | def api(self) -> Optional[fnapi.Api]: method version (line 61) | def version(self) -> Optional[fnapi.Version]: class _ApiCreateResult (line 67) | class _ApiCreateResult: method __create_api (line 72) | def __create_api(host: Optional[str]) -> Optional["TrimeMedia._ApiCrea... method close (line 100) | def close(self): method is_configured (line 103) | def is_configured(self) -> bool: method is_authenticated (line 106) | def is_authenticated(self) -> bool: method is_inactive (line 117) | def is_inactive(self) -> bool: method reconnect (line 126) | def reconnect(self): method disconnect (line 153) | def disconnect(self): method get_librarys (line 164) | def get_librarys( method get_user_count (line 208) | def get_user_count(self) -> int: method get_medias_count (line 218) | def get_medias_count(self) -> schemas.Statistic: method authenticate (line 233) | def authenticate(self, username: str, password: str) -> Optional[str]: method get_movies (line 252) | def get_movies( method __get_series_id_by_name (line 278) | def __get_series_id_by_name(self, name: str, year: str) -> Optional[str]: method get_tv_episodes (line 289) | def get_tv_episodes( method refresh_root_library (line 346) | def refresh_root_library(self) -> Optional[bool]: method refresh_library_by_items (line 361) | def refresh_library_by_items( method __match_library_by_path (line 395) | def __match_library_by_path(self, path: Path) -> Optional[fnapi.MediaDb]: method get_webhook_message (line 412) | def get_webhook_message(self, body: any) -> Optional[schemas.WebhookEv... method get_iteminfo (line 415) | def get_iteminfo(self, itemid: str) -> Optional[schemas.MediaServerItem]: method __build_media_server_item (line 426) | def __build_media_server_item(item: fnapi.Item): method __build_play_url (line 459) | def __build_play_url(host: str, item: fnapi.Item) -> str: method __build_media_server_play_item (line 475) | def __build_media_server_play_item( method get_items (line 505) | def get_items( method get_play_url (line 541) | def get_play_url(self, item_id: str) -> Optional[str]: method get_resume (line 554) | def get_resume( method get_latest (line 573) | def get_latest(self, num=20) -> Optional[List[schemas.MediaServerPlayI... method get_latest_backdrops (line 596) | def get_latest_backdrops(self, num=20, remote=False) -> Optional[List[... method __is_library_blocked (line 634) | def __is_library_blocked(self, library_guid: str): method get_image_cookies (line 649) | def get_image_cookies(self, image_url: str): FILE: app/modules/ugreen/__init__.py class UgreenModule (line 13) | class UgreenModule(_ModuleBase, _MediaServerBase[Ugreen]): method init_module (line 15) | def init_module(self) -> None: method get_name (line 27) | def get_name() -> str: method get_type (line 31) | def get_type() -> ModuleType: method get_subtype (line 38) | def get_subtype() -> MediaServerType: method get_priority (line 45) | def get_priority() -> int: method init_setting (line 51) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method scheduler_job (line 54) | def scheduler_job(self) -> None: method stop (line 63) | def stop(self): method test (line 68) | def test(self) -> Optional[Tuple[bool, str]]: method user_authenticate (line 81) | def user_authenticate( method webhook_parser (line 121) | def webhook_parser( method media_exists (line 144) | def media_exists( method media_statistic (line 207) | def media_statistic( method mediaserver_librarys (line 230) | def mediaserver_librarys( method mediaserver_items (line 241) | def mediaserver_items( method mediaserver_iteminfo (line 256) | def mediaserver_iteminfo( method mediaserver_tv_episodes (line 267) | def mediaserver_tv_episodes( method mediaserver_playing (line 286) | def mediaserver_playing( method mediaserver_play_url (line 297) | def mediaserver_play_url( method mediaserver_latest (line 310) | def mediaserver_latest( method mediaserver_latest_images (line 324) | def mediaserver_latest_images( method mediaserver_image_cookies (line 339) | def mediaserver_image_cookies( FILE: app/modules/ugreen/api.py class ApiResult (line 15) | class ApiResult: method success (line 23) | def success(self) -> bool: class Api (line 27) | class Api: method __init__ (line 54) | def __init__( method host (line 82) | def host(self) -> str: method token (line 86) | def token(self) -> Optional[str]: method static_token (line 90) | def static_token(self) -> Optional[str]: method is_ugk (line 94) | def is_ugk(self) -> bool: method public_key (line 98) | def public_key(self) -> Optional[str]: method close (line 101) | def close(self): method _normalize_base_url (line 108) | def _normalize_base_url(host: str) -> str: method _decode_public_key (line 116) | def _decode_public_key(raw: Optional[str]) -> Optional[str]: method _extract_rsa_token (line 130) | def _extract_rsa_token(resp_json: dict, headers: Mapping[str, str]) ->... method _common_headers (line 142) | def _common_headers(self) -> dict[str, str]: method _request_json (line 154) | def _request_json( method _build_result (line 190) | def _build_result(payload: Any) -> ApiResult: method login (line 206) | def login(self, username: str, password: str, keepalive: bool = True) ... method export_session_state (line 287) | def export_session_state(self) -> Optional[dict]: method import_session_state (line 306) | def import_session_state(self, state: Mapping[str, Any]) -> bool: method logout (line 368) | def logout(self): method request (line 396) | def request( method current_user (line 444) | def current_user(self) -> Optional[dict]: method media_list (line 453) | def media_list(self) -> list[dict]: method media_lib_users (line 463) | def media_lib_users(self) -> list[dict]: method recently_played (line 473) | def recently_played(self, page: int = 1, page_size: int = 12) -> Optio... method recently_updated (line 488) | def recently_updated(self, page: int = 1, page_size: int = 20) -> Opti... method recently_played_info (line 503) | def recently_played_info(self, item_id: Union[str, int]) -> Optional[d... method search (line 518) | def search(self, keyword: str, offset: int = 0, limit: int = 200) -> O... method video_all (line 534) | def video_all(self, classification: int, page: int = 1, page_size: int... method poster_wall_get_folder (line 561) | def poster_wall_get_folder( method get_movie (line 583) | def get_movie( method get_tv (line 605) | def get_tv(self, item_id: Union[str, int], folder_path: str = "ALL") -... method scan (line 618) | def scan(self, media_lib_set_id: Union[str, int], scan_type: int = 2, ... method scan_status (line 636) | def scan_status(self, only_brief: bool = True) -> list[dict]: method preferences_all (line 649) | def preferences_all(self) -> Optional[Any]: method history_get (line 656) | def history_get(self, num: int = 10) -> Optional[Any]: method data_source_get_config (line 663) | def data_source_get_config(self) -> Optional[Any]: method homepage_slider (line 670) | def homepage_slider( method media_lib_guide_init (line 685) | def media_lib_guide_init(self) -> Optional[Any]: method media_lib_filter_options (line 692) | def media_lib_filter_options( method guide (line 707) | def guide(self, guide_position: int = 1, client_type: int = 1) -> Opti... method homepage_v2 (line 720) | def homepage_v2(self, language: Optional[str] = None) -> Optional[Any]: method media_lib_init_user_permission (line 730) | def media_lib_init_user_permission(self) -> Optional[Any]: method media_lib_get_all (line 737) | def media_lib_get_all( FILE: app/modules/ugreen/ugreen.py class Ugreen (line 17) | class Ugreen: method __init__ (line 33) | def __init__( method api (line 66) | def api(self) -> Optional[Api]: method close (line 69) | def close(self): method is_configured (line 72) | def is_configured(self) -> bool: method is_authenticated (line 75) | def is_authenticated(self) -> bool: method is_inactive (line 83) | def is_inactive(self) -> bool: method __session_cache_key (line 89) | def __session_cache_key(self) -> str: method __password_digest (line 98) | def __password_digest(self) -> str: method __load_all_session_cache (line 105) | def __load_all_session_cache() -> dict: method __save_all_session_cache (line 110) | def __save_all_session_cache(sessions: dict): method __remove_persisted_session (line 113) | def __remove_persisted_session(self): method __save_persisted_session (line 120) | def __save_persisted_session(self): method __restore_persisted_session (line 138) | def __restore_persisted_session(self) -> bool: method reconnect (line 170) | def reconnect(self) -> bool: method disconnect (line 197) | def disconnect(self, logout: bool = False): method __normalize_dir_path (line 209) | def __normalize_dir_path(path: Union[str, Path, None]) -> str: method __is_subpath (line 216) | def __is_subpath(path: Union[str, Path, None], parent: Union[str, Path... method __build_image_stream_url (line 223) | def __build_image_stream_url(self, source_url: str, size: int = 1) -> ... method __resolve_image (line 250) | def __resolve_image(self, path: Optional[str]) -> Optional[str]: method __is_expired_signed_image (line 269) | def __is_expired_signed_image(url: str) -> bool: method __parse_year (line 291) | def __parse_year(video_info: dict) -> Optional[Union[str, int]]: method __map_item_type (line 304) | def __map_item_type(video_type: Any) -> Optional[str]: method __build_media_server_item (line 316) | def __build_media_server_item(video_info: dict, play_status: Optional[... method __build_root_url (line 350) | def __build_root_url(self) -> str: method __build_play_url (line 359) | def __build_play_url(self, item_id: Union[str, int], video_type: Any, ... method __build_play_item_from_wrapper (line 363) | def __build_play_item_from_wrapper(self, wrapper: dict) -> Optional[sc... method __infer_library_type (line 399) | def __infer_library_type(name: str, path: Optional[str]) -> str: method __is_library_blocked (line 408) | def __is_library_blocked(self, library_id: str) -> bool: method __resolve_scan_type (line 420) | def __resolve_scan_type( method __resolve_verify_ssl (line 463) | def __resolve_verify_ssl(verify_ssl: Optional[Union[bool, str, int]]) ... method __scan_library (line 475) | def __scan_library(self, library_id: str, scan_type: Optional[int] = N... method __load_library_paths (line 484) | def __load_library_paths(self) -> dict[str, str]: method get_librarys (line 507) | def get_librarys(self, hidden: Optional[bool] = False) -> List[schemas... method get_user_count (line 558) | def get_user_count(self) -> int: method get_medias_count (line 564) | def get_medias_count(self) -> schemas.Statistic: method authenticate (line 578) | def authenticate(self, username: str, password: str) -> Optional[str]: method __extract_video_info_list (line 590) | def __extract_video_info_list(bucket: Any) -> list[dict]: method get_movies (line 605) | def get_movies( method __search_tv_item (line 630) | def __search_tv_item(self, title: str, year: Optional[str] = None, tmd... method get_tv_episodes (line 648) | def get_tv_episodes( method refresh_root_library (line 707) | def refresh_root_library(self, scan_mode: Optional[Union[str, int]] = ... method __match_library_id_by_path (line 728) | def __match_library_id_by_path(self, path: Optional[Path]) -> Optional... method refresh_library_by_items (line 741) | def refresh_library_by_items( method get_webhook_message (line 770) | def get_webhook_message(body: Any) -> Optional[schemas.WebhookEventInfo]: method get_iteminfo (line 773) | def get_iteminfo(self, itemid: str) -> Optional[schemas.MediaServerItem]: method _iter_library_videos (line 787) | def _iter_library_videos(self, root_path: str, page_size: int = 100): method get_items (line 828) | def get_items( method get_play_url (line 867) | def get_play_url(self, item_id: str) -> Optional[str]: method get_resume (line 885) | def get_resume(self, num: Optional[int] = 12) -> Optional[List[schemas... method get_latest (line 910) | def get_latest(self, num: int = 20) -> Optional[List[schemas.MediaServ... method get_latest_backdrops (line 935) | def get_latest_backdrops(self, num: int = 20, remote: bool = False) ->... method get_image_cookies (line 964) | def get_image_cookies(image_url: str): FILE: app/modules/vocechat/__init__.py class VoceChatModule (line 12) | class VoceChatModule(_ModuleBase, _MessageBase[VoceChat]): method init_module (line 14) | def init_module(self) -> None: method get_name (line 23) | def get_name() -> str: method get_type (line 27) | def get_type() -> ModuleType: method get_subtype (line 34) | def get_subtype() -> MessageChannel: method get_priority (line 41) | def get_priority() -> int: method stop (line 47) | def stop(self): method test (line 50) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 62) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method message_parser (line 65) | def message_parser(self, source: str, body: Any, form: Any, method post_message (line 127) | def post_message(self, message: Notification, **kwargs) -> None: method post_medias_message (line 145) | def post_medias_message(self, message: Notification, medias: List[Medi... method post_torrents_message (line 161) | def post_torrents_message(self, message: Notification, torrents: List[... method register_commands (line 183) | def register_commands(self, commands: Dict[str, dict]): FILE: app/modules/vocechat/vocechat.py class VoceChat (line 15) | class VoceChat: method __init__ (line 25) | def __init__(self, VOCECHAT_HOST: Optional[str] = None, VOCECHAT_API_K... method get_state (line 47) | def get_state(self): method get_groups (line 53) | def get_groups(self): method send_msg (line 63) | def send_msg(self, title: str, text: Optional[str] = None, method send_medias_msg (line 100) | def send_medias_msg(self, title: str, medias: List[MediaInfo], method send_torrents_msg (line 140) | def send_torrents_msg(self, torrents: List[Context], method __send_request (line 186) | def __send_request(self, userid: str, caption: str) -> bool: FILE: app/modules/webpush/__init__.py class WebPushModule (line 13) | class WebPushModule(_ModuleBase, _MessageBase): method init_module (line 15) | def init_module(self) -> None: method get_name (line 23) | def get_name() -> str: method get_type (line 27) | def get_type() -> ModuleType: method get_subtype (line 34) | def get_subtype() -> MessageChannel: method get_priority (line 41) | def get_priority() -> int: method stop (line 47) | def stop(self): method test (line 50) | def test(self) -> Tuple[bool, str]: method init_setting (line 56) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method post_message (line 59) | def post_message(self, message: Notification, **kwargs) -> None: FILE: app/modules/wechat/WXBizMsgCrypt3.py class FormatException (line 42) | class FormatException(Exception): function throw_exception (line 46) | def throw_exception(message, exception_class=FormatException): class SHA1 (line 51) | class SHA1: method getSHA1 (line 55) | def getSHA1(token, timestamp, nonce, encrypt): class XMLParse (line 75) | class XMLParse: method extract (line 87) | def extract(xmltext): method generate (line 101) | def generate(self, encrypt, signature, timestamp, nonce): class PKCS7Encoder (line 119) | class PKCS7Encoder: method encode (line 124) | def encode(self, text): method decode (line 139) | def decode(decrypted): class Prpcrypt (line 150) | class Prpcrypt(object): method __init__ (line 153) | def __init__(self, key): method encrypt (line 160) | def encrypt(self, text, receiveid): method decrypt (line 184) | def decrypt(self, text, receiveid): method get_random_str (line 218) | def get_random_str(): class WXBizMsgCrypt (line 225) | class WXBizMsgCrypt(object): method __init__ (line 227) | def __init__(self, sToken, sEncodingAESKey, sReceiveId): method VerifyURL (line 246) | def VerifyURL(self, sMsgSignature, sTimeStamp, sNonce, sEchoStr): method EncryptMsg (line 257) | def EncryptMsg(self, sReplyMsg, sNonce, timestamp=None): method DecryptMsg (line 279) | def DecryptMsg(self, sPostData, sMsgSignature, sTimeStamp, sNonce): FILE: app/modules/wechat/__init__.py class WechatModule (line 18) | class WechatModule(_ModuleBase, _MessageBase[WeChat]): method init_module (line 20) | def init_module(self) -> None: method get_name (line 30) | def get_name() -> str: method get_type (line 34) | def get_type() -> ModuleType: method get_subtype (line 41) | def get_subtype() -> MessageChannel: method get_priority (line 48) | def get_priority() -> int: method stop (line 54) | def stop(self): method _is_bot_mode (line 63) | def _is_bot_mode(config: dict) -> bool: method _create_client (line 67) | def _create_client(cls, conf): method test (line 72) | def test(self) -> Optional[Tuple[bool, str]]: method init_setting (line 84) | def init_setting(self) -> Tuple[str, Union[str, bool]]: method message_parser (line 87) | def message_parser(self, source: str, body: Any, form: Any, method post_message (line 192) | def post_message(self, message: Notification, **kwargs) -> None: method post_medias_message (line 213) | def post_medias_message(self, message: Notification, medias: List[Medi... method post_torrents_message (line 230) | def post_torrents_message(self, message: Notification, torrents: List[... method register_commands (line 245) | def register_commands(self, commands: Dict[str, dict]): FILE: app/modules/wechat/wechat.py class RetryException (line 18) | class RetryException(Exception): class WeChat (line 22) | class WeChat: method __init__ (line 47) | def __init__(self, WECHAT_CORPID: Optional[str] = None, WECHAT_APP_SEC... method get_state (line 69) | def get_state(self): method __get_access_token (line 76) | def __get_access_token(self, force=False): method __split_content (line 107) | def __split_content(content: str, max_bytes: int = 2048) -> List[str]: method __send_message (line 162) | def __send_message(self, title: str, text: Optional[str] = None, method __send_image_message (line 208) | def __send_image_message(self, title: str, text: str, image_url: str, method send_msg (line 244) | def send_msg(self, title: str, text: Optional[str] = None, image: Opti... method send_medias_msg (line 270) | def send_medias_msg(self, medias: List[MediaInfo], userid: Optional[st... method send_torrents_msg (line 309) | def send_torrents_msg(self, torrents: List[Context], method __post_request (line 364) | def __post_request(self, url: str, req_json: dict) -> bool: method create_menus (line 393) | def create_menus(self, commands: Dict[str, dict]): method delete_menus (line 469) | def delete_menus(self): FILE: app/modules/wechat/wechatbot.py class WeChatBot (line 21) | class WeChatBot: method __init__ (line 33) | def __init__(self, method _build_req_id (line 71) | def _build_req_id(prefix: str) -> str: method _split_content (line 75) | def _split_content(content: str, max_bytes: int = 4000) -> List[str]: method _start_gateway (line 109) | def _start_gateway(self) -> None: method stop (line 120) | def stop(self) -> None: method get_state (line 133) | def get_state(self) -> bool: method _load_known_targets (line 136) | def _load_known_targets(self) -> None: method _save_known_targets (line 147) | def _save_known_targets(self) -> None: method _remember_target (line 153) | def _remember_target(self, userid: Optional[str]) -> None: method _run_gateway (line 161) | def _run_gateway(self) -> None: method _heartbeat_loop (line 194) | def _heartbeat_loop(self) -> None: method _on_open (line 209) | def _on_open(self, ws) -> None: method _on_message (line 220) | def _on_message(self, ws, message: str) -> None: method _on_error (line 249) | def _on_error(self, ws, error) -> None: method _on_close (line 253) | def _on_close(self, ws, close_status_code, close_msg) -> None: method _resolve_ack (line 257) | def _resolve_ack(self, req_id: str, payload: dict) -> None: method _send_raw (line 265) | def _send_raw(self, payload: dict) -> None: method _send_with_ack (line 270) | def _send_with_ack(self, payload: dict) -> bool: method _handle_callback_event (line 300) | def _handle_callback_event(self, payload: dict) -> None: method _extract_text_from_body (line 306) | def _extract_text_from_body(body: dict) -> Optional[str]: method _handle_callback_message (line 334) | def _handle_callback_message(self, payload: dict) -> None: method _forward_to_message_chain (line 361) | def _forward_to_message_chain(self, userid: str, text: str) -> None: method _normalize_target (line 377) | def _normalize_target(userid: Optional[str], default_chat_id: Optional... method _build_markdown (line 390) | def _build_markdown(title: Optional[str] = None, method _resolve_targets (line 405) | def _resolve_targets(self, userid: Optional[str] = None) -> List[Tuple... method _send_markdown (line 411) | def _send_markdown(self, content: str, userid: Optional[str] = None) -... method send_msg (line 444) | def send_msg(self, title: str, text: Optional[str] = None, image: Opti... method send_medias_msg (line 449) | def send_medias_msg(self, medias: List[MediaInfo], userid: Optional[st... method send_torrents_msg (line 463) | def send_torrents_msg(self, torrents: List[Context], method create_menus (line 493) | def create_menus(self, commands: Dict[str, dict]): method delete_menus (line 499) | def delete_menus(self): FILE: app/monitor.py class MonitorChain (line 33) | class MonitorChain(ChainBase): class FileMonitorHandler (line 37) | class FileMonitorHandler(FileSystemEventHandler): method __init__ (line 42) | def __init__(self, mon_path: Path, callback: Any, **kwargs): method on_created (line 47) | def on_created(self, event: FileSystemEvent): method on_moved (line 54) | def on_moved(self, event: FileSystemMovedEvent): class Monitor (line 62) | class Monitor(ConfigReloadMixin, metaclass=SingletonClass): method __init__ (line 68) | def __init__(self): method on_config_changed (line 87) | def on_config_changed(self): method get_reload_name (line 90) | def get_reload_name(self): method save_snapshot (line 93) | def save_snapshot(self, storage: str, snapshot: Dict, file_count: int ... method reset_snapshot (line 119) | def reset_snapshot(self, storage: str) -> bool: method force_full_scan (line 137) | def force_full_scan(self, storage: str, mon_path: Path) -> bool: method load_snapshot (line 184) | def load_snapshot(self, storage: str) -> Optional[Dict]: method adjust_monitor_interval (line 204) | def adjust_monitor_interval(file_count: int) -> int: method compare_snapshots (line 220) | def compare_snapshots(old_snapshot: Dict, new_snapshot: Dict) -> Dict[... method count_directory_files (line 257) | def count_directory_files(directory: Path, max_check: int = 10000) -> ... method check_system_limits (line 277) | def check_system_limits() -> Dict[str, Any]: method get_system_optimization_tips (line 322) | def get_system_optimization_tips() -> List[str]: method should_use_polling (line 357) | def should_use_polling(directory: Path, monitor_mode: str, method init (line 379) | def init(self): method __choose_observer (line 524) | def __choose_observer(self) -> Optional[Any]: method __try_import_observer (line 571) | def __try_import_observer(module_name: str, class_name: str): method polling_observer (line 582) | def polling_observer(self, storage: str, mon_paths: List[Path]): method event_handler (line 659) | def event_handler(self, event, text: str, event_path: str, file_size: ... method __handle_file (line 673) | def __handle_file(self, storage: str, event_path: Path, file_size: flo... method stop (line 736) | def stop(self): FILE: app/plugins/__init__.py class PluginChian (line 14) | class PluginChian(ChainBase): class _PluginBase (line 21) | class _PluginBase(metaclass=ABCMeta): method __init__ (line 40) | def __init__(self): method init_plugin (line 53) | def init_plugin(self, config: dict = None): method get_name (line 60) | def get_name(self) -> str: method get_state (line 68) | def get_state(self) -> bool: method get_command (line 75) | def get_command() -> List[Dict[str, Any]]: method get_render_mode (line 89) | def get_render_mode() -> Tuple[str, Optional[str]]: method get_api (line 97) | def get_api(self) -> List[Dict[str, Any]]: method get_form (line 112) | def get_form(self) -> Tuple[Optional[List[dict]], Dict[str, Any]]: method get_page (line 120) | def get_page(self) -> Optional[List[dict]]: method get_service (line 128) | def get_service(self) -> List[Dict[str, Any]]: method get_dashboard (line 141) | def get_dashboard(self, key: str, **kwargs) -> Optional[Tuple[Dict[str... method get_dashboard_meta (line 163) | def get_dashboard_meta(self) -> Optional[List[Dict[str, str]]]: method get_module (line 177) | def get_module(self) -> Dict[str, Any]: method get_actions (line 187) | def get_actions(self) -> List[Dict[str, Any]]: method get_agent_tools (line 203) | def get_agent_tools(self) -> List[Type]: method stop_service (line 218) | def stop_service(self): method update_config (line 224) | def update_config(self, config: dict, plugin_id: Optional[str] = None)... method get_config (line 234) | def get_config(self, plugin_id: Optional[str] = None) -> Any: method get_data_path (line 243) | def get_data_path(self, plugin_id: Optional[str] = None) -> Path: method save_data (line 254) | def save_data(self, key: str, value: Any, plugin_id: Optional[str] = N... method get_data (line 265) | def get_data(self, key: Optional[str] = None, plugin_id: Optional[str]... method del_data (line 275) | def del_data(self, key: str, plugin_id: Optional[str] = None) -> Any: method post_message (line 285) | def post_message(self, channel: MessageChannel = None, mtype: Notifica... method close (line 299) | def close(self): FILE: app/scheduler.py class SchedulerChain (line 42) | class SchedulerChain(ChainBase): class Scheduler (line 46) | class Scheduler(ConfigReloadMixin, metaclass=SingletonClass): method __init__ (line 61) | def __init__(self): method on_config_changed (line 77) | def on_config_changed(self): method get_reload_name (line 80) | def get_reload_name(self): method init (line 83) | def init(self): method __prepare_job (line 445) | def __prepare_job(self, job_id: str) -> Optional[dict]: method __finish_job (line 459) | def __finish_job(self, job_id: str): method start (line 469) | def start(self, job_id: str, *args, **kwargs): method init_plugin_jobs (line 522) | def init_plugin_jobs(self): method init_workflow_jobs (line 529) | def init_workflow_jobs(self): method remove_workflow_job (line 536) | def remove_workflow_job(self, workflow: Workflow): method remove_plugin_job (line 566) | def remove_plugin_job(self, pid: str, job_id: Optional[str] = None): method update_workflow_job (line 612) | def update_workflow_job(self, workflow: Workflow): method update_plugin_job (line 645) | def update_plugin_job(self, pid: str): method list (line 693) | def list(self) -> List[schemas.ScheduleInfo]: method stop (line 746) | def stop(self): method clear_cache (line 764) | def clear_cache(): method full_gc (line 771) | def full_gc(): method user_auth (line 781) | def user_auth(self): FILE: app/schemas/agent.py class ConversationMemory (line 8) | class ConversationMemory(BaseModel): method serialize_datetime (line 22) | def serialize_datetime(self, value: datetime) -> str: class AgentState (line 26) | class AgentState(BaseModel): method serialize_datetime (line 37) | def serialize_datetime(self, value: datetime) -> str: class UserMessage (line 41) | class UserMessage(BaseModel): class ToolResult (line 51) | class ToolResult(BaseModel): FILE: app/schemas/category.py class CategoryRule (line 6) | class CategoryRule(BaseModel): class CategoryConfig (line 24) | class CategoryConfig(BaseModel): FILE: app/schemas/context.py class MetaInfo (line 6) | class MetaInfo(BaseModel): class MediaInfo (line 66) | class MediaInfo(BaseModel): class TorrentInfo (line 183) | class TorrentInfo(BaseModel): class Context (line 241) | class Context(BaseModel): class MediaSeason (line 253) | class MediaSeason(BaseModel): class MediaPerson (line 266) | class MediaPerson(BaseModel): FILE: app/schemas/dashboard.py class Statistic (line 6) | class Statistic(BaseModel): class Storage (line 17) | class Storage(BaseModel): class ProcessInfo (line 24) | class ProcessInfo(BaseModel): class DownloaderInfo (line 41) | class DownloaderInfo(BaseModel): class ScheduleInfo (line 54) | class ScheduleInfo(BaseModel): FILE: app/schemas/download.py class DownloadTask (line 6) | class DownloadTask(BaseModel): FILE: app/schemas/event.py class Event (line 10) | class Event(BaseModel): class BaseEventData (line 19) | class BaseEventData(BaseModel): class ConfigChangeEventData (line 26) | class ConfigChangeEventData(BaseEventData): method convert_to_set (line 36) | def convert_to_set(cls, v): class ChainEventData (line 54) | class ChainEventData(BaseEventData): class AuthCredentials (line 61) | class AuthCredentials(ChainEventData): method check_fields_based_on_grant_type (line 92) | def check_fields_based_on_grant_type(cls, values): # noqa class AuthInterceptCredentials (line 109) | class AuthInterceptCredentials(ChainEventData): class CommandRegisterEventData (line 137) | class CommandRegisterEventData(ChainEventData): class TransferRenameEventData (line 161) | class TransferRenameEventData(ChainEventData): class ResourceSelectionEventData (line 189) | class ResourceSelectionEventData(BaseModel): class ResourceDownloadEventData (line 214) | class ResourceDownloadEventData(ChainEventData): class TransferInterceptEventData (line 246) | class TransferInterceptEventData(ChainEventData): class DiscoverMediaSource (line 277) | class DiscoverMediaSource(BaseModel): class DiscoverSourceEventData (line 289) | class DiscoverSourceEventData(ChainEventData): class RecommendMediaSource (line 301) | class RecommendMediaSource(BaseModel): class RecommendSourceEventData (line 310) | class RecommendSourceEventData(ChainEventData): class MediaRecognizeConvertEventData (line 322) | class MediaRecognizeConvertEventData(ChainEventData): class StorageOperSelectionEventData (line 342) | class StorageOperSelectionEventData(ChainEventData): FILE: app/schemas/exception.py class ImmediateException (line 1) | class ImmediateException(Exception): class LimitException (line 9) | class LimitException(ImmediateException): class APIRateLimitException (line 17) | class APIRateLimitException(LimitException): class RateLimitExceededException (line 25) | class RateLimitExceededException(LimitException): class OperationInterrupted (line 34) | class OperationInterrupted(KeyboardInterrupt): FILE: app/schemas/file.py class FileURI (line 8) | class FileURI(BaseModel): method uri (line 15) | def uri(self) -> str: method from_uri (line 19) | def from_uri(cls, uri: str) -> "FileURI": class FileItem (line 32) | class FileItem(FileURI): class StorageUsage (line 61) | class StorageUsage(BaseModel): class StorageTransType (line 68) | class StorageTransType(BaseModel): FILE: app/schemas/history.py class DownloadHistory (line 6) | class DownloadHistory(BaseModel): class TransferHistory (line 57) | class TransferHistory(BaseModel): FILE: app/schemas/mcp.py class ToolCallRequest (line 6) | class ToolCallRequest(BaseModel): class ToolCallResponse (line 12) | class ToolCallResponse(BaseModel): FILE: app/schemas/mediaserver.py class ExistMediaInfo (line 9) | class ExistMediaInfo(BaseModel): class NotExistMediaInfo (line 25) | class NotExistMediaInfo(BaseModel): class RefreshMediaItem (line 39) | class RefreshMediaItem(BaseModel): class MediaServerLibrary (line 55) | class MediaServerLibrary(BaseModel): class MediaServerItemUserState (line 81) | class MediaServerItemUserState(BaseModel): class MediaServerItem (line 94) | class MediaServerItem(BaseModel): class MediaServerSeasonInfo (line 133) | class MediaServerSeasonInfo(BaseModel): class WebhookEventInfo (line 141) | class WebhookEventInfo(BaseModel): class MediaServerPlayItem (line 169) | class MediaServerPlayItem(BaseModel): FILE: app/schemas/message.py class CommingMessage (line 10) | class CommingMessage(BaseModel): method to_dict (line 39) | def to_dict(self): class Notification (line 50) | class Notification(BaseModel): method to_dict (line 87) | def to_dict(self): class NotificationSwitch (line 99) | class NotificationSwitch(BaseModel): class Subscription (line 121) | class Subscription(BaseModel): class SubscriptionMessage (line 129) | class SubscriptionMessage(BaseModel): class ChannelCapability (line 140) | class ChannelCapability(Enum): class ChannelCapabilities (line 165) | class ChannelCapabilities: class ChannelCapabilityManager (line 177) | class ChannelCapabilityManager: method get_capabilities (line 288) | def get_capabilities(cls, channel: MessageChannel) -> Optional[Channel... method supports_capability (line 295) | def supports_capability(cls, channel: MessageChannel, capability: Chan... method supports_buttons (line 305) | def supports_buttons(cls, channel: MessageChannel) -> bool: method supports_callbacks (line 312) | def supports_callbacks(cls, channel: MessageChannel) -> bool: method supports_editing (line 319) | def supports_editing(cls, channel: MessageChannel) -> bool: method supports_deletion (line 326) | def supports_deletion(cls, channel: MessageChannel) -> bool: method get_max_buttons_per_row (line 333) | def get_max_buttons_per_row(cls, channel: MessageChannel) -> int: method get_max_button_rows (line 341) | def get_max_button_rows(cls, channel: MessageChannel) -> int: method get_max_button_text_length (line 349) | def get_max_button_text_length(cls, channel: MessageChannel) -> int: method should_use_fallback (line 357) | def should_use_fallback(cls, channel: MessageChannel) -> bool: FILE: app/schemas/monitoring.py class RequestMetrics (line 7) | class RequestMetrics(BaseModel): class PerformanceSnapshot (line 20) | class PerformanceSnapshot(BaseModel): class EndpointStats (line 34) | class EndpointStats(BaseModel): class ErrorRequest (line 45) | class ErrorRequest(BaseModel): class MonitoringOverview (line 57) | class MonitoringOverview(BaseModel): class MonitoringConfig (line 67) | class MonitoringConfig(BaseModel): FILE: app/schemas/plugin.py class Plugin (line 6) | class Plugin(BaseModel): class PluginDashboard (line 53) | class PluginDashboard(Plugin): class PluginMemoryInfo (line 72) | class PluginMemoryInfo(BaseModel): FILE: app/schemas/response.py class Response (line 6) | class Response(BaseModel): FILE: app/schemas/rule.py class CustomRule (line 6) | class CustomRule(BaseModel): class FilterRuleGroup (line 26) | class FilterRuleGroup(BaseModel): FILE: app/schemas/servarr.py class RadarrMovie (line 5) | class RadarrMovie(BaseModel): class SonarrSeries (line 22) | class SonarrSeries(BaseModel): FILE: app/schemas/servcookie.py class CookieData (line 5) | class CookieData(BaseModel): class CookiePassword (line 10) | class CookiePassword(BaseModel): FILE: app/schemas/site.py class Site (line 6) | class Site(BaseModel): class SiteStatistic (line 53) | class SiteStatistic(BaseModel): class SiteUserData (line 72) | class SiteUserData(BaseModel): class SiteAuth (line 113) | class SiteAuth(BaseModel): class SiteCategory (line 118) | class SiteCategory(BaseModel): FILE: app/schemas/subscribe.py class Subscribe (line 6) | class Subscribe(BaseModel): class SubscribeShare (line 82) | class SubscribeShare(BaseModel): class SubscribeShareStatistics (line 140) | class SubscribeShareStatistics(BaseModel): class SubscribeDownloadFileInfo (line 149) | class SubscribeDownloadFileInfo(BaseModel): class SubscribeLibraryFileInfo (line 162) | class SubscribeLibraryFileInfo(BaseModel): class SubscribeEpisodeInfo (line 169) | class SubscribeEpisodeInfo(BaseModel): class SubscrbieInfo (line 182) | class SubscrbieInfo(BaseModel): FILE: app/schemas/system.py class ServiceInfo (line 8) | class ServiceInfo: class MediaServerConf (line 25) | class MediaServerConf(BaseModel): class DownloaderConf (line 42) | class DownloaderConf(BaseModel): class NotificationConf (line 61) | class NotificationConf(BaseModel): class NotificationSwitchConf (line 78) | class NotificationSwitchConf(BaseModel): class StorageConf (line 89) | class StorageConf(BaseModel): class TransferDirectoryConf (line 102) | class TransferDirectoryConf(BaseModel): FILE: app/schemas/tmdb.py class TmdbSeason (line 6) | class TmdbSeason(BaseModel): class TmdbEpisode (line 19) | class TmdbEpisode(BaseModel): FILE: app/schemas/token.py class Token (line 6) | class Token(BaseModel): class TokenPayload (line 27) | class TokenPayload(BaseModel): FILE: app/schemas/transfer.py class TransferTorrent (line 13) | class TransferTorrent(BaseModel): class DownloadingTorrent (line 28) | class DownloadingTorrent(BaseModel): class TransferTask (line 49) | class TransferTask(BaseModel): method to_dict (line 71) | def to_dict(self): class TransferJobTask (line 83) | class TransferJobTask(BaseModel): class TransferJob (line 94) | class TransferJob(BaseModel): class TransferInfo (line 103) | class TransferInfo(BaseModel): method to_dict (line 134) | def to_dict(self): class TransferQueue (line 144) | class TransferQueue(BaseModel): class EpisodeFormat (line 156) | class EpisodeFormat(BaseModel): class ManualTransferItem (line 166) | class ManualTransferItem(BaseModel): FILE: app/schemas/types.py class MediaType (line 6) | class MediaType(Enum): method from_agent (line 13) | def from_agent(key: str) -> Optional["MediaType"]: method to_agent (line 18) | def to_agent(self) -> str: function media_type_to_agent (line 23) | def media_type_to_agent(value) -> Optional[str]: class SortType (line 34) | class SortType(Enum): class TorrentStatus (line 41) | class TorrentStatus(Enum): class EventType (line 47) | class EventType(Enum): class ChainEventType (line 146) | class ChainEventType(Enum): class SystemConfigKey (line 176) | class SystemConfigKey(Enum): class ProgressKey (line 248) | class ProgressKey(Enum): class MediaImageType (line 258) | class MediaImageType(Enum): class NotificationType (line 264) | class NotificationType(Enum): class ContentType (line 283) | class ContentType(str, Enum): class MessageChannel (line 299) | class MessageChannel(Enum): class DownloaderType (line 315) | class DownloaderType(Enum): class MediaServerType (line 327) | class MediaServerType(Enum): class MediaRecognizeType (line 341) | class MediaRecognizeType(Enum): class UserConfigKey (line 353) | class UserConfigKey(Enum): class StorageSchema (line 359) | class StorageSchema(Enum): class ModuleType (line 370) | class ModuleType(Enum): class OtherModulesType (line 386) | class OtherModulesType(Enum): class NameValueEnum (line 403) | class NameValueEnum(Enum): method _missing_ (line 407) | def _missing_(cls, value): class ScrapingPolicy (line 416) | class ScrapingPolicy(NameValueEnum): class ScrapingTarget (line 423) | class ScrapingTarget(NameValueEnum): class ScrapingMetadata (line 431) | class ScrapingMetadata(NameValueEnum): FILE: app/schemas/user.py class UserBase (line 7) | class UserBase(BaseModel): class UserCreate (line 29) | class UserCreate(UserBase): class UserUpdate (line 38) | class UserUpdate(UserBase): class UserInDBBase (line 47) | class UserInDBBase(UserBase): class User (line 54) | class User(UserInDBBase): class UserInDB (line 60) | class UserInDB(UserInDBBase): FILE: app/schemas/workflow.py class Workflow (line 12) | class Workflow(BaseModel): class ActionParams (line 35) | class ActionParams(BaseModel): class Action (line 43) | class Action(BaseModel): class ActionExecution (line 55) | class ActionExecution(BaseModel): class ActionContext (line 64) | class ActionContext(BaseModel): class ActionFlow (line 79) | class ActionFlow(BaseModel): class WorkflowShare (line 89) | class WorkflowShare(BaseModel): FILE: app/startup/agent_initializer.py class AgentInitializer (line 9) | class AgentInitializer: method __init__ (line 14) | def __init__(self): method initialize (line 17) | async def initialize(self) -> bool: method cleanup (line 35) | async def cleanup(self) -> None: function init_agent (line 55) | def init_agent(): function stop_agent (line 92) | async def stop_agent(): FILE: app/startup/command_initializer.py function init_command (line 4) | def init_command(): function stop_command (line 11) | def stop_command(): function restart_command (line 18) | def restart_command(): FILE: app/startup/lifecycle.py function init_extra (line 18) | async def init_extra(): function lifespan (line 34) | async def lifespan(app: FastAPI): FILE: app/startup/modules_initializer.py function start_frontend (line 33) | def start_frontend(): function stop_frontend (line 57) | def stop_frontend(): function clear_temp (line 68) | def clear_temp(): function user_auth (line 78) | def user_auth(): function check_auth (line 93) | def check_auth(): function stop_modules (line 110) | async def stop_modules(): function init_modules (line 137) | def init_modules(): FILE: app/startup/monitor_initializer.py function init_monitor (line 4) | def init_monitor(): function stop_monitor (line 11) | def stop_monitor(): FILE: app/startup/plugins_initializer.py function sync_plugins (line 6) | async def sync_plugins() -> bool: function execute_task (line 35) | async def execute_task(loop, task_func, task_name): function register_plugin_api (line 51) | def register_plugin_api(): function init_plugins (line 59) | def init_plugins(): function stop_plugins (line 67) | def stop_plugins(): FILE: app/startup/routers_initializer.py function init_routers (line 6) | def init_routers(app: FastAPI): FILE: app/startup/scheduler_initializer.py function init_scheduler (line 4) | def init_scheduler(): function stop_scheduler (line 11) | def stop_scheduler(): function restart_scheduler (line 18) | def restart_scheduler(): function init_plugin_scheduler (line 25) | def init_plugin_scheduler(): FILE: app/startup/workflow_initializer.py function init_workflow (line 4) | def init_workflow(): function stop_workflow (line 11) | def stop_workflow(): FILE: app/utils/common.py function retry (line 10) | def retry(ExceptionToCheck: Any, function log_execution_time (line 66) | def log_execution_time(logger: Any = None): FILE: app/utils/crypto.py class RSAUtils (line 13) | class RSAUtils: method generate_rsa_key_pair (line 16) | def generate_rsa_key_pair(key_size: int = 2048) -> Tuple[str, str]: method verify_rsa_keys (line 49) | def verify_rsa_keys(private_key: Optional[str], public_key: Optional[s... class HashUtils (line 98) | class HashUtils: method md5 (line 100) | def md5(data: Union[str, bytes], encoding: str = "utf-8") -> str: method sha1 (line 113) | def sha1(data: Union[str, bytes], encoding: str = "utf-8") -> str: method md5_bytes (line 126) | def md5_bytes(data: Union[str, bytes], encoding: str = "utf-8") -> bytes: class CryptoJsUtils (line 139) | class CryptoJsUtils: method bytes_to_key (line 142) | def bytes_to_key(data: bytes, salt: bytes, output=48) -> bytes: method encrypt (line 157) | def encrypt(message: bytes, passphrase: bytes) -> bytes: method decrypt (line 182) | def decrypt(encrypted: Union[str, bytes], passphrase: bytes) -> bytes: FILE: app/utils/debounce.py class BaseDebouncer (line 11) | class BaseDebouncer(ABC): method __init__ (line 16) | def __init__(self, func: Callable, interval: float, *, method __call__ (line 33) | def __call__(self, *args, **kwargs) -> None: method cancel (line 40) | def cancel(self) -> None: method format_log (line 46) | def format_log(self, message: str) -> str: method log (line 52) | def log(self, level: str, message: str): method log_debug (line 60) | def log_debug(self, message: str): method log_info (line 66) | def log_info(self, message: str): method log_warning (line 72) | def log_warning(self, message: str): method error (line 78) | def error(self, message: str): method critical (line 84) | def critical(self, message: str): class Debouncer (line 91) | class Debouncer(BaseDebouncer): method __init__ (line 96) | def __init__(self, *args, **kwargs): method __call__ (line 106) | def __call__(self, *args, **kwargs) -> None: method _call_leading (line 119) | def _call_leading(self, *args, **kwargs): method _end_cool_down (line 140) | def _end_cool_down(self): method _call_trailing (line 148) | def _call_trailing(self, *args, **kwargs): method cancel (line 165) | def cancel(self) -> None: class AsyncDebouncer (line 177) | class AsyncDebouncer(BaseDebouncer): method __init__ (line 181) | def __init__(self, *args, **kwargs): method __call__ (line 190) | async def __call__(self, *args, **kwargs) -> None: method _call_leading (line 200) | async def _call_leading(self, *args, **kwargs): method _end_cool_down (line 215) | async def _end_cool_down(self): method _call_trailing (line 224) | async def _call_trailing(self, *args, **kwargs): method _delayed_execute (line 235) | async def _delayed_execute(self, *args, **kwargs): method cancel (line 247) | async def cancel(self) -> None: function debounce (line 259) | def debounce(interval: float, *, leading: bool = False, FILE: app/utils/dom.py class DomUtils (line 4) | class DomUtils: method tag_value (line 7) | def tag_value(tag_item, tag_name: str, attname: str = "", default: Uni... method add_node (line 24) | def add_node(doc, parent, name: str, value: str = None): FILE: app/utils/gc.py function memory_gc (line 14) | def memory_gc(force_collect: bool = True, function get_memory_usage (line 69) | def get_memory_usage() -> float: function memory_monitor (line 85) | def memory_monitor(threshold_mb: Optional[float] = None) -> Callable: FILE: app/utils/http.py function _url_decode_if_latin (line 21) | def _url_decode_if_latin(original: str) -> str: function cookie_parse (line 40) | def cookie_parse(cookies_str: str, array: bool = False) -> Union[list, d... function get_caller (line 62) | def get_caller(): class RequestUtils (line 99) | class RequestUtils: method __init__ (line 104) | def __init__(self, method response_manager (line 152) | def response_manager(self, method: str, url: str, **kwargs): method request (line 170) | def request(self, method: str, url: str, raise_exception: bool = False... method get (line 200) | def get(self, url: str, params: dict = None, **kwargs) -> Optional[str]: method post (line 220) | def post(self, url: str, data: Any = None, json: dict = None, **kwargs... method put (line 231) | def put(self, url: str, data: Any = None, **kwargs) -> Optional[Respon... method get_res (line 241) | def get_res(self, method get_stream (line 271) | def get_stream(self, url: str, params: dict = None, **kwargs): method post_res (line 286) | def post_res(self, method put_res (line 318) | def put_res(self, method delete_res (line 350) | def delete_res(self, method get_json (line 376) | def get_json(self, url: str, params: dict = None, **kwargs) -> Optiona... method post_json (line 396) | def post_json(self, url: str, data: Any = None, json: dict = None, **k... method parse_cache_control (line 420) | def parse_cache_control(header: str) -> Tuple[str, Optional[int]]: method generate_cache_headers (line 445) | def generate_cache_headers(etag: Optional[str], cache_control: Optiona... method detect_encoding_from_html_response (line 469) | def detect_encoding_from_html_response(response: Response, method get_decoded_html_content (line 530) | def get_decoded_html_content(response: Response, class AsyncRequestUtils (line 564) | class AsyncRequestUtils: method __init__ (line 569) | def __init__(self, method _convert_proxies_for_httpx (line 621) | def _convert_proxies_for_httpx(proxies: dict) -> Optional[str]: method response_manager (line 645) | async def response_manager(self, method: str, url: str, **kwargs): method request (line 663) | async def request(self, method: str, url: str, raise_exception: bool =... method _make_request (line 686) | async def _make_request(self, client: httpx.AsyncClient, method: str, ... method get (line 705) | async def get(self, url: str, params: dict = None, **kwargs) -> Option... method post (line 725) | async def post(self, url: str, data: Any = None, json: dict = None, **... method put (line 736) | async def put(self, url: str, data: Any = None, **kwargs) -> Optional[... method get_res (line 746) | async def get_res(self, method get_stream (line 776) | async def get_stream(self, url: str, params: dict = None, **kwargs): method post_res (line 791) | async def post_res(self, method put_res (line 823) | async def put_res(self, method delete_res (line 855) | async def delete_res(self, method get_json (line 881) | async def get_json(self, url: str, params: dict = None, **kwargs) -> O... method post_json (line 901) | async def post_json(self, url: str, data: Any = None, json: dict = Non... FILE: app/utils/ip.py class IpUtils (line 6) | class IpUtils: method is_ipv4 (line 9) | def is_ipv4(ip): method is_ipv6 (line 26) | def is_ipv6(ip): method is_internal (line 37) | def is_internal(hostname): method is_ip (line 48) | def is_ip(addr): method is_internal_domain (line 59) | def is_internal_domain(domain): method is_private_ip (line 73) | def is_private_ip(ip_str): FILE: app/utils/limit.py class BaseRateLimiter (line 13) | class BaseRateLimiter: method __init__ (line 19) | def __init__(self, source: str = "", enable_logging: bool = True): method reset_on_success (line 30) | def reset_on_success(self) -> bool: method can_call (line 36) | def can_call(self) -> Tuple[bool, str]: method reset (line 43) | def reset(self): method trigger_limit (line 49) | def trigger_limit(self): method record_call (line 55) | def record_call(self): method format_log (line 61) | def format_log(self, message: str) -> str: method log (line 69) | def log(self, level: str, message: str): method log_info (line 81) | def log_info(self, message: str): method log_warning (line 87) | def log_warning(self, message: str): class ExponentialBackoffRateLimiter (line 95) | class ExponentialBackoffRateLimiter(BaseRateLimiter): method __init__ (line 101) | def __init__( method reset_on_success (line 126) | def reset_on_success(self) -> bool: method can_call (line 132) | def can_call(self) -> Tuple[bool, str]: method reset (line 146) | def reset(self): method trigger_limit (line 157) | def trigger_limit(self): class WindowRateLimiter (line 173) | class WindowRateLimiter(BaseRateLimiter): method __init__ (line 179) | def __init__( method can_call (line 198) | def can_call(self) -> Tuple[bool, str]: method reset (line 220) | def reset(self): method record_call (line 228) | def record_call(self): class CompositeRateLimiter (line 238) | class CompositeRateLimiter(BaseRateLimiter): method __init__ (line 244) | def __init__( method can_call (line 259) | def can_call(self) -> Tuple[bool, str]: method reset (line 270) | def reset(self): method record_call (line 277) | def record_call(self): function rate_limit_handler (line 286) | def rate_limit_handler( function rate_limit_exponential (line 369) | def rate_limit_exponential( function rate_limit_window (line 398) | def rate_limit_window( class QpsRateLimiter (line 422) | class QpsRateLimiter: method __init__ (line 427) | def __init__(self, qps: float | int): method acquire (line 434) | def acquire(self) -> None: class RateStats (line 447) | class RateStats: method __init__ (line 452) | def __init__(self, window_seconds: float = 7200, source: str = ""): method record (line 462) | def record(self) -> None: method _count_since (line 472) | def _count_since(self, seconds: float) -> int: method get_qps (line 477) | def get_qps(self) -> float: method get_qpm (line 483) | def get_qpm(self) -> float: method get_qph (line 489) | def get_qph(self) -> float: method log_stats (line 495) | def log_stats(self, level: str = "info") -> None: FILE: app/utils/mixins.py class ConfigReloadMixin (line 8) | class ConfigReloadMixin: method __init_subclass__ (line 17) | def __init_subclass__(cls, **kwargs): method on_config_changed (line 60) | def on_config_changed(self): method get_reload_name (line 64) | def get_reload_name(self): FILE: app/utils/object.py class ObjectUtils (line 9) | class ObjectUtils: method is_obj (line 12) | def is_obj(obj: Any): method is_objstr (line 26) | def is_objstr(obj: Any): method arguments (line 34) | def arguments(func: Callable) -> int: method check_method (line 44) | def check_method(func: Callable[..., Any]) -> bool: method check_signature (line 96) | def check_signature(func: FunctionType, *args) -> bool: FILE: app/utils/otp.py class OtpUtils (line 4) | class OtpUtils: method generate_secret_key (line 6) | def generate_secret_key(username: str) -> (str, str): method is_legal (line 17) | def is_legal(otp_uri: str, password: str) -> bool: method check (line 28) | def check(secret: str, password: str) -> bool: method get_secret (line 40) | def get_secret(otp_uri: str) -> str: FILE: app/utils/security.py class SecurityUtils (line 11) | class SecurityUtils: method is_safe_path (line 14) | def is_safe_path(base_path: Path, user_path: Path, method async_is_safe_path (line 45) | async def async_is_safe_path(base_path: AsyncPath, user_path: AsyncPath, method is_safe_url (line 76) | def is_safe_url(url: str, allowed_domains: Union[Set[str], List[str]],... method sanitize_url_path (line 123) | def sanitize_url_path(url: str, max_length: int = 120) -> str: FILE: app/utils/singleton.py class Singleton (line 6) | class Singleton(abc.ABCMeta, type): method __call__ (line 13) | def __call__(cls, *args, **kwargs): class AbstractSingleton (line 20) | class AbstractSingleton(abc.ABC, metaclass=Singleton): class SingletonClass (line 27) | class SingletonClass(abc.ABCMeta, type): method __call__ (line 34) | def __call__(cls, *args, **kwargs): class AbstractSingletonClass (line 40) | class AbstractSingletonClass(abc.ABC, metaclass=SingletonClass): class WeakSingleton (line 47) | class WeakSingleton(abc.ABCMeta, type): method __call__ (line 54) | def __call__(cls, *args, **kwargs): FILE: app/utils/site.py class SiteUtils (line 6) | class SiteUtils: method is_logged_in (line 9) | def is_logged_in(cls, html_text: str) -> bool: method is_checkin (line 43) | def is_checkin(cls, html_text: str) -> bool: FILE: app/utils/string.py class StringUtils (line 39) | class StringUtils: method num_filesize (line 42) | def num_filesize(text: Union[str, int, float]) -> int: method str_timelong (line 71) | def str_timelong(time_sec: Union[str, int, float]) -> str: method str_secends (line 90) | def str_secends(time_sec: Union[str, int, float]) -> str: method is_chinese (line 107) | def is_chinese(word: Union[str, list]) -> bool: method is_japanese (line 122) | def is_japanese(word: str) -> bool: method is_korean (line 133) | def is_korean(word: str) -> bool: method is_all_chinese (line 144) | def is_all_chinese(word: str) -> bool: method is_english_word (line 158) | def is_english_word(word: str) -> bool: method str_int (line 165) | def str_int(text: str) -> int: method str_float (line 181) | def str_float(text: str) -> float: method clear (line 200) | def clear(text: Union[list, str], replace_word: str = "", method clear_upper (line 222) | def clear_upper(text: Optional[str]) -> str: method str_filesize (line 231) | def str_filesize(size: Union[str, float, int], pre: int = 2) -> str: method format_size (line 257) | def format_size(size_bytes: int) -> str: method url_equal (line 278) | def url_equal(url1: str, url2: str) -> bool: method get_url_netloc (line 293) | def get_url_netloc(url: str) -> Tuple[str, str]: method get_url_domain (line 305) | def get_url_domain(url: str) -> str: method get_url_sld (line 323) | def get_url_sld(url: str) -> str: method get_url_host (line 338) | def get_url_host(url: str) -> str: method get_base_url (line 350) | def get_base_url(url: str) -> str: method clear_file_name (line 360) | def clear_file_name(name: str) -> Optional[str]: method generate_random_str (line 366) | def generate_random_str(randomlength: int = 16) -> str: method get_time (line 378) | def get_time(date: Any) -> Optional[datetime.datetime]: method unify_datetime_str (line 385) | def unify_datetime_str(datetime_str: str) -> str: method format_timestamp (line 409) | def format_timestamp(timestamp: str, date_format: str = '%Y-%m-%d %H:%... method str_to_timestamp (line 425) | def str_to_timestamp(date_str: str) -> float: method to_bool (line 440) | def to_bool(text: str, default_val: bool = False) -> bool: method str_from_cookiejar (line 458) | def str_from_cookiejar(cj: dict) -> str: method get_idlist (line 467) | def get_idlist(content: str, dicts: List[dict]): method md5_hash (line 485) | def md5_hash(data: Any) -> str: method str_timehours (line 494) | def str_timehours(minutes: int) -> str: method str_amount (line 510) | def str_amount(amount: object, curr="$") -> str: method count_words (line 519) | def count_words(text: str) -> int: method is_media_title_like (line 546) | def is_media_title_like(text: str) -> bool: method split_text (line 571) | def split_text(text: str, max_length: int) -> Generator: method get_keyword (line 619) | def get_keyword(content: str) \ method str_title (line 657) | def str_title(s: Optional[str]) -> str: method escape_markdown (line 664) | def escape_markdown(content: str) -> str: method get_domain_address (line 682) | def get_domain_address(address: str, prefix: bool = True) -> Tuple[Opt... method str_series (line 715) | def str_series(array: List[int]) -> str: method format_ep (line 747) | def format_ep(nums: List[int]) -> str: method is_number (line 780) | def is_number(text: str) -> bool: method find_common_prefix (line 793) | def find_common_prefix(str1: str, str2: str) -> str: method compare_version (line 808) | def compare_version(v1: str, compare_type: str, v2: str, verbose: bool... method diff_time_str (line 926) | def diff_time_str(time_str: str): method safe_strip (line 952) | def safe_strip(value) -> Optional[str]: method is_valid_html_element (line 960) | def is_valid_html_element(elem) -> bool: method is_link (line 970) | def is_link(text: str) -> bool: method is_magnet_link (line 987) | def is_magnet_link(content: Union[str, bytes]) -> bool: method natural_sort_key (line 1000) | def natural_sort_key(text: str) -> List[Union[int, str]]: FILE: app/utils/structures.py class DictUtils (line 7) | class DictUtils: method filter_keys_to_subset (line 9) | def filter_keys_to_subset(source: Dict[K, V], reference: Dict[K, V]) -... method is_keys_subset (line 23) | def is_keys_subset(source: Dict[K, V], reference: Dict[K, V]) -> bool: class ListUtils (line 37) | class ListUtils: method flatten (line 39) | def flatten(nested_list: Union[List[List[Any]], List[Any]]) -> List[Any]: class SetUtils (line 56) | class SetUtils: method flatten (line 58) | def flatten(nested_sets: Union[Set[Set[Any]], Set[Any]]) -> Set[Any]: FILE: app/utils/system.py class SystemUtils (line 18) | class SystemUtils: method execute (line 24) | def execute(cmd: str) -> str: method execute_with_subprocess (line 36) | def execute_with_subprocess(pip_command: list) -> Tuple[bool, str]: method is_docker (line 57) | def is_docker() -> bool: method is_synology (line 64) | def is_synology() -> bool: method is_windows (line 73) | def is_windows() -> bool: method is_frozen (line 80) | def is_frozen() -> bool: method is_macos (line 87) | def is_macos() -> bool: method is_aarch64 (line 94) | def is_aarch64() -> bool: method is_aarch (line 101) | def is_aarch() -> bool: method is_x86_64 (line 109) | def is_x86_64() -> bool: method is_x86_32 (line 116) | def is_x86_32() -> bool: method platform (line 123) | def platform() -> str: method cpu_arch (line 137) | def cpu_arch() -> str: method copy (line 153) | def copy(src: Path, dest: Path) -> Tuple[int, str]: method move (line 164) | def move(src: Path, dest: Path) -> Tuple[int, str]: method link (line 176) | def link(src: Path, dest: Path) -> Tuple[int, str]: method softlink (line 194) | def softlink(src: Path, dest: Path) -> Tuple[int, str]: method list_files (line 205) | def list_files(directory: Path, extensions: list = None, method exits_files (line 253) | def exits_files(directory: Path, extensions: list, min_filesize: int =... method list_sub_files (line 304) | def list_sub_files(directory: Path, extensions: list) -> List[Path]: method list_sub_directory (line 333) | def list_sub_directory(directory: Path) -> List[Path]: method list_sub_file (line 357) | def list_sub_file(directory: Path) -> List[Path]: method get_directory_size (line 377) | def get_directory_size(path: Path) -> int: method space_usage (line 406) | def space_usage(dir_list: Union[Path, List[Path]]) -> Tuple[float, flo... method free_space (line 438) | def free_space(path: Path) -> float: method total_space (line 447) | def total_space(path: Path) -> float: method processes (line 456) | def processes() -> List[schemas.ProcessInfo]: method is_bluray_dir (line 477) | def is_bluray_dir(dir_path: Path) -> bool: method get_windows_drives (line 494) | def get_windows_drives(): method cpu_usage (line 506) | def cpu_usage(): method memory_usage (line 513) | def memory_usage() -> List[int]: method network_usage (line 524) | def network_usage() -> List[int]: method is_hardlink (line 542) | def is_hardlink(src: Path, dest: Path) -> bool: method is_network_filesystem (line 568) | def is_network_filesystem(directory: Path) -> bool: method is_same_disk (line 607) | def is_same_disk(src: Path, dest: Path) -> bool: method get_config_path (line 618) | def get_config_path(config_dir: Optional[str] = None) -> Path: method get_env_path (line 634) | def get_env_path() -> Path: method clear (line 641) | def clear(temp_path: Path, days: int): method generate_user_unique_id (line 660) | def generate_user_unique_id(): FILE: app/utils/timer.py class TimerUtils (line 6) | class TimerUtils: method random_scheduler (line 9) | def random_scheduler(num_executions: int = 1, method random_even_scheduler (line 45) | def random_even_scheduler(num_executions: int = 1, method time_difference (line 74) | def time_difference(input_datetime: datetime) -> str: method diff_minutes (line 103) | def diff_minutes(input_datetime: datetime) -> int: FILE: app/utils/tokens.py class Tokens (line 4) | class Tokens: method __init__ (line 9) | def __init__(self, text): method load_text (line 14) | def load_text(self, text): method cur (line 20) | def cur(self): method get_next (line 27) | def get_next(self): method peek (line 33) | def peek(self): method tokens (line 41) | def tokens(self): FILE: app/utils/ugreen_crypto.py class UgreenEncryptedRequest (line 18) | class UgreenEncryptedRequest: class UgreenCrypto (line 27) | class UgreenCrypto: method __init__ (line 32) | def __init__( method normalize_public_key (line 52) | def normalize_public_key(public_key: str) -> str: method generate_aes_key (line 63) | def generate_aes_key() -> str: method _flatten_query (line 67) | def _flatten_query(prefix: str, value: Any) -> list[tuple[str, str]]: method encode_query (line 91) | def encode_query(cls, params: Mapping[str, Any] | None) -> str: method rsa_encrypt_long (line 99) | def rsa_encrypt_long(self, plaintext: str) -> str: method aes_gcm_encrypt (line 114) | def aes_gcm_encrypt(plaintext: str, aes_key: str) -> str: method aes_gcm_decrypt (line 122) | def aes_gcm_decrypt(payload_b64: str, aes_key: str) -> str: method build_security_key (line 131) | def build_security_key(token: str) -> str: method _normalize_body (line 135) | def _normalize_body(data: Any) -> str: method encrypt_body (line 142) | def encrypt_body(self, data: Any, aes_key: str) -> dict[str, str]: method build_headers (line 149) | def build_headers( method build_encrypted_request (line 176) | def build_encrypted_request( method decrypt_response (line 232) | def decrypt_response(self, response_json: Any, aes_key: str) -> Any: FILE: app/utils/url.py class UrlUtils (line 10) | class UrlUtils: method standardize_base_url (line 13) | def standardize_base_url(host: str) -> str: method adapt_request_url (line 28) | def adapt_request_url(host: str, endpoint: str) -> Optional[str]: method combine_url (line 43) | def combine_url(host: str, path: Optional[str] = None, query: Optional... method get_mime_type (line 77) | def get_mime_type(path_or_url: Union[str, Path], default_type: str = "... method quote (line 101) | def quote(s: str) -> str: method parse_url_params (line 111) | def parse_url_params(url: str) -> Optional[Tuple[str, str, int, str]]: FILE: app/utils/web.py class WebUtils (line 4) | class WebUtils: method get_location (line 7) | def get_location(ip: str): method get_location1 (line 14) | def get_location1(ip: str): method get_location2 (line 49) | def get_location2(ip: str): FILE: app/workflow/__init__.py class WorkFlowManager (line 17) | class WorkFlowManager(metaclass=Singleton): method __init__ (line 22) | def __init__(self): method init (line 29) | def init(self): method stop (line 62) | def stop(self): method excute (line 69) | def excute(self, workflow_id: int, action: Action, method list_actions (line 109) | def list_actions(self) -> List[dict]: method update_workflow_event (line 125) | def update_workflow_event(self, workflow: Workflow): method load_workflow_events (line 136) | def load_workflow_events(self, workflow_id: Optional[int] = None): method register_workflow_event (line 153) | def register_workflow_event(self, workflow_id: int, event_type_str: str): method remove_workflow_event (line 174) | def remove_workflow_event(self, workflow_id: int, event_type_str: str): method _handle_event (line 193) | def _handle_event(self, event: Event): method _trigger_workflow (line 208) | def _trigger_workflow(self, workflow_id: int, event: Event): method _check_event_conditions (line 238) | def _check_event_conditions(self, workflow, event: Event) -> bool: method _check_complex_condition (line 265) | def _check_complex_condition(actual_value: any, condition: dict) -> bool: method get_event_workflows (line 295) | def get_event_workflows(self) -> dict: FILE: app/workflow/actions/__init__.py class ActionChain (line 9) | class ActionChain(ChainBase): class BaseAction (line 13) | class BaseAction(ABC): method __init__ (line 27) | def __init__(self, action_id: str): method name (line 34) | def name(cls) -> str: # noqa method description (line 40) | def description(cls) -> str: # noqa method data (line 46) | def data(cls) -> dict: # noqa method done (line 50) | def done(self) -> bool: method success (line 58) | def success(self) -> bool: method message (line 65) | def message(self) -> str: method job_done (line 71) | def job_done(self, message: str = None): method check_cache (line 78) | def check_cache(self, workflow_id: int, key: str) -> bool: method save_cache (line 87) | def save_cache(self, workflow_id: int, data: Union[list, str]): method execute (line 102) | def execute(self, workflow_id: int, params: ActionParams, context: Act... FILE: app/workflow/actions/add_download.py class AddDownloadParams (line 14) | class AddDownloadParams(ActionParams): class AddDownloadAction (line 24) | class AddDownloadAction(BaseAction): method __init__ (line 29) | def __init__(self, action_id: str): method name (line 36) | def name(cls) -> str: # noqa method description (line 41) | def description(cls) -> str: # noqa method data (line 46) | def data(cls) -> dict: # noqa method success (line 50) | def success(self) -> bool: method execute (line 53) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/add_subscribe.py class AddSubscribeParams (line 10) | class AddSubscribeParams(ActionParams): class AddSubscribeAction (line 17) | class AddSubscribeAction(BaseAction): method __init__ (line 22) | def __init__(self, action_id: str): method name (line 29) | def name(cls) -> str: # noqa method description (line 34) | def description(cls) -> str: # noqa method data (line 39) | def data(cls) -> dict: # noqa method success (line 43) | def success(self) -> bool: method execute (line 46) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/fetch_downloads.py class FetchDownloadsParams (line 7) | class FetchDownloadsParams(ActionParams): class FetchDownloadsAction (line 14) | class FetchDownloadsAction(BaseAction): method __init__ (line 19) | def __init__(self, action_id: str): method name (line 25) | def name(cls) -> str: # noqa method description (line 30) | def description(cls) -> str: # noqa method data (line 35) | def data(cls) -> dict: # noqa method success (line 39) | def success(self) -> bool: method execute (line 42) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/fetch_medias.py class FetchMediasParams (line 16) | class FetchMediasParams(ActionParams): class FetchMediasAction (line 25) | class FetchMediasAction(BaseAction): method __init__ (line 30) | def __init__(self, action_id: str): method name (line 114) | def name(cls) -> str: # noqa method description (line 119) | def description(cls) -> str: # noqa method data (line 124) | def data(cls) -> dict: # noqa method success (line 128) | def success(self) -> bool: method __get_source (line 131) | def __get_source(self, source: str): method execute (line 140) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/fetch_rss.py class FetchRssParams (line 14) | class FetchRssParams(ActionParams): class FetchRssAction (line 27) | class FetchRssAction(BaseAction): method __init__ (line 32) | def __init__(self, action_id: str): method name (line 39) | def name(cls) -> str: # noqa method description (line 44) | def description(cls) -> str: # noqa method data (line 49) | def data(cls) -> dict: # noqa method success (line 53) | def success(self) -> bool: method execute (line 56) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/fetch_torrents.py class FetchTorrentsParams (line 14) | class FetchTorrentsParams(ActionParams): class FetchTorrentsAction (line 27) | class FetchTorrentsAction(BaseAction): method __init__ (line 32) | def __init__(self, action_id: str): method name (line 38) | def name(cls) -> str: # noqa method description (line 43) | def description(cls) -> str: # noqa method data (line 48) | def data(cls) -> dict: # noqa method success (line 52) | def success(self) -> bool: method execute (line 55) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/filter_medias.py class FilterMediasParams (line 11) | class FilterMediasParams(ActionParams): class FilterMediasAction (line 20) | class FilterMediasAction(BaseAction): method __init__ (line 25) | def __init__(self, action_id: str): method name (line 31) | def name(cls) -> str: # noqa method description (line 36) | def description(cls) -> str: # noqa method data (line 41) | def data(cls) -> dict: # noqa method success (line 45) | def success(self) -> bool: method execute (line 48) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/filter_torrents.py class FilterTorrentsParams (line 12) | class FilterTorrentsParams(ActionParams): class FilterTorrentsAction (line 25) | class FilterTorrentsAction(BaseAction): method __init__ (line 30) | def __init__(self, action_id: str): method name (line 36) | def name(cls) -> str: # noqa method description (line 41) | def description(cls) -> str: # noqa method data (line 46) | def data(cls) -> dict: # noqa method success (line 50) | def success(self) -> bool: method execute (line 53) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/invoke_plugin.py class InvokePluginParams (line 9) | class InvokePluginParams(ActionParams): class InvokePluginAction (line 18) | class InvokePluginAction(BaseAction): method __init__ (line 23) | def __init__(self, action_id: str): method name (line 29) | def name(cls) -> str: # noqa method description (line 34) | def description(cls) -> str: # noqa method data (line 39) | def data(cls) -> dict: # noqa method success (line 43) | def success(self) -> bool: method execute (line 46) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/note.py class NoteAction (line 5) | class NoteAction(BaseAction): method name (line 12) | def name(cls) -> str: # noqa method description (line 17) | def description(cls) -> str: # noqa method data (line 22) | def data(cls) -> dict: # noqa method success (line 26) | def success(self) -> bool: method execute (line 29) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/scan_file.py class ScanFileParams (line 13) | class ScanFileParams(ActionParams): class ScanFileAction (line 22) | class ScanFileAction(BaseAction): method __init__ (line 27) | def __init__(self, action_id: str): method name (line 34) | def name(cls) -> str: # noqa method description (line 39) | def description(cls) -> str: # noqa method data (line 44) | def data(cls) -> dict: # noqa method success (line 48) | def success(self) -> bool: method execute (line 51) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/scrape_file.py class ScrapeFileParams (line 12) | class ScrapeFileParams(ActionParams): class ScrapeFileAction (line 19) | class ScrapeFileAction(BaseAction): method __init__ (line 24) | def __init__(self, action_id: str): method name (line 31) | def name(cls) -> str: # noqa method description (line 36) | def description(cls) -> str: # noqa method data (line 41) | def data(cls) -> dict: # noqa method success (line 45) | def success(self) -> bool: method execute (line 48) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/send_event.py class SendEventParams (line 7) | class SendEventParams(ActionParams): class SendEventAction (line 14) | class SendEventAction(BaseAction): method name (line 21) | def name(cls) -> str: # noqa method description (line 26) | def description(cls) -> str: # noqa method data (line 31) | def data(cls) -> dict: # noqa method success (line 35) | def success(self) -> bool: method execute (line 38) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/send_message.py class SendMessageParams (line 10) | class SendMessageParams(ActionParams): class SendMessageAction (line 18) | class SendMessageAction(BaseAction): method __init__ (line 23) | def __init__(self, action_id: str): method name (line 28) | def name(cls) -> str: # noqa method description (line 33) | def description(cls) -> str: # noqa method data (line 38) | def data(cls) -> dict: # noqa method success (line 42) | def success(self) -> bool: method execute (line 45) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: app/workflow/actions/transfer_file.py class TransferFileParams (line 16) | class TransferFileParams(ActionParams): class TransferFileAction (line 24) | class TransferFileAction(BaseAction): method __init__ (line 29) | def __init__(self, action_id: str): method name (line 36) | def name(cls) -> str: # noqa method description (line 41) | def description(cls) -> str: # noqa method data (line 46) | def data(cls) -> dict: # noqa method success (line 50) | def success(self) -> bool: method execute (line 53) | def execute(self, workflow_id: int, params: dict, context: ActionConte... FILE: database/env.py function run_migrations_offline (line 30) | def run_migrations_offline() -> None: function run_migrations_online (line 67) | def run_migrations_online() -> None: FILE: database/versions/0fb94bf69b38_2_0_2.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 33) | def downgrade() -> None: FILE: database/versions/262735d025da_2_0_1.py function upgrade (line 19) | def upgrade() -> None: function downgrade (line 61) | def downgrade() -> None: FILE: database/versions/279a949d81b6_2_1_1.py function upgrade (line 18) | def upgrade() -> None: function downgrade (line 23) | def downgrade() -> None: FILE: database/versions/294b007932ef_2_0_0.py function upgrade (line 26) | def upgrade() -> None: function downgrade (line 76) | def downgrade() -> None: FILE: database/versions/3891a5e722a1_2_1_7.py function upgrade (line 22) | def upgrade() -> None: function downgrade (line 36) | def downgrade() -> None: FILE: database/versions/3df653756eec_2_1_6.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 41) | def downgrade() -> None: FILE: database/versions/41ef1dd7467c_2_2_2.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 47) | def downgrade() -> None: FILE: database/versions/4666ce24a443_2_1_8.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 35) | def downgrade() -> None: FILE: database/versions/486e56a62dcb_2_1_5.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 36) | def downgrade() -> None: FILE: database/versions/4b544f5d3b07_2_1_3.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 46) | def downgrade() -> None: FILE: database/versions/55390f1f77c1_2_0_9.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 28) | def downgrade() -> None: FILE: database/versions/58edfac72c32_2_2_3.py function upgrade (line 18) | def upgrade() -> None: function downgrade (line 28) | def downgrade() -> None: FILE: database/versions/5b3355c964bb_2_2_0.py function upgrade (line 21) | def upgrade() -> None: function fix_postgresql_sequences (line 29) | def fix_postgresql_sequences(): function fix_table_sequence (line 51) | def fix_table_sequence(connection, table_name): function convert_to_identity (line 91) | def convert_to_identity(connection, table_name): FILE: database/versions/610bb05ddeef_2_1_2.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 29) | def downgrade() -> None: FILE: database/versions/89d24811e894_2_1_4.py function upgrade (line 19) | def upgrade() -> None: function downgrade (line 67) | def downgrade() -> None: FILE: database/versions/a295e41830a6_2_0_6.py function upgrade (line 19) | def upgrade() -> None: function downgrade (line 36) | def downgrade() -> None: FILE: database/versions/a73f2dbf5c09_2_0_4.py function upgrade (line 19) | def upgrade() -> None: function downgrade (line 26) | def downgrade() -> None: FILE: database/versions/a946dae52526_2_2_1.py function upgrade (line 21) | def upgrade() -> None: function downgrade (line 32) | def downgrade() -> None: function migrate_postgresql_userid (line 39) | def migrate_postgresql_userid(connection): FILE: database/versions/bf28a012734c_2_0_8.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 28) | def downgrade() -> None: FILE: database/versions/ca5461f314f2_2_1_0.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 40) | def downgrade() -> None: FILE: database/versions/d58298a0879f_2_1_9.py function upgrade (line 16) | def upgrade() -> None: function downgrade (line 20) | def downgrade() -> None: FILE: database/versions/e2dbe1421fa4_2_0_3.py function upgrade (line 24) | def upgrade() -> None: function downgrade (line 79) | def downgrade() -> None: FILE: database/versions/eaf9cbc49027_2_0_7.py function upgrade (line 20) | def upgrade() -> None: function downgrade (line 35) | def downgrade() -> None: FILE: database/versions/ecf3c693fdf3_2_0_5.py function upgrade (line 23) | def upgrade() -> None: function downgrade (line 55) | def downgrade() -> None: FILE: skills/moviepilot-cli/scripts/mp-cli.js constant SCRIPT_NAME (line 11) | const SCRIPT_NAME = process.env.MP_SCRIPT_NAME || path.basename(process.... constant CONFIG_DIR (line 12) | const CONFIG_DIR = path.join(os.homedir(), '.config', 'moviepilot_cli'); constant CONFIG_FILE (line 13) | const CONFIG_FILE = path.join(CONFIG_DIR, 'config'); function fail (line 27) | function fail(message) { function spacePad (line 32) | function spacePad(text = '', targetCol = 0) { function printBox (line 37) | function printBox(title, lines) { function readConfig (line 51) | function readConfig() { function saveConfig (line 83) | function saveConfig(host, key) { function loadConfig (line 89) | function loadConfig() { function normalizeType (line 106) | function normalizeType(schema = {}) { function normalizeItemType (line 117) | function normalizeItemType(schema = {}) { function normalizeCommand (line 132) | function normalizeCommand(tool = {}) { function request (line 152) | function request(method, targetUrl, headers = {}, body, timeout = 120000) { function loadCommandsJson (line 197) | async function loadCommandsJson() { function loadCommandJson (line 225) | async function loadCommandJson(commandName) { function ensureConfig (line 251) | function ensureConfig() { function printValue (line 274) | function printValue(value) { function formatUsageValue (line 283) | function formatUsageValue(field) { function cmdList (line 290) | async function cmdList() { function cmdShow (line 298) | async function cmdShow(commandName) { function buildArguments (line 352) | function buildArguments(pairs) { function cmdRun (line 367) | async function cmdRun(commandName, pairs) { function printUsage (line 418) | function printUsage() { function main (line 470) | async function main() { FILE: tests/manual/ugreen_media_cli.py class UgreenLoginError (line 27) | class UgreenLoginError(Exception): function _normalize_base_url (line 31) | def _normalize_base_url(raw: str) -> str: function _json_or_raise (line 43) | def _json_or_raise(resp: requests.Response, stage: str) -> dict[str, Any]: function _decode_public_key (line 55) | def _decode_public_key(raw: str) -> str: function _raise_if_failed (line 67) | def _raise_if_failed(payload: Mapping[str, Any], stage: str) -> None: function _build_common_headers (line 75) | def _build_common_headers( function _login_and_get_access (line 87) | def _login_and_get_access( function _fetch_media_lib (line 155) | def _fetch_media_lib( function parse_args (line 192) | def parse_args(argv: list[str]) -> argparse.Namespace: function main (line 216) | def main(argv: list[str] | None = None) -> int: FILE: tests/test_bluray.py class BluRayTest (line 21) | class BluRayTest(TestCase): method __init__ (line 22) | def __init__(self, methodName="test"): method _test_do_transfer (line 49) | def _test_do_transfer(self): method _test_scrape_metadata (line 134) | def _test_scrape_metadata(self, mock_metadata_nfo): method test (line 183) | def test( FILE: tests/test_mediascrape.py class TestMediaScrapingPaths (line 18) | class TestMediaScrapingPaths(unittest.TestCase): method setUp (line 19) | def setUp(self): method test_movie_file_nfo_path (line 23) | def test_movie_file_nfo_path(self): method test_movie_dir_nfo_path (line 36) | def test_movie_dir_nfo_path(self): method test_tv_dir_nfo_path (line 47) | def test_tv_dir_nfo_path(self): method test_season_dir_nfo_path (line 57) | def test_season_dir_nfo_path(self): method test_episode_file_nfo_path (line 67) | def test_episode_file_nfo_path(self): class TestMediaScrapingNFO (line 80) | class TestMediaScrapingNFO(unittest.TestCase): method setUp (line 81) | def setUp(self): method test_scrape_nfo_off (line 92) | def test_scrape_nfo_off(self): method test_scrape_nfo_on_exists_skip (line 98) | def test_scrape_nfo_on_exists_skip(self): method test_scrape_nfo_on_not_exists_scrape (line 107) | def test_scrape_nfo_on_not_exists_scrape(self): method test_scrape_nfo_overwrite_exists_scrape (line 116) | def test_scrape_nfo_overwrite_exists_scrape(self): class TestMediaScrapingImages (line 126) | class TestMediaScrapingImages(unittest.TestCase): method setUp (line 127) | def setUp(self): method tearDown (line 135) | def tearDown(self): method test_scrape_images_mapping (line 138) | def test_scrape_images_mapping(self): method test_scrape_images_season_filter (line 159) | def test_scrape_images_season_filter(self): method test_download_and_save_image (line 179) | def test_download_and_save_image(self, mock_settings, mock_chmod, mock... class TestMediaScrapingTVDirectory (line 217) | class TestMediaScrapingTVDirectory(unittest.TestCase): method setUp (line 218) | def setUp(self): method test_initialize_tv_directory_specials (line 225) | def test_initialize_tv_directory_specials(self, mock_settings): method test_initialize_tv_directory_season (line 254) | def test_initialize_tv_directory_season(self): class TestMediaScrapeEvents (line 272) | class TestMediaScrapeEvents(unittest.TestCase): method setUp (line 273) | def setUp(self): method test_scrape_metadata_event_file (line 279) | def test_scrape_metadata_event_file( method test_scrape_metadata_event_dir_bluray (line 311) | def test_scrape_metadata_event_dir_bluray( method test_scrape_metadata_event_dir_with_filelist (line 344) | def test_scrape_metadata_event_dir_with_filelist( method test_scrape_metadata_event_dir_full (line 381) | def test_scrape_metadata_event_dir_full( method test_scrape_metadata_movie (line 412) | def test_scrape_metadata_movie( method test_scrape_metadata_tv (line 441) | def test_scrape_metadata_tv( method test_scrape_metadata_recognize_fallback (line 469) | def test_scrape_metadata_recognize_fallback( method test_scrape_metadata_invalid_extension (line 491) | def test_scrape_metadata_invalid_extension( method test_scrape_metadata_event_dir_with_multiple_files (line 507) | def test_scrape_metadata_event_dir_with_multiple_files( method test_scrape_metadata_event_dir_with_tv_multi_seasons_episodes (line 552) | def test_scrape_metadata_event_dir_with_tv_multi_seasons_episodes( method test_scrape_metadata_recognize_fail (line 601) | def test_scrape_metadata_recognize_fail( FILE: tests/test_metainfo.py class MetaInfoTest (line 9) | class MetaInfoTest(TestCase): method setUp (line 10) | def setUp(self) -> None: method tearDown (line 13) | def tearDown(self) -> None: method test_metainfo (line 16) | def test_metainfo(self): method test_emby_format_ids (line 43) | def test_emby_format_ids(self): method test_metainfopath_with_custom_words (line 66) | def test_metainfopath_with_custom_words(self): method test_metainfopath_without_custom_words (line 76) | def test_metainfopath_without_custom_words(self): method test_metainfopath_with_empty_custom_words (line 83) | def test_metainfopath_with_empty_custom_words(self): method test_custom_words_apply_words_recording (line 90) | def test_custom_words_apply_words_recording(self): FILE: tests/test_object.py class ObjectUtilsTest (line 6) | class ObjectUtilsTest(TestCase): method test_check_method (line 8) | def test_check_method(self): FILE: tests/test_release_group.py class MetaInfoTest (line 6) | class MetaInfoTest(TestCase): method test_release_group (line 7) | def test_release_group(self): FILE: tests/test_string.py class StringUtilsTest (line 6) | class StringUtilsTest(TestCase): method test_is_media_title_like_true (line 8) | def test_is_media_title_like_true(self): method test_is_media_title_like_false (line 16) | def test_is_media_title_like_false(self): FILE: tests/test_telegram.py class TestTelegram (line 13) | class TestTelegram(unittest.TestCase): method setUp (line 15) | def setUp(self): method tearDown (line 20) | def tearDown(self): method test_send_msg_success (line 24) | def test_send_msg_success(self): method test_send_msg_with_longtext (line 35) | def test_send_msg_with_longtext(self): method test_send_medias_msg_success (line 43) | def test_send_medias_msg_success(self): method test_send_medias_msg_without_vote_average (line 70) | def test_send_medias_msg_without_vote_average(self): method test_send_medias_msg_with_link_and_buttons (line 88) | def test_send_medias_msg_with_link_and_buttons(self): method test_send_torrents_msg_success (line 115) | def test_send_torrents_msg_success(self): method test_send_torrents_msg_with_link_and_buttons (line 150) | def test_send_torrents_msg_with_link_and_buttons(self): method test_send_msg_with_buttons_and_link (line 190) | def test_send_msg_with_buttons_and_link(self): method test_send_msg_with_url_buttons (line 206) | def test_send_msg_with_url_buttons(self): method test_send_msg_markdown_escaping (line 222) | def test_send_msg_markdown_escaping(self): FILE: tests/test_transfer_history_retransfer.py function test_manual_transfer_from_history_preserves_download_context (line 13) | def test_manual_transfer_from_history_preserves_download_context(monkeyp... FILE: tests/test_ugreen_api.py class _FakeResponse (line 8) | class _FakeResponse: method __init__ (line 9) | def __init__(self, payload: dict, headers: dict | None = None): method json (line 13) | def json(self): class _FakeSession (line 17) | class _FakeSession: method __init__ (line 18) | def __init__(self, get_responses=None, post_responses=None): method get (line 27) | def get(self, *args, **kwargs): method post (line 33) | def post(self, *args, **kwargs): method close (line 40) | def close(): class _FakeCrypto (line 44) | class _FakeCrypto: method __init__ (line 45) | def __init__(self, *args, **kwargs): method rsa_encrypt_long (line 49) | def rsa_encrypt_long(raw: str) -> str: method build_encrypted_request (line 53) | def build_encrypted_request(url: str, method: str = "GET", params=None... method decrypt_response (line 57) | def decrypt_response(payload, aes_key): class UgreenApiVerifySslTest (line 61) | class UgreenApiVerifySslTest(unittest.TestCase): method test_request_json_default_verify_ssl_true (line 62) | def test_request_json_default_verify_ssl_true(self): method test_login_logout_follow_verify_ssl_flag (line 76) | def test_login_logout_follow_verify_ssl_flag(self): FILE: tests/test_ugreen_crypto.py function _generate_rsa_keys (line 12) | def _generate_rsa_keys() -> tuple[str, rsa.RSAPrivateKey]: function _rsa_decrypt_long (line 21) | def _rsa_decrypt_long(private_key: rsa.RSAPrivateKey, payload_b64: str) ... class UgreenCryptoTest (line 31) | class UgreenCryptoTest(unittest.TestCase): method setUp (line 32) | def setUp(self): method test_rsa_encrypt_long (line 41) | def test_rsa_encrypt_long(self): method test_build_encrypted_request_and_decrypt_response (line 46) | def test_build_encrypted_request_and_decrypt_response(self): FILE: tests/test_ugreen_mediaserver.py function _load_ugreen_class (line 16) | def _load_ugreen_class(): class _FakeUgreenApi (line 91) | class _FakeUgreenApi: method video_all (line 96) | def video_all(classification: int, page: int = 1, page_size: int = 1): class UgreenScanModeTest (line 104) | class UgreenScanModeTest(unittest.TestCase): method test_resolve_scan_type (line 105) | def test_resolve_scan_type(self): class UgreenVerifySslTest (line 124) | class UgreenVerifySslTest(unittest.TestCase): method test_resolve_verify_ssl (line 125) | def test_resolve_verify_ssl(self): class UgreenStatisticTest (line 136) | class UgreenStatisticTest(unittest.TestCase): method test_get_medias_count_episode_is_none (line 137) | def test_get_medias_count_episode_is_none(self): class DashboardStatisticTest (line 151) | class DashboardStatisticTest(unittest.TestCase): method test_statistic_all_episode_missing (line 153) | def test_statistic_all_episode_missing(self): method test_statistic_mixed_episode_count (line 170) | def test_statistic_mixed_episode_count(self):