From a2cc77954fd85e042fbe46f119094782f047a62b Mon Sep 17 00:00:00 2001 From: Benjamin Sigonneau Date: Tue, 1 Jun 2021 23:03:57 +0200 Subject: [PATCH] Simplify template, add previous/next hour links, use a single route --- balises.py | 69 +++++++++++++++++++++++----------------- views/base.tpl | 15 --------- views/search_results.tpl | 39 +++++++++++++++++++---- 3 files changed, 72 insertions(+), 51 deletions(-) delete mode 100644 views/base.tpl diff --git a/balises.py b/balises.py index 7874b48..4f47c13 100755 --- a/balises.py +++ b/balises.py @@ -2,7 +2,7 @@ from argparse import ArgumentParser from configparser import ConfigParser -from datetime import datetime, timedelta +import datetime as dt import bs4 import requests @@ -71,33 +71,36 @@ def get_last_ten(): soup = bs4.BeautifulSoup(response.content, 'html5lib') dates = soup.select('p.rldj-cell span.post-date') for elem in dates: - dt = datetime.fromisoformat(elem.text) + song_dt = dt.datetime.fromisoformat(elem.text) artist, title = [x.strip() for x in elem.previous.previous.split(' - ', 1)] song, _ = Song.get_or_create(artist=artist, title=title) # get_or_create does not play nice with the unique constraint on the date # so we use a simple try/except instead try: - aircast = AirCast.get(date=dt, song=song) + aircast = AirCast.get(date=song_dt, song=song) except DoesNotExist: - aircast = AirCast.create(date=dt, song=song) + aircast = AirCast.create(date=song_dt, song=song) line_template = '{:<10} | {:<25} {:<40}' - print(line_template.format(str(dt), artist, title)) + print(line_template.format(str(song_dt), artist, title)) # ---------------------------------------------------------------------- # Search song -def search_song(query): +def search_songs_between(start_dt, end_dt): + query = AirCast\ + .select()\ + .order_by(AirCast.date)\ + .where(AirCast.date.between(start_dt, end_dt)) + return [x for x in query] + +def search_song(day, hour): # query must be a datetime - delta = timedelta(minutes=30) - - query = AirCast.select().order_by(AirCast.date).where( - (AirCast.date > query - delta) & - (AirCast.date < query + delta)) - results = [x for x in query] - - return results + # we search the songs withing the hour specified + start_dt = dt.datetime.combine(day, dt.time(hour=hour)) + delta = dt.timedelta(hours=1) + return search_songs_between(start_dt, start_dt + delta) def print_aircast(x): line_template = '{:<10} | {:<25} {:<40}' @@ -110,22 +113,29 @@ def print_aircast(x): # Very simple, just a page with an input for a date/time, a query button and a # list of results -@route('/', method='GET') -@view('search_form') -def main_page(): - now = datetime.now() - date = '{}'.format(now.date()) - time = '{}:{}'.format(now.hour, now.minute) - return dict(title='', date=date, time=time) - -@route('/', method='POST') +@route('/', method=['GET', 'POST']) @view('search_results') def results_page(): - date = request.forms.date - time = request.forms.time - dt = datetime.fromisoformat('{} {}'.format(date, time)) - results = search_song(dt) - return dict(results=[x for x in results], date=date, time=time) + 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 = search_song(day, hour) + return dict(results=[x for x in results], + date=day, + time=time, + start_time=time, + end_time = '{:0>2}:00'.format(hour+1)) @hook('before_request') def connect_to_db(): @@ -171,7 +181,8 @@ def update(args): def serve(args): run(host=conf['server'].get('host', 'localhost'), port=conf['server'].getint('port', 9980), - debug=conf['server'].getboolean('debug', False)) + debug=conf['server'].getboolean('debug', False), + reloader=conf['server'].getboolean('reloader', False)) # ---------------------------------------------------------------------- diff --git a/views/base.tpl b/views/base.tpl deleted file mode 100644 index 3113445..0000000 --- a/views/base.tpl +++ /dev/null @@ -1,15 +0,0 @@ - - - {{title or 'No title'}} - - -
- - - - - -
- {{!base}} - - diff --git a/views/search_results.tpl b/views/search_results.tpl index 4f6fb1c..f1f2c75 100644 --- a/views/search_results.tpl +++ b/views/search_results.tpl @@ -1,7 +1,32 @@ -% rebase('base.tpl', title='Radio Balises - Résultats') -

Liste des chansons

- \ No newline at end of file + + + Radio Balises + + +
+ + + + + + +
+

Chansons du {{date.strftime('%A %d %B %Y')}} entre {{start_time}} et {{end_time}}

+ [Plus tôt] + [Plus tard] + + + + +