MarksClient¶
MarksClient - клиент для получения оценок ученика за указанный период времени.
Доступ¶
Доступ к MarksClient осуществляется через свойство marks объекта StudentClient:
from schoolmospy import StudentClient
client = StudentClient(token="ваш_токен", profile_id=12345)
marks_client = client.marks
Методы¶
get()¶
Получить оценки за указанный период времени.
Параметры¶
| Параметр | Тип | Описание |
|---|---|---|
from_date |
datetime |
Начальная дата периода (включительно) |
to_date |
datetime |
Конечная дата периода (включительно) |
Возвращает¶
Marks - модель Pydantic, содержащая список оценок.
Исключения¶
APIError- если запрос не удался или вернул неожиданный ответAuthError- если предоставленный токен недействителен или истек
Пример¶
from datetime import datetime
from schoolmospy import StudentClient
async def main():
client = StudentClient(token="ваш_токен", profile_id=12345)
# Получение оценок за семестр
marks = await client.marks.get(
from_date=datetime(2024, 9, 1),
to_date=datetime(2024, 12, 31)
)
# Обработка оценок
for mark in marks.payload:
print(f"Предмет: {mark.subject_name}")
print(f"Оценка: {mark.value}")
print(f"Дата: {mark.created_at}")
print(f"Комментарий: {mark.comment}")
print("---")
Структура данных Marks¶
Объект Marks содержит следующие поля:
Поля Mark¶
Каждый объект Mark в списке payload содержит:
| Поле | Тип | Описание |
|---|---|---|
id |
int |
Уникальный идентификатор оценки |
value |
str |
Значение оценки (например, "5", "4", "зачет") |
subject_name |
str |
Название предмета |
subject_id |
int |
ID предмета |
created_at |
str |
Дата создания оценки |
comment |
str \| None |
Комментарий учителя |
is_point |
bool |
Является ли оценка баллом |
point_date |
str \| None |
Дата контрольной точки |
Примеры использования¶
Получение оценок за текущий месяц¶
from datetime import datetime
async def get_current_month_marks():
now = datetime.now()
start_of_month = datetime(now.year, now.month, 1)
marks = await client.marks.get(
from_date=start_of_month,
to_date=now
)
print(f"Оценок за текущий месяц: {len(marks.payload)}")
Фильтрация оценок по предмету¶
async def get_math_marks():
marks = await client.marks.get(
from_date=datetime(2024, 9, 1),
to_date=datetime(2024, 12, 31)
)
# Фильтрация оценок по математике
math_marks = [
mark for mark in marks.payload
if "математик" in mark.subject_name.lower()
]
for mark in math_marks:
print(f"Математика: {mark.value} - {mark.created_at}")
Подсчет средней оценки¶
async def calculate_average():
marks = await client.marks.get(
from_date=datetime(2024, 9, 1),
to_date=datetime(2024, 12, 31)
)
# Преобразование оценок в числа
numeric_marks = []
for mark in marks.payload:
try:
numeric_marks.append(int(mark.value))
except ValueError:
continue # Пропускаем не числовые оценки
if numeric_marks:
average = sum(numeric_marks) / len(numeric_marks)
print(f"Средняя оценка: {average:.2f}")
Получение последних оценок¶
async def get_recent_marks(limit: int = 10):
marks = await client.marks.get(
from_date=datetime(2024, 9, 1),
to_date=datetime.now()
)
# Сортировка по дате (новые сначала)
sorted_marks = sorted(
marks.payload,
key=lambda m: m.created_at,
reverse=True
)
# Получение последних N оценок
recent = sorted_marks[:limit]
for mark in recent:
print(f"{mark.created_at}: {mark.subject_name} - {mark.value}")
Обработка ошибок¶
from schoolmospy.utils.exceptions import AuthError, APIError
async def safe_get_marks():
try:
marks = await client.marks.get(
from_date=datetime(2024, 9, 1),
to_date=datetime(2024, 12, 31)
)
return marks
except AuthError:
print("Ошибка аутентификации. Проверьте токен.")
except APIError as e:
print(f"Ошибка API: {e}")
return None
См. также¶
- StudentClient - Основной клиент
- HomeworkClient - Получение домашних заданий
- EventClient - Получение расписания
- Модели - Подробное описание моделей данных