Spaces:
Paused
Paused
| import json | |
| from typing import Literal, Dict, List | |
| from enum import Enum | |
| from dataclasses import dataclass, field | |
| from dataclasses_json import dataclass_json | |
| class ErrorType(Enum): | |
| NONE = "" | |
| ID = "id" | |
| PASSWD = "passwd" | |
| CAPTCHA = "captcha" | |
| def from_error_message(error_msg: str) -> "ErrorType": | |
| if "用户名或密码错误" in error_msg: | |
| return ErrorType.ID | |
| elif "验证码错误" in error_msg: | |
| return ErrorType.CAPTCHA | |
| elif "密码错误" in error_msg: | |
| return ErrorType.PASSWD | |
| else: | |
| return ErrorType.NONE | |
| class Course: | |
| course_id: str | |
| course_index: str | |
| class CourseData: | |
| a: List[Course] = field(default_factory=list) # 方案选课 | |
| """ | |
| 方案选课 | |
| """ | |
| b: List[Course] = field(default_factory=list) # 自由选课 | |
| """ | |
| 自由选课 | |
| """ | |
| class UserData: | |
| def __init__(self, std_id: str = "", password: str = "", course: CourseData = CourseData()): | |
| self.std_id = std_id | |
| self.password = password | |
| self.course = course | |
| """ | |
| 用户数据 | |
| """ | |
| std_id: str | |
| """ | |
| 学号 | |
| """ | |
| password: str | |
| """ | |
| 密码 | |
| """ | |
| course: CourseData = field(default_factory=CourseData) | |
| """ | |
| 课程数据 | |
| """ | |
| def from_file(file_path: str) -> "UserData": | |
| with open(file_path, encoding="utf-8") as f: | |
| user_data_load = json.load(f) | |
| return UserData.from_dict(user_data_load) | |
| class Setting: | |
| """ | |
| 全局设置 | |
| """ | |
| manual_login: bool = False | |
| """ | |
| 是否手动登录 | |
| """ | |
| browser: Literal["chrome", "edge"] = "edge" | |
| """ | |
| 使用的浏览器 | |
| """ | |
| def from_file(file_path: str) -> "Setting": | |
| with open(file_path, encoding="utf-8") as f: | |
| setting_load = json.load(f) | |
| return Setting.from_dict(setting_load) | |