Improve first-run detection and settings initialization
- Enhance `settings_load()` function to handle missing settings and parameters - Improve first-run detection in `check_first_run()` method - Add more robust settings file validation - Remove unused imports - Simplify and clean up code comments
This commit is contained in:
@@ -1,23 +1,19 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# ------------------------------------------------------------
|
||||||
# Это программа для копирования конфигураций на коммутаторы
|
# Это программа для копирования конфигураций на коммутаторы
|
||||||
# Программа использует библиотеку PySerial для работы с последовательными портами
|
# ------------------------------------------------------------
|
||||||
# Программа использует библиотеку PyQt5 для создания графического интерфейса
|
|
||||||
# Программа использует библиотеку PyQt5.QtWidgets для создания графического интерфейса
|
|
||||||
# Программа использует библиотеку PyQt5.QtCore для создания графического интерфейса
|
|
||||||
# Программа использует библиотеку PyQt5.QtGui для создания графического интерфейса
|
|
||||||
|
|
||||||
|
|
||||||
|
# import argparse Использовался для получения аргументов из командной строки (не используется)
|
||||||
# import argparse Использовался для получения аргументов из командной строки
|
# import platform Использовался для получения списка сетевых адаптеров (не используется)
|
||||||
# import platform Использовался для получения списка сетевых адаптеров
|
# import subprocess Использовался для получения списка сетевых адаптеров (не используется)
|
||||||
# import subprocess Использовался для получения списка сетевых адаптеров
|
# import socket не используется
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import socket
|
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
@@ -25,8 +21,6 @@ from getpass import getpass
|
|||||||
from logging.handlers import RotatingFileHandler
|
from logging.handlers import RotatingFileHandler
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from tkinter import (
|
from tkinter import (
|
||||||
Tk,
|
|
||||||
Frame,
|
|
||||||
StringVar,
|
StringVar,
|
||||||
END,
|
END,
|
||||||
BOTH,
|
BOTH,
|
||||||
@@ -82,21 +76,42 @@ def settings_load():
|
|||||||
"block_size": 15, # Размер блока команд
|
"block_size": 15, # Размер блока команд
|
||||||
"prompt": ">", # Используется для определения приглашения
|
"prompt": ">", # Используется для определения приглашения
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Создаем папку Settings, если её нет
|
||||||
|
os.makedirs("Settings", exist_ok=True)
|
||||||
|
|
||||||
if not os.path.exists(SETTINGS_FILE):
|
if not os.path.exists(SETTINGS_FILE):
|
||||||
try:
|
try:
|
||||||
|
# При первом запуске создаем новый файл настроек
|
||||||
with open(SETTINGS_FILE, "w", encoding="utf-8") as f:
|
with open(SETTINGS_FILE, "w", encoding="utf-8") as f:
|
||||||
json.dump(default_settings, f, indent=4, ensure_ascii=False)
|
json.dump(default_settings, f, indent=4, ensure_ascii=False)
|
||||||
logging.info("Файл настроек создан с настройками по умолчанию.")
|
logging.info("Файл настроек создан с настройками по умолчанию.")
|
||||||
|
return default_settings
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Ошибка при создании файла настроек: {e}", exc_info=True)
|
logging.error(f"Ошибка при создании файла настроек: {e}", exc_info=True)
|
||||||
return default_settings
|
return default_settings
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# Пытаемся загрузить существующие настройки
|
||||||
with open(SETTINGS_FILE, "r", encoding="utf-8") as f:
|
with open(SETTINGS_FILE, "r", encoding="utf-8") as f:
|
||||||
settings = json.load(f)
|
settings = json.load(f)
|
||||||
|
|
||||||
|
# Проверяем наличие всех необходимых параметров
|
||||||
|
settings_changed = False
|
||||||
for key, value in default_settings.items():
|
for key, value in default_settings.items():
|
||||||
if key not in settings:
|
if key not in settings:
|
||||||
settings[key] = value
|
settings[key] = value
|
||||||
|
settings_changed = True
|
||||||
|
|
||||||
|
# Если были добавлены новые параметры, сохраняем обновленные настройки
|
||||||
|
if settings_changed:
|
||||||
|
try:
|
||||||
|
with open(SETTINGS_FILE, "w", encoding="utf-8") as f:
|
||||||
|
json.dump(settings, f, indent=4, ensure_ascii=False)
|
||||||
|
logging.info("Файл настроек обновлен с новыми параметрами.")
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Ошибка при обновлении файла настроек: {e}", exc_info=True)
|
||||||
|
|
||||||
return settings
|
return settings
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Ошибка загрузки файла настроек: {e}", exc_info=True)
|
logging.error(f"Ошибка загрузки файла настроек: {e}", exc_info=True)
|
||||||
@@ -535,8 +550,25 @@ class SerialAppGUI(tk.Tk):
|
|||||||
self.check_first_run()
|
self.check_first_run()
|
||||||
|
|
||||||
def check_first_run(self):
|
def check_first_run(self):
|
||||||
# Проверяем, существует ли папка Settings и файл settings.json
|
"""Проверка первого запуска программы"""
|
||||||
if not os.path.exists("Settings") or not os.path.exists(SETTINGS_FILE):
|
show_settings = False
|
||||||
|
|
||||||
|
# Проверяем существование файла настроек
|
||||||
|
if not os.path.exists(SETTINGS_FILE):
|
||||||
|
show_settings = True
|
||||||
|
else:
|
||||||
|
# Проверяем содержимое файла настроек
|
||||||
|
try:
|
||||||
|
with open(SETTINGS_FILE, "r", encoding="utf-8") as f:
|
||||||
|
settings = json.load(f)
|
||||||
|
# Если порт не настроен, считаем это первым запуском
|
||||||
|
if settings.get("port") is None:
|
||||||
|
show_settings = True
|
||||||
|
except Exception:
|
||||||
|
# Если файл поврежден или не читается, тоже показываем настройки
|
||||||
|
show_settings = True
|
||||||
|
|
||||||
|
if show_settings:
|
||||||
# Создаем папку Settings, если её нет
|
# Создаем папку Settings, если её нет
|
||||||
os.makedirs("Settings", exist_ok=True)
|
os.makedirs("Settings", exist_ok=True)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user