Сделайте резервную копию - прежде что-нибудь случится!

На днях один из моих коллег спросил, настраивал ли я регулярное резервное копирование важных файлов и папок. Раньше я использовал Dropbox и Google Диск, но мне бы очень хотелось более детально контролировать то, что я хочу сохранить. Кроме того, меня интересовало использование Python для резервного копирования важных файлов.

Представляем PyDrive

PyDrive - это библиотека-оболочка для google-api-python-client, которая упрощает многие стандартные задачи Google Drive API. Хотя Google Drive API предоставляет вам необходимые функции для подключения к конечным точкам API дисков и выполнения необходимых вызовов, я считаю, что PyDrive значительно упрощает жизнь, особенно для разработчиков Python, которые предпочитают писать меньше шаблонного кода, особенно потому что:

  • Упрощает OAuth2.0 до нескольких строк с гибкими настройками.
  • Включает API накопителя в классы каждого ресурса, чтобы сделать вашу программу более объектно-ориентированной.
  • Он помогает выполнять общие операции, отличные от вызовов API, такие как выборка контента и управление разбивкой на страницы.

Хватит разговоров, приступим!

Аутентификация

Прежде чем делать что-либо еще, перейдите в консоль разработчика Google, и вы должны увидеть раздел под названием OAuth 2.0 client IDs. Щелкните запись в этом списке, и вы увидите несколько полей, включая Client secret.

Если вы еще не создали учетные данные, нажмите кнопку Create credentials и следуйте инструкциям по созданию новых учетных данных, а затем выполните действия, описанные выше, чтобы найти Client secret. Скачайте файл - он должен храниться локально как client_secrets.json. Пожалуйста, не фиксируйте этот файл!

Теперь, когда у вас есть файл секретов клиента, доступный на диске, выполнить аутентификацию в API накопителя просто - вы знаете, почему:

g_login = GoogleAuth()
g_login.LocalWebserverAuth()
self.drive = GoogleDrive(g_login)

Это автоматически откроет окно в вашем веб-браузере, в котором вас попросят войти в систему, используя учетную запись, с которой были созданы ваши учетные данные. Щелчок по правой учетной записи завершит процесс аутентификации, и теперь ваш код готов для использования API Google Диска.

Далее мы рассмотрим создание файлов и папок.

Создание папки и файлов

Папки - это файлы, которые содержат только метаданные и могут использоваться для организации файлов на Google Диске. Конкретно:

  • папка - это файл MIME-типа application/vnd.google-apps.folder без расширения.
  • вы можете использовать псевдоним root для ссылки на корневую папку везде, где указан идентификатор файла
drive_folder = self.drive.CreateFile({
    'title': dir_name,
    "mimeType": "application/vnd.google-apps.folder"
})
drive_folder.Upload()

Файл будет создан примерно таким же образом:

f = self.drive.CreateFile({
    'title': "{}".format(filename),
    "parents": [{"id": gdrive_folder_id}]
})
f.SetContentFile(filename.open())
f.Upload()

Помните: папка или файл на диске Google не будут созданы до тех пор, пока не будет вызван метод Upload() для файлового объекта.

Типы MIME

Тип мультимедиа (также известный как Многоцелевые расширения почты Интернета или MIME-тип) - это стандарт, который указывает характер и формат документа, файла или набора байтов. Он определен и стандартизирован в RFC 6838 IETF.

При создании файла на Google Диске необходимо указать правильный MIME-тип файла - в противном случае содержимое не будет загружено правильно.

Существует отличная библиотека Python, называемая mime-types, которая позволяет вам угадывать mime-тип файла.

import mimetypes
mime_type = mimetypes.guess_type(filename)

Собираем все вместе:

Полный код можно найти здесь:
https://github.com/sauravbiswasiupr/backup-wizard