improved exception & error handling #1

This commit is contained in:
Michi 2024-10-12 17:30:47 +02:00
parent 5e07460615
commit 0988256239

27
main.py
View file

@ -26,19 +26,30 @@ def sendMessage(message, notificationType):
header = { header = {
"Authorization":f"Bearer {accessToken}" "Authorization":f"Bearer {accessToken}"
} }
try:
response = requests.post(url=endpoint, headers=header, data=message) response = requests.post(url=endpoint, headers=header, data=message)
else: response = requests.post(url=endpoint, data=message) except Exception as error:
raise Exception(f"Got an error while sending the notification: {error}")
else:
try:
response = requests.post(url=endpoint, data=message)
except Exception as error:
raise Exception(f"Got an error while sending the notification: {error}")
return response return response
case "discord" | _: case "discord" | _:
endpoint = os.getenv('DISCORD_WEBHOOK') endpoint = os.getenv('DISCORD_WEBHOOK')
data = { data = {
"content": message, "content": message,
} }
try:
response = requests.post(url=endpoint, json=data) response = requests.post(url=endpoint, json=data)
return response return response
except Exception as error:
raise Exception(f"Got an error while sending the notification: {error}")
# Check for the current waiting times # Check for the current waiting times
def checkTimes(subscribedAttractions, themepark): def checkTimes(subscribedAttractions, themepark):
try:
endpoint = "https://api.wartezeiten.app/v1/waitingtimes" endpoint = "https://api.wartezeiten.app/v1/waitingtimes"
header = { header = {
@ -47,9 +58,16 @@ def checkTimes(subscribedAttractions, themepark):
} }
req = requests.get(url=endpoint, headers=header) req = requests.get(url=endpoint, headers=header)
except:
raise Exception(f"API Request to endpoint {endpoint} failed.")
try:
result = req.json() result = req.json()
except:
raise Exception("Format of API response is invalid. (JSON expected)")
try:
attractions = result attractions = result
for attraction in attractions: for attraction in attractions:
if isinstance(attraction, dict) and "code" in attraction:
if attraction["code"] in subscribedAttractions: if attraction["code"] in subscribedAttractions:
if attraction["status"] == "opened": if attraction["status"] == "opened":
refreshTime = 30 refreshTime = 30
@ -61,6 +79,10 @@ def checkTimes(subscribedAttractions, themepark):
currentTimes[attraction["code"]] = attraction["waitingtime"] currentTimes[attraction["code"]] = attraction["waitingtime"]
else: else:
refreshTime = 180 refreshTime = 180
else:
print(f"Info: Attraction was skipt because it has an invalid data structure. Affacted attraction: {attraction}")
except Exception as error:
raise Exception(f"Got an error while checking for differences since the last API call. Error: {error}")
# Main Loop # Main Loop
# Checks every 30 seconds for changes in the waiting times of the subscribed attractions # Checks every 30 seconds for changes in the waiting times of the subscribed attractions
@ -70,7 +92,10 @@ if __name__ == '__main__':
print("By Michi von Ah") print("By Michi von Ah")
print("Big thanks to the wartezeiten.app API!") print("Big thanks to the wartezeiten.app API!")
while True: while True:
try:
checkTimes(subscribedAttractions, themepark) checkTimes(subscribedAttractions, themepark)
print(f"Checked for updates at {time.strftime('%H:%M:%S', time.localtime())}") print(f"Checked for updates at {time.strftime('%H:%M:%S', time.localtime())}")
except Exception as error:
raise Exception(error)
time.sleep(refreshTime) time.sleep(refreshTime)