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)
     self.__listener.onUploadComplete(link, size)
     LOGGER.info("Deleting downloaded file/folder..")
     return link
示例#2
0
 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