Feb-21-2024, 07:56 PM
Hello,
I have two python scripts. First is quickstart.py ans second is dater.py. My goal is to run first script and then inside call second script. I tried with sub-process but without success. The main problem is that window from tkinter runs twice. What does it mean? I am setting Start date and End date in calendar, then clicking Apply and at the end clicking X for closing windows. Right after close I am getting another same window which I need to close to go further with script. How to handle that?
I have two python scripts. First is quickstart.py ans second is dater.py. My goal is to run first script and then inside call second script. I tried with sub-process but without success. The main problem is that window from tkinter runs twice. What does it mean? I am setting Start date and End date in calendar, then clicking Apply and at the end clicking X for closing windows. Right after close I am getting another same window which I need to close to go further with script. How to handle that?
import os
import base64
import subprocess
from functions import batch_vat
from dater import *
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
# If modifying these scopes, delete the file token.json.
SCOPES = ["https://www.googleapis.com/auth/gmail.readonly"]
def main():
"""Shows basic usage of the Gmail API.
Lists the user's Gmail labels.
"""
creds = None
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists("token.json"):
creds = Credentials.from_authorized_user_file("token.json", SCOPES)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
"credentials.json", SCOPES
)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open("token.json", "w") as token:
token.write(creds.to_json())
subprocess.run(["python", "dater.py"])
start_date = start
end_date = end
#start_date = input("Start date[year/month/day]: ")
#end_date = input("End date[year/month/day]: ")
transformed_start_date = start_date.replace("/", "_")
transformed_end_date = end_date.replace("/", "_")
# Directory
directory = f"{transformed_start_date}-{transformed_end_date}"
# Parent Directory path
parent_dir = "C:/Users/Dawid/Desktop/orlen"
# Path
path = os.path.join(parent_dir, directory)
#print(path)
os.mkdir(path)
print("## INFO ## Created directory", directory)
#source = os. getcwd()
#shutil.copy(f"{source}/read.py", f"{path}/read.py")
try:
# Call the Gmail API
service = build("gmail", "v1", credentials=creds)
results = service.users().messages().list(userId="me", labelIds="Label_1748439073231171664", q=f"after:{start_date} before:{end_date}").execute()
messages = results.get("messages", [])
#print(messages)
#print(json.dumps(messages, indent = 1))
licznik = 1
for message in messages:
message_id = message["id"]
#print("Message ID = ", message_id)
msg = service.users().messages().get(userId='me', id=message_id).execute()
attachment_id = msg["payload"]["parts"][0]["body"]["attachmentId"]
#print("Attachment ID: ", attachment_id)
att = service.users().messages().attachments().get(userId='me', messageId=message_id, id=attachment_id).execute()
attachment_data = att["data"]
#print(json.dumps(attachment_data, indent = 1))
file_data = base64.urlsafe_b64decode(attachment_data.encode('UTF-8'))
filename = f"paliwo{licznik}.pdf"
#print(filename)
#path = os.path.join(store_dir + '\\' 'Downloaded files' + '\\' + filename)
with open(f"{path}/{filename}", 'wb') as f:
f.write(file_data)
f.close()
licznik = licznik + 1
current_dir = os. getcwd()
path_for_batch_vat=f"{current_dir}\\{directory}"
print("## INFO ## Changing context to", path_for_batch_vat)
os.chdir(path_for_batch_vat)
print("## INFO ## Running VAT calculations")
batch_vat(path_for_batch_vat)
except HttpError as error:
# TODO(developer) - Handle errors from gmail API.
print(f"An error occurred: {error}")
if __name__ == "__main__":
main()from tkinter import *
import ttkbootstrap as tb
def get_dates():
global start
global end
start = start_date.entry.get()
end = end_date.entry.get()
print("## INFO ## Start date: ", start)
print("## INFO ## End date: ", end)
return start, end
root = tb.Window(themename="solar")
root.title("Date picker!")
root.geometry("300x300")
start_date = tb.DateEntry(root, dateformat="%Y/%m/%d", firstweekday=0)
start_date_label = tb.Label(root, text="Start date:")
start_date.grid(column=1, row=0)
start_date_label.grid(column=0, row=0, pady=50, padx=20)
end_date = tb.DateEntry(root, dateformat="%Y/%m/%d", firstweekday=0)
end_date_label = tb.Label(root, text="End date:")
end_date.grid(column=1, row=1)
end_date_label.grid(column=0, row=1, padx=20)
my_button = tb.Button(root, text="Apply", command=get_dates, width=20)
my_button.place(x=80, y=200)
root.mainloop()
