From 8be513548d309534caae6603308f434823576161 Mon Sep 17 00:00:00 2001 From: yupix Date: Wed, 15 Mar 2023 22:10:28 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20IBlockingUser=E5=9E=8B=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=20#58?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mipac/types/user.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mipac/types/user.py b/mipac/types/user.py index 0216645..2d18e52 100644 --- a/mipac/types/user.py +++ b/mipac/types/user.py @@ -14,9 +14,17 @@ __all__ = ( 'IUserDetailed', 'IUserDetailedField', 'IAchievement', + 'IBlockingUser', ) +class IBlockingUser(TypedDict): + id: str + created_at: str + blockee_id: str + blockee: IUserDetailed + + class ISignin(TypedDict): id: str created_at: str From 6720c8d12d12d0de8813123f226c7d0eaed75c85 Mon Sep 17 00:00:00 2001 From: yupix Date: Wed, 15 Mar 2023 22:14:35 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20endpoints=E3=82=92=E7=94=9F?= =?UTF-8?q?=E6=88=90=E3=81=99=E3=82=8B=E9=9A=9B=E3=80=81=E3=83=80=E3=83=96?= =?UTF-8?q?=E3=83=AB=E3=82=AF=E3=82=A9=E3=83=BC=E3=83=88=E3=81=A7=E3=81=AF?= =?UTF-8?q?=E3=81=AA=E3=81=8F=E3=82=B7=E3=83=B3=E3=82=B0=E3=83=AB=E3=82=AF?= =?UTF-8?q?=E3=82=A9=E3=83=BC=E3=83=88=E3=82=92=E4=BD=BF=E3=81=86=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- compiler/endpoints.py | 4 +- mipac/types/endpoints.py | 678 +++++++++++++++++++-------------------- pyproject.toml | 2 +- 3 files changed, 342 insertions(+), 342 deletions(-) diff --git a/compiler/endpoints.py b/compiler/endpoints.py index 4b7e642..c792130 100644 --- a/compiler/endpoints.py +++ b/compiler/endpoints.py @@ -26,7 +26,7 @@ with open('./datas/ayuskey_api.json') as f: PATHS.append(f'{PREFIX}{path}') with open('../mipac/types/endpoints.py', 'w', encoding='utf-8') as f: - data = json.dumps(list(dict.fromkeys(PATHS)), ensure_ascii=False, indent=4) + data = json.dumps(list(dict.fromkeys(PATHS)), ensure_ascii=False, indent=4).replace('"', '\'') f.write( - f'{TOP_COMMENT}{IMPORTS}{TEMPLATES}Literal{data}' + f'{TOP_COMMENT}{IMPORTS}{TEMPLATES}Literal{data}\n' ) diff --git a/mipac/types/endpoints.py b/mipac/types/endpoints.py index 00b7d40..aebc44d 100644 --- a/mipac/types/endpoints.py +++ b/mipac/types/endpoints.py @@ -9,342 +9,342 @@ from typing import Literal ENDPOINTS = Literal[ - "/api/admin/meta", - "/api/admin/abuse-user-reports", - "/api/admin/accounts/create", - "/api/admin/accounts/delete", - "/api/admin/ad/create", - "/api/admin/ad/delete", - "/api/admin/ad/list", - "/api/admin/ad/update", - "/api/admin/announcements/create", - "/api/admin/announcements/delete", - "/api/admin/announcements/list", - "/api/admin/announcements/update", - "/api/admin/delete-all-files-of-a-user", - "/api/admin/drive/clean-remote-files", - "/api/admin/drive/cleanup", - "/api/admin/drive/files", - "/api/admin/drive/show-file", - "/api/admin/emoji/add-aliases-bulk", - "/api/admin/emoji/add", - "/api/admin/emoji/copy", - "/api/admin/emoji/delete-bulk", - "/api/admin/emoji/delete", - "/api/admin/emoji/list-remote", - "/api/admin/emoji/list", - "/api/admin/emoji/remove-aliases-bulk", - "/api/admin/emoji/set-aliases-bulk", - "/api/admin/emoji/set-category-bulk", - "/api/admin/emoji/update", - "/api/admin/federation/delete-all-files", - "/api/admin/federation/refresh-remote-instance-metadata", - "/api/admin/federation/remove-all-following", - "/api/admin/federation/update-instance", - "/api/admin/get-index-stats", - "/api/admin/get-table-stats", - "/api/admin/get-user-ips", - "/api/invite", - "/api/admin/promo/create", - "/api/admin/queue/clear", - "/api/admin/queue/deliver-delayed", - "/api/admin/queue/inbox-delayed", - "/api/admin/queue/stats", - "/api/admin/relays/add", - "/api/admin/relays/list", - "/api/admin/relays/remove", - "/api/admin/reset-password", - "/api/admin/resolve-abuse-user-report", - "/api/admin/send-email", - "/api/admin/server-info", - "/api/admin/show-moderation-logs", - "/api/admin/show-user", - "/api/admin/show-users", - "/api/admin/suspend-user", - "/api/admin/unsuspend-user", - "/api/admin/update-meta", - "/api/admin/delete-account", - "/api/admin/update-user-note", - "/api/admin/roles/create", - "/api/admin/roles/delete", - "/api/admin/roles/list", - "/api/admin/roles/show", - "/api/admin/roles/update", - "/api/admin/roles/assign", - "/api/admin/roles/unassign", - "/api/admin/roles/update-default-policies", - "/api/admin/roles/users", - "/api/announcements", - "/api/antennas/create", - "/api/antennas/delete", - "/api/antennas/list", - "/api/antennas/notes", - "/api/antennas/show", - "/api/antennas/update", - "/api/ap/get", - "/api/ap/show", - "/api/app/create", - "/api/app/show", - "/api/auth/session/generate", - "/api/auth/session/show", - "/api/auth/session/userkey", - "/api/blocking/create", - "/api/blocking/delete", - "/api/blocking/list", - "/api/channels/create", - "/api/channels/featured", - "/api/channels/follow", - "/api/channels/followed", - "/api/channels/owned", - "/api/channels/show", - "/api/channels/timeline", - "/api/channels/unfollow", - "/api/channels/update", - "/api/charts/active-users", - "/api/charts/ap-request", - "/api/charts/drive", - "/api/charts/federation", - "/api/charts/instance", - "/api/charts/notes", - "/api/charts/user/drive", - "/api/charts/user/following", - "/api/charts/user/notes", - "/api/charts/user/pv", - "/api/charts/user/reactions", - "/api/charts/users", - "/api/clips/add-note", - "/api/clips/remove-note", - "/api/clips/create", - "/api/clips/delete", - "/api/clips/list", - "/api/clips/notes", - "/api/clips/show", - "/api/clips/update", - "/api/drive", - "/api/drive/files", - "/api/drive/files/attached-notes", - "/api/drive/files/check-existence", - "/api/drive/files/create", - "/api/drive/files/delete", - "/api/drive/files/find-by-hash", - "/api/drive/files/find", - "/api/drive/files/show", - "/api/drive/files/update", - "/api/drive/files/upload-from-url", - "/api/drive/folders", - "/api/drive/folders/create", - "/api/drive/folders/delete", - "/api/drive/folders/find", - "/api/drive/folders/show", - "/api/drive/folders/update", - "/api/drive/stream", - "/api/email-address/available", - "/api/endpoint", - "/api/endpoints", - "/api/federation/followers", - "/api/federation/following", - "/api/federation/instances", - "/api/federation/show-instance", - "/api/federation/update-remote-user", - "/api/federation/users", - "/api/federation/stats", - "/api/following/create", - "/api/following/delete", - "/api/following/invalidate", - "/api/following/requests/accept", - "/api/following/requests/cancel", - "/api/following/requests/list", - "/api/following/requests/reject", - "/api/gallery/featured", - "/api/gallery/popular", - "/api/gallery/posts", - "/api/gallery/posts/create", - "/api/gallery/posts/delete", - "/api/gallery/posts/like", - "/api/gallery/posts/show", - "/api/gallery/posts/unlike", - "/api/gallery/posts/update", - "/api/get-online-users-count", - "/api/hashtags/list", - "/api/hashtags/search", - "/api/hashtags/show", - "/api/hashtags/trend", - "/api/hashtags/users", - "/api/i", - "/api/i/claim-achievement", - "/api/i/favorites", - "/api/i/gallery/likes", - "/api/i/gallery/posts", - "/api/i/get-word-muted-notes-count", - "/api/i/notifications", - "/api/i/page-likes", - "/api/i/pages", - "/api/i/pin", - "/api/i/read-all-unread-notes", - "/api/i/read-announcement", - "/api/i/unpin", - "/api/i/update", - "/api/i/webhooks/create", - "/api/i/webhooks/list", - "/api/i/webhooks/show", - "/api/i/webhooks/update", - "/api/i/webhooks/delete", - "/api/meta", - "/api/emojis", - "/api/mute/create", - "/api/mute/delete", - "/api/mute/list", - "/api/renote-mute/create", - "/api/renote-mute/delete", - "/api/renote-mute/list", - "/api/my/apps", - "/api/notes", - "/api/notes/children", - "/api/notes/clips", - "/api/notes/conversation", - "/api/notes/create", - "/api/notes/delete", - "/api/notes/favorites/create", - "/api/notes/favorites/delete", - "/api/notes/featured", - "/api/notes/global-timeline", - "/api/notes/hybrid-timeline", - "/api/notes/local-timeline", - "/api/notes/mentions", - "/api/notes/polls/recommendation", - "/api/notes/polls/vote", - "/api/notes/reactions", - "/api/notes/reactions/create", - "/api/notes/reactions/delete", - "/api/notes/renotes", - "/api/notes/replies", - "/api/notes/search-by-tag", - "/api/notes/search", - "/api/notes/show", - "/api/notes/state", - "/api/notes/thread-muting/create", - "/api/notes/thread-muting/delete", - "/api/notes/timeline", - "/api/notes/translate", - "/api/notes/unrenote", - "/api/notes/user-list-timeline", - "/api/notifications/create", - "/api/notifications/mark-all-as-read", - "/api/notifications/read", - "/api/pages/create", - "/api/pages/delete", - "/api/pages/featured", - "/api/pages/like", - "/api/pages/show", - "/api/pages/unlike", - "/api/pages/update", - "/api/flash/create", - "/api/flash/delete", - "/api/flash/featured", - "/api/flash/like", - "/api/flash/show", - "/api/flash/unlike", - "/api/flash/update", - "/api/flash/my", - "/api/flash/my-likes", - "/api/ping", - "/api/pinned-users", - "/api/promo/read", - "/api/roles/list", - "/api/roles/show", - "/api/roles/users", - "/api/request-reset-password", - "/api/reset-db", - "/api/reset-password", - "/api/server-info", - "/api/stats", - "/api/sw/show-registration", - "/api/sw/update-registration", - "/api/sw/register", - "/api/sw/unregister", - "/api/test", - "/api/username/available", - "/api/users", - "/api/users/clips", - "/api/users/followers", - "/api/users/following", - "/api/users/gallery/posts", - "/api/users/get-frequently-replied-users", - "/api/users/lists/create", - "/api/users/lists/delete", - "/api/users/lists/list", - "/api/users/lists/pull", - "/api/users/lists/push", - "/api/users/lists/show", - "/api/users/lists/update", - "/api/users/notes", - "/api/users/pages", - "/api/users/reactions", - "/api/users/recommendation", - "/api/users/relation", - "/api/users/report-abuse", - "/api/users/search-by-username-and-host", - "/api/users/search", - "/api/users/show", - "/api/users/stats", - "/api/users/achievements", - "/api/fetch-rss", - "/api/retention", - "/api/admin/delete-logs", - "/api/admin/emoji/remove", - "/api/admin/invite", - "/api/admin/logs", - "/api/admin/moderators/add", - "/api/admin/moderators/remove", - "/api/admin/queue/jobs", - "/api/admin/remove-abuse-user-report", - "/api/admin/resync-chart", - "/api/admin/set-premium", - "/api/admin/silence-user", - "/api/admin/unset-premium", - "/api/admin/unsilence-user", - "/api/admin/unverify-user", - "/api/admin/update-remote-user", - "/api/admin/vacuum", - "/api/admin/verify-user", - "/api/channels/pin-note", - "/api/charts/hashtag", - "/api/charts/network", - "/api/games/reversi/games", - "/api/games/reversi/games/show", - "/api/games/reversi/games/surrender", - "/api/games/reversi/invitations", - "/api/games/reversi/match", - "/api/games/reversi/match/cancel", - "/api/i/read-all-messaging-messages", - "/api/i/registry/get-all", - "/api/i/registry/get-detail", - "/api/i/registry/get", - "/api/i/registry/keys-with-type", - "/api/i/registry/keys", - "/api/i/registry/remove", - "/api/i/registry/scopes", - "/api/i/registry/set", - "/api/i/user-group-invites", - "/api/messaging/history", - "/api/messaging/messages", - "/api/messaging/messages/create", - "/api/messaging/messages/delete", - "/api/messaging/messages/read", - "/api/notes/watching/create", - "/api/notes/watching/delete", - "/api/room/show", - "/api/room/update", - "/api/users/groups/create", - "/api/users/groups/delete", - "/api/users/groups/invitations/accept", - "/api/users/groups/invitations/reject", - "/api/users/groups/invite", - "/api/users/groups/joined", - "/api/users/groups/owned", - "/api/users/groups/pull", - "/api/users/groups/show", - "/api/users/groups/transfer", - "/api/users/groups/update", - "/api/version" -] \ No newline at end of file + '/api/admin/meta', + '/api/admin/abuse-user-reports', + '/api/admin/accounts/create', + '/api/admin/accounts/delete', + '/api/admin/ad/create', + '/api/admin/ad/delete', + '/api/admin/ad/list', + '/api/admin/ad/update', + '/api/admin/announcements/create', + '/api/admin/announcements/delete', + '/api/admin/announcements/list', + '/api/admin/announcements/update', + '/api/admin/delete-all-files-of-a-user', + '/api/admin/drive/clean-remote-files', + '/api/admin/drive/cleanup', + '/api/admin/drive/files', + '/api/admin/drive/show-file', + '/api/admin/emoji/add-aliases-bulk', + '/api/admin/emoji/add', + '/api/admin/emoji/copy', + '/api/admin/emoji/delete-bulk', + '/api/admin/emoji/delete', + '/api/admin/emoji/list-remote', + '/api/admin/emoji/list', + '/api/admin/emoji/remove-aliases-bulk', + '/api/admin/emoji/set-aliases-bulk', + '/api/admin/emoji/set-category-bulk', + '/api/admin/emoji/update', + '/api/admin/federation/delete-all-files', + '/api/admin/federation/refresh-remote-instance-metadata', + '/api/admin/federation/remove-all-following', + '/api/admin/federation/update-instance', + '/api/admin/get-index-stats', + '/api/admin/get-table-stats', + '/api/admin/get-user-ips', + '/api/invite', + '/api/admin/promo/create', + '/api/admin/queue/clear', + '/api/admin/queue/deliver-delayed', + '/api/admin/queue/inbox-delayed', + '/api/admin/queue/stats', + '/api/admin/relays/add', + '/api/admin/relays/list', + '/api/admin/relays/remove', + '/api/admin/reset-password', + '/api/admin/resolve-abuse-user-report', + '/api/admin/send-email', + '/api/admin/server-info', + '/api/admin/show-moderation-logs', + '/api/admin/show-user', + '/api/admin/show-users', + '/api/admin/suspend-user', + '/api/admin/unsuspend-user', + '/api/admin/update-meta', + '/api/admin/delete-account', + '/api/admin/update-user-note', + '/api/admin/roles/create', + '/api/admin/roles/delete', + '/api/admin/roles/list', + '/api/admin/roles/show', + '/api/admin/roles/update', + '/api/admin/roles/assign', + '/api/admin/roles/unassign', + '/api/admin/roles/update-default-policies', + '/api/admin/roles/users', + '/api/announcements', + '/api/antennas/create', + '/api/antennas/delete', + '/api/antennas/list', + '/api/antennas/notes', + '/api/antennas/show', + '/api/antennas/update', + '/api/ap/get', + '/api/ap/show', + '/api/app/create', + '/api/app/show', + '/api/auth/session/generate', + '/api/auth/session/show', + '/api/auth/session/userkey', + '/api/blocking/create', + '/api/blocking/delete', + '/api/blocking/list', + '/api/channels/create', + '/api/channels/featured', + '/api/channels/follow', + '/api/channels/followed', + '/api/channels/owned', + '/api/channels/show', + '/api/channels/timeline', + '/api/channels/unfollow', + '/api/channels/update', + '/api/charts/active-users', + '/api/charts/ap-request', + '/api/charts/drive', + '/api/charts/federation', + '/api/charts/instance', + '/api/charts/notes', + '/api/charts/user/drive', + '/api/charts/user/following', + '/api/charts/user/notes', + '/api/charts/user/pv', + '/api/charts/user/reactions', + '/api/charts/users', + '/api/clips/add-note', + '/api/clips/remove-note', + '/api/clips/create', + '/api/clips/delete', + '/api/clips/list', + '/api/clips/notes', + '/api/clips/show', + '/api/clips/update', + '/api/drive', + '/api/drive/files', + '/api/drive/files/attached-notes', + '/api/drive/files/check-existence', + '/api/drive/files/create', + '/api/drive/files/delete', + '/api/drive/files/find-by-hash', + '/api/drive/files/find', + '/api/drive/files/show', + '/api/drive/files/update', + '/api/drive/files/upload-from-url', + '/api/drive/folders', + '/api/drive/folders/create', + '/api/drive/folders/delete', + '/api/drive/folders/find', + '/api/drive/folders/show', + '/api/drive/folders/update', + '/api/drive/stream', + '/api/email-address/available', + '/api/endpoint', + '/api/endpoints', + '/api/federation/followers', + '/api/federation/following', + '/api/federation/instances', + '/api/federation/show-instance', + '/api/federation/update-remote-user', + '/api/federation/users', + '/api/federation/stats', + '/api/following/create', + '/api/following/delete', + '/api/following/invalidate', + '/api/following/requests/accept', + '/api/following/requests/cancel', + '/api/following/requests/list', + '/api/following/requests/reject', + '/api/gallery/featured', + '/api/gallery/popular', + '/api/gallery/posts', + '/api/gallery/posts/create', + '/api/gallery/posts/delete', + '/api/gallery/posts/like', + '/api/gallery/posts/show', + '/api/gallery/posts/unlike', + '/api/gallery/posts/update', + '/api/get-online-users-count', + '/api/hashtags/list', + '/api/hashtags/search', + '/api/hashtags/show', + '/api/hashtags/trend', + '/api/hashtags/users', + '/api/i', + '/api/i/claim-achievement', + '/api/i/favorites', + '/api/i/gallery/likes', + '/api/i/gallery/posts', + '/api/i/get-word-muted-notes-count', + '/api/i/notifications', + '/api/i/page-likes', + '/api/i/pages', + '/api/i/pin', + '/api/i/read-all-unread-notes', + '/api/i/read-announcement', + '/api/i/unpin', + '/api/i/update', + '/api/i/webhooks/create', + '/api/i/webhooks/list', + '/api/i/webhooks/show', + '/api/i/webhooks/update', + '/api/i/webhooks/delete', + '/api/meta', + '/api/emojis', + '/api/mute/create', + '/api/mute/delete', + '/api/mute/list', + '/api/renote-mute/create', + '/api/renote-mute/delete', + '/api/renote-mute/list', + '/api/my/apps', + '/api/notes', + '/api/notes/children', + '/api/notes/clips', + '/api/notes/conversation', + '/api/notes/create', + '/api/notes/delete', + '/api/notes/favorites/create', + '/api/notes/favorites/delete', + '/api/notes/featured', + '/api/notes/global-timeline', + '/api/notes/hybrid-timeline', + '/api/notes/local-timeline', + '/api/notes/mentions', + '/api/notes/polls/recommendation', + '/api/notes/polls/vote', + '/api/notes/reactions', + '/api/notes/reactions/create', + '/api/notes/reactions/delete', + '/api/notes/renotes', + '/api/notes/replies', + '/api/notes/search-by-tag', + '/api/notes/search', + '/api/notes/show', + '/api/notes/state', + '/api/notes/thread-muting/create', + '/api/notes/thread-muting/delete', + '/api/notes/timeline', + '/api/notes/translate', + '/api/notes/unrenote', + '/api/notes/user-list-timeline', + '/api/notifications/create', + '/api/notifications/mark-all-as-read', + '/api/notifications/read', + '/api/pages/create', + '/api/pages/delete', + '/api/pages/featured', + '/api/pages/like', + '/api/pages/show', + '/api/pages/unlike', + '/api/pages/update', + '/api/flash/create', + '/api/flash/delete', + '/api/flash/featured', + '/api/flash/like', + '/api/flash/show', + '/api/flash/unlike', + '/api/flash/update', + '/api/flash/my', + '/api/flash/my-likes', + '/api/ping', + '/api/pinned-users', + '/api/promo/read', + '/api/roles/list', + '/api/roles/show', + '/api/roles/users', + '/api/request-reset-password', + '/api/reset-db', + '/api/reset-password', + '/api/server-info', + '/api/stats', + '/api/sw/show-registration', + '/api/sw/update-registration', + '/api/sw/register', + '/api/sw/unregister', + '/api/test', + '/api/username/available', + '/api/users', + '/api/users/clips', + '/api/users/followers', + '/api/users/following', + '/api/users/gallery/posts', + '/api/users/get-frequently-replied-users', + '/api/users/lists/create', + '/api/users/lists/delete', + '/api/users/lists/list', + '/api/users/lists/pull', + '/api/users/lists/push', + '/api/users/lists/show', + '/api/users/lists/update', + '/api/users/notes', + '/api/users/pages', + '/api/users/reactions', + '/api/users/recommendation', + '/api/users/relation', + '/api/users/report-abuse', + '/api/users/search-by-username-and-host', + '/api/users/search', + '/api/users/show', + '/api/users/stats', + '/api/users/achievements', + '/api/fetch-rss', + '/api/retention', + '/api/admin/delete-logs', + '/api/admin/emoji/remove', + '/api/admin/invite', + '/api/admin/logs', + '/api/admin/moderators/add', + '/api/admin/moderators/remove', + '/api/admin/queue/jobs', + '/api/admin/remove-abuse-user-report', + '/api/admin/resync-chart', + '/api/admin/set-premium', + '/api/admin/silence-user', + '/api/admin/unset-premium', + '/api/admin/unsilence-user', + '/api/admin/unverify-user', + '/api/admin/update-remote-user', + '/api/admin/vacuum', + '/api/admin/verify-user', + '/api/channels/pin-note', + '/api/charts/hashtag', + '/api/charts/network', + '/api/games/reversi/games', + '/api/games/reversi/games/show', + '/api/games/reversi/games/surrender', + '/api/games/reversi/invitations', + '/api/games/reversi/match', + '/api/games/reversi/match/cancel', + '/api/i/read-all-messaging-messages', + '/api/i/registry/get-all', + '/api/i/registry/get-detail', + '/api/i/registry/get', + '/api/i/registry/keys-with-type', + '/api/i/registry/keys', + '/api/i/registry/remove', + '/api/i/registry/scopes', + '/api/i/registry/set', + '/api/i/user-group-invites', + '/api/messaging/history', + '/api/messaging/messages', + '/api/messaging/messages/create', + '/api/messaging/messages/delete', + '/api/messaging/messages/read', + '/api/notes/watching/create', + '/api/notes/watching/delete', + '/api/room/show', + '/api/room/update', + '/api/users/groups/create', + '/api/users/groups/delete', + '/api/users/groups/invitations/accept', + '/api/users/groups/invitations/reject', + '/api/users/groups/invite', + '/api/users/groups/joined', + '/api/users/groups/owned', + '/api/users/groups/pull', + '/api/users/groups/show', + '/api/users/groups/transfer', + '/api/users/groups/update', + '/api/version' +] diff --git a/pyproject.toml b/pyproject.toml index 7b0b260..793b74a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.black] line-length = 99 -exclude = 'mipac/_version.py' +exclude = ['mipac/_version.py', 'mipac/types/endpoints.py'] [tool.isort] From 905d47ba45e62794d9050eb9d0396b2d00d77942 Mon Sep 17 00:00:00 2001 From: yupix Date: Wed, 15 Mar 2023 22:15:07 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20BlockingUser=E3=83=A2=E3=83=87?= =?UTF-8?q?=E3=83=AB=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mipac/models/user.py | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/mipac/models/user.py b/mipac/models/user.py index 18a3f0c..2f15268 100644 --- a/mipac/models/user.py +++ b/mipac/models/user.py @@ -1,16 +1,46 @@ from __future__ import annotations +from datetime import datetime from typing import TYPE_CHECKING, Literal from mipac.models.lite.user import LiteUser from mipac.models.note import Note from mipac.types.page import IPage -from mipac.types.user import IAchievement, IFollowRequest, IUserDetailed, IUserDetailedField +from mipac.types.user import ( + IAchievement, + IBlockingUser, + IFollowRequest, + IUserDetailed, + IUserDetailedField, +) +from mipac.util import str_to_datetime if TYPE_CHECKING: from mipac.manager.client import ClientManager -__all__ = ('UserDetailed', 'FollowRequest', 'LiteUser', 'Achievement') +__all__ = ('UserDetailed', 'FollowRequest', 'LiteUser', 'Achievement', 'BlockingUser') + + +class BlockingUser: + def __init__(self, blocking_user_data: IBlockingUser, *, client: ClientManager) -> None: + self.__blocking_user_data: IBlockingUser = blocking_user_data + self.__client: ClientManager = client + + @property + def id(self) -> str: + return self.__blocking_user_data['id'] + + @property + def created_at(self) -> datetime: + return str_to_datetime(self.__blocking_user_data['created_at']) + + @property + def blockee_id(self) -> str: + return self.__blocking_user_data['blockee_id'] + + @property + def blockee(self) -> UserDetailed: + return UserDetailed(self.__blocking_user_data['blockee'], client=self.__client) class FollowRequest: From 5cd4f059f21cb70ef2ff5faa345901a26b0eed0b Mon Sep 17 00:00:00 2001 From: yupix Date: Wed, 15 Mar 2023 22:21:25 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20blocking=E5=91=A8=E3=82=8A=E3=81=AE?= =?UTF-8?q?=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=81=AA=E3=81=A9=E3=82=92?= =?UTF-8?q?=E5=85=85=E5=AE=9F=E3=81=95=E3=81=9B=E3=81=9F=20close=20#58?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mipac/actions/blocking.py | 63 +++++++++++++++++++++++++++++++++++++++ mipac/manager/blocking.py | 23 ++++++++++++++ mipac/manager/user.py | 2 ++ 3 files changed, 88 insertions(+) create mode 100644 mipac/actions/blocking.py create mode 100644 mipac/manager/blocking.py diff --git a/mipac/actions/blocking.py b/mipac/actions/blocking.py new file mode 100644 index 0000000..1f9bee7 --- /dev/null +++ b/mipac/actions/blocking.py @@ -0,0 +1,63 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, AsyncGenerator + +from mipac.abstract.action import AbstractAction +from mipac.http import HTTPClient, Route +from mipac.models.user import BlockingUser, UserDetailed +from mipac.types.user import IBlockingUser, IUserDetailed + +if TYPE_CHECKING: + from mipac.client import ClientManager + + +class BlockingActions(AbstractAction): + def __init__(self, user_id: str | None = None, *, session: HTTPClient, client: ClientManager): + self.__user_id: str | None = user_id + self.__session: HTTPClient = session + self.__client: ClientManager = client + + async def add(self, user_id: str | None = None) -> UserDetailed: + user_id = self.__user_id or user_id + res: IUserDetailed = await self.__session.request( + Route('POST', '/api/blocking/create'), auth=True, json={'userId': user_id}, lower=True + ) + return UserDetailed(res, client=self.__client) + + async def remove(self, user_id: str | None = None) -> UserDetailed: + user_id = self.__user_id or user_id + res: IUserDetailed = await self.__session.request( + Route('POST', '/api/blocking/delete'), auth=True, json={'userId': user_id}, lower=True + ) + return UserDetailed(res, client=self.__client) + + async def get_list( + self, + since_id: str | None = None, + until_id: str | None = None, + limit: int = 100, + all: bool = False, + ) -> AsyncGenerator[BlockingUser, None]: + async def request(body) -> list[BlockingUser]: + res: list[IBlockingUser] = await self.__session.request( + Route('POST', '/api/blocking/list'), lower=True, auth=True, json=body + ) + return [BlockingUser(user, client=self.__client) for user in res] + + data = {'limit': limit, 'sinceId': since_id, 'untilId': until_id} + if all: + data['limit'] = 100 + first_req = await request(data) + for user in first_req: + yield user + + if all and len(first_req) == 100: + data['untilId'] = first_req[-1].id + while True: + res = await request(data) + if len(res) <= 100: + for user in res: + yield user + if len(res) == 0: + break + data['untilId'] = res[-1].id diff --git a/mipac/manager/blocking.py b/mipac/manager/blocking.py new file mode 100644 index 0000000..f80d0a0 --- /dev/null +++ b/mipac/manager/blocking.py @@ -0,0 +1,23 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from mipac.abstract.manager import AbstractManager +from mipac.actions.blocking import BlockingActions +from mipac.http import HTTPClient + +if TYPE_CHECKING: + from mipac.manager.client import ClientManager + + +class BlockingManager(AbstractManager): + def __init__(self, user_id: str | None = None, *, session: HTTPClient, client: ClientManager): + self.__user_id: str | None = user_id + self.__session: HTTPClient = session + self.__client: ClientManager = client + + @property + def action(self) -> BlockingActions: + return BlockingActions( + user_id=self.__user_id, session=self.__session, client=self.__client + ) diff --git a/mipac/manager/user.py b/mipac/manager/user.py index 18e38f4..4952e09 100644 --- a/mipac/manager/user.py +++ b/mipac/manager/user.py @@ -5,6 +5,7 @@ from typing import TYPE_CHECKING from mipac.abstract.manager import AbstractManager from mipac.actions.user import UserActions from mipac.http import HTTPClient +from mipac.manager.blocking import BlockingManager from mipac.manager.follow import FollowManager from mipac.manager.mute import MuteManager @@ -26,6 +27,7 @@ class UserManager(AbstractManager): self.user: LiteUser | None = user self.follow: FollowManager = FollowManager(user_id=user_id, session=session, client=client) self.mute: MuteManager = MuteManager(user_id=user_id, session=session, client=client) + self.block = BlockingManager(user_id=user_id, session=session, client=client) @property def action(self) -> UserActions: From aedc160730e8abc28fcf0a52cbcdf06c3f890668 Mon Sep 17 00:00:00 2001 From: yupix Date: Wed, 15 Mar 2023 22:23:23 +0900 Subject: [PATCH 5/5] docs: update CHANGELOG.md --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4dbc0a..0fcf1ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,8 +30,16 @@ async def main(): - 以下のエンドポイントがサポートされます。 - `i/claim-achievement` + - `blocking/create` + - `blocking/delete` + - `blocking/list` - Added class the given below. - `IT_ACHIEVEMENT_NAME` + - `BlockingUser` + - `IBlockingUser` + - `BlockingActions` + - `BlockingManager` +- Added `Block` property to `UserManager`. ### Changed