utils#

Вспомогательные функции для работы проекта.

Используется как набор общих вспомогательных функций, которые работают внутри проекта, но редко выходят за его пределы.

Содержит:

  • Функции для работы с json файлами.

  • Проверка ключей словаря по шаблону.

  • Склонение слов относительно числа.

  • Получение строкового таймера обратного отсчёта.

  • Упаковка нескольких записей об обновлениях в одну.

Работа с файлами#

Являются обёртками для более удобной работы с json файлами. json файлы используются для сохранения и кеширование данных.

sp.utils.save_file(path: Path, data: dict | list)#

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

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

Параметры:
  • path (Path) – Путь к файлу для записи данных.

  • data (Union[dict, list]) – Данные для записи в файл.

Результат:

Ваши данные для записи.

Тип результата:

dict

sp.utils.load_file(path: Path, data: dict | list | None = None) dict | list#

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

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

Параметры:
  • path (Path) – Путь к файлу для чтения.

  • data (Optional[dict], optional) – Данные для записи, по умолчанию не указаны.

Результат:

Распакованные данные из файла.

Тип результата:

Union[dict, list]

Строковые утилиты#

sp.utils.plural_form(n: int, v: tuple[str]) str#

Возвращает просклонённое значение в зивисимости от числа.

Возвращает просклонённое слово: «для одного», «для двух», «для пяти» значений.

plural_form(difference.days, ("день", "дня", "дней"))
# difference.days = 1 -> день
# difference.days = 32 -> дня
# difference.days = 65 -> дней
Параметры:
  • n (int) – Некоторое число, используемое в склонении.

  • v (tuple[str]) – Варианты слова (для 1, для 2, для 5).

Результат:

Просклонённое слово в зависимости от числа.

Тип результата:

str

sp.utils.get_str_timedelta(s: int, hours: bool | None = True) str#

Возвращает строковый обратный отсчёт из количества секунд.

Если hours = False -> ММ:SS. Если hours = True -> HH:MM:SS.

Параметры:
  • s (int) – Количество секунд для обратного отсчёта.

  • hours (Optional[bool], optional) – Использовать ли часы, по умолчанию да.

Результат:

Строковый обратный отсчёт.

Тип результата:

str

Работа с обновлениями#

sp.utils.compact_updates(updates: list[dict[str, Any]]) dict[str, Any]#

Упаковывает несколько записей об обновлениях в одну.

Используется чтобы совместить несколько записей об изменениях. Например чтобы покзаать все изменения в расписании за неделю. Или использваоть при получении обнолвений.

Правила совмешения:

  • Если урока ранее не было -> добавляем урок.

  • Если Урок A, сменился на B, а после снова на A -> удаляем урок.

  • Если A -> B, B -> C, то A => C.

  • Иначе добавить запись.

Параметры:

updates (list[dict[str, Any]]) – Список записей об обновлениях расписания.

Результат:

Новая упакованная запись об обновлённом расписании.

Тип результата:

dict[str, Any]