Ejemplo n.º 1
0
 def __get_self_mark(self, exam: Exam, has_total_score: bool) -> Mark:
     mark = Mark(exam=exam)
     r = self._session.get(Url.GET_MARK_URL,
                           params={"examId": exam.id},
                           headers=self.__get_auth_header())
     json_data = r.json()
     if json_data["errorCode"] != 0:
         raise Exception(json_data["errorInfo"])
     json_data = json_data["result"]
     # exam.name = json_data["total_score"]["examName"]
     # exam.id = json_data["total_score"]["examId"]
     for subject in json_data["paperList"]:
         mark.append(
             SubjectScore(score=subject["userScore"],
                          subject=Subject(
                              id=subject["paperId"],
                              name=subject["subjectName"],
                              code=subject["subjectCode"],
                              standard_score=subject["standardScore"],
                              exam=exam),
                          person=self,
                          create_time=0))
     if has_total_score:
         total_score = json_data["totalScore"]
         mark.append(
             SubjectScore(score=total_score["userScore"],
                          subject=Subject(
                              id="",
                              name=total_score["subjectName"],
                              code="99",
                              standard_score=total_score["standardScore"],
                              exam=exam),
                          person=self,
                          create_time=0))
     return mark
Ejemplo n.º 2
0
    def get_latest_exam(self) -> ExamInfo:
        """获取最新考试"""
        r = self._session.get(Url.GET_RECENT_EXAM_URL,
                              headers=self.__get_auth_header())
        if not r.ok:
            raise PageConnectionError(
                f"get_latest_exam中出错, 状态码为{r.status_code}")
        try:
            json_data = r.json()["result"]
            exam_info_data = json_data["examInfo"]

            subjects = ExtendedList()

            for subject_data in exam_info_data["subjectScores"]:
                subjects.append(
                    Subject(id=subject_data["topicSetId"],
                            name=subject_data["subjectName"],
                            code=subject_data["subjectCode"]))

            exam_info = ExamInfo(id=exam_info_data["examId"],
                                 name=exam_info_data["examName"],
                                 subjects=subjects,
                                 classId=exam_info_data["classId"],
                                 grade_code=json_data["gradeCode"],
                                 is_final=exam_info_data["isFinal"])
            exam_info.create_time = exam_info_data["examCreateDateTime"]
        except (JSONDecodeError, KeyError) as e:
            raise PageInformationError(
                f"get_latest_exam中网页内容发生改变, 错误为{e}, 内容为\n{r.text}")
        return exam_info
Ejemplo n.º 3
0
 def __get_self_mark(self, exam: Exam, has_total_score: bool) -> Mark:
     mark = Mark(exam=exam, person=self)
     r = self._session.get(Url.GET_MARK_URL,
                           params={"examId": exam.id},
                           headers=self.__get_auth_header())
     if not r.ok:
         raise PageConnectionError(
             f"__get_self_mark中出错, 状态码为{r.status_code}")
     try:
         json_data = r.json()
         json_data = json_data["result"]
         # exam.name = json_data["total_score"]["examName"]
         # exam.id = json_data["total_score"]["examId"]
         for subject in json_data["paperList"]:
             subject_score = SubjectScore(
                 score=subject["userScore"],
                 subject=Subject(id=subject["paperId"],
                                 name=subject["subjectName"],
                                 code=subject["subjectCode"],
                                 standard_score=subject["standardScore"],
                                 exam=exam),
                 person=StuPerson())
             # subject_score.create_time = 0
             mark.append(subject_score)
         total_score = json_data.get("totalScore")
         if has_total_score and total_score:
             subject_score = SubjectScore(
                 score=total_score["userScore"],
                 subject=Subject(
                     id="",
                     name=total_score["subjectName"],
                     code="99",
                     standard_score=total_score["standardScore"],
                     exam=exam,
                 ),
                 person=StuPerson(),
                 class_extraRank=ExtraRank(rank=exam.class_rank),
                 grade_extraRank=ExtraRank(rank=exam.grade_rank))
             # subject_score.create_time = 0
             mark.append(subject_score)
     except (JSONDecodeError, KeyError) as e:
         raise PageInformationError(
             f"__get_self_mark中网页内容发生改变, 错误为{e}, 内容为\n{r.text}")
     return mark
Ejemplo n.º 4
0
 def __get_self_mark(self, exam: Exam, has_total_score: bool) -> Mark:
     mark = Mark(exam=exam, person=self)
     r = self._session.get(Url.GET_MARK_URL,
                           params={"examId": exam.id},
                           headers=self.__get_auth_header())
     json_data = r.json()
     if json_data["errorCode"] != 0:
         raise Exception(json_data["errorInfo"])
     json_data = json_data["result"]
     # exam.name = json_data["total_score"]["examName"]
     # exam.id = json_data["total_score"]["examId"]
     for subject in json_data["paperList"]:
         subject_score = SubjectScore(
             score=subject["userScore"],
             subject=Subject(id=subject["paperId"],
                             name=subject["subjectName"],
                             code=subject["subjectCode"],
                             standard_score=subject["standardScore"],
                             exam=exam),
             person=StuPerson())
         # subject_score.create_time = 0
         mark.append(subject_score)
     total_score = json_data.get("totalScore")
     if has_total_score and total_score:
         subject_score = SubjectScore(
             score=total_score["userScore"],
             subject=Subject(
                 id="",
                 name=total_score["subjectName"],
                 code="99",
                 standard_score=total_score["standardScore"],
                 exam=exam,
             ),
             person=StuPerson(),
             class_rank=ExtraRank(rank=exam.classRank),
             grade_rank=ExtraRank(rank=exam.gradeRank))
         # subject_score.create_time = 0
         mark.append(subject_score)
     return mark
Ejemplo n.º 5
0
 def __get_subjects(self, exam: Exam) -> ExtendedList[Subject]:
     subjects = ExtendedList()
     r = self._session.get(Url.GET_SUBJECT_URL,
                           params={"examId": exam.id},
                           headers=self.__get_auth_header())
     json_data = r.json()
     if json_data["errorCode"] != 0:
         raise Exception(json_data["errorInfo"])
     for subject in json_data["result"]["paperList"]:
         subjects.append(
             Subject(id=subject["paperId"],
                     name=subject["subjectName"],
                     code=subject["subjectCode"],
                     standard_score=subject["standardScore"],
                     exam=exam))
     return subjects
Ejemplo n.º 6
0
    def get_subject(self,
                    subject_data: Union[Subject, str],
                    exam_data: Union[Exam, str] = None) -> Subject:
        """获取指定考试的学科

        Args:
            subject_data (Union[Subject, str]): 学科id 或 学科名称, 为Subject实例时直接返回
            exam_data (Union[Exam, str]): 考试id 或 考试名称 或 Exam实例, 默认值为最新考试

        Returns:
            Subject
        """
        if isinstance(subject_data, Subject):
            return subject_data
        exam = self.get_exam(exam_data)
        if exam is None:
            return Subject()
        return self.__get_subject(exam, subject_data)
Ejemplo n.º 7
0
 def __get_class_score(self, classId: str,
                       subjectId: str) -> List[SubjectScore]:
     r = self._session.get(Url.GET_REPORT_URL,
                           params={
                               "type": "export_single_paper_zip",
                               "classId": classId,
                               "studentNum": "",
                               "topicSetId": subjectId,
                               "topicNumber": "0",
                               "startScore": "0",
                               "endScore": "10000",
                           })
     data = r.json()
     subjectScores = ExtendedList()
     for pair in data["result"]:
         subjectScores.append(
             SubjectScore(score=pair["userScore"],
                          person=Person(name=pair["userName"]),
                          subject=Subject(id=subjectId)))
     return subjectScores
Ejemplo n.º 8
0
 def __get_subjects(self, exam: Exam) -> ExtendedList[Subject]:
     subjects = ExtendedList()
     r = self._session.get(Url.GET_SUBJECT_URL,
                           params={"examId": exam.id},
                           headers=self.__get_auth_header())
     if not r.ok:
         raise PageConnectionError(
             f"__get_subjects中出错, 状态码为{r.status_code}")
     try:
         json_data = r.json()
         for subject in json_data["result"]["paperList"]:
             subjects.append(
                 Subject(id=subject["paperId"],
                         name=subject["subjectName"],
                         code=subject["subjectCode"],
                         standard_score=subject["standardScore"],
                         exam=exam))
     except (JSONDecodeError, KeyError) as e:
         raise PageInformationError(
             f"__get_subjects中网页内容发生改变, 错误为{e}, 内容为\n{r.text}")
     return subjects