SocialNetwork

Форк
0
/
weather.py 
82 строки · 2.6 Кб
1
import flask
2
import pyowm
3
import spotipy
4
from flask import render_template, redirect, abort
5
from flask_login import login_required, current_user
6
from pyowm import OWM
7
from pyowm.utils import timestamps
8

9
from data import db_session
10
from data.users import User
11
from forms.weather import WeatherForm
12
from utils.spotify import spotify_login_required
13

14
blueprint = flask.Blueprint(
15
    'weather',
16
    __name__,
17
    template_folder='templates'
18
)
19

20
owm = OWM('4b0bae7206bce8cd3baa0ac1b17cf10a')
21
mgr = owm.weather_manager()
22

23

24
@blueprint.route('/weather', methods=['GET', 'POST'])
25
@login_required
26
@spotify_login_required
27
def weather(spotify:spotipy.Spotify):
28
    if current_user.city:
29
        return redirect(f'/weather/{current_user.city}')
30
    db_sess = db_session.create_session()
31

32
    form = WeatherForm()
33
    if form.validate_on_submit():
34
        return redirect(f'/weather/{form.city.data}')
35

36
    return render_template('weather.html', form=form, spotify=spotify, current_user=db_sess.query(User).get(current_user.id))
37

38

39
@blueprint.route('/weather/<city>', methods=['GET', 'POST'])
40
@login_required
41
@spotify_login_required
42
def weather_show(city, spotify:spotipy.Spotify):
43
    form = WeatherForm()
44
    if form.validate_on_submit():
45
        return redirect(f'/weather/{form.city.data}')
46

47
    try:
48
        observation = mgr.weather_at_place(city)
49
    except pyowm.commons.exceptions.NotFoundError:
50
        return abort(404)
51
    db_sess = db_session.create_session()
52

53
    w = observation.weather
54

55
    three_h_forecaster = mgr.forecast_at_place(city, '3h')
56
    tomorrow = timestamps.tomorrow()  # datetime object for tomorrow
57
    wea_tomorrow = three_h_forecaster.get_weather_at(tomorrow)
58
    print(wea_tomorrow.status.lower(), wea_tomorrow.temperature('celsius'))
59

60
    days_two = timestamps._timedelta_days(2)
61
    wea_two = three_h_forecaster.get_weather_at(days_two)
62
    print(wea_two.status.lower(), wea_two.temperature('celsius'))
63

64
    days_three = timestamps._timedelta_days(3)
65
    wea_three = three_h_forecaster.get_weather_at(days_three)
66
    print(wea_three.status.lower(), wea_three.temperature('celsius'))
67

68
    days_four = timestamps._timedelta_days(4)
69
    wea_four = three_h_forecaster.get_weather_at(days_four)
70
    print(wea_four.status.lower(), wea_four.temperature('celsius'))
71

72

73
    params = {'city': observation.location.name,
74
              'w': w,
75
              'wea_tomorrow': wea_tomorrow,
76
              'wea_two': wea_two,
77
              'wea_three': wea_three,
78
              'wea_four': wea_four,
79

80
              }
81

82
    return render_template('weather_show.html', form=form, **params, spotify=spotify, current_user=db_sess.query(User).get(current_user.id))
83

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.