"""
数据模型定义
"""
from typing import List, Optional, Dict, Any
from pydantic import BaseModel, Field
class CompoundInfo(BaseModel):
"""化合物基础信息"""
cid: Optional[int] = None
name: str
molecular_formula: Optional[str] = None
molecular_weight: Optional[float] = None
iupac_name: Optional[str] = None
synonyms: List[str] = Field(default_factory=list)
smiles: Optional[str] = None
inchi_key: Optional[str] = None
class GHSPictogram(BaseModel):
"""GHS象形图信息"""
code: str
url: str
description: str
class SafetyInfo(BaseModel):
"""安全分类信息"""
model_config = {"exclude_unset": True}
cid: int
signal_word: Optional[str] = None
ghs_pictograms: Optional[List[GHSPictogram]] = None
ghs_hazard_statements: Optional[List[str]] = None
precautionary_statements: Optional[List[str]] = None
regulatory_info: Optional[List[Dict[str, Any]]] = None
fire_fighting: Optional[List[Dict[str, Any]]] = None
other_safety_info: Optional[List[Dict[str, Any]]] = None
ghs_classification: Optional[List[Dict[str, Any]]] = None
class ToxicityData(BaseModel):
"""毒性数据 - 支持所有PubChem Toxicity字段"""
model_config = {
"exclude_unset": True,
"extra": "allow" # 允许额外字段,支持所有Toxicity子分类
}
cid: int
# 常见的毒性数据字段(这些字段总是可选的)
toxicity_summary: Optional[List[Dict[str, Any]]] = None
niosh_toxicity_data: Optional[List[Dict[str, Any]]] = None
carcinogen_classification: Optional[List[Dict[str, Any]]] = None
health_effects: Optional[List[Dict[str, Any]]] = None
signs_and_symptoms: Optional[List[Dict[str, Any]]] = None
acute_effects: Optional[List[Dict[str, Any]]] = None
human_toxicity_excerpts: Optional[List[Dict[str, Any]]] = None
non_human_toxicity_excerpts: Optional[List[Dict[str, Any]]] = None
non_human_toxicity_values: Optional[List[Dict[str, Any]]] = None
# 生态毒性数据
ecotoxicity_values: Optional[List[Dict[str, Any]]] = None
ecotoxicity_excerpts: Optional[List[Dict[str, Any]]] = None
environmental_fate: Optional[List[Dict[str, Any]]] = None
# 其他所有字段通过extra="allow"自动支持
class ErrorResponse(BaseModel):
"""错误响应"""
error: str
details: Optional[str] = None