Skip to content

23. (П11) Додавання налаштувань і обробки помилок

Передумови

Мова в коді

Усі рядкові літерали, написи в меню й на кнопках, тексти повідомлень про помилки, рядки лога, ключі налаштувань, SQL-запити, імена файлів, модулів та змінних — лише латиницею. Своє ім'я, прізвище та групу пишіть у транслітерації: Ivan Petrenko, KI-31. Кирилиця допускається тільки в коментарях.

Завдання

Довести менеджер нотаток із практичної 9 до стану, коли він не втрачає дані й не ламається мовчки: додати шар налаштувань поверх QSettings, лог у файл, глобальний перехоплювач винятків.

Обов'язкові вимоги до результату:

  • рядок QSettings( існує в проєкті рівно в одному місці — у app/settings.py; жоден ключ на кшталт "ui/font_size" не зустрічається двічі;
  • жоден except не порожній: кожен або перекладає виняток у власний тип, або пише в лог, або повідомляє користувача;
  • застосунок запускається й лишається робочим при: відсутній базі, зіпсованій базі, каталозі без права запису, порожньому та зіпсованому файлі налаштувань;

Персоналізація

Константи, як і раніше, живуть тільки в app/config.py. До наявних додаються нові:

STUDENT_NAME = "Ivan Petrenko"                # ваше ім'я та прізвище транслітерацією
STUDENT_GROUP = "KI-31"                       # ваша група
DB_FILE = "workspace_ivan_petrenko.db"        # файл бази з практичних 3-5
APP_TITLE = "Notes Manager"                   # назва застосунку
ORG_NAME = "KTBP"                             # для QSettings і QStandardPaths
LOG_FILE = "notes_manager.log"                # ім'я файла лога
LOG_MAX_BYTES = 1_000_000                     # розмір, після якого файл ротується
LOG_BACKUP_COUNT = 3                          # скільки старих файлів лога тримати
RECENT_EXPORTS_MAX = 5                        # довжина списку останніх експортів

Заголовки вікон із практичних 8–9 лишаються без змін.

Шар налаштувань

AppSettings(QObject) — єдиний клас, який знає про QSettings. Ключі, типи, типові значення й межі:

Ключ Тип Типове Межі / допустимі На що впливає
ui/font_size int 12 8 .. 32 шрифт редактора нотатки
ui/preview_length int 40 10 .. 200 колонка Preview у таблиці
editor/autosave bool True — таймер автозбереження
editor/autosave_interval_s int 30 5 .. 600 період таймера
editor/confirm_delete bool True — запит перед Delete note
logging/level str "INFO" INFO / DEBUG рівень кореневого логера
window/geometry QByteArray порожній — saveGeometry() головного вікна
window/state QByteArray порожній — saveState(): док зі списком і панелі

Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub