Передача файлов с использованием облачного хранилища yandex.ru

Я создал среду передачи приложения «envtransfer» между компьютерами с помощью дискового приложения Яндекс. Хотелось бы услышать мнение о коде. Большое спасибо.

Пользователь авторизуется, получает токен, экспортирует среду в zip-файл на Яндекс Диск. Затем в другой среде импорта ПК, извлекает среду в папку и работает.

core.py

  # - * - coding: utf-8 - * - из zipfile import ZipFilefrom exception import function_exceptionfrom json import loadimport webbrowserimport settingsimport  urllib2import helpimport sysimport osarguments = {'auth', 'upload', 'download'} # читать токен OAuth из filedef save_token (token): settings.TOKEN = token с open (settings.token_file, 'wb') как token_file: token_file.  write (token) # отправить запрос на serverdef post (code): data = "" .join (['grant_type = authorization_code & code =', code, '& client_id =', settings.ID, '& client_secret =', settings.ID_PASS])  data_len = len (data) request = urllib2.Request ('http://oauth.yandex.ru/token', headers = {"Host": "oauth.yandex.ru", "Content-type": "application/ x-www-form-urlencoded "," Content-Length ": data_len}) return urllib2.urlopen (request, data = data) #get request on serverdef get (url): request = urllib2.Request (url, headers = {  "Авторизация": "" .join (['OAuth', settings.TOKEN])}) return urllib2.urlopen (request) .read () # Читать OAuth  tokendef find_file (): if os.path.isfile (settings.token_file): with open (settings.token_file, 'rb') as token_file: settings.TOKEN = token_file.read (32) # сначала получить токен OAuth @ function_exceptiondef auth (  ): request = urllib2.Request ("" .join (['https://oauth.yandex.ru/authorize?response_type=code&client_id=', settings.ID, '& state = EnvTransfer'])) url = urllib2.urlopen  (запрос) .geturl () webbrowser.open (url) code = raw_input ('Введите свой код:') save_token (post (code) .read (). split ('"') [7]) # загрузить файл среды @  function_exceptiondef upload_file (name): string = get ("". join (['https://cloud-api.yandex.net/v1/disk/resources/upload?path=', name, '& overwrite = true & fields = href'  ])) с open (name, 'rb') как read_file: data = read_file.read () opener = urllib2.build_opener (urllib2.HTTPHandler) url = load (string) ['href']. encode ('ascii')  request = urllib2.Request (url, data = data) request.add_header ('Content-Type', 'application/binary') request.get_method = lambda: 'PUT' opener.open (request) #download envir  onment file @ function_exceptiondef файл_загрузки (имя): string = get ("" .join (['https://cloud-api.yandex.net/v1/disk/resources/download?path=', name, '& fields = href  '])) url = load (string) [' href '] response = urllib2.urlopen (url) data = response.read () с open (name,' wb ') как save_file: save_file. write (data) #archive environment folder @ function_exceptiondef get_archive (name, path): with ZipFile (name, 'w') as archive: для root, dirs, файлов в os.walk (path): для file_name в файлах: если нет  имя_файла в имени: archive.write (os.path.join (root, file_name)) # извлечь файлы среды в папку @ function_exceptiondef extract_archive (name): с открытым (имя, 'rb') как file_handle: zipfile = ZipFile (file_handle)  для имени в zipfile.namelist (): out_path = os.getcwd () zipfile.extract (name, out_path) zipfile.close () # запустить applicationdef start (): if len (sys.argv)> 1 и sys.argv [  1] в аргументах: find_file () command = sys.argv [1] если команда в 'auth': auth () elif команда в 'upload': abspath = os.getcwd (). Split ('/') [- 1  ] .lower () file_name = "" .join ([abspath, '.zip']) get_archive (file_name, '.') upload_file (file_name) elif command in 'download': file_name = raw_input ('Введите имя вашей среды (  пример: myenv.zip): ') .lower () файл_загрузки (имя_файла) extract_archive (имя_файла) else: help.show () ода> 

Оцените статью
Botgadget.ru
Добавить комментарий