def upload(self, file_name: str): if USE_SERVICE_ACCOUNTS: self.service_account_count = len(os.listdir("accounts")) self.__listener.onUploadStarted() file_dir = f"{DOWNLOAD_DIR}{self.__listener.message.message_id}" file_path = f"{file_dir}/{file_name}" size = get_readable_file_size(get_path_size(file_path)) LOGGER.info("Uploading File: " + file_path) self.start_time = time.time() self.updater = setInterval(self.update_interval, self._on_upload_progress) if os.path.isfile(file_path): try: mime_type = get_mime_type(file_path) link = self.upload_file(file_path, file_name, mime_type, parent_id) if link is None: raise Exception('Upload has been manually cancelled') LOGGER.info("Uploaded To G-Drive: " + file_path) except Exception as e: if isinstance(e, RetryError): LOGGER.info( f"Total Attempts: {e.last_attempt.attempt_number}") err = e.last_attempt.exception() else: err = e LOGGER.error(err) self.__listener.onUploadError(str(err)) return finally: self.updater.cancel() else: try: dir_id = self.create_directory( os.path.basename(os.path.abspath(file_name)), parent_id) result = self.upload_dir(file_path, dir_id) if result is None: raise Exception('Upload has been manually cancelled!') LOGGER.info("Uploaded To G-Drive: " + file_name) link = f"https://drive.google.com/folderview?id={dir_id}" except Exception as e: if isinstance(e, RetryError): LOGGER.info( f"Total Attempts: {e.last_attempt.attempt_number}") err = e.last_attempt.exception() else: err = e LOGGER.error(err) self.__listener.onUploadError(str(err)) return finally: self.updater.cancel() LOGGER.info(download_dict) files = self.total_files folders = self.total_folders typ = self.typee self.__listener.onUploadComplete(link, size, files, folders, typ) LOGGER.info("Deleting downloaded file/folder..") return link
def upload(self, file_name: str): if USE_SERVICE_ACCOUNTS: self.service_account_count = len(os.listdir("accounts")) self.__listener.onUploadStarted() file_dir = os.path.join( DOWNLOAD_DIR, str(self.__listener.message.message_id) ) file_path = os.path.join( file_dir, file_name ) LOGGER.info("Uploading File: " + file_path) self.start_time = time.time() self.updater = setInterval(self.update_interval, self._on_upload_progress) if os.path.isfile(file_path): try: mime_type = get_mime_type(file_path) dir_id = self.upload_file(file_path, file_name, mime_type, parent_id) if dir_id is None: raise Exception('Upload has been manually cancelled') LOGGER.info("Uploaded To G-Drive: " + file_path) except Exception as e: if isinstance(e, RetryError): LOGGER.info(f"Total Attempts: {e.last_attempt.attempt_number}") err = e.last_attempt.exception() else: err = e LOGGER.error(err) self.__listener.onUploadError(str(err)) return finally: self.updater.cancel() else: try: dir_id = self.create_directory(os.path.basename(os.path.abspath(file_name)), parent_id) result = self.upload_dir(file_path, dir_id) if result is None: raise Exception('Upload has been manually cancelled!') LOGGER.info("Uploaded To G-Drive: " + file_name) except Exception as e: if isinstance(e, RetryError): LOGGER.info(f"Total Attempts: {e.last_attempt.attempt_number}") err = e.last_attempt.exception() else: err = e LOGGER.error(err) self.__listener.onUploadError(str(err)) return finally: self.updater.cancel() LOGGER.info(download_dict) self.__listener.onUploadComplete(dir_id) LOGGER.info("Deleting downloaded file/folder..") return dir_id
def upload(self, file_name: str): self.is_downloading = False self.is_uploading = True file_dir = f"{DOWNLOAD_DIR}{self.__listener.message.message_id}" file_path = f"{file_dir}/{file_name}" size = get_readable_file_size(get_path_size(file_path)) LOGGER.info("Uploading File: " + file_path) self.updater = setInterval(self.update_interval, self._on_upload_progress) try: if ospath.isfile(file_path): mime_type = get_mime_type(file_path) link = self.__upload_file(file_path, file_name, mime_type, parent_id) if self.is_cancelled: return if link is None: raise Exception('Upload has been manually cancelled') LOGGER.info("Uploaded To G-Drive: " + file_path) else: mime_type = 'Folder' dir_id = self.__create_directory( ospath.basename(ospath.abspath(file_name)), parent_id) result = self.__upload_dir(file_path, dir_id) if result is None: raise Exception('Upload has been manually cancelled!') link = f"https://drive.google.com/folderview?id={dir_id}" if self.is_cancelled: return LOGGER.info("Uploaded To G-Drive: " + file_name) except Exception as e: if isinstance(e, RetryError): LOGGER.info(f"Total Attempts: {e.last_attempt.attempt_number}") err = e.last_attempt.exception() else: err = e LOGGER.error(err) self.__listener.onUploadError(str(err)) self.is_cancelled = True finally: self.updater.cancel() if self.is_cancelled: if mime_type == 'Folder': LOGGER.info("Deleting uploaded data from Drive...") link = f"https://drive.google.com/folderview?id={dir_id}" self.deletefile(link) return self.__listener.onUploadComplete(link, size, self.__total_files, self.__total_folders, mime_type, self.name)
def upload(self, file_name: str): _list = get_download_status_list() index = get_download_index( _list, get_download(self.__listener.message.message_id).gid) self.__listener.onUploadStarted(_list, index) file_dir = f"{DOWNLOAD_DIR}{self.__listener.message.message_id}" file_path = f"{file_dir}/{file_name}" LOGGER.info("Uploading File: " + file_name) self.start_time = time.time() threading.Thread(target=self._on_upload_progress).start() if os.path.isfile(file_path): try: mime_type = get_mime_type(file_path) link = self.upload_file(file_path, file_name, mime_type, parent_id) if link is None: raise Exception('Upload has been manually cancelled') LOGGER.info("Uploaded To G-Drive: " + file_path) except Exception as e: LOGGER.error(str(e)) e_str = str(e).replace('<', '') e_str = e_str.replace('>', '') self.__listener.onUploadError(e_str, _list, index) return finally: self.is_uploading = False else: try: dir_id = self.create_directory( os.path.basename(os.path.abspath(file_name)), parent_id) result = self.upload_dir(file_path, dir_id) if result is None: raise Exception('Upload has been manually cancelled!') LOGGER.info("Uploaded To G-Drive: " + file_name) link = f"https://drive.google.com/folderview?id={dir_id}" except Exception as e: LOGGER.error(str(e)) e_str = str(e).replace('<', '') e_str = e_str.replace('>', '') self.__listener.onUploadError(e_str, _list, index) return finally: self.is_uploading = False LOGGER.info(download_dict) self.__listener.onUploadComplete(link, _list, index) LOGGER.info("Deleting downloaded file/folder..") return link
def upload(self, file_name: str): self.__listener.onUploadStarted() file_dir = f"{DOWNLOAD_DIR}{self.__listener.message.message_id}" file_path = f"{file_dir}/{file_name}" LOGGER.info("Uploading File: " + file_path) self.start_time = time.time() if os.path.isfile(file_path): try: mime_type = get_mime_type(file_path) link = self.upload_file(file_path, file_name, mime_type, parent_id) if link is None: raise Exception('Upload has been manually cancelled') LOGGER.info("Uploaded To G-Drive: " + file_path) except Exception as e: if isinstance(e, RetryError): LOGGER.info( f"Total Attempts: {e.last_attempt.attempt_number}") err = e.last_attempt.exception() else: err = e LOGGER.error(err) self.__listener.onUploadError(str(err)) return else: try: dir_id = self.create_directory( os.path.basename(os.path.abspath(file_name)), parent_id) result = self.upload_dir(file_path, dir_id) if result is None: raise Exception('Upload has been manually cancelled!') LOGGER.info("Uploaded To G-Drive: " + file_name) link = f"https://drive.google.com/folderview?id={dir_id}" except Exception as e: if isinstance(e, RetryError): LOGGER.info( f"Total Attempts: {e.last_attempt.attempt_number}") err = e.last_attempt.exception() else: err = e LOGGER.error(err) self.__listener.onUploadError(str(err)) return LOGGER.info(download_dict) self.__listener.onUploadComplete(link) LOGGER.info("Deleting downloaded file/folder..") return link
def upload_file(self, file_path, file_name, parent_id): # File body description mime_type = get_mime_type(file_path) file_metadata = { 'name': file_name, 'description': 'mirror', 'mimeType': mime_type, } if parent_id is not None: file_metadata['parents'] = [parent_id] if os.path.getsize(file_path) == 0: media_body = MediaFileUpload(file_path, mimetype=mime_type, resumable=False) response = self.__service.files().create( body=file_metadata, media_body=media_body).execute() self.__set_permission(response['id']) drive_file = self.__service.files().get( fileId=response['id']).execute() download_url = self.__G_DRIVE_BASE_DOWNLOAD_URL.format( drive_file.get('id')) return download_url media_body = MediaFileUpload(file_path, mimetype=mime_type, resumable=True, chunksize=50 * 1024 * 1024) # Insert a file drive_file = self.__service.files().create(body=file_metadata, media_body=media_body) response = None while response is None: if self.is_cancelled: return None self.status, response = drive_file.next_chunk() self._file_uploaded_bytes = 0 # Insert new permissions self.__set_permission(response['id']) # Define file instance and get url for download drive_file = self.__service.files().get( fileId=response['id']).execute() download_url = self.__G_DRIVE_BASE_DOWNLOAD_URL.format( drive_file.get('id')) return download_url
def upload_dir(self, input_directory, parent_id): list_dirs = os.listdir(input_directory) if len(list_dirs) == 0: return parent_id new_id = None for item in list_dirs: current_file_name = os.path.join(input_directory, item) if self.is_cancelled: return None if os.path.isdir(current_file_name): current_dir_id = self.create_directory(item, parent_id) new_id = self.upload_dir(current_file_name, current_dir_id) else: mime_type = get_mime_type(current_file_name) file_name = current_file_name.split("/")[-1] # current_file_name will have the full path self.upload_file(current_file_name, file_name, mime_type, parent_id) new_id = parent_id return new_id
def __upload_dir(self, input_directory, parent_id): list_dirs = listdir(input_directory) if len(list_dirs) == 0: return parent_id new_id = None for item in list_dirs: current_file_name = ospath.join(input_directory, item) if ospath.isdir(current_file_name): current_dir_id = self.__create_directory(item, parent_id) new_id = self.__upload_dir(current_file_name, current_dir_id) self.__total_folders += 1 else: mime_type = get_mime_type(current_file_name) file_name = current_file_name.split("/")[-1] # current_file_name will have the full path self.__upload_file(current_file_name, file_name, mime_type, parent_id) self.__total_files += 1 new_id = parent_id if self.is_cancelled: break return new_id