--- a/service.py Sat Jun 10 21:09:11 2017 +0300 +++ b/service.py Sat Jun 10 22:30:55 2017 +0300 @@ -44,37 +44,73 @@ else: return 'fi' +def sign(schedule_entry): + from math import ceil + sign = supista_reitti(schedule_entry['trip'].suppea_reitti(schedule_entry['stop'])) + sign = [tr(paikka, 'paikat') for paikka in sign] + sign_representation = ' - '.join(sign) + if len(sign_representation) > 25: + k = ceil(len(sign) / 2) + sign_representation = ' - '.join(sign[:k]) + '\n' + ' - '.join(sign[k:]) + return sign_representation + @app.route('/pysäkki/<tunniste>') def pysäkkiaikataulu(tunniste): from buses import pysäkit - from math import ceil aikataulu = [] try: pysäkki = pysäkit[tunniste] except KeyError: abort(404) for schedule_entry in pysäkki.schedule(100): - sign = supista_reitti(schedule_entry['trip'].suppea_reitti(schedule_entry['stop'])) - sign = [tr(paikka, 'paikat') for paikka in sign] - sign_representation = ' - '.join(sign) - if len(sign_representation) > 25: - k = ceil(len(sign) / 2) - sign_representation = ' - '.join(sign[:k]) + '\n' + ' - '.join(sign[k:]) aikataulu.append({ 'aika': time_representation(schedule_entry['time']), 'linja': schedule_entry['trip'].linja.viite, - 'kyltti': sign_representation, + 'kyltti': sign(schedule_entry), 'ajovuoro': schedule_entry['stop'].ajo.nimi, 'yö': is_night_time(schedule_entry['time']), }) return render_template( 'pysäkki.html', aikataulu = aikataulu, - viite = tunniste, - nimi = tr(pysäkki.nimi, 'pysäkit'), - linkki_karttaan = pysäkki.linkki_karttaan, + nimi = tunniste + ' ' + tr(pysäkki.nimi, 'pysäkit'), + linkki_karttaan = pysäkki.sijainti.link_to_map, alue = pysäkki.alue, sijainti = pysäkki.sijainti, + cluster = pysäkki.cluster.name, + ) + +@app.route('/pysäkkiryhmä/<cluster_name>') +def cluster_schedule(cluster_name): + from buses import pysäkit, clusters_by_name + aikataulu = [] + try: + cluster = clusters_by_name[cluster_name] + except KeyError: + abort(404) + for schedule_entry in cluster.schedule(100): + aikataulu.append({ + 'aika': time_representation(schedule_entry['time']), + 'linja': schedule_entry['trip'].linja.viite, + 'kyltti': sign(schedule_entry), + 'ajovuoro': schedule_entry['stop'].ajo.nimi, + 'yö': is_night_time(schedule_entry['time']), + 'stop_id': schedule_entry['stop'].pysäkki.tunniste, + 'stop_name': tr(schedule_entry['stop'].pysäkki.nimi, 'pysäkit'), + }) + return render_template( + 'cluster.html', + aikataulu = aikataulu, + nimi = 'Yhdistetty pysäkkiaikataulu ' + cluster_name, + linkki_karttaan = cluster.center.link_to_map, + sijainti = cluster.center, + stops_in_cluster = sorted( + ({ + 'id': stop.tunniste, + 'name': tr(stop.nimi, 'pysäkit'), + } for stop in cluster.stops), + key = lambda stop: (len(stop['id']), stop['id']) + ) ) @app.route('/ajovuoro/<numero>')