Files
study-tool/src/study_tool/models.py
T
study-tool 1a3347f7f9 feat: 添加账号支持选择学习平台
账号新增 platform 字段,登录/刷新课程/发现课程按平台分发;同时把 JS 脚本收进 script/(目录规范调整)。
2026-10-30 01:13:47 +08:00

116 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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