/
fakerv
/
PythonProjects
Обзор
Документация
Войти
/
fakerv
/
PythonProjects
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
file_sync_service/main.py
100 строк
4 KB
vlad
fixed config_path and readme
12 июл 2026, 13:07
12 июл 2026, 13:07
607612c
Код
Авторство
О чём код?
import configparser import os import time import sys from logger_setup import setup_logger from cloud_storage import CloudStorage from sync_engine import initial_sync, sync_once def read_config(config_path: str) -> dict | None: config = configparser.ConfigParser() try: config.read(config_path, encoding = "utf-8") except (configparser.Error, OSError) as e: print(f"Ошибка чтения config.ini: {e}") return None if "Settings" not in config.sections(): print("Ошибка: в config.ini отсутствует секция [Settings]") return None section = config["Settings"] required_keys = ["local_folder", "cloud_folder", "token", "sync_interval", "log_file"] for key in required_keys: if key not in section: print(f"Ошибка: в секции [Settings] отсутствует параметр {key}") return None local_folder = section["local_folder"] cloud_folder = section["cloud_folder"] token = section["token"] log_file = section["log_file"] try: sync_interval = int(section["sync_interval"]) if sync_interval <= 0: print("Ошибка: sync_interval должен быть положительным числом") return None except ValueError: print("Ошибка: sync_interval должен быть целым числом") return None return { "local_folder": local_folder, "cloud_folder": cloud_folder, "token": token, "sync_interval": sync_interval, "log_file": log_file } def main() -> int: config_params = read_config(os.path.join(os.path.dirname(__file__), "config.ini")) if config_params is None: return 1 local_folder = config_params["local_folder"] cloud_folder = config_params["cloud_folder"] token = config_params["token"] sync_interval = config_params["sync_interval"] log_file = config_params["log_file"] if not os.path.isdir(local_folder): print(f"Ошибка: локальная папка '{local_folder}' не существует или не является директорией") return 1 logger = setup_logger(log_file) logger.info(f"Программа запущена. Синхронизируемая папка: {local_folder}") try: cloud_storage = CloudStorage(token, cloud_folder) logger.info("Облачное хранилище успешно инициализировано") except Exception as e: logger.error(f"Не удалось инициализировать облачное хранилище: {e}") print(f"Ошибка: {e}") return 1 try: previous_state = initial_sync(local_folder, cloud_storage) logger.info("Первая синхронизация успешно завершена") except Exception as e: logger.error(f"Ошибка при первой синхронизации: {e}") print(f"Не удалось выполнить начальную синхронизацию: {e}. Программа завершена.") return 1 while True: try: time.sleep(sync_interval) logger.info("Запуск очередной синхронизации") previous_state = sync_once(local_folder, cloud_storage, previous_state) logger.info("Очередная синхронизация завершена") except KeyboardInterrupt: logger.info("Программа остановлена пользователем") break except Exception as e: logger.error(f"Ошибка в цикле синхронизации: {e}") # Не прерываем работу, продолжаем цикл logger.info("Программа завершена") return 0 if __name__ == "__main__": sys.exit(main())