Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
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
Ejemplo n.º 8
0
 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