Skip to main content

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)

Source distribution for top_journal_sdk 0.3.0
File Size Uploaded
top_journal_sdk-0.3.0.tar.gz 41.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for top_journal_sdk 0.3.0
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page