service.py

changeset 19
16fa9fb20b32
parent 18
1c8ff93fbfac
child 20
3199e289ae62
--- 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>')

mercurial