service.py

changeset 7
f3791dccfd03
parent 5
a65b680f1774
child 9
f95892def64e
equal deleted inserted replaced
6:88cfb916c852 7:f3791dccfd03
1 #!/usr/bin/env python3
2 from flask import Flask, render_template, abort
3 from datetime import datetime, date, time, timedelta
4 from misc import *
5 import locale
6 from busroute import supista_reitti
7 from configparser import ConfigParser
8
9 app = Flask(__name__)
10 locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())
11
12 kielet = ['fi', 'sv', 'en', 'ru']
13 kieli_ini = {}
14 for kieli in kielet:
15 ini = ConfigParser()
16 ini.read(kieli + '.ini')
17 kieli_ini[kieli] = ini
18
19 def käännä(nimi, osio):
20 kieli = sivun_kieli()
21 try:
22 return kieli_ini[kieli][osio][nimi]
23 except KeyError:
24 return nimi
25
26 def sivun_kieli():
27 from flask import request
28 if request.args.get('sv') is not None:
29 return 'sv'
30 elif request.args.get('en') is not None:
31 return 'en'
32 elif request.args.get('ru') is not None:
33 return 'ru'
34 elif request.args.get('kääntämätön') is None:
35 return 'fi'
36 else:
37 return None
38
39 @app.route('/pysäkki/<tunniste>')
40 def pysäkkiaikataulu(tunniste):
41 from buses import pysäkit
42 from math import ceil
43 aikataulu = []
44 try:
45 pysäkki = pysäkit[tunniste]
46 except KeyError:
47 abort(404)
48 for (aika, pysähdys) in pysäkki.aikataulu(100):
49 kyltti = supista_reitti(pysähdys.ajo.suppea_reitti(pysähdys))
50 kyltti = [käännä(paikka, 'paikat') for paikka in kyltti]
51 kylttiesitys = ' - '.join(kyltti)
52 if len(kylttiesitys) > 25:
53 k = ceil(len(kyltti) / 2)
54 kylttiesitys = ' - '.join(kyltti[:k]) + '\n' + ' - '.join(kyltti[k:])
55 aikataulu.append({
56 'aika': muotoile_aika(aika),
57 'linja': pysähdys.ajo.linja.viite,
58 'kyltti': kylttiesitys,
59 'ajovuoro': pysähdys.ajo.nimi,
60 'yö': yö(aika),
61 })
62 return render_template(
63 'pysäkki.html',
64 aikataulu = aikataulu,
65 viite = tunniste,
66 nimi = käännä(pysäkki.nimi, 'pysäkit'),
67 linkki_karttaan = pysäkki.linkki_karttaan,
68 alue = pysäkki.alue,
69 sijainti = pysäkki.sijainti,
70 )
71
72 @app.route('/ajovuoro/<numero>')
73 def ajoreitti(numero):
74 from flask import request
75 from buses import ajot
76 try:
77 ajovuoro = ajot[numero]
78 except KeyError:
79 abort(404)
80 suppea = request.args.get('suppea') is not None
81 reitti = []
82 suppea_reitti = []
83 käydyt_alueet = set()
84 for pysähdys in ajovuoro.reitti:
85 aika = datetime.combine(tänään(), time()) + pysähdys.saapumisaika
86 muotoiltu_aika = muotoile_aika(aika)
87 reitti.append({
88 'aika': muotoiltu_aika,
89 'tunniste': pysähdys.pysäkki.tunniste,
90 'alue': käännä(pysähdys.pysäkki.alue or '', 'paikat'),
91 'nimi': käännä(pysähdys.pysäkki.nimi, 'pysäkit'),
92 })
93 alue = pysähdys.pysäkki.alue
94 if alue:
95 if alue not in käydyt_alueet:
96 suppea_reitti.append({
97 'aika': muotoiltu_aika,
98 'alue': alue,
99 })
100 käydyt_alueet.add(alue)
101 kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True)
102 sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html'
103 return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti,
104 numero = numero, linja = ajovuoro.linja.viite,
105 selite = ' - '.join(käännä(paikka, 'paikat') for paikka in kyltti),
106 yö = yö(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika),
107 )
108
109 if __name__ == '__main__':
110 from argparse import ArgumentParser
111 parser = ArgumentParser()
112 parser.add_argument('-p', '--port', type = int, default = 5000)
113 args = parser.parse_args()
114 app.run(debug = True, port = args.port)

mercurial