service.py

changeset 7
f3791dccfd03
parent 5
a65b680f1774
child 9
f95892def64e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/service.py	Sat Jun 10 16:45:41 2017 +0300
@@ -0,0 +1,114 @@
+#!/usr/bin/env python3
+from flask import Flask, render_template, abort
+from datetime import datetime, date, time, timedelta
+from misc import *
+import locale
+from busroute import supista_reitti
+from configparser import ConfigParser
+
+app = Flask(__name__)
+locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())
+
+kielet = ['fi', 'sv', 'en', 'ru']
+kieli_ini = {}
+for kieli in kielet:
+	ini = ConfigParser()
+	ini.read(kieli + '.ini')
+	kieli_ini[kieli] = ini
+
+def käännä(nimi, osio):
+	kieli = sivun_kieli()
+	try:
+		return kieli_ini[kieli][osio][nimi]
+	except KeyError:
+		return nimi
+
+def sivun_kieli():
+	from flask import request
+	if request.args.get('sv') is not None:
+		return 'sv'
+	elif request.args.get('en') is not None:
+		return 'en'
+	elif request.args.get('ru') is not None:
+		return 'ru'
+	elif request.args.get('kääntämätön') is None:
+		return 'fi'
+	else:
+		return None
+
+@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 (aika, pysähdys) in pysäkki.aikataulu(100):
+		kyltti = supista_reitti(pysähdys.ajo.suppea_reitti(pysähdys))
+		kyltti = [käännä(paikka, 'paikat') for paikka in kyltti]
+		kylttiesitys = ' - '.join(kyltti)
+		if len(kylttiesitys) > 25:
+			k = ceil(len(kyltti) / 2)
+			kylttiesitys = ' - '.join(kyltti[:k]) + '\n' + ' - '.join(kyltti[k:])
+		aikataulu.append({
+			'aika': muotoile_aika(aika),
+			'linja': pysähdys.ajo.linja.viite,
+			'kyltti': kylttiesitys,
+			'ajovuoro': pysähdys.ajo.nimi,
+			'yö': yö(aika),
+		})
+	return render_template(
+		'pysäkki.html',
+		aikataulu = aikataulu,
+		viite = tunniste,
+		nimi = käännä(pysäkki.nimi, 'pysäkit'),
+		linkki_karttaan = pysäkki.linkki_karttaan,
+		alue = pysäkki.alue,
+		sijainti = pysäkki.sijainti,
+	)
+
+@app.route('/ajovuoro/<numero>')
+def ajoreitti(numero):
+	from flask import request
+	from buses import ajot
+	try:
+		ajovuoro = ajot[numero]
+	except KeyError:
+		abort(404)
+	suppea = request.args.get('suppea') is not None
+	reitti = []
+	suppea_reitti = []
+	käydyt_alueet = set()
+	for pysähdys in ajovuoro.reitti:
+		aika = datetime.combine(tänään(), time()) + pysähdys.saapumisaika
+		muotoiltu_aika = muotoile_aika(aika)
+		reitti.append({
+			'aika': muotoiltu_aika,
+			'tunniste': pysähdys.pysäkki.tunniste,
+			'alue': käännä(pysähdys.pysäkki.alue or '', 'paikat'),
+			'nimi': käännä(pysähdys.pysäkki.nimi, 'pysäkit'),
+		})
+		alue = pysähdys.pysäkki.alue
+		if alue:
+			if alue not in käydyt_alueet:
+				suppea_reitti.append({
+					'aika': muotoiltu_aika,
+					'alue': alue,
+				})
+				käydyt_alueet.add(alue)
+	kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True)
+	sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html'
+	return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti,
+						numero = numero, linja = ajovuoro.linja.viite,
+						selite = ' - '.join(käännä(paikka, 'paikat') for paikka in kyltti),
+						yö = yö(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika),
+						)
+
+if __name__ == '__main__':
+	from argparse import ArgumentParser
+	parser = ArgumentParser()
+	parser.add_argument('-p', '--port', type = int, default = 5000)
+	args = parser.parse_args()
+	app.run(debug = True, port = args.port)

mercurial