Metadata-Version: 2.4
Name: miet-schedule-api
Version: 0.1.1
Summary: Небольшая библиотека для получения расписания групп МИЭТ
Home-page: https://github.com/TheDIMONDK/MietScheduleAPI
Author: Deka
Author-email: Deka <dka@disroot.org>
License: MIT
Project-URL: Homepage, https://github.com/TheDIMONDK/MietScheduleAPI
Project-URL: Repository, https://github.com/TheDIMONDK/MietScheduleAPI
Project-URL: Issues, https://github.com/TheDIMONDK/MietScheduleAPI/issues
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.25.0
Dynamic: author
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-python

# MIET Schedule API

Небольшая библиотека для получения и структурирования расписания указанных групп МИЭТ.


## Возможности
- Получение расписания для любой группы из списка МИЭТ.
- Проверка существования группы перед запросом, используя официальное API.
- Получение расписания на одну дату или диапазон дат, формат: `ДД.ММ.ГГГГ` или `ДД.ММ.ГГГГ-ДД.ММ.ГГГГ`.
- Получение расписания на текущую, следующую или предыдущую неделю.
- Кэширование данных в едином файле `last_data.json`, чтобы не мучать API МИЭТ.
- Принудительное обновление кэша через параметр `force=True`.
- Пропуск дней, состоящих только из военной подготовки, управляется флагом `SKIP_MILITARY`.
- Автоматическое определение года начала семестра: если текущий месяц >= сентября, используется текущий год, иначе - предыдущий.
- Возможность явно установить дату начала семестра через функцию `set_semester_start()`.
- Возврат результата с мета-информацией: `isFromCache` источник данных, `data` само расписание и `meta` - метаинформация о неделях для каждой даты.
- Возврат в виде словаря или отформатированной строки JSON, это управляется параметрами `return_json` и `pretty`.

> Важно: библиотека пока не учитывает каникулы и праздничные дни.


## Структура вывода
```jsonc
{
  "isFromCache": true, // Вывод был закэширован, или было прямое обращение к API?
  "data": {
    "01.09.2026": { // День
      "1": {
        "time": ["09:00", "10:20"],
        "title": "Название",
        "type": "Лекция",
        "full_name": "Фамилия Имя Отчество",
        "room": "1201"
      },
      ...
    },
    "02.09.2026": {...},
    ...
  },
  "meta": {
    "weeks": {
      "01.09.2026": {
        "number": 1, // Номер недели по счёту в этом дне
        "type": 0, // Тип недели, 1-й/2-й числитель/знаменатель в виде простого ID
        "typeString": "Числитель - 1" // Тоже самое, но уже приведённое к читаемому виду
      },
      "02.09.2026": {...},
      ...
    },
    "total_weeks": 20 // Общее количество недель
  }
}
```


## Установка
### Локальная установка / для разработки
```sh
pip install -e .
```

### Установка из PyPI
```sh
pip install miet_schedule_api
```

### Установка из GitHub
```sh
pip install git+https://github.com/TheDIMONDK/MietScheduleAPI.git
```

## Использование
```py
from miet_schedule_api import *

# Получить список всех существующих групп
groups = get_groups_list()
print(groups)

# Расписание на один день, смотрим на само расписание без метаданных
schedule = get_schedule(group="ИТД-11", date_str="01.09.2026")
print(schedule["data"])

# Диапазон дат, вдобавок возвращаем и красивую JSON-строку
schedule_json = get_schedule_range(
    group="ИТД-11",
    start_date_str="01.09.2026",
    end_date_str="05.09.2026",
    return_json=True,
    pretty=True
)
print(schedule_json)

# Расписание+метаданные текущей недели с понедельника по воскресенье
current_week = get_current_week(group="ИТД-11", return_json=True, pretty=True)
print(current_week)

# Расписание+метаданные следующей недели относительно сегодня
next_week = get_next_week(group="ИТД-11", return_json=True, pretty=True)
print(next_week)

# Расписание+метаданные предыдущей недели относительно заданной даты
prev_week = get_previous_week(group="ИТД-11", date_str="15.09.2026", return_json=True, pretty=True)
print(prev_week)
```


## Параметры функций
- `group` (str, обязательный) - код группы.
- `return_json` (bool, default=False) - если True, возвращает строку JSON вместо словаря.
- `pretty` (bool, default=False) - если True и `return_json=True`, JSON выводится с отступами.
- `force` (bool, default=False) - принудительно запрашивает данные с сервера, игнорируя кэш.
- `date_str` (str) - дата в формате `ДД.ММ.ГГГГ`, для функций недели опциональна.
- `start_date_str`, `end_date_str` (str) - начальная и конечная даты диапазона.


## Разработка
### Сборка пакета
```sh
pip install build
python -m build
```

## Конфигурация
Базовые настройки по умолчанию находятся в `miet_schedule_api/consts.py`:

- `API_URL` - URL для запроса расписания.
- `GROUPS_URL` - URL для получения списка групп.
- `TOTAL_WEEKS` - общее количество недель в семестре, по умолчанию 20.
- `SKIP_MILITARY` - пропускать ли дни с военной подготовкой.
- `SEMESTER_START` - автоматически вычисляется, но можно переопределить, если нужно.

## Лицензия
MIT
