Merge pull request #23 from omg-xtao/upload_file

 feat: upload_file
pull/24/head
yupix 2 years ago committed by GitHub
commit 5ee852d97e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -5,12 +5,12 @@ from typing import TYPE_CHECKING, Optional
from mipac.abstract.action import AbstractAction
from mipac.errors.base import ParameterError
from mipac.http import HTTPClient, Route
from mipac.models.drive import File, Folder
from mipac.types.drive import IDriveFile
from mipac.util import remove_dict_empty
if TYPE_CHECKING:
from mipac.manager.client import ClientActions
from mipac.models.drive import File, Folder
__all__ = ('DriveActions', 'FileActions', 'FolderActions')
@ -118,6 +118,55 @@ class FileActions(AbstractAction):
)
return [File(i, client=self.__client) for i in res]
async def upload_file(
self,
file: str,
file_name: Optional[str] = None,
folder_id: Optional[str] = None,
comment: Optional[str] = None,
is_sensitive: bool = False,
force: bool = False,
) -> File:
"""
ファイルをアップロードします
Parameters
----------
file : str
アップロードするファイル
file_name : Optional[str], default=None
アップロードするファイルの名前
folder_id : Optional[str], default=None
アップロードするフォルダーのID
comment : Optional[str], default=None
アップロードするファイルのコメント
is_sensitive : bool, default=False
アップロードするファイルがNSFWかどうか
force : bool, default=False
アップロードするファイルが同名のファイルを上書きするかどうか
Returns
-------
File
アップロードしたファイルの情報
"""
file_byte = open(file, 'rb') if file else None
data = {
'file': file_byte,
'name': file_name,
'folderId': folder_id,
'comment': comment,
'isSensitive': is_sensitive,
'force': force,
}
res: IDriveFile = await self.__session.request(
Route('POST', '/api/drive/files/create'),
data=data,
auth=True,
lower=True,
)
return File(res, client=self.__client)
class FolderActions(AbstractAction):
def __init__(

@ -8,6 +8,7 @@ from mipac.http import HTTPClient, Route
from mipac.manager.favorite import FavoriteManager
from mipac.manager.file import MiFile
from mipac.manager.reaction import ReactionManager
from mipac.models.drive import File
from mipac.models.note import Note, NoteReaction
from mipac.models.poll import Poll
from mipac.types.note import ICreatedNote, INote
@ -32,12 +33,21 @@ def create_note_body(
reply_id: Optional[str] = None,
renote_id: Optional[str] = None,
channel_id: Optional[str] = None,
files: Optional[list[MiFile]] = None,
files: Optional[list[MiFile | File | str]] = None,
poll: Optional[Poll] = None,
):
file_ids = None
if files:
file_ids = [file.file_id for file in files]
file_ids = []
for file in files:
if isinstance(file, MiFile):
file_ids.append(file.file_id)
elif isinstance(file, File):
file_ids.append(file.id)
elif isinstance(file, str):
file_ids.append(file)
else:
raise ParameterError('files must be MiFile or str or File')
body = {
'visibility': visibility,
@ -181,7 +191,7 @@ class ClientNoteActions(AbstractAction):
extract_mentions: bool = True,
extract_hashtags: bool = True,
extract_emojis: bool = True,
file_ids: Optional[list[str]] = None,
files: Optional[list[MiFile | File | str]] = None,
poll: Optional[Poll] = None,
reply_id: Optional[str] = None,
) -> Note:
@ -194,11 +204,12 @@ class ClientNoteActions(AbstractAction):
visibility=visibility,
visible_user_ids=visible_user_ids,
extract_emojis=extract_emojis,
extract_hashtags=extract_mentions,
extract_hashtags=extract_hashtags,
extract_mentions=extract_mentions,
poll=poll,
local_only=local_only,
reply_id=reply_id,
files=files,
)
print(body)
res: ICreatedNote = await self._session.request(
@ -219,7 +230,7 @@ class ClientNoteActions(AbstractAction):
extract_mentions: bool = True,
extract_hashtags: bool = True,
extract_emojis: bool = True,
file_ids: Optional[list[str]] = None,
files: Optional[list[MiFile | File | str]] = None,
poll: Optional[Poll] = None,
note_id: Optional[str] = None,
) -> Note:
@ -244,7 +255,7 @@ class ClientNoteActions(AbstractAction):
Whether to expand the hashtag
extract_emojis: bool, default=True
Whether to expand the emojis
file_ids: Optional[list[str]], default=None
files: Optional[list[MiFile | File | str]], default=None
The ID list of files to be attached
poll: Optional[Poll], default=None
Questionnaire to be created
@ -260,11 +271,12 @@ class ClientNoteActions(AbstractAction):
visibility=visibility,
visible_user_ids=visible_user_ids,
extract_emojis=extract_emojis,
extract_hashtags=extract_mentions,
extract_hashtags=extract_hashtags,
extract_mentions=extract_mentions,
poll=poll,
local_only=local_only,
renote_id=note_id,
files=files,
)
res: ICreatedNote = await self._session.request(
Route('POST', '/api/notes/create'),
@ -305,7 +317,7 @@ class NoteActions(ClientNoteActions):
reply_id: Optional[str] = None,
renote_id: Optional[str] = None,
channel_id: Optional[str] = None,
files: Optional[list[MiFile]] = None,
files: Optional[list[MiFile | File | str]] = None,
poll: Optional[Poll] = None,
) -> Note:
"""
@ -336,7 +348,7 @@ class NoteActions(ClientNoteActions):
ート先のid, by default None
channel_id : Optional[str], optional
チャンネルid, by default None
files : list[MiFile], optional
files : list[MiFile | File | str], optional
添付するファイルのリスト, by default None
poll : Optional[Poll], optional
アンケート, by default None

Loading…
Cancel
Save