"""HTTP 请求模型(Pydantic)。""" from pydantic import BaseModel # ------------------------------------------------------------------------ models class LoginIn(BaseModel): username: str = "" password: str = "" account_id: str = "" # 只给账号 id 时,用户名/密码从 SQLite 里取,密码不出库 platform: str = "guanyixue" # 没传 account_id 时按它选平台 class AccountsIn(BaseModel): accounts: list = [] class AccountIn(BaseModel): id: str = "" username: str = "" platform: str = "guanyixue" # 添加账号时选的平台 password: str | None = None # 不传 = 保留库里已有的密码 note: str = "" user: str = "" cookies: list = [] courses: list = [] selected: list = [] status: str = "idle" lastError: str = "" lastErrorAt: float = 0 optQuiz: bool = False optFeedback: bool = True loginAt: float = 0 created: float = 0 class CookiesIn(BaseModel): cookies: list platform: str = "guanyixue" class DiscoverIn(BaseModel): cookies: list plan_id: str project_id: str name: str = "" platform: str = "guanyixue" class StudyIn(BaseModel): key: str username: str = "" password: str = "" # 仅用于会话失效时自动重登,不落盘 cookies: list = [] courses: list = [] # [{name, plan_id, project_id}] plan_id: str = "" project_id: str = "" workers: int = 40 cap_minutes: int = 90 quiz_key: dict | None = None enable_quiz: bool = False # 默认关闭:答题正确率无法保证 enable_feedback: bool = True # 反馈表无对错,默认开启 class StopIn(BaseModel): key: str class CaptureIn(BaseModel): key: str cookies: list = [] minutes: int = 10 # 抓包最长分钟数(1~30) class QuizIn(BaseModel): cookies: list = [] plan_id: str = "" project_id: str = "" name: str = "" platform: str = "guanyixue" # retake=True:交卷后点「再考一次」,让平台生成新答卷(消耗一次机会) retake: bool = False period_id: str = "" # 指定要重考/查看的课时(不传就按原逻辑挑第一个) class QuizSubmitIn(BaseModel): cookies: list = [] plan_id: str = "" object_id: str = "" generation: str = "legacy" # legacy / spa,决定走旧版还是新版交卷接口 result_id: str = "" answers: dict = {} # {"1": "A", "2": "A#C"} class QuizAnswerIn(BaseModel): questions: list = [] # [{no,type,title,options:[{key,text}]}] prompt: str = "" account_id: str = "" # 有账号就把日志写进它的「课程日志」,没有就写 key=ai class LlmCfgIn(BaseModel): base_url: str = "" api_key: str = "" model: str = "" temperature: float = 0.2 timeout: int = 120 prompt: str = "" study_mode: str = "" # "" = 不改;fast / normal study_parallel: int = 0 # 0 = 不改;1~5 class LlmTestIn(BaseModel): base_url: str = "" api_key: str = "" model: str = "" timeout: int = 60