Skip to content
artem-sitdPublic

About

Сервис синхронизации файлов. Python, requests, api yandex disk

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

📁 Локально-облачная синхронизация файлов

Утилита синхронизации между локальной директорией и облачным хранилищем Яндекс.Диск. Поддерживает автоматическое обновление, удаление и загрузку файлов на основе сравнения имен и хэшей.


🚀 Возможности

  • 🔄 Двусторонняя синхронизация: загрузка новых и обновлённых файлов, удаление отсутствующих
  • 🕒 Периодическое выполнение по таймеру
  • 📁 Работа с локальной и удалённой папкой
  • 🔐 Настройка через .env
  • ⚙️ Возможность расширения под другие облачные хранилища
  • 📓 В планах: логирование и десктоп-оболочка

🧩 Структура проекта

project/
│
├── .env.template        # Шаблон конфигурации окружения
├── config.py            # Загрузка переменных из .env
├── hashwork.py          # Работа с хэшами и JSON
├── main.py              # Точка входа
├── messages.py          # Сообщения для CLI
├── settings.py          # Логика первичной настройки
├── URLS.py              # URL и headers для API Яндекс.Диска
├── yandex.py            # Работа с API Яндекс.Диска

⚙️ Переменные окружения

Создайте файл .env на основе .env.template:

Переменная Описание
OAUTH_TOKEN OAuth-токен для доступа к API Яндекс.Диска
CLIENT_ID Client ID вашего приложения (oauth.yandex.ru)
SELF_FOLDER Абсолютный путь к отслеживаемой локальной папке
CLOUD_FOLDER Путь к соответствующей папке в облаке
PERIOD Период синхронизации в секундах (например, 300)
PATH_LOG Абсолютный путь до папки, где будет храниться лог-файл

💡 Использование

📌 Первый запуск

  1. Запустите main.py
  2. Выберите первичную настройку (опция 1)
  3. Следуйте инструкциям: введите токен, Client ID, пути к папкам и период обновлений
  4. Все данные сохранятся в .env
  5. После этого синхронизация будет выполняться автоматически каждые PERIOD секунд

🔁 Повторный запуск

Если файл .env уже настроен — просто выберите опцию 2 (сразу начать синхронизацию).


🔍 Как работает синхронизация

  1. Получение списков файлов из локальной и облачной папки
  2. Сравнение по именам:
    • Добавление недостающих файлов в облако
    • Удаление из облака файлов, которых нет локально
  3. Сравнение по хэшам:
    • Обновление файлов в облаке, если хэши отличаются
  4. Загрузка/удаление файлов через API Яндекс.Диска
  5. Сохранение актуальных хэшей для следующей итерации

🏗 Архитектура и расширяемость

Для интеграции с другими облаками предусмотрена абстракция:

Класс облачного хранилища должен реализовывать методы:

class CloudStorageInterface:
    def __init__(self, token: str, remote_folder: str): ...
    def load(self, path: str): ...
    def reload(self, path: str): ...
    def delete(self, filename: str): ...
    def get_info(self) -> dict: ...

Реализация для Яндекс.Диска находится в yandex.py.


🗺 Roadmap

  • Поддержка синхронизации с Яндекс.Диском
  • Добавить логирование (файл + консоль)
  • Обработка исключений и уведомления
  • GUI-десктоп-приложение (PyQt / Tkinter)
  • Поддержка других облачных сервисов (Google Drive, Dropbox и др.)

📄 Лицензия

Проект распространяется под лицензией MIT. См. LICENSE.


🤝 Контакты

Если у вас есть предложения, вопросы или вы хотите внести вклад — добро пожаловать в Issues и Pull Requests!

About

Сервис синхронизации файлов. Python, requests, api yandex disk

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages