Files
balises/webapp.py

71 lines
2.0 KiB
Python

from bottle import hook, request, route, run, static_file, view
import models
from models import Song, AirCast
from balises import search_song
from utils import project_dir
import datetime as dt
import locale
import os
import urllib.parse
# ----------------------------------------------------------------------
# Web application
#
# Very simple, just a page with an input for a date/time, a query button and a
# list of results
@route('/', method=['GET', 'POST'])
@view('search_results')
def results_page():
try:
day = dt.date.fromisoformat(request.forms.date)
except ValueError:
day = dt.datetime.now().date()
try:
hour = int(request.forms.time.split(':')[0])
except ValueError:
hour = dt.datetime.now().hour
delta = int(request.forms.timedelta or 0)
hour = hour + delta
time = '{:0>2}:00'.format(hour)
results = [
{ 'date': x.date,
'song': x.song,
'youtube_url': 'https://www.youtube.com/results?search_query=' +
urllib.parse.quote_plus(x.song.artist + ' ' + x.song.title)
}
for x in search_song(day, hour)
]
return dict(results=results,
date=day,
time=time,
start_time=time,
end_time = '{:0>2}:00'.format(hour+1))
@route('/static/<filename>')
def serve_static_file(filename):
static_root = os.path.join(project_dir(), 'static')
return static_file(filename, root=static_root)
@hook('before_request')
def set_locale():
"""Set the locale for all categories to the first lang in Accept-Language
header. Default to fr_FR.UTF-8
"""
accept_language = request.get_header('Accept-Language', 'fr-FR')
first_lang = accept_language.split(';')[0].split(',')[0]
lang = first_lang.translate(str.maketrans('-', '_')) + '.UTF-8'
locale.setlocale(locale.LC_ALL, lang)
@hook('before_request')
def connect_to_db():
models.db.connect()
@hook('after_request')
def close_db_connection():
models.db.close()