Example #1
0
 def transport_file(cls, user, file_url, target_path):
     if not cls.check_settings(user.target_settings):
         return  # Should never reach
     try:
         service = cls.get_drive_client(user.target_settings)
         path_id = cls.find_path(service, user.target_settings["parent_id"], target_path.split("/")[1:-1])
         media_body = apiclient.http.MediaIoBaseUpload(
             BytesIO(ivle.get_file(file_url)), mimetype=get_mime_type(target_path), resumable=True
         )
         body = {"title": target_path[target_path.rfind("/") + 1 :], "parents": [{"id": path_id}]}
         file = service.files().insert(body=body, media_body=media_body).execute()
         return bool(file["id"])
     except client.AccessTokenRefreshError as e:
         raise SyncException(
             "You are not logged in to Google Drive or your token is expired. Please re-login on the webpage.",
             retry=True,
             send_email=True,
             disable_user=True,
             logout_user=True,
         )
     except apiclient.errors.ResumableUploadError as e:
         raise SyncException(
             "ResumableUploadError, will retry.", retry=True, send_email=False, disable_user=False, logout_user=False
         )
     except apiclient.errors.HttpError as e:
         raise SyncException(str(e), retry=True, send_email=False, disable_user=False, logout_user=False)
     except Exception as e:
         raise SyncException(
             "Something might go wrong with your Google Drive settings. If you are not able to find the error, please inform the developer.",
             retry=True,
             send_email=True,
             disable_user=True,
             logout_user=False,
         )
Example #2
0
 def transport_file(cls, user, file_url, target_path):
     if not cls.check_settings(user.target_settings):
         return  # Should never reach
     try:
         service = cls.get_drive_client(user.target_settings)
         path_id = cls.find_path(service, user.target_settings['parent_id'],
                                 target_path.split('/')[1:-1])
         media_body = apiclient.http.MediaIoBaseUpload(
             BytesIO(ivle.get_file(file_url)),
             mimetype=get_mime_type(target_path),
             resumable=True)
         body = {
             'title': target_path[target_path.rfind('/') + 1:],
             'parents': [{
                 'id': path_id
             }]
         }
         file = service.files().insert(body=body,
                                       media_body=media_body).execute()
         return bool(file['id'])
     except client.AccessTokenRefreshError as e:
         raise SyncException(
             "You are not logged in to Google Drive or your token is expired. Please re-login on the webpage.",
             retry=True,
             send_email=True,
             disable_user=True,
             logout_user=True)
     except apiclient.errors.ResumableUploadError as e:
         raise SyncException("ResumableUploadError, will retry.",
                             retry=True,
                             send_email=False,
                             disable_user=False,
                             logout_user=False)
     except apiclient.errors.HttpError as e:
         raise SyncException(str(e),
                             retry=True,
                             send_email=False,
                             disable_user=False,
                             logout_user=False)
     except Exception as e:
         raise SyncException(
             "Something might go wrong with your Google Drive settings. If you are not able to find the error, please inform the developer.",
             retry=True,
             send_email=True,
             disable_user=True,
             logout_user=False)
Example #3
0
 def transport_file(cls, user, file_url, target_path):
     if not cls.check_settings(user.target_settings):
         return  # Should never reach
     try:
         content = ''
         credentials = client.OAuth2Credentials.from_json(
             user.target_settings['credentials'])
         http_auth = credentials.authorize(httplib2.Http())
         target_path = target_path.replace(
             '\t', '_')  # TODO: Temp workaround for OD bug on \t
         target_path = target_path.replace(
             ':', '_')  # TODO: Temp workaround for OD bug on :
         cls.create_path(http_auth, target_path.split('/')[1:-1])
         (resp_headers, content) = http_auth.request(
             "https://api.onedrive.com/v1.0/drive/special/approot:%s:/content"
             % urllib.parse.quote(target_path),
             method="PUT",
             body=ivle.get_file(file_url),
             headers={'content-type': get_mime_type(target_path)})
         if resp_headers['status'] in [
                 str(i) for i in [429, 500, 501, 503]
         ]:
             raise SyncException("HTTP Error: %s" % str(resp_headers),
                                 retry=True,
                                 send_email=False,
                                 disable_user=False,
                                 logout_user=False)
         elif resp_headers['status'] == '400':
             raise SyncException("400: %s" % str(resp_headers),
                                 retry=True,
                                 send_email=False,
                                 disable_user=False,
                                 logout_user=False)
         elif resp_headers['status'] == '507':
             raise SyncException(
                 "OneDrive says you are over quota. We have temporarily disabled syncing for you. Please manually re-enable after cleaning up some files.",
                 retry=True,
                 send_email=True,
                 disable_user=True,
                 logout_user=False)
         file_id = json.loads(content.decode('ascii'))['id']
         (resp_headers, content) = http_auth.request(
             "https://api.onedrive.com/v1.0/drive/items/%s" % file_id,
             method="PATCH",
             body=json.dumps(
                 {'name': target_path[target_path.rfind('/') + 1:]}),
             headers={'content-type': 'application/json'})
         if resp_headers['status'] in [
                 str(i) for i in [429, 500, 501, 503]
         ]:
             raise SyncException("HTTP Error: %s" % str(resp_headers),
                                 retry=True,
                                 send_email=False,
                                 disable_user=False,
                                 logout_user=False)
         elif resp_headers['status'] == '400':
             raise SyncException("400: %s" % str(resp_headers),
                                 retry=True,
                                 send_email=False,
                                 disable_user=False,
                                 logout_user=False)
         return bool(json.loads(content.decode('ascii'))['id'])
     except client.AccessTokenRefreshError as e:
         raise SyncException(
             "You are not logged in to OneDrive or your token is expired. Please re-login on the webpage.",
             retry=True,
             send_email=True,
             disable_user=True,
             logout_user=True)
     except ConnectionResetError as e:
         raise SyncException("Connection reset. Ignoring.",
                             retry=True,
                             send_email=False,
                             disable_user=False,
                             logout_user=False)
     except (KeyError, ValueError) as e:
         raise SyncException("Cannot find. Ignoring. Info: %s" % content,
                             retry=True,
                             send_email=False,
                             disable_user=False,
                             logout_user=False)
     except SyncException as e:
         raise
     except Exception as e:
         raise SyncException(
             "Something might go wrong with your OneDrive settings. If you are not able to find the error, please inform the developer.",
             retry=True,
             send_email=True,
             disable_user=True,
             logout_user=False)
Example #4
0
 def transport_file(cls, user, file_url, target_path):
     if not cls.check_settings(user.target_settings):
         return  # Should never reach
     try:
         content = ''
         credentials = client.OAuth2Credentials.from_json(user.target_settings['credentials'])
         http_auth = credentials.authorize(httplib2.Http())
         target_path = target_path.replace('\t', '_')  # TODO: Temp workaround for OD bug on \t
         cls.create_path(http_auth, target_path.split('/')[1:-1])
         (resp_headers, content) = http_auth.request("https://api.onedrive.com/v1.0/drive/special/approot:%s:/content" % urllib.parse.quote(target_path),
                                                     method="PUT", body=ivle.get_file(file_url), headers={'content-type': get_mime_type(target_path)})
         if resp_headers['status'] in [str(i) for i in [429, 500, 501, 503]]:
             raise SyncException("HTTP Error: %s" % str(resp_headers), retry=True, send_email=False, disable_user=False, logout_user=False)
         elif resp_headers['status'] == '400':
             raise SyncException("400: %s" % str(resp_headers), retry=True, send_email=False, disable_user=False, logout_user=False)
         elif resp_headers['status'] == '507':
             raise SyncException(
                 "OneDrive says you are over quota. We have temporarily disabled syncing for you. Please manually re-enable after cleaning up some files.",
                 retry=True, send_email=True, disable_user=True, logout_user=False)
         file_id = json.loads(content.decode('ascii'))['id']
         (resp_headers, content) = http_auth.request("https://api.onedrive.com/v1.0/drive/items/%s" % file_id, method="PATCH",
                                                     body=json.dumps({'name': target_path[target_path.rfind('/') + 1:]}),
                                                     headers={'content-type': 'application/json'})
         if resp_headers['status'] in [str(i) for i in [429, 500, 501, 503]]:
             raise SyncException("HTTP Error: %s" % str(resp_headers), retry=True, send_email=False, disable_user=False, logout_user=False)
         elif resp_headers['status'] == '400':
             raise SyncException("400: %s" % str(resp_headers), retry=True, send_email=False, disable_user=False, logout_user=False)
         return bool(json.loads(content.decode('ascii'))['id'])
     except client.AccessTokenRefreshError as e:
         raise SyncException("You are not logged in to OneDrive or your token is expired. Please re-login on the webpage.", retry=True, send_email=True,
                             disable_user=True, logout_user=True)
     except ConnectionResetError as e:
         raise SyncException("Connection reset. Ignoring.", retry=True, send_email=False, disable_user=False, logout_user=False)
     except (KeyError, ValueError) as e:
         raise SyncException("Cannot find. Ignoring. Info: %s" % content, retry=True, send_email=False, disable_user=False, logout_user=False)
     except SyncException as e:
         raise
     except Exception as e:
         raise SyncException("Something might go wrong with your OneDrive settings. If you are not able to find the error, please inform the developer.",
                             retry=True, send_email=True, disable_user=True, logout_user=False)