23. (П11) Додавання налаштувань і обробки помилок¶
Передумови¶
- Прочитана Лекція 22 — Обробка помилок. Налаштування застосунку
- Успішно зібраний застосунок «Notes» із розділу «Збірка» лекції та пройдені всі дванадцять перевірок із розділу «Що перевірити руками»
- Виконана Практична 9 — список нотаток у QTableView: пакет
app/беремо звідти й далі тільки доповнюємо
Мова в коді
Усі рядкові літерали, написи в меню й на кнопках, тексти повідомлень про помилки, рядки лога, ключі налаштувань, 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