SocialNetwork
/
weather.py
82 строки · 2.6 Кб
1import flask2import pyowm3import spotipy4from flask import render_template, redirect, abort5from flask_login import login_required, current_user6from pyowm import OWM7from pyowm.utils import timestamps8
9from data import db_session10from data.users import User11from forms.weather import WeatherForm12from utils.spotify import spotify_login_required13
14blueprint = flask.Blueprint(15'weather',16__name__,17template_folder='templates'18)
19
20owm = OWM('4b0bae7206bce8cd3baa0ac1b17cf10a')21mgr = owm.weather_manager()22
23
24@blueprint.route('/weather', methods=['GET', 'POST'])25@login_required
26@spotify_login_required
27def weather(spotify:spotipy.Spotify):28if current_user.city:29return redirect(f'/weather/{current_user.city}')30db_sess = db_session.create_session()31
32form = WeatherForm()33if form.validate_on_submit():34return redirect(f'/weather/{form.city.data}')35
36return 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
42def weather_show(city, spotify:spotipy.Spotify):43form = WeatherForm()44if form.validate_on_submit():45return redirect(f'/weather/{form.city.data}')46
47try:48observation = mgr.weather_at_place(city)49except pyowm.commons.exceptions.NotFoundError:50return abort(404)51db_sess = db_session.create_session()52
53w = observation.weather54
55three_h_forecaster = mgr.forecast_at_place(city, '3h')56tomorrow = timestamps.tomorrow() # datetime object for tomorrow57wea_tomorrow = three_h_forecaster.get_weather_at(tomorrow)58print(wea_tomorrow.status.lower(), wea_tomorrow.temperature('celsius'))59
60days_two = timestamps._timedelta_days(2)61wea_two = three_h_forecaster.get_weather_at(days_two)62print(wea_two.status.lower(), wea_two.temperature('celsius'))63
64days_three = timestamps._timedelta_days(3)65wea_three = three_h_forecaster.get_weather_at(days_three)66print(wea_three.status.lower(), wea_three.temperature('celsius'))67
68days_four = timestamps._timedelta_days(4)69wea_four = three_h_forecaster.get_weather_at(days_four)70print(wea_four.status.lower(), wea_four.temperature('celsius'))71
72
73params = {'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
82return render_template('weather_show.html', form=form, **params, spotify=spotify, current_user=db_sess.query(User).get(current_user.id))83