|
|
|
|
|
import random |
|
|
|
|
|
|
|
|
import pyodide |
|
|
|
|
|
from js import DOMParser, document, setInterval, console |
|
|
|
|
|
|
|
|
import weather_api |
|
|
|
|
|
|
|
|
from weather_api import Report |
|
|
|
|
|
|
|
|
def main(): |
|
|
set_weather() |
|
|
add_refresh_event() |
|
|
|
|
|
|
|
|
def set_weather(): |
|
|
body = document.getElementById('the_body') |
|
|
div_forecast = document.getElementById('forecast') |
|
|
div_image = document.getElementById('image') |
|
|
div_temp = document.getElementById('temp') |
|
|
div_weather = document.getElementById('weather') |
|
|
|
|
|
add_class(div_weather, 'hidden') |
|
|
clear_body_colors(body) |
|
|
|
|
|
try: |
|
|
forecast: Report = weather_api.download_report() |
|
|
except Exception as x: |
|
|
console.log("Error calling weather API: {}".format(x)) |
|
|
forecast = create_error_style_report() |
|
|
|
|
|
add_class(body, forecast.sky) |
|
|
div_forecast.innerText = forecast.report_summary |
|
|
div_temp.innerText = str(forecast.temp) + " F" |
|
|
div_image.setAttribute('src', '/static/images/weather/{}.png'.format(forecast.sky)) |
|
|
|
|
|
remove_class(div_weather, 'hidden') |
|
|
|
|
|
|
|
|
def create_error_style_report(): |
|
|
forecast = Report() |
|
|
forecast.sky = 'offline' |
|
|
forecast.temp = 0 |
|
|
forecast.report_summary = 'Weather API is offline.' |
|
|
return forecast |
|
|
|
|
|
|
|
|
def clear_body_colors(body): |
|
|
classes = ['cloudy', 'sunny', 'rain', 'offline'] |
|
|
for c in classes: |
|
|
remove_class(body, c) |
|
|
|
|
|
|
|
|
def add_refresh_event(): |
|
|
def evt(e=None): |
|
|
set_weather() |
|
|
if e: |
|
|
e.preventDefault() |
|
|
return False |
|
|
|
|
|
refresh_link = document.getElementById('refresh') |
|
|
refresh_link.onclick = evt |
|
|
|
|
|
|
|
|
def remove_class(element, class_name): |
|
|
element.classList.remove(class_name) |
|
|
|
|
|
|
|
|
def add_class(element, class_name): |
|
|
element.classList.add(class_name) |
|
|
|
|
|
|
|
|
try: |
|
|
main() |
|
|
except Exception as x: |
|
|
print("Error starting weather script: {}".format(x)) |
|
|
|