summaryrefslogtreecommitdiffstats
path: root/api/schemas.py
diff options
context:
space:
mode:
Diffstat (limited to 'api/schemas.py')
-rw-r--r--api/schemas.py162
1 files changed, 162 insertions, 0 deletions
diff --git a/api/schemas.py b/api/schemas.py
new file mode 100644
index 0000000..a8f4e45
--- /dev/null
+++ b/api/schemas.py
@@ -0,0 +1,162 @@
+from typing import Literal, Optional, Union
+
+from ninja import Field, Schema
+
+
+class Application(Schema):
+ id: str
+ name: str
+ website: str | None
+ client_id: str
+ client_secret: str
+ redirect_uri: str = Field(alias="redirect_uris")
+
+
+class CustomEmoji(Schema):
+ shortcode: str
+ url: str
+ static_url: str
+ visible_in_picker: bool
+ category: str
+
+
+class AccountField(Schema):
+ name: str
+ value: str
+ verified_at: str | None
+
+
+class Account(Schema):
+ id: str
+ username: str
+ acct: str
+ url: str
+ display_name: str
+ note: str
+ avatar: str
+ avatar_static: str
+ header: str
+ header_static: str
+ locked: bool
+ fields: list[AccountField]
+ emojis: list[CustomEmoji]
+ bot: bool
+ group: bool
+ discoverable: bool
+ moved: Union[None, bool, "Account"]
+ suspended: bool
+ limited: bool
+ created_at: str
+ last_status_at: str | None = Field(...)
+ statuses_count: int
+ followers_count: int
+ following_count: int
+
+
+class MediaAttachment(Schema):
+ id: str
+ type: Literal["unknown", "image", "gifv", "video", "audio"]
+ url: str
+ preview_url: str
+ remote_url: str | None
+ meta: dict
+ description: str | None
+ blurhash: str | None
+
+
+class StatusMention(Schema):
+ id: str
+ username: str
+ url: str
+ acct: str
+
+
+class StatusTag(Schema):
+ name: str
+ url: str
+
+
+class Status(Schema):
+ id: str
+ uri: str
+ created_at: str
+ account: Account
+ content: str
+ visibility: Literal["public", "unlisted", "private", "direct"]
+ sensitive: bool
+ spoiler_text: str
+ media_attachments: list[MediaAttachment]
+ mentions: list[StatusMention]
+ tags: list[StatusTag]
+ emojis: list[CustomEmoji]
+ reblogs_count: int
+ favourites_count: int
+ replies_count: int
+ url: str | None = Field(...)
+ in_reply_to_id: str | None = Field(...)
+ in_reply_to_account_id: str | None = Field(...)
+ reblog: Optional["Status"] = Field(...)
+ poll: None = Field(...)
+ card: None = Field(...)
+ language: None = Field(...)
+ text: str | None = Field(...)
+ edited_at: str | None
+ favourited: bool | None
+ reblogged: bool | None
+ muted: bool | None
+ bookmarked: bool | None
+ pinned: bool | None
+
+
+class Conversation(Schema):
+ id: str
+ unread: bool
+ accounts: list[Account]
+ last_status: Status | None = Field(...)
+
+
+class Notification(Schema):
+ id: str
+ type: Literal[
+ "mention",
+ "status",
+ "reblog",
+ "follow",
+ "follow_request",
+ "favourite",
+ "poll",
+ "update",
+ "admin.sign_up",
+ "admin.report",
+ ]
+ created_at: str
+ account: Account
+ status: Status | None
+
+
+class Tag(Schema):
+ name: str
+ url: str
+ history: dict
+
+
+class Search(Schema):
+ accounts: list[Account]
+ statuses: list[Status]
+ hashtags: list[Tag]
+
+
+class Relationship(Schema):
+ id: str
+ following: bool
+ followed_by: bool
+ showing_reblogs: bool
+ notifying: bool
+ blocking: bool
+ blocked_by: bool
+ muting: bool
+ muting_notifications: bool
+ requested: bool
+ domain_blocking: bool
+ endorsed: bool
+ note: str