Top Journal SDK
Асинхронный Python SDK для работы с API журнала Top Academy (v0.2.0).
top_journal_sdk упрощает взаимодействие с системой журнала: пользователи, расписание,
оценки, посещаемость, домашние задания, дашборд, библиотека, маркет, портфолио,
профиль, оплата (чтение), сигналы, контакты и контент — через типизированные
Pydantic-модели и доменные исключения вместо голого HTTP.
Требования
- Python 3.13+
- Зависимости ставятся автоматически:
beautifulsoup4,httpx,pydantic,rapid-api-client
Установка
pip install top-journal-sdk
# или
uv add top-journal-sdk
Быстрый старт
import asyncio
from datetime import date
from top_journal_sdk import TopJournalSDK
async def main() -> None:
async with TopJournalSDK(timeout=30.0) as sdk:
await sdk.login("username", "password") # кеширует group_id/student_id
user = await sdk.user.get_personal_info()
print(user.full_name, user.group_name)
schedule = await sdk.schedule.get_schedule_by_date(date.today())
print(len(schedule.lesson_list))
asyncio.run(main())
После login() SDK кеширует контекст сессии (current_group_id, student_id):
методы вроде sdk.homework.get_homeworks() подставляют group_id сами,
явно передавать нужно только для чужой группы.
Токены обновляются автоматически: при 401 SDK один раз вызывает
POST /auth/refresh и повторяет запрос.
import asyncio
from top_journal_sdk import TopJournalSDK
from top_journal_sdk.exceptions import JournalException
async def main() -> None:
async with TopJournalSDK(timeout=30.0) as sdk:
await sdk.login("username", "password")
try:
homeworks = await sdk.homework.get_homeworks()
print("total:", homeworks.total)
performance = await sdk.dashboard.get_academic_performance()
print("average:", performance.total_all_time)
except JournalException as e:
print("API error:", e)
asyncio.run(main())
Полный пример на 16 шагов (все контроллеры) — в файле
example.py.
Контроллеры
| Свойство | Контроллер | Что умеет |
|---|---|---|
sdk.auth |
Auth | login, refresh токенов, сброс пароля |
sdk.user |
UserInfo | личная информация студента |
sdk.attendance |
Attendance | посещаемость |
sdk.grades |
Grades | средние оценки, оценки за посещаемость |
sdk.homework |
Homework | счетчики, список, теги, история групп |
sdk.schedule |
Schedule | расписание на день/месяц/диапазон, события месяца |
sdk.feedback |
Feedback | отзывы, соцотзывы, оценка академдня, просмотры материалов |
sdk.lesson_evaluation |
LessonEvaluation | уроки к оценке, теги, отправка оценки |
sdk.leaderboard |
Leaderboard | рейтинги группы и потока |
sdk.dashboard |
Dashboard | графики, успеваемость, активность, баллы рейтинга |
sdk.exams |
Exams | экзамены, четвертные оценки |
sdk.library |
Library | материалы, счетчики, интервью |
sdk.market |
Market | товары маркета |
sdk.portfolio |
Portfolio | работы, предметы и преподаватели для дизайна |
sdk.content |
Content | новости, сторис, языки, переводы, города |
sdk.profile |
Profile | настройки, достижения, документы, предметы, смена группы |
sdk.payment |
Payment | данные/история/график оплат (только чтение) |
sdk.signal |
Signal | сигналы и проблемы |
sdk.contacts |
Contacts | контакты филиала |
Ошибки
Все транспортные ошибки преобразуются в доменные исключения
(top_journal_sdk.exceptions): OutdatedJWTError (401), InvalidJWTError (403),
DataNotFoundError (404), RequestTimeoutError (таймаут/408),
InvalidAppKeyError (410), InvalidAuthDataError (422),
InternalServerError (5xx). Ловите JournalException как базовый класс.
Разработка
uv sync # базовые + dev-зависимости
uv run pytest -m "not live" # офлайн-тесты
uv run pytest -m live # live-тесты (нужны TOP_JOURNAL_USERNAME/PASSWORD)
uv run --with pyright pyright top_journal_sdk tests example.py # strict, 0 ошибок
uv run ruff check top_journal_sdk tests example.py # линтер, 0 ошибок
uv run ruff format --check top_journal_sdk tests example.py # формат
uv run ty check top_journal_sdk tests example.py # типы strict, 0 ошибок
uv build
Хуки pre-commit (ruff-check --fix, ruff-format, ty) ставятся через
uv run pre-commit install и гоняют то же самое при каждом коммите.
Live-тесты ходят в настоящий API тестовым студентом и скипаются без кредов. Мутирующие вызовы (отправка оценок/комментариев, сброс пароля, смена группы) вживую не гоняются — только shape-тесты тел запросов.
Лицензия
MIT License
Статус проекта
Активная разработка.
Metadata
Release files for top_journal_sdk 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| top_journal_sdk-0.3.0.tar.gz | 41.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| top_journal_sdk-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 108.1 kB
Release files / top_journal_sdk-0.3.0.tar.gz
| Download URL | top_journal_sdk-0.3.0.tar.gz |
|---|---|
| Size | 41.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ebb6d00758571b350d697b3eeba2e1a08f1777c826b1d695335b5cbf46e74dc7
|
|
BLAKE2b-256 checksum How to use checksums |
c0e720853a0f7e54cedb429aa6c2065268db892542882dd52a345e05ef118c74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / top_journal_sdk-0.3.0-py3-none-any.whl
| Download URL | top_journal_sdk-0.3.0-py3-none-any.whl |
|---|---|
| Size | 66.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f1de84201e0c2d02c22f3c1b99fed8ca2559efdca0db35dac31547f23bcb11f1
|
|
BLAKE2b-256 checksum How to use checksums |
b933a43b34321b1f0fbec7bd33b05d4d23242fabd38bd9fa39cb27fa629be1ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|