Skip to main content

osu-schedule-client

Python SDK для работы с расписанием Оренбургского государственного университета. Клиент обращается к legacy API и возвращает нормализованные Pydantic-модели.

Статус: alpha

Почему проект появился

Оригинальный API расписания возвращает сложные для понимания данные и требует дополнительной обработки кодировки ответа. Этот клиент предоставляет устойчивый слой доступа, нормализацию и типизированные модели, чтобы разработчики могли работать с расписанием как с обычным Python API.

Ключевые возможности

  • Асинхронный клиент поверх httpx.
  • Нормализация и стабилизация полей расписания.
  • Четкая модельная схема на Pydantic v2.
  • Удобный импорт моделей и SDK-ориентированный API.

Установка

Через pip:

pip install osu-schedule-client

Через uv:

uv add osu-schedule-client

Примеры работы с API

import asyncio

from osu_schedule_client import OsuScheduleClient


async def main() -> None:
    async with OsuScheduleClient() as client:
        # Получаем факультеты
        faculties = await client.reference.get_faculties()

        print("Факультеты (первые 5):")
        for faculty in faculties[:5]:
            print(f"  [{faculty.id}] {faculty.name}")

        # Берём первый факультет
        faculty = faculties[0]

        print(f"\nВыбран факультет: {faculty.full_name}")

        # Получаем потоки (годы набора)
        potoks = await client.reference.get_potoks(faculty.id)

        print("\nПотоки:")
        for potok in potoks:
            print(f"  [{potok.id}] {potok.name} (год набора: {potok.enrollment_year})")

        # Берём первый поток
        potok = potoks[0]

        # Получаем группы
        groups = await client.reference.get_groups(
            faculty_id=faculty.id,
            potok_id=potok.id,
        )

        print("\nГруппы (первые 5):")
        for group in groups[:5]:
            print(
                f"  [{group.id}] "
                f"{group.name} | "
                f"{group.education_level} | "
                f"{group.education_form}"
            )

        # Берём первую группу
        group = groups[0]

        print(f"\nПолучаем расписание группы: {group.name}")

        lessons = await client.schedule.get_by_group(group.id)

        print(f"\nНайдено занятий: {len(lessons)}\n")

        for lesson in lessons[:5]:
            print(
                f"{lesson.date} "
                f"{lesson.time_range} | "
                f"{lesson.subject} | "
                f"{lesson.teacher_name} | "
                f"ауд. {lesson.auditorium_name}"
            )


if __name__ == "__main__":
    asyncio.run(main())

Архитектура

transport -> api -> mapping -> models

  • transport: сетевой слой и декодирование legacy JSON.
  • api: низкоуровневые методы доступа к конечным точкам.
  • mapping: нормализация и стабилизация нестабильных полей.
  • models: Pydantic-модели домена расписания.

Ошибки и устойчивость

Запросы выполняются с ретраями. Ошибки httpx (сетевые и HTTP) пробрасываются наружу, чтобы вы могли использовать свои стратегии обработки.

Особенности

  • Нормализация времени и дат в datetime.
  • Разделение моделей расписания по источнику (группа, преподаватель, аудитория).
  • Явные типы для поля недели, семестра и источника расписания.

Разработка

uv sync
uvx ruff check .

Лицензия

MIT. См. файл LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

osu_schedule_client-0.1.0.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

osu_schedule_client-0.1.0-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

Details for the file osu_schedule_client-0.1.0.tar.gz.

File metadata

  • Download URL: osu_schedule_client-0.1.0.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for osu_schedule_client-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8d5c7aac47258c9ff5fb0c53d4e70190de982d65bedc5ff69da6b128bad78481
MD5 156a58aae934601cc4a24a97f03b28b3
BLAKE2b-256 eee1b60216e5d02a32a0aa88eed4fa448643fef2ac27ea7f10cfe191ca5b8206

See more details on using hashes here.

File details

Details for the file osu_schedule_client-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: osu_schedule_client-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for osu_schedule_client-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 381b2e0ad2e7433051ff1bbbb6a7d27063c0a60dd0d07eb7f38284add776e980
MD5 da043788fc153bb1015949ceaa4b889e
BLAKE2b-256 02555541f72c3f1d5d82f1f78e05f97e697a80c4cd46bb96d09923aefaea1134

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page