From 64caef983381f8f1938b4baa748705c149ad7534 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Mon, 4 Apr 2022 19:02:02 +1000 Subject: added title and landing page --- html_view.py | 30 +++++++++++++++++++++++++++--- server.py | 26 ++++++++++++++++++-------- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/html_view.py b/html_view.py index 2e82066..f4dc7b0 100644 --- a/html_view.py +++ b/html_view.py @@ -1,5 +1,6 @@ import util import ptv_client +from urllib import parse def format_stop_and_route_name_li(stop_and_route): stop, route = stop_and_route @@ -16,12 +17,15 @@ def format_stop_and_route_name_tr(stop_and_route): return """ - {} + + {} + {}{}{} """.format( route['route_type'], stop['stop_id'], route['route_id'], + parse.quote(stop['stop_name']), parse.quote(route['route_number']), stop['stop_name'], ptv_client.get_route_type(route['route_type']), route['route_number'], route['route_name']) @@ -38,6 +42,10 @@ def format_stop_and_route_name_table(stop_and_routes): """.format(''.join(map(format_stop_and_route_name_tr, stop_and_routes))) +def format_departure_title(stop_name, route_type, route_number): + return 'Departures of {} {} at {}'.format( + ptv_client.get_route_type(route_type), route_number, stop_name) + def format_departure_tr(departure, direction_names): return """ @@ -69,15 +77,31 @@ def style(): """ -def html(body): +def html(title, body): return """ + %(title)s %(style)s +

%(title)s

%(body)s -""" % {'style': style(), 'body': body} +""" % {'title': title, 'style': style(), 'body': body} + +def landing_page(): + title = 'PTV timetable search tool' + body = """ +
+

+ Query: +

+

+ +

+
+""" + return html(title, body) diff --git a/server.py b/server.py index 1717ed2..1fe2a18 100644 --- a/server.py +++ b/server.py @@ -5,22 +5,32 @@ from wsgiref.simple_server import make_server from urllib.parse import parse_qs import util +def is_dep_query(params): + return all(key in params for key in + ('route-type', 'stop', 'route', 'stop-name', 'route-number')) + def application(environ, start_response): - d = parse_qs(environ['QUERY_STRING']) - if 'q' in d: - query = str(d.get('q', [''])[0]) + params = parse_qs(environ['QUERY_STRING']) + if 'q' in params: + query = str(params.get('q', [''])[0]) response_body = html_view.format_stop_and_route_name_table( list(ptv_client.get_stop_and_routes(ptv_client.search(query)))) - else: - print(d) + title = f'Search results for {query}' + response_html = html_view.html(title, response_body) + elif is_dep_query(params): departures = ptv_client.get_departures( - str(d['route-type'][0]), str(d['stop'][0]), str(d['route'][0])) + str(params['route-type'][0]), str(params['stop'][0]), str(params['route'][0])) filtered_deps = util.filter_departures(departures['departures']) - direction_names = ptv_client.get_direction_names(str(d['route'][0])) + direction_names = ptv_client.get_direction_names(str(params['route'][0])) response_body = html_view.format_departure_table( filtered_deps, direction_names) + title = html_view.format_departure_title( + str(params['stop-name'][0]), int(params['route-type'][0]), + str(params['route-number'][0])) + response_html = html_view.html(title, response_body) + else: + response_html = html_view.landing_page() - response_html = html_view.html(response_body) response_headers = [ ('Content-Type', 'text/html'), ('Content-Length', str(len(response_html))) -- cgit v1.2.3