diff options
author | Yuchen Pei <hi@ypei.me> | 2022-04-04 19:02:02 +1000 |
---|---|---|
committer | Yuchen Pei <hi@ypei.me> | 2022-04-04 19:02:02 +1000 |
commit | 64caef983381f8f1938b4baa748705c149ad7534 (patch) | |
tree | 74423ed0009381c2af23818e3e25f48e44a98048 | |
parent | c7e5108443febfa5995d143ed8450ab09b0cb6bd (diff) |
added title and landing page
-rw-r--r-- | html_view.py | 30 | ||||
-rw-r--r-- | 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 """ <tr> <td> - <a href="/?route-type={}&stop={}&route={}">{}</a> + <a href="/?route-type={}&stop={}&route={}&stop-name={}&route-number={}"> + {} + </a> </td> <td>{}</td><td>{}</td><td>{}</td> </tr> """.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): </table> """.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 """ <tr> @@ -69,15 +77,31 @@ def style(): </style> """ -def html(body): +def html(title, body): return """ <!DOCTYPE html> <html> <head> + <title>%(title)s</title> %(style)s </head> <body> + <h2>%(title)s</h2> %(body)s </body> </html> -""" % {'style': style(), 'body': body} +""" % {'title': title, 'style': style(), 'body': body} + +def landing_page(): + title = 'PTV timetable search tool' + body = """ +<form method="get" action=""> +<p> + Query: <input type="text" name="q" value=""> +</p> +<p> + <input type="submit" value="Submit"> +</p> +</form> +""" + return html(title, body) @@ -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))) |