--- /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)