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.abstract.action import AbstractAction
from mipac.errors.base import ParameterError from mipac.errors.base import ParameterError
from mipac.http import HTTPClient, Route from mipac.http import HTTPClient, Route
from mipac.models.drive import File, Folder
from mipac.types.drive import IDriveFile from mipac.types.drive import IDriveFile
from mipac.util import remove_dict_empty from mipac.util import remove_dict_empty
if TYPE_CHECKING: if TYPE_CHECKING:
from mipac.manager.client import ClientActions from mipac.manager.client import ClientActions
from mipac.models.drive import File, Folder
__all__ = ('DriveActions', 'FileActions', 'FolderActions') __all__ = ('DriveActions', 'FileActions', 'FolderActions')
@ -118,6 +118,55 @@ class FileActions(AbstractAction):
) )
return [File(i, client=self.__client) for i in res] 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): class FolderActions(AbstractAction):
def __init__( def __init__(

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

Loading…
Cancel
Save