File size: 2,015 Bytes
8621d18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# noinspection PyUnresolvedReferences
import random

# noinspection PyUnresolvedReferences,PyPackageRequirements
import pyodide
# noinspection PyUnresolvedReferences,PyPackageRequirements
from js import DOMParser, document, setInterval, console

# noinspection PyPackages
import weather_api

# noinspection PyPackages
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))