Перейти к содержанию

Google таблица

Поставщик гугл таблиц.

Загружает расписание из специальной гугл таблицы.

TODO: Хранилище расписания TODO: Хранилище обновлений

RAW_SC_PATH = Path('sp_data/sc.xlsx') module-attribute

SC_PATH = Path('sp_data/sc.json') module-attribute

SC_UPDATES_PATH = Path('sp_data/updates.json') module-attribute

INDEX_PATH = Path('sp_data/index.json') module-attribute

TIMETABLE_PATH = Path('sp_data/timetable.json') module-attribute

LoadData = dict[str, Any] | list[Any] module-attribute

LessonIndex = dict[str, list[dict[str, dict[str, list[int]]]]] module-attribute

ClassIndex = dict[str, list[dict[str, dict[str, list[int]]]]] module-attribute

SearchRes = list[list[list[str]]] module-attribute

RawSchedule(hash: str, data: str) dataclass

Сырое загруженное расписание из сети.

hash: str instance-attribute

data: str instance-attribute

ScheduleDict

Bases: TypedDict

Описывает что собой представляет словарь расписание.

hash: str instance-attribute

last_parse: int instance-attribute

lessons: dict[str, list[list[str]]] instance-attribute

GoogleProvider(url: str = _MAIN_URL, sc_path: Path | str = SC_PATH, updates_path: Path | str = SC_UPDATES_PATH, index_path: Path | str = INDEX_PATH, timetable_path: Path | str = TIMETABLE_PATH)

Bases: Provider

Поставщик гугл таблиц.

url = url instance-attribute

next_parse: int | None = None instance-attribute

update_timetable() -> None

Обновляет расписание звонков.

timetable() -> Timetable async

Расписание звонков.

update_schedule() -> None async

Обновляет расписание звонков.

schedule() -> Schedule async

Возвращает расписание уроков.

save_file(path: Path, data: _T) -> _T

Записывает данные в json файл.

Используется как обёртка для более удобной упаковки данных в json файлы. Автоматически создаёт файл, если он не найден.

.. deprecated:: 6.1 В скором времени проект откажется от использования json. Данные методы будут перемещены.

load_file(path: Path, data: _T | None = None) -> _T

Читает данные из json файла.

Используется как обёртка для более удобного чтения данных из json файла. Если переданы данные и файла не существует -> создаёт новый файл и записывает переданные данные. Если файла не существует и данные переданы или возникло исключение при чтении файла -> возвращаем пустой словарь.

.. deprecated:: 6.1 В скором времени проект откажется от использования json. Данные методы будут перемещены.

get_sc_updates(a: dict[str, list], b: dict[str, list]) -> list[dict[str, list]]

Делает полное сравнение двух расписаний.

Делает полное построчное сравнение старого и нового расписания. Возвращает все найденные изменения в формате.

    [
        // дни ...
        {
            // классы ...
            "9в" [
                // уроки ...
                null, // Ничего не изменилось
                ["старый:12", "новый:132"] // Предмет изменился
            ]
        }
    ]

get_index(sp_lessons: dict[str, list[list[str]]], lessons_mode: bool | None = True) -> dict[str, list[dict]]

Преобразует словарь расписания уроков в индекс.

В данном случае индексом называется словарь, где ключом вместо класса является название урока или кабинета.

Они так же часто используются, как и само расписание. Например при подсчёте количества элементов или при поиске в расписании определённого урока или кабинета.

Описание индексов:

  • Расписание: [Класс][День][Уроки]
  • l_mode True: [Урок][День][Кабинет][Класс][Номер урока]
  • l_mode False: [Кабинет][День][Урок][Класс][Номер урока]

parse_lessons() -> dict[str, list[list[str]]]

Разбирает XLSX файл в словарь расписания.

Расписание в XLSX файле представлено подобным образом.

+--+-------+---------+ | | класс | | <- Шапка с классами в расписание +--+-------+---------+ | 1| урок | кабинет | <- Первый урок понедельника. | n| ... | ... | +--+-------+---------+ | 1| урок | кабинет | <- Первый урок вторника. | n| ... | ... | +--+-------+---------+

Задача этой функции преобразовать таблицу выше в словарь расписания уроков формата:

{
    // Классы
    "класс" {
        // Дни
        [
            // Уроки в днях
            "урок:кабинет"
        ]
    }
}