# generated by datamodel-codegen: # filename: adf.schema.json # timestamp: 2024-12-18T03:03:22+00:00 from __future__ import annotations from enum import Enum from typing import Any, List, Literal, Optional, Union from pydantic import BaseModel, RootModel, ConfigDict, Field # Em Mark class EmMark(BaseModel): type: Literal["em"] = "em" # Strike Mark class StrikeMark(BaseModel): type: Literal["strike"] = "strike" # Strong Mark class StrongMark(BaseModel): type: Literal["strong"] = "strong" # SubSup Mark class SubSupAttrs(BaseModel): type: Literal["sup", "sub"] = "sub" class SubSupMark(BaseModel): type: Literal["subsup"] = "subsup" attrs: SubSupAttrs # Underline Mark class UnderlineMark(BaseModel): type: Literal["underline"] = "underline" # Text Color Mark class TextColorAttrs(BaseModel): color: str = Field(description="Hex color code, for example: #ff0000") class TextColorMark(BaseModel): type: Literal["textColor"] = "textColor" attrs: TextColorAttrs # Background Color Mark class BackgroundColorAttrs(BaseModel): color: str = Field( description="Hex color code, for example: #ff0000", ) class BackgroundColorMark(BaseModel): type: Literal["backgroundColor"] = "backgroundColor" attrs: BackgroundColorAttrs # Code Mark class CodeMark(BaseModel): type: Literal["code"] = "code" # Link Mark class LinkMarkAttrs(BaseModel): id: Optional[str] = None href: str = Field( examples=[ "https://www.atlassian.com", ] ) title: Optional[str] = None collection: Optional[str] = None occurrenceKey: Optional[str] = None class LinkMark(BaseModel): type: Literal["link"] = "link" attrs: LinkMarkAttrs # Text Marks TextMark = RootModel[ Union[ EmMark, StrikeMark, StrongMark, SubSupMark, TextColorMark, BackgroundColorMark, UnderlineMark, CodeMark, LinkMark, ] ] # Text Node class TextNode(BaseModel): model_config = ConfigDict(extra="forbid") type: Literal["text"] = "text" text: str marks: Optional[list[TextMark]] = None # Hard Break Node class HardBreakAttrs(BaseModel): text: Optional[str] = Field(default="\n") class HardBreakNode(BaseModel): type: Literal["hardBreak"] = "hardBreak" attrs: Optional[HardBreakAttrs] = None # Date class DateAttrs(BaseModel): timestamp: str class DateNode(BaseModel): model_config = ConfigDict(extra="forbid") type: Literal["date"] = "date" attrs: DateAttrs # Emoji class EmojiAttr(BaseModel): id: str shortName: str text: str class EmojiNode(BaseModel): model_config = ConfigDict(extra="forbid") type: Literal["emoji"] = "emoji" attrs: EmojiAttr = Field( description="""There are three kinds of emoji. For examples: - Standard — Unicode emoji {"type": "emoji", "attrs": {"shortName": ":grinning:", "text": "😀"}} - Atlassian — Non-standard emoji introduced by Atlassian {"type": "emoji", "attrs": {"shortName": ":awthanks:", "id": "atlassian-awthanks", "text": ":awthanks:"}} - Site — Non-standard customer defined emoji {"type": "emoji", "attrs": {"shortName": ":thumbsup::skin-tone-2:", "id": "1f44d", "text": "👍🏽"}} """ ) # Inline Nodes InlineNode = Union[TextNode, DateNode, EmojiNode] # Block Nodes class BlockNode(BaseModel): type: str content: List[Any] # Paragraph Node class ParagraphNode(BlockNode): model_config = ConfigDict(extra="forbid") type: Literal["paragraph"] = "paragraph" content: Optional[List[InlineNode]] = None # Heading Node class HeadingLevel(int, Enum): H1 = 1 H2 = 2 H3 = 3 H4 = 4 H5 = 5 H6 = 6 class HeadingAttrs(BaseModel): level: HeadingLevel = HeadingLevel.H1 localId: Optional[str] = None class HeadingNode(BlockNode): model_config = ConfigDict(extra="forbid") type: Literal["heading"] = "heading" attrs: HeadingAttrs content: Optional[List[InlineNode]] = None # Code Block Node class CodeBlockAttrs(BaseModel): language: Optional[str] class CodeBlockNode(BlockNode): model_config = ConfigDict(extra="forbid") type: Literal["codeBlock"] = "codeBlock" content: List[TextNode] attrs: Optional[CodeBlockAttrs] = None # List item Node class ListItemNode(BlockNode): model_config = ConfigDict(extra="forbid") type: Literal["listItem"] = "listItem" content: List[Union[ParagraphNode, BulletListNode, OrderedListNode, CodeBlockNode]] # Ordered list Node class OrderedListAttrs(BaseModel): order: Optional[int] class OrderedListNode(BlockNode): model_config = ConfigDict(extra="forbid") type: Literal["orderedList"] = "orderedList" content: List[ListItemNode] attrs: Optional[OrderedListAttrs] = None # Bullet List Node class BulletListNode(BlockNode): model_config = ConfigDict(extra="forbid") type: Literal["bulletList"] = "bulletList" content: List[ListItemNode] # Blockquote Node class BlockquoteNode(BlockNode): model_config = ConfigDict(extra="forbid") type: Literal["blockquote"] = "blockquote" content: List[ Union[ ParagraphNode, BulletListNode, OrderedListNode, CodeBlockNode, ] ] # Doc Node class Version(int, Enum): V1 = 1 class DocNode(BaseModel): model_config = ConfigDict(extra="forbid") type: Literal["doc"] = "doc" version: Version = Version.V1 content: List[ Union[ HeadingNode, ParagraphNode, OrderedListNode, BulletListNode, CodeBlockNode, BlockquoteNode, ] ] ADFDocument = RootModel[DocNode]