️ refactor: errors classes

pull/22/head
xtaodada 2 years ago
parent d77f63706e
commit b2ff352d5b
No known key found for this signature in database
GPG Key ID: 4CBB3F4FA8C85659

@ -0,0 +1,34 @@
pre = """from .base import APIError
"""
template = """class %sError(APIError):
\"\"\" %s \"\"\"
"""
def error_name_to_hump(name: str) -> str:
return "".join([i.capitalize() for i in name.split("_")])
def gen_errors_py_files():
with open("errors.csv", "r", encoding="utf-8") as f:
content = f.read()
content = content.split("\n")[1:]
error_list = {}
for i in content:
if i:
i = i.split(",")
error_list[i[0]] = i[1]
all_content = [template % (error_name_to_hump(i), value) for i, value in error_list.items()]
with open("../../mipac/errors/errors.py", "w", encoding="utf-8") as f:
f.write(pre + "\n\n".join(all_content))
if __name__ == "__main__":
gen_errors_py_files()
print("Done")

@ -0,0 +1,98 @@
code,description
ACCESS_DENIED,アクセス権限がありません。
ALREADY_ADDED,
ALREADY_BLOCKING,すでにブロックしています。
ALREADY_CLIPPED,
ALREADY_EXPIRED,
ALREADY_FAVORITED,既にお気に入り登録されています。
ALREADY_FOLLOWING,すでにフォローしています。
ALREADY_INVITED,
ALREADY_LIKED,すでにいいねをつけています。
ALREADY_MUTING,すでにそのユーザーをミュートしています。
ALREADY_PINNED,指定されたノートは既にピン留めされています。
ALREADY_PROMOTED,
ALREADY_REACTED,既にリアクションしています。
ALREADY_VOTED,
AVATAR_NOT_AN_IMAGE,アバター画像に、画像ではないファイルが指定されました。
BANNER_NOT_AN_IMAGE,バナー画像に、画像ではないファイルが指定されました。
BLOCKED,ユーザーにブロックされています。
BLOCKEE_IS_YOURSELF,自分のブロックを解除しようとしました。
BLOCKING,ユーザーをブロックしています。
CANNOT_CREATE_ALREADY_EXPIRED_POLL,アンケートの期限の指定が誤っています。
CANNOT_RENOTE_TO_A_PURE_RENOTE,単純なRenoteを再度Renoteすることはできません。
CANNOT_REPLY_TO_A_PURE_RENOTE,単純なRenoteに返信することはできません。
CANNOT_REPORT_THE_ADMIN,管理者を通報しようとしました。
CANNOT_REPORT_YOURSELF,自身を通報しようとしました。
CONTENT_REQUIRED,
CREDENTIAL_REQUIRED,クレデンシャル必須のエンドポイントにクレデンシャル無しでリクエストされました。
FAILED_TO_RESOLVE_REMOTE_USER,リモートユーザーの検索に失敗しました。
FOLLOWEE_IS_YOURSELF,自分のフォローを解除しようとしました。
FOLLOWER_IS_YOURSELF,自分をフォロワー解除しようとしました。
FOLLOW_REQUEST_NOT_FOUND,フォローリクエストがありません。
FORBIDDEN,
GROUP_ACCESS_DENIED,
GTL_DISABLED,グローバルタイムラインが無効になっています。
HAS_CHILD_FILES_OR_FOLDERS,フォルダーが空ではありません。
INAPPROPRIATE,不適切なコンテンツを含んでいる可能性があると判定されました。
INTERNAL_ERROR,サーバー内部で問題が発生しました。引き続き問題が発生する場合は管理者にお問い合わせください。
INVALID_CHOICE,
INVALID_FILE_NAME,ファイル名が不正です。
INVALID_PARAM,リクエストパラメータに誤りがあります。
INVALID_REGEXP,正規表現が不正です。
INVALID_URL,
IS_OWNER,
LTL_DISABLED,ローカルタイムラインが無効になっています。
MO_SUCH_FILE,
MUTEE_IS_YOURSELF,自分に対してミュートを解除しようとしました。
NAME_ALREADY_EXISTS,同じURLにページがすでに存在します。
NOT_BLOCKING,ブロックしていないユーザーです。
NOT_FAVORITED,お気に入り登録されていません。
NOT_FOLLOWING,ユーザーにフォローされていません。
NOT_LIKED,いいねをつけていないページです。
NOT_MUTING,対象となるユーザーをそもそもミュートしていません。
NOT_REACTED,リアクションしていません。
NO_FOLLOW_REQUEST,ユーザーからのフォローリクエストがありません。
NO_FREE_SPACE,ドライブに空き容量がありません。
NO_POLL,
NO_SUCH_AD,
NO_SUCH_ANNOUNCEMENT,お知らせが存在しません。
NO_SUCH_ANTENNA,
NO_SUCH_APP,アプリが存在しません。
NO_SUCH_AVATAR,アバター画像のファイルが存在しません。
NO_SUCH_BANNER,バナー画像のファイルが存在しません。
NO_SUCH_CHANNEL,指定されたチャンネルが存在しないか、アクセスが許可されていません。
NO_SUCH_CLIP,
NO_SUCH_EMOJI,
NO_SUCH_FILE,ファイルが存在しません。
NO_SUCH_FOLDER,フォルダーが存在しません。
NO_SUCH_GROUP,
NO_SUCH_GROUP_MEMBER,
NO_SUCH_HASHTAG,ハッシュタグが存在しません。
NO_SUCH_INVITATION,
NO_SUCH_LIST,
NO_SUCH_MESSAGE,
NO_SUCH_NOTE,指定されたノートが存在しないか、アクセスが許可されていません。
NO_SUCH_NOTIFICATION,通知が存在しません。
NO_SUCH_OBJECT,
NO_SUCH_PAGE,ページが存在しません。
NO_SUCH_PARENT_FOLDER,親フォルダーが存在しません。
NO_SUCH_POST,
NO_SUCH_RENOTE_TARGET,Renoteに指定されたートが存在しないか、アクセスが許可されていません。
NO_SUCH_REPLY_TARGET,返信先に指定されたノートが存在しないか、アクセスが許可されていません。
NO_SUCH_SESSION,セッションが存在しません。
NO_SUCH_USER,ユーザーが存在しません。
NO_SUCH_USER_GROUP,
NO_SUCH_USER_LIST,
NO_SUCH_WEBHOOK,Webhookが存在しません。
PENDING_SESSION,
PERMISSION_DENIED,与えられたクレデンシャルには必要なパーミッションがありません。
PIN_LIMIT_EXCEEDED,これ以上ピン留めできません。
RATE_LIMIT_EXCEEDED,レートリミットによる制限のため一時的に利用できません。
REACTIONS_NOT_PUBLIC,リアクションが公開されていません。
RECIPIENT_IS_YOURSELF,
STL_DISABLED,ソーシャルタイムラインが無効になっています。
YOUR_ACCOUNT_SUSPENDED,アカウントが凍結されているため利用できません。
YOUR_PAGE,自身のページにいいねをつけようとしました。
YOUR_POST,
YOU_ARE_OWNER,
YOU_HAVE_BEEN_BLOCKED,ブロックされているユーザーのノートにリアクションは行えません。
1 code description
2 ACCESS_DENIED アクセス権限がありません。
3 ALREADY_ADDED
4 ALREADY_BLOCKING すでにブロックしています。
5 ALREADY_CLIPPED
6 ALREADY_EXPIRED
7 ALREADY_FAVORITED 既にお気に入り登録されています。
8 ALREADY_FOLLOWING すでにフォローしています。
9 ALREADY_INVITED
10 ALREADY_LIKED すでにいいねをつけています。
11 ALREADY_MUTING すでにそのユーザーをミュートしています。
12 ALREADY_PINNED 指定されたノートは既にピン留めされています。
13 ALREADY_PROMOTED
14 ALREADY_REACTED 既にリアクションしています。
15 ALREADY_VOTED
16 AVATAR_NOT_AN_IMAGE アバター画像に、画像ではないファイルが指定されました。
17 BANNER_NOT_AN_IMAGE バナー画像に、画像ではないファイルが指定されました。
18 BLOCKED ユーザーにブロックされています。
19 BLOCKEE_IS_YOURSELF 自分のブロックを解除しようとしました。
20 BLOCKING ユーザーをブロックしています。
21 CANNOT_CREATE_ALREADY_EXPIRED_POLL アンケートの期限の指定が誤っています。
22 CANNOT_RENOTE_TO_A_PURE_RENOTE 単純なRenoteを再度Renoteすることはできません。
23 CANNOT_REPLY_TO_A_PURE_RENOTE 単純なRenoteに返信することはできません。
24 CANNOT_REPORT_THE_ADMIN 管理者を通報しようとしました。
25 CANNOT_REPORT_YOURSELF 自身を通報しようとしました。
26 CONTENT_REQUIRED
27 CREDENTIAL_REQUIRED クレデンシャル必須のエンドポイントにクレデンシャル無しでリクエストされました。
28 FAILED_TO_RESOLVE_REMOTE_USER リモートユーザーの検索に失敗しました。
29 FOLLOWEE_IS_YOURSELF 自分のフォローを解除しようとしました。
30 FOLLOWER_IS_YOURSELF 自分をフォロワー解除しようとしました。
31 FOLLOW_REQUEST_NOT_FOUND フォローリクエストがありません。
32 FORBIDDEN
33 GROUP_ACCESS_DENIED
34 GTL_DISABLED グローバルタイムラインが無効になっています。
35 HAS_CHILD_FILES_OR_FOLDERS フォルダーが空ではありません。
36 INAPPROPRIATE 不適切なコンテンツを含んでいる可能性があると判定されました。
37 INTERNAL_ERROR サーバー内部で問題が発生しました。引き続き問題が発生する場合は管理者にお問い合わせください。
38 INVALID_CHOICE
39 INVALID_FILE_NAME ファイル名が不正です。
40 INVALID_PARAM リクエストパラメータに誤りがあります。
41 INVALID_REGEXP 正規表現が不正です。
42 INVALID_URL
43 IS_OWNER
44 LTL_DISABLED ローカルタイムラインが無効になっています。
45 MO_SUCH_FILE
46 MUTEE_IS_YOURSELF 自分に対してミュートを解除しようとしました。
47 NAME_ALREADY_EXISTS 同じURLにページがすでに存在します。
48 NOT_BLOCKING ブロックしていないユーザーです。
49 NOT_FAVORITED お気に入り登録されていません。
50 NOT_FOLLOWING ユーザーにフォローされていません。
51 NOT_LIKED いいねをつけていないページです。
52 NOT_MUTING 対象となるユーザーをそもそもミュートしていません。
53 NOT_REACTED リアクションしていません。
54 NO_FOLLOW_REQUEST ユーザーからのフォローリクエストがありません。
55 NO_FREE_SPACE ドライブに空き容量がありません。
56 NO_POLL
57 NO_SUCH_AD
58 NO_SUCH_ANNOUNCEMENT お知らせが存在しません。
59 NO_SUCH_ANTENNA
60 NO_SUCH_APP アプリが存在しません。
61 NO_SUCH_AVATAR アバター画像のファイルが存在しません。
62 NO_SUCH_BANNER バナー画像のファイルが存在しません。
63 NO_SUCH_CHANNEL 指定されたチャンネルが存在しないか、アクセスが許可されていません。
64 NO_SUCH_CLIP
65 NO_SUCH_EMOJI
66 NO_SUCH_FILE ファイルが存在しません。
67 NO_SUCH_FOLDER フォルダーが存在しません。
68 NO_SUCH_GROUP
69 NO_SUCH_GROUP_MEMBER
70 NO_SUCH_HASHTAG ハッシュタグが存在しません。
71 NO_SUCH_INVITATION
72 NO_SUCH_LIST
73 NO_SUCH_MESSAGE
74 NO_SUCH_NOTE 指定されたノートが存在しないか、アクセスが許可されていません。
75 NO_SUCH_NOTIFICATION 通知が存在しません。
76 NO_SUCH_OBJECT
77 NO_SUCH_PAGE ページが存在しません。
78 NO_SUCH_PARENT_FOLDER 親フォルダーが存在しません。
79 NO_SUCH_POST
80 NO_SUCH_RENOTE_TARGET Renoteに指定されたノートが存在しないか、アクセスが許可されていません。
81 NO_SUCH_REPLY_TARGET 返信先に指定されたノートが存在しないか、アクセスが許可されていません。
82 NO_SUCH_SESSION セッションが存在しません。
83 NO_SUCH_USER ユーザーが存在しません。
84 NO_SUCH_USER_GROUP
85 NO_SUCH_USER_LIST
86 NO_SUCH_WEBHOOK Webhookが存在しません。
87 PENDING_SESSION
88 PERMISSION_DENIED 与えられたクレデンシャルには必要なパーミッションがありません。
89 PIN_LIMIT_EXCEEDED これ以上ピン留めできません。
90 RATE_LIMIT_EXCEEDED レートリミットによる制限のため一時的に利用できません。
91 REACTIONS_NOT_PUBLIC リアクションが公開されていません。
92 RECIPIENT_IS_YOURSELF
93 STL_DISABLED ソーシャルタイムラインが無効になっています。
94 YOUR_ACCOUNT_SUSPENDED アカウントが凍結されているため利用できません。
95 YOUR_PAGE 自身のページにいいねをつけようとしました。
96 YOUR_POST
97 YOU_ARE_OWNER
98 YOU_HAVE_BEEN_BLOCKED ブロックされているユーザーのノートにリアクションは行えません。

@ -3,7 +3,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from mipac.abc.action import AbstractAction from mipac.abc.action import AbstractAction
from mipac.exception import ParameterError from mipac.errors.base import ParameterError
from mipac.http import HTTPClient, Route from mipac.http import HTTPClient, Route
from mipac.models.chat import ChatMessage from mipac.models.chat import ChatMessage
from mipac.types.chat import IChatMessage from mipac.types.chat import IChatMessage

@ -3,7 +3,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, Optional from typing import TYPE_CHECKING, Optional
from mipac.abc.action import AbstractAction from mipac.abc.action import AbstractAction
from mipac.exception import ParameterError from mipac.errors.base import ParameterError
from mipac.http import HTTPClient, Route from mipac.http import HTTPClient, Route
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

@ -3,7 +3,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, AsyncIterator, Optional from typing import TYPE_CHECKING, AsyncIterator, Optional
from mipac.abc.action import AbstractAction from mipac.abc.action import AbstractAction
from mipac.exception import ParameterError from mipac.errors.base import ParameterError
from mipac.http import HTTPClient, Route 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

@ -2,7 +2,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, Literal, Optional from typing import TYPE_CHECKING, Literal, Optional
from mipac.exception import NotExistRequiredData, ParameterError from mipac.errors.base import NotExistRequiredData, ParameterError
from mipac.http import HTTPClient, Route from mipac.http import HTTPClient, Route
from mipac.manager.note import NoteManager from mipac.manager.note import NoteManager
from mipac.models.user import UserDetailed from mipac.models.user import UserDetailed

@ -0,0 +1,2 @@
from .base import * # noqa: F403, F401
from .errors import * # noqa: F403, F401

@ -0,0 +1,38 @@
from importlib import import_module
from typing import Optional, Union
class APIError(Exception):
"""APIのエラー"""
def __init__(self, data: Union[dict, str], status: int):
self.raw: Union[dict, str] = data
self.status: int = status
self.code: Optional[str] = None
self.id: Optional[str] = None
self.message: Optional[str] = None
if isinstance(data, dict):
error = data.get("error", {})
self.code: Optional[str] = error.get("code", "")
self.id: Optional[str] = error.get("id")
self.message: Optional[str] = error.get("message", "")
super().__init__(self.message or self.raw)
def raise_error(self):
if not self.code:
raise self
if value := getattr(
import_module("mipac.errors.errors"),
"".join([i.capitalize() for i in self.code.split("_")]) + "Error",
None,
):
raise value(self.raw, self.status)
else:
raise self
class NotExistRequiredData(Exception):
"""クラスの中に必要なデータが不足している"""
class ParameterError(Exception):
"""引数に関するエラー"""

@ -0,0 +1,389 @@
from .base import APIError
class AccessDeniedError(APIError):
""" アクセス権限がありません。 """
class AlreadyAddedError(APIError):
""" """
class AlreadyBlockingError(APIError):
""" すでにブロックしています。 """
class AlreadyClippedError(APIError):
""" """
class AlreadyExpiredError(APIError):
""" """
class AlreadyFavoritedError(APIError):
""" 既にお気に入り登録されています。 """
class AlreadyFollowingError(APIError):
""" すでにフォローしています。 """
class AlreadyInvitedError(APIError):
""" """
class AlreadyLikedError(APIError):
""" すでにいいねをつけています。 """
class AlreadyMutingError(APIError):
""" すでにそのユーザーをミュートしています。 """
class AlreadyPinnedError(APIError):
""" 指定されたノートは既にピン留めされています。 """
class AlreadyPromotedError(APIError):
""" """
class AlreadyReactedError(APIError):
""" 既にリアクションしています。 """
class AlreadyVotedError(APIError):
""" """
class AvatarNotAnImageError(APIError):
""" アバター画像に、画像ではないファイルが指定されました。 """
class BannerNotAnImageError(APIError):
""" バナー画像に、画像ではないファイルが指定されました。 """
class BlockedError(APIError):
""" ユーザーにブロックされています。 """
class BlockeeIsYourselfError(APIError):
""" 自分のブロックを解除しようとしました。 """
class BlockingError(APIError):
""" ユーザーをブロックしています。 """
class CannotCreateAlreadyExpiredPollError(APIError):
""" アンケートの期限の指定が誤っています。 """
class CannotRenoteToAPureRenoteError(APIError):
""" 単純なRenoteを再度Renoteすることはできません。 """
class CannotReplyToAPureRenoteError(APIError):
""" 単純なRenoteに返信することはできません。 """
class CannotReportTheAdminError(APIError):
""" 管理者を通報しようとしました。 """
class CannotReportYourselfError(APIError):
""" 自身を通報しようとしました。 """
class ContentRequiredError(APIError):
""" """
class CredentialRequiredError(APIError):
""" クレデンシャル必須のエンドポイントにクレデンシャル無しでリクエストされました。 """
class FailedToResolveRemoteUserError(APIError):
""" リモートユーザーの検索に失敗しました。 """
class FolloweeIsYourselfError(APIError):
""" 自分のフォローを解除しようとしました。 """
class FollowerIsYourselfError(APIError):
""" 自分をフォロワー解除しようとしました。 """
class FollowRequestNotFoundError(APIError):
""" フォローリクエストがありません。 """
class ForbiddenError(APIError):
""" """
class GroupAccessDeniedError(APIError):
""" """
class GtlDisabledError(APIError):
""" グローバルタイムラインが無効になっています。 """
class HasChildFilesOrFoldersError(APIError):
""" フォルダーが空ではありません。 """
class InappropriateError(APIError):
""" 不適切なコンテンツを含んでいる可能性があると判定されました。 """
class InternalErrorError(APIError):
""" サーバー内部で問題が発生しました。引き続き問題が発生する場合は管理者にお問い合わせください。 """
class InvalidChoiceError(APIError):
""" """
class InvalidFileNameError(APIError):
""" ファイル名が不正です。 """
class InvalidParamError(APIError):
""" リクエストパラメータに誤りがあります。 """
class InvalidRegexpError(APIError):
""" 正規表現が不正です。 """
class InvalidUrlError(APIError):
""" """
class IsOwnerError(APIError):
""" """
class LtlDisabledError(APIError):
""" ローカルタイムラインが無効になっています。 """
class MoSuchFileError(APIError):
""" """
class MuteeIsYourselfError(APIError):
""" 自分に対してミュートを解除しようとしました。 """
class NameAlreadyExistsError(APIError):
""" 同じURLにページがすでに存在します。 """
class NotBlockingError(APIError):
""" ブロックしていないユーザーです。 """
class NotFavoritedError(APIError):
""" お気に入り登録されていません。 """
class NotFollowingError(APIError):
""" ユーザーにフォローされていません。 """
class NotLikedError(APIError):
""" いいねをつけていないページです。 """
class NotMutingError(APIError):
""" 対象となるユーザーをそもそもミュートしていません。 """
class NotReactedError(APIError):
""" リアクションしていません。 """
class NoFollowRequestError(APIError):
""" ユーザーからのフォローリクエストがありません。 """
class NoFreeSpaceError(APIError):
""" ドライブに空き容量がありません。 """
class NoPollError(APIError):
""" """
class NoSuchAdError(APIError):
""" """
class NoSuchAnnouncementError(APIError):
""" お知らせが存在しません。 """
class NoSuchAntennaError(APIError):
""" """
class NoSuchAppError(APIError):
""" アプリが存在しません。 """
class NoSuchAvatarError(APIError):
""" アバター画像のファイルが存在しません。 """
class NoSuchBannerError(APIError):
""" バナー画像のファイルが存在しません。 """
class NoSuchChannelError(APIError):
""" 指定されたチャンネルが存在しないか、アクセスが許可されていません。 """
class NoSuchClipError(APIError):
""" """
class NoSuchEmojiError(APIError):
""" """
class NoSuchFileError(APIError):
""" ファイルが存在しません。 """
class NoSuchFolderError(APIError):
""" フォルダーが存在しません。 """
class NoSuchGroupError(APIError):
""" """
class NoSuchGroupMemberError(APIError):
""" """
class NoSuchHashtagError(APIError):
""" ハッシュタグが存在しません。 """
class NoSuchInvitationError(APIError):
""" """
class NoSuchListError(APIError):
""" """
class NoSuchMessageError(APIError):
""" """
class NoSuchNoteError(APIError):
""" 指定されたノートが存在しないか、アクセスが許可されていません。 """
class NoSuchNotificationError(APIError):
""" 通知が存在しません。 """
class NoSuchObjectError(APIError):
""" """
class NoSuchPageError(APIError):
""" ページが存在しません。 """
class NoSuchParentFolderError(APIError):
""" 親フォルダーが存在しません。 """
class NoSuchPostError(APIError):
""" """
class NoSuchRenoteTargetError(APIError):
""" Renoteに指定されたートが存在しないか、アクセスが許可されていません。 """
class NoSuchReplyTargetError(APIError):
""" 返信先に指定されたノートが存在しないか、アクセスが許可されていません。 """
class NoSuchSessionError(APIError):
""" セッションが存在しません。 """
class NoSuchUserError(APIError):
""" ユーザーが存在しません。 """
class NoSuchUserGroupError(APIError):
""" """
class NoSuchUserListError(APIError):
""" """
class NoSuchWebhookError(APIError):
""" Webhookが存在しません。 """
class PendingSessionError(APIError):
""" """
class PermissionDeniedError(APIError):
""" 与えられたクレデンシャルには必要なパーミッションがありません。 """
class PinLimitExceededError(APIError):
""" これ以上ピン留めできません。 """
class RateLimitExceededError(APIError):
""" レートリミットによる制限のため一時的に利用できません。 """
class ReactionsNotPublicError(APIError):
""" リアクションが公開されていません。 """
class RecipientIsYourselfError(APIError):
""" """
class StlDisabledError(APIError):
""" ソーシャルタイムラインが無効になっています。 """
class YourAccountSuspendedError(APIError):
""" アカウントが凍結されているため利用できません。 """
class YourPageError(APIError):
""" 自身のページにいいねをつけようとしました。 """
class YourPostError(APIError):
""" """
class YouAreOwnerError(APIError):
""" """
class YouHaveBeenBlockedError(APIError):
""" ブロックされているユーザーのノートにリアクションは行えません。 """

@ -1,26 +0,0 @@
class NotExistRequiredData(Exception):
"""クラスの中に必要なデータが不足している"""
class ParameterError(Exception):
"""引数に関するエラー"""
class NotSupportedError(Exception):
"""特定のForkでサポートしていない場合のエラー"""
class APIError(Exception):
"""APIのエラー"""
class InvalidParamError(Exception):
"""パラメーターが無効"""
class NoSuchNoteError(Exception):
"""指定したIdのートが見つからない"""
class NoSuchUserError(Exception):
"""指定したIdのユーザーが見つからない"""

@ -6,12 +6,11 @@ from typing import Any, Literal, TypeVar
import aiohttp import aiohttp
from mipac import __version__ from mipac import __version__
from mipac.exception import APIError from mipac.errors.base import APIError
from mipac.types.endpoints import ENDPOINTS from mipac.types.endpoints import ENDPOINTS
from mipac.types.user import IUserDetailed from mipac.types.user import IUserDetailed
from mipac.util import ( from mipac.util import (
_from_json, _from_json,
get_exception_from_id,
remove_dict_empty, remove_dict_empty,
upper_to_lower, upper_to_lower,
) )
@ -107,18 +106,9 @@ class HTTPClient:
data = upper_to_lower(data) data = upper_to_lower(data)
if 300 > res.status >= 200: if 300 > res.status >= 200:
return data # type: ignore return data # type: ignore
if (
400
and isinstance(data, dict)
and data.get('error', {}).get('code')
):
error_id = data.get('error', {}).get('id')
if error_id:
raise get_exception_from_id(error_id)(data, res.status)
raise APIError(data, res.status)
if 511 > res.status >= 300: if 511 > res.status >= 300:
raise APIError(data, res.status) APIError(data, res.status).raise_error()
raise APIError('HTTP ERROR') APIError("HTTP ERROR", res.status).raise_error()
async def close_session(self) -> None: async def close_session(self) -> None:
await self._session.close() await self._session.close()

@ -3,7 +3,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING, Optional from typing import TYPE_CHECKING, Optional
from mipac.abc.manager import AbstractManager from mipac.abc.manager import AbstractManager
from mipac.exception import NotExistRequiredData from mipac.errors.base import NotExistRequiredData
from mipac.http import HTTPClient, Route from mipac.http import HTTPClient, Route
from mipac.util import check_multi_arg from mipac.util import check_multi_arg

@ -3,7 +3,7 @@ from __future__ import annotations
from datetime import datetime from datetime import datetime
from typing import TYPE_CHECKING, Literal, Optional from typing import TYPE_CHECKING, Literal, Optional
from mipac.exception import NotExistRequiredData from mipac.errors.base import NotExistRequiredData
from mipac.models.lite.user import LiteUser from mipac.models.lite.user import LiteUser
from mipac.models.poll import Poll from mipac.models.poll import Poll
from mipac.types.note import INoteUpdated, INoteUpdatedDelete from mipac.types.note import INoteUpdated, INoteUpdatedDelete

@ -1,57 +1,5 @@
from typing import Literal from typing import Literal
from mipac.exception import InvalidParamError, NoSuchNoteError, NoSuchUserError
EXCEPTION_ID_MAP = {
InvalidParamError: ['3d81ceae-475f-4600-b2a8-2bc116157532'],
NoSuchNoteError: [
'ee449fbe-af2a-453b-9cae-cf2fe7c895fc',
'fc8c0b49-c7a3-4664-a0a6-b418d386bb8b',
'aff017de-190e-434b-893e-33a9ff5049d8',
'56734f8b-3928-431e-bf80-6ff87df40cb3',
'454170ce-9d63-4a43-9da1-ea10afe81e21',
'24fcbfc6-2e37-42b6-8388-c29b3861a08d',
'47db1a1c-b0af-458d-8fb4-986e4efafe1e',
'e1035875-9551-45ec-afa8-1ded1fcb53c8',
'490be23f-8c1f-4796-819f-94cb4f9d1630',
'263fff3d-d0e1-4af4-bea7-8408059b451a',
'12908022-2e21-46cd-ba6a-3edaf6093f46',
'bea9b03f-36e0-49c5-a4db-627a029f8971',
'efd4a259-2442-496b-8dd7-b255aa1a160f',
'6dd26674-e060-4816-909a-45ba3f4da458',
'80848a2c-398f-4343-baa9-df1d57696c56',
'ecafbd2e-c283-4d6d-aecb-1a0a33b75396',
'033d0620-5bfe-4027-965d-980b0c85a3ea',
'764d9fce-f9f2-4a0e-92b1-6ceac9a7ad37',
'5ff67ada-ed3b-2e71-8e87-a1a421e177d2',
'bddd57ac-ceb3-b29d-4334-86ea5fae481a',
'd785b897-fcd3-4fe9-8fc3-b85c26e6c932',
'fcd2eef9-a9b2-4c4f-8624-038099e90aa5',
],
NoSuchUserError: [
'4362f8dc-731f-4ad8-a694-be5a88922a24',
'27e494ba-2ac2-48e8-893b-10d4d8c2387b',
'7cc4f851-e2f1-4621-9633-ec9e1d00c01e',
'8621d8bf-c358-4303-a066-5ea78610eb3f',
'5b12c78d-2b28-4dca-99d2-f56139b42ff8',
'66ce1645-d66c-46bb-8b79-96739af885bd',
'4e68c551-fc4c-4e46-bb41-7d4a37bf9dab',
'abc2ffa6-25b2-4380-ba99-321ff3a94555',
'11795c64-40ea-4198-b06e-3c873ed9039d',
'6fef56f3-e765-4957-88e5-c6f65329b8a5',
'b851d00b-8ab1-4a56-8b1b-e24187cb48ef',
'27fa5435-88ab-43de-9360-387de88727cd',
'63e4aba4-4156-4e53-be25-c9559e42d71b',
'e6965129-7b2a-40a4-bae2-cd84cd434822',
'1acefcb5-0959-43fd-9685-b48305736cb5',
'9e638e45-3b25-4ef7-8f95-07e8498f1819',
'da52de61-002c-475b-90e1-ba64f9cf13a8',
'0b5cc374-3681-41da-861e-8bc1146f7a55',
'711f7ebb-bbb9-4dfa-b540-b27809fed5e9',
'588e7f72-c744-4a61-b180-d354e912bda2',
'a89abd3d-f0bc-4cce-beb1-2f446f4f1e6a',
],
}
ENDPOINTS = Literal[ ENDPOINTS = Literal[
'/api/admin/abuse-user-reports', '/api/admin/abuse-user-reports',
'/api/admin/accounts/create', '/api/admin/accounts/create',

@ -16,8 +16,6 @@ from urllib.parse import urlencode
import aiohttp import aiohttp
from _operator import itemgetter from _operator import itemgetter
from mipac.types.endpoints import EXCEPTION_ID_MAP
try: try:
import orjson # type: ignore import orjson # type: ignore
except ModuleNotFoundError: except ModuleNotFoundError:
@ -49,26 +47,6 @@ else:
DEFAULT_CACHE: dict[str, list[dict[str, Any]]] = {} DEFAULT_CACHE: dict[str, list[dict[str, Any]]] = {}
def get_exception_from_id(exception_id):
"""
Returns the exception class corresponding to the given exception ID.
Parameters
----------
exception_id : int
The ID of the exception.
Returns
-------
Exception
The exception class corresponding to the given ID.
"""
for exception_class, exception_ids in EXCEPTION_ID_MAP.items():
if exception_id in exception_ids:
return exception_class
return Exception
def str_to_datetime( def str_to_datetime(
data: str, format: str = '%Y-%m-%dT%H:%M:%S.%fZ' data: str, format: str = '%Y-%m-%dT%H:%M:%S.%fZ'
) -> datetime: ) -> datetime:

@ -25,6 +25,7 @@ packages = [
'mipac.actions', 'mipac.actions',
'mipac.core', 'mipac.core',
'mipac.core.models', 'mipac.core.models',
'mipac.errors',
'mipac.manager', 'mipac.manager',
'mipac.manager.admin', 'mipac.manager.admin',
'mipac.models', 'mipac.models',

Loading…
Cancel
Save