Sat, 10 Jun 2017 16:36:36 +0300
Plöö
#!/usr/bin/env python3 from flask import Flask, render_template, abort from datetime import datetime, date, time, timedelta from misc import * import locale from bussireitti 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 bussit 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 bussit 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)