Source code for p115client.tool.xys

#!/usr/bin/env python3
# encoding: utf-8

__author__ = "ChenyangGao <https://chenyanggao.github.io>"
__all__ = [
    "wish_info", "wish_make", "wish_answer", "wish_adopt", 
    "wish_del", "wish_iter", "wish_aid_iter", 
]

from collections.abc import AsyncIterator, Coroutine, Iterable, Iterator
from os import PathLike
from typing import overload, Any, Literal

from iterutils import run_gen_step, run_gen_step_iter, YieldFrom

from ..client import check_response, P115Client
from ..type import P115StrID


@overload
def wish_info(
    client: str | PathLike | P115Client, 
    wish_id: str, 
    *, 
    async_: Literal[False] = False, 
    **request_kwargs, 
) -> dict:
    ...
@overload
def wish_info(
    client: str | PathLike | P115Client, 
    wish_id: str, 
    *, 
    async_: Literal[True], 
    **request_kwargs, 
) -> Coroutine[Any, Any, dict]:
    ...
[docs] def wish_info( client: str | PathLike | P115Client, wish_id: str, *, async_: Literal[False, True] = False, **request_kwargs, ) -> dict | Coroutine[Any, Any, dict]: """许愿树活动:许愿信息 :param client: 115 客户端或 cookies :param wish_id: 许愿 id :param async_: 是否异步 :param request_kwargs: 其它请求参数 :return: 许愿信息 """ if isinstance(client, (str, PathLike)): client = P115Client(client) def gen_step(): resp = yield client.act_xys_get_desire_info( wish_id, async_=async_, **request_kwargs, ) check_response(resp) return resp["data"] return run_gen_step(gen_step, async_)
@overload def wish_make( client: str | PathLike | P115Client, content: str = "随便许个愿", size: int = 5, *, async_: Literal[False] = False, **request_kwargs, ) -> P115StrID: ... @overload def wish_make( client: str | PathLike | P115Client, content: str = "随便许个愿", size: int = 5, *, async_: Literal[True], **request_kwargs, ) -> Coroutine[Any, Any, P115StrID]: ...
[docs] def wish_make( client: str | PathLike | P115Client, content: str = "随便许个愿", size: int = 5, *, async_: Literal[False, True] = False, **request_kwargs, ) -> P115StrID | Coroutine[Any, Any, P115StrID]: """许愿树活动:创建许愿(许愿创建后需要等审核) :param client: 115 客户端或 cookies :param content: 许愿内容 :param size: 答谢空间大小,单位是 GB :param async_: 是否异步 :param request_kwargs: 其它请求参数 :return: 许愿 id """ if isinstance(client, (str, PathLike)): client = P115Client(client) def gen_step(): resp = yield client.act_xys_wish( {"rewardSpace": size, "content": content}, async_=async_, **request_kwargs, ) check_response(resp) return P115StrID(resp["data"]["xys_id"], resp["data"]) return run_gen_step(gen_step, async_)
@overload def wish_answer( client: str | PathLike | P115Client, wish_id: str, content: str = "帮你助个愿", file_ids: int | str | Iterable[int | str] = "", *, async_: Literal[False] = False, **request_kwargs, ) -> P115StrID: ... @overload def wish_answer( client: str | PathLike | P115Client, wish_id: str, content: str = "帮你助个愿", file_ids: int | str | Iterable[int | str] = "", *, async_: Literal[True], **request_kwargs, ) -> Coroutine[Any, Any, P115StrID]: ...
[docs] def wish_answer( client: str | PathLike | P115Client, wish_id: str, content: str = "帮你助个愿", file_ids: int | str | Iterable[int | str] = "", *, async_: Literal[False, True] = False, **request_kwargs, ) -> P115StrID | Coroutine[Any, Any, P115StrID]: """许愿树活动:创建助愿(助愿创建后需要等审核) .. note:: 如果从未调用过 `wish_info(client, wish_id)`,请先调用,否则会报参数错误 :param client: 115 客户端或 cookies :param wish_id: 许愿 id :param content: 助愿内容 :param file_ids: 文件在你的网盘的 id,多个用逗号 "," 隔开 :param async_: 是否异步 :param request_kwargs: 其它请求参数 :return: 助愿 id """ if isinstance(client, (str, PathLike)): client = P115Client(client) if not isinstance(file_ids, (int, str)): file_ids = ",".join(map(str, file_ids)) def gen_step(): resp = yield client.act_xys_aid_desire( {"id": wish_id, "content": content, "file_ids": file_ids}, async_=async_, **request_kwargs, ) check_response(resp) return P115StrID(resp["data"]["aid_id"], resp["data"]) return run_gen_step(gen_step, async_)
@overload def wish_adopt( client: str | PathLike | P115Client, wish_id: str, aid_id: int | str, to_cid: int = 0, *, async_: Literal[False] = False, **request_kwargs, ) -> dict: ... @overload def wish_adopt( client: str | PathLike | P115Client, wish_id: str, aid_id: int | str, to_cid: int = 0, *, async_: Literal[True], **request_kwargs, ) -> Coroutine[Any, Any, dict]: ...
[docs] def wish_adopt( client: str | PathLike | P115Client, wish_id: str, aid_id: int | str, to_cid: int = 0, *, async_: Literal[False, True] = False, **request_kwargs, ) -> dict | Coroutine[Any, Any, dict]: """许愿树活动:采纳助愿 :param client: 115 客户端或 cookies :param wish_id: 许愿 id :param aid_id: 助愿 id :param to_cid: 助愿的分享文件保存到你的网盘中目录的 id :param async_: 是否异步 :param request_kwargs: 其它请求参数 :return: 接口的返回信息 """ if isinstance(client, (str, PathLike)): client = P115Client(client) return check_response(client.act_xys_adopt( {"did": wish_id, "aid": aid_id, "to_cid": to_cid}, async_=async_, **request_kwargs, ))
@overload def wish_del( client: str | PathLike | P115Client, wish_id: str | Iterable[str], *, async_: Literal[False] = False, **request_kwargs, ) -> dict: ... @overload def wish_del( client: str | PathLike | P115Client, wish_id: str | Iterable[str], *, async_: Literal[True], **request_kwargs, ) -> Coroutine[Any, Any, dict]: ...
[docs] def wish_del( client: str | PathLike | P115Client, wish_id: str | Iterable[str], *, async_: Literal[False, True] = False, **request_kwargs, ) -> dict | Coroutine[Any, Any, dict]: """许愿树活动:删除许愿 :param client: 115 客户端或 cookies :param wish_id: 许愿 id :param async_: 是否异步 :param request_kwargs: 其它请求参数 :return: 接口的返回信息 """ if isinstance(client, (str, PathLike)): client = P115Client(client) if not isinstance(wish_id, str): wish_id = ",".join(wish_id) return check_response(client.act_xys_wish_del( wish_id, async_=async_, **request_kwargs, ))
@overload def wish_iter( client: str | PathLike | P115Client, type: int = 0, page_size: int = 1_000, *, async_: Literal[False] = False, **request_kwargs, ) -> Iterator[dict]: ... @overload def wish_iter( client: str | PathLike | P115Client, type: int = 0, page_size: int = 1_000, *, async_: Literal[True], **request_kwargs, ) -> AsyncIterator[dict]: ...
[docs] def wish_iter( client: str | PathLike | P115Client, type: int = 0, page_size: int = 1_000, *, async_: Literal[False, True] = False, **request_kwargs, ) -> Iterator[dict] | AsyncIterator[dict]: """许愿树活动:罗列我的许愿列表 :param client: 115 客户端或 cookies :param type: 类型 - 0: 全部 - 1: 进行中 - 2: 已实现 :param page_size: 分页大小 :param async_: 是否异步 :param request_kwargs: 其它请求参数 :return: 迭代器,逐个返回许愿许愿信息 """ if isinstance(client, (str, PathLike)): client = P115Client(client) if page_size <= 0: page_size = 1_000 def gen_step(): payload: dict = {"type": type, "limit": page_size, "page": 1} while True: resp = yield client.act_xys_my_desire( payload, async_=async_, **request_kwargs, ) check_response(resp) ls = resp["data"]["list"] yield YieldFrom(ls) if not ls: break payload["page"] += 1 return run_gen_step_iter(gen_step, async_)
@overload def wish_aid_iter( client: str | PathLike | P115Client, wish_id: str, page_size: int = 1_000, *, async_: Literal[False] = False, **request_kwargs, ) -> Iterator[dict]: ... @overload def wish_aid_iter( client: str | PathLike | P115Client, wish_id: str, page_size: int = 1_000, *, async_: Literal[True], **request_kwargs, ) -> AsyncIterator[dict]: ...
[docs] def wish_aid_iter( client: str | PathLike | P115Client, wish_id: str, page_size: int = 1_000, *, async_: Literal[False, True] = False, **request_kwargs, ) -> Iterator[dict] | AsyncIterator[dict]: """许愿树活动:许愿的助愿列表 :param client: 115 客户端或 cookies :param wish_id: 许愿 id :param page_size: 分页大小 :param async_: 是否异步 :param request_kwargs: 其它请求参数 :return: 迭代器,逐个返回助愿信息 """ if isinstance(client, (str, PathLike)): client = P115Client(client) if page_size <= 0: page_size = 1_000 def gen_step(): payload: dict = {"id": wish_id, "limit": page_size, "page": 1} while True: resp = yield client.act_xys_desire_aid_list( payload, async_=async_, **request_kwargs, ) check_response(resp) ls = resp["data"]["list"] yield YieldFrom(ls) if not ls: break payload["page"] += 1 return run_gen_step_iter(gen_step, async_)
# TODO: 再实现一个漂流瓶