| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- """block.py — Block 相关 Schema"""
- from typing import Optional
- from pydantic import BaseModel, Field
- class BlockBase(BaseModel):
- """Block 基础信息"""
- id: str = Field(..., validation_alias="id", serialization_alias="id")
- block_order: int = Field(..., validation_alias="blockOrder", serialization_alias="blockOrder")
- type: str = Field(..., validation_alias="type", serialization_alias="type")
- level: int = Field(..., validation_alias="level", serialization_alias="level")
- index: int = Field(..., validation_alias="index", serialization_alias="index")
- content: str | dict | list = Field(..., validation_alias="content", serialization_alias="content")
- word_style: str = Field(..., validation_alias="wordStyle", serialization_alias="wordStyle")
- style: dict = Field(..., validation_alias="style", serialization_alias="style")
- metadata: dict = Field(..., validation_alias="metadata", serialization_alias="metadata")
-
- class Config:
- populate_by_name = True
- class BlockUpdate(BaseModel):
- """Block 更新请求"""
- content: Optional[str | dict | list] = None
- style: Optional[dict] = None
- word_style: Optional[str] = None
- metadata: Optional[dict] = None
- class BlockCreate(BaseModel):
- """Block 创建请求(id/index/block_order 自动生成,heading 需 level 1-6,其他类型 level=0)"""
- type: str
- level: int = 0 # heading 类型必填(1-6),其他类型默认 0
- content: str | dict | list
- word_style: str = ""
- style: dict = {}
- metadata: dict = {}
- after_block_id: Optional[str] = None # 在哪个 block 后插入(null = 末尾)
- class TOCContent(BaseModel):
- """TOC Block content 结构"""
- title: str = "目录"
- class TOCConfig(BaseModel):
- """TOC 配置"""
- levels: str = "1-1" # 包含的标题层级
- use_hyperlinks: bool = True
- use_page_numbers: bool = True
- hide_page_numbers_in_web: bool = True
- use_outline_levels: bool = True
- show_leader_dots: bool = True
- leader_char: str = "."
- class TOCMetadata(BaseModel):
- """TOC Block metadata 结构"""
- toc_config: TOCConfig
- is_auto_generated: bool = True
- readonly: bool = True
- deletable: bool = True
- class TOCBlock(BaseModel):
- """完整的 TOC Block"""
- id: str
- block_order: int = Field(..., serialization_alias="blockOrder")
- type: str = "toc"
- level: int = 0
- index: int = 0
- content: TOCContent
- word_style: str = "TOC"
- metadata: TOCMetadata
-
- class Config:
- populate_by_name = True
- class TOCItem(BaseModel):
- """目录树节点"""
- id: str
- level: int
- content: str
- children: list['TOCItem'] = []
- class BlockSearchResult(BaseModel):
- """Block 搜索结果"""
- blocks: list[BlockBase]
- total: int
- class BlockStats(BaseModel):
- """Block 统计信息"""
- total: int
- by_type: dict[str, int] = Field(..., alias="byType")
-
- class Config:
- populate_by_name = True
|