From c374307fce53c929f55097424b4c4ada6dd75ccf Mon Sep 17 00:00:00 2001 From: Stewie Date: Fri, 15 Apr 2022 10:18:48 -0400 Subject: [PATCH] Bundle all Google APIs function into GoogleAPI.py --- GoogleAPI.py | 167 +++++++++++++++++++++++++++ ToolsTales_Executable.py | 101 ++-------------- __pycache__/GoogleAPI.cpython-38.pyc | Bin 0 -> 4701 bytes 3 files changed, 176 insertions(+), 92 deletions(-) create mode 100644 GoogleAPI.py create mode 100644 __pycache__/GoogleAPI.cpython-38.pyc diff --git a/GoogleAPI.py b/GoogleAPI.py new file mode 100644 index 0000000..9722747 --- /dev/null +++ b/GoogleAPI.py @@ -0,0 +1,167 @@ +import httplib2 +import os +from oauth2client import client, tools,file +import base64 +from email import encoders +from email.mime.multipart import MIMEMultipart +from email.mime.text import MIMEText +from email.mime.base import MIMEBase +from apiclient import errors, discovery +from pydrive.auth import GoogleAuth +from pydrive.drive import GoogleDrive +from oauth2client.service_account import ServiceAccountCredentials + +def get_credentials(): # Gets valid user credentials from disk. + SCOPES = 'https://www.googleapis.com/auth/gmail.send' + CLIENT_SECRET_FILE = os.path.join( os.getcwd(), "..",'client_secrets.json') + APPLICATION_NAME = 'Gmail API Python Send Email' + + credential_path = os.path.join( os.getcwd(), "..", + 'gmail-python-email-send.json') + + store = file.Storage(credential_path) + credentials = store.get() + + if not credentials or credentials.invalid: + flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES) + flow.user_agent = APPLICATION_NAME + #if flags: + credentials = tools.run_flow(flow, store) + + return credentials + + +def send_message(sender, to, commiter_name, subject, xdelta_link): + + + message_text = """ +Hi {}, + +here is your xdelta patch : +{} +""".format(commiter_name, xdelta_link) + + credentials = get_credentials() + #print (credentials) + http = credentials.authorize(httplib2.Http()) + service = discovery.build('gmail', 'v1', http=http) + message1 = create_message(sender, to,subject, message_text) + send_message_internal(service, "me", message1) + +def send_message_internal(service, user_id, message): + """Send an email message. + + Args: + service: Authorized Gmail API service instance. + user_id: User's email address. The special value "me" + can be used to indicate the authenticated user. + message: Message to be sent. + + Returns: + Sent Message. + """ + try: + message = (service.users().messages().send(userId=user_id, body=message) + .execute()) + # print('Message Id: %s' % message['id']) + return message + except errors.HttpError as error: + print('An error occurred: %s' % str(error)[0:200]) + +def create_message( + sender, to, subject, message_text): + """Create a message for an email. + + Args: + sender: Email address of the sender. + to: Email address of the receiver. + subject: The subject of the email message. + message_text: The text of the email message. + file: The path to the file to be attached. + + Returns: + An object containing a base64url encoded email object. + """ + message = MIMEMultipart() + message['to'] = to + message['from'] = sender + message['subject'] = subject + + msg = MIMEText(message_text, 'html') + message.attach(msg) + + #filename = os.path.basename(file) + #msg.add_header('Content-Disposition', 'attachment', filename=filename) + #message.attach(msg) + + return {'raw': base64.urlsafe_b64encode(str(message).encode('UTF-8')).decode('ascii')} + # return {'raw': base64.urlsafe_b64encode(message.as_string())} + + + + +###Google Drive stuff +def get_file(drive, file_name, folder_name): + + folder_id = get_folder(drive, folder_name) + + file_name = os.path.basename(file_name) + file_list = drive.ListFile({'q': "'{}' in parents and trashed=false".format(folder_id)}).GetList() + + file = [file for file in file_list if file['title'] == file_name] + if len(file) > 0: + + return file[0] + else: + print("File not found in gdrive folder") + +def get_folder(drive, folder_name): + + parent_id = '1xbDBJLg4sVxbvcNFCRC-lA_YXghyKdx8' + list_folder = drive.ListFile({"q": "'{}' in parents and trashed=false".format(parent_id)}).GetList() + folder_id='' + + + folder_found = [ele['id'] for ele in list_folder if ele['title'] == folder_name] + if len(folder_found)>0: + folder_id = folder_found[0] + + else: + + + file_metadata = { + 'title': folder_name, + 'mimeType': 'application/vnd.google-apps.folder' + } + file_metadata['parents'] = [{"kind": "drive#parentReference", "id": parent_id}] + folder = drive.CreateFile(file_metadata) + + folder.Upload() + folder_id = folder['id'] + + return folder_id + +def upload_xdelta(xdelta_name, folder_name): + + gauth = GoogleAuth() + scope = ["https://www.googleapis.com/auth/drive"] + gauth.credentials = ServiceAccountCredentials.from_json_keyfile_name("../gsheet.json", scope) + drive = GoogleDrive(gauth) + + #xdelta_name = r"G:\TalesHacking\PythonLib_Playground\Data\Tales-Of-Rebirth\Disc\New\Tales-Of-Rebirth_patch.xdelta" + + folder_id = get_folder(drive, folder_name) + + gfile = drive.CreateFile({'parents': [{'id': folder_id}]}) + + + file_name = os.path.basename(xdelta_name) + gfile['title'] = file_name + + gfile.SetContentFile(xdelta_name) + gfile.Upload() # Upload the file. + + + file = get_file(drive, xdelta_name, folder_name) + + return file['webContentLink'] \ No newline at end of file diff --git a/ToolsTales_Executable.py b/ToolsTales_Executable.py index 68505a2..429656a 100644 --- a/ToolsTales_Executable.py +++ b/ToolsTales_Executable.py @@ -9,35 +9,10 @@ import requests import subprocess import ApacheAutomate import RepoFunctions -from pydrive.auth import GoogleAuth -from pydrive.drive import GoogleDrive -import ezgmail +import GoogleAPI -SCRIPT_VERSION = "0.3" -GoogleAuth.DEFAULT_SETTINGS['client_config_file'] = "../client_secrets.json" - -def send_mail(drive, email, xdelta_link): - - print("Sending Email with xdelta patch") - os.chdir( os.path.join( os.getcwd(), "..")) - ezgmail.init() - - os.chdir( os.path.join( os.getcwd(),"PythonLib")) - - - ezgmail.EMAIL_ADDRESS = 'fortiersteven1@gmail.com' - body = """ - Hello, - - this is Life Bottle productions, here is your - xdelta patch : - - {} - - """.format(xdelta_link) - ezgmail.send( 'fortiersteven1@gmail.com', 'xdelta patch', body) - +SCRIPT_VERSION = "0.0.3" def generate_xdelta_patch(repo_name, xdelta_name="Tales-Of-Rebirth_Patch_New.xdelta"): print("Create xdelta patch") @@ -45,67 +20,7 @@ def generate_xdelta_patch(repo_name, xdelta_name="Tales-Of-Rebirth_Patch_New.xde new_path = "../Data/{}/Disc/New/{}.iso".format(repo_name, repo_name) subprocess.run(["xdelta", "-s", original_path, new_path, xdelta_name]) -def get_file(drive, file_name, folder_name): - - folder_id = get_folder(drive, folder_name) - - file_name = os.path.basename(file_name) - file_list = drive.ListFile({'q': "'{}' in parents and trashed=false".format(folder_id)}).GetList() - - file = [file for file in file_list if file['title'] == file_name] - if len(file) > 0: - - return file[0] - else: - print("File not found in gdrive folder") - -def get_folder(drive, folder_name): - parent_id = '1xbDBJLg4sVxbvcNFCRC-lA_YXghyKdx8' - list_folder = drive.ListFile({"q": "'{}' in parents and trashed=false".format(parent_id)}).GetList() - folder_id='' - - - folder_found = [ele['id'] for ele in list_folder if ele['title'] == folder_name] - if len(folder_found)>0: - folder_id = folder_found[0] - - else: - - - file_metadata = { - 'title': folder_name, - 'mimeType': 'application/vnd.google-apps.folder' - } - file_metadata['parents'] = [{"kind": "drive#parentReference", "id": parent_id}] - folder = drive.CreateFile(file_metadata) - - folder.Upload() - folder_id = folder['id'] - - return folder_id - -def upload_xdelta(drive, xdelta_name, folder_name): - - - - #xdelta_name = r"G:\TalesHacking\PythonLib_Playground\Data\Tales-Of-Rebirth\Disc\New\Tales-Of-Rebirth_patch.xdelta" - - folder_id = get_folder(drive, folder_name) - - gfile = drive.CreateFile({'parents': [{'id': folder_id}]}) - - - file_name = os.path.basename(xdelta_name) - gfile['title'] = file_name - - gfile.SetContentFile(xdelta_name) - gfile.Upload() # Upload the file. - - - file = get_file(drive, xdelta_name, folder_name) - - return file['webContentLink'] def get_directory_path(path): return os.path.dirname(os.path.abspath(path)) @@ -292,15 +207,17 @@ if __name__ == "__main__": ApacheAutomate.apache_job(['SLPS_254.50'], "Tales-Of-Rebirth") - gauth = GoogleAuth() - drive = GoogleDrive(gauth) + + + xdelta_name = "../Data/Tales-Of-Rebirth/Disc/New/Tales-Of-Rebirth_patch.xdelta" - #generate_xdelta_patch("Tales-Of-Rebirth", xdelta_name) + generate_xdelta_patch("Tales-Of-Rebirth", xdelta_name) - file_link = upload_xdelta(drive, xdelta_name, "Stewie") #Need to add user for the folder + file_link = GoogleAPI.upload_xdelta(xdelta_name, "Stewie") #Need to add user for the folder - send_mail(drive, 'fortiersteven1@gmail.com', file_link) + GoogleAPI.send_message('fortiersteven1@gmail.com', 'fortiersteven1@gmail.com', "Stewie", game_name + " Patch", file_link) + if args.action == "unpack": diff --git a/__pycache__/GoogleAPI.cpython-38.pyc b/__pycache__/GoogleAPI.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57082b470d8b34e6ce0b13a68cac9bf0097583a0 GIT binary patch literal 4701 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 literal 0 HcmV?d00001