def make_backup_google_drive(self, ts, name, dump_stream, info_file, info_file_content, cloud_params): # Upload two backup objects to Google Drive GoogleDriveService = self.env[ "ir.config_parameter"].get_google_drive_service() folder_id = self.env["ir.config_parameter"].get_param( "odoo_backup_sh_google_disk.google_disk_folder_id") db_metadata = { "name": compute_backup_filename(name, ts, info_file_content.get("encrypted")), "parents": [folder_id], } info_metadata = { "name": compute_backup_info_filename(name, ts), "parents": [folder_id], } db_mimetype = "application/zip" info_mimetype = "text/plain" dump_stream.seek(0) info_file.seek(0) for obj, mimetype, metadata in [ [dump_stream, db_mimetype, db_metadata], [info_file, info_mimetype, info_metadata], ]: media = MediaIoBaseUpload(obj, mimetype, resumable=True) GoogleDriveService.files().create(body=metadata, media_body=media, fields="id").execute()
def make_backup_dropbox(self, ts, name, dump_stream, info_file, info_file_content, cloud_params): # Upload two backup objects to Dropbox DropboxService = self.env['ir.config_parameter'].get_dropbox_service() folder_path = self.env['ir.config_parameter'].get_param("odoo_backup_sh_dropbox.dropbox_folder_path") info_file_size = info_file.tell() dump_stream.seek(0) info_file.seek(0) for obj, obj_name, file_size in \ [[dump_stream, compute_backup_filename(name, ts, info_file_content.get('encrypted')), info_file_content.get("backup_size") * 1024 * 1024], [info_file, compute_backup_info_filename(name, ts), info_file_size]]: # The full path to upload the file to, including the file name full_path = "{folder_path}/{file_name}".format( folder_path=folder_path, file_name=obj_name, ) # from here: https://www.dropboxforum.com/t5/API-Support-Feedback/python-upload-big-file-example/m-p/166627/highlight/true#M6013 if file_size <= CHUNK_SIZE: DropboxService.files_upload(obj.read(), full_path) else: upload_session_start_result = DropboxService.files_upload_session_start(obj.read(CHUNK_SIZE)) cursor = UploadSessionCursor(session_id=upload_session_start_result.session_id, offset=obj.tell()) commit = CommitInfo(path=full_path) while obj.tell() < file_size: if ((file_size - obj.tell()) <= CHUNK_SIZE): DropboxService.files_upload_session_finish(obj.read(CHUNK_SIZE), cursor, commit) else: DropboxService.files_upload_session_append(obj.read(CHUNK_SIZE), cursor.session_id, cursor.offset) cursor.offset = obj.tell()