palvelu.py

changeset 5
a65b680f1774
parent 4
312c432bb9e6
equal deleted inserted replaced
4:312c432bb9e6 5:a65b680f1774
1 #!/usr/bin/env python3 1 #!/usr/bin/env python3
2 from flask import Flask, render_template, abort 2 from flask import Flask, render_template, abort
3 from datetime import datetime, date, time, timedelta 3 from datetime import datetime, date, time, timedelta
4 from misc import * 4 from misc import *
5 import locale 5 import locale
6 from bussireitti import supista_reitti
7 from configparser import ConfigParser
6 8
7 app = Flask(__name__) 9 app = Flask(__name__)
8 locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) 10 locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())
9 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
10 @app.route('/pysäkki/<tunniste>') 39 @app.route('/pysäkki/<tunniste>')
11 def pysäkkiaikataulu(tunniste): 40 def pysäkkiaikataulu(tunniste):
12 from bussit import pysäkit 41 from bussit import pysäkit
42 from math import ceil
13 aikataulu = [] 43 aikataulu = []
14 try: 44 try:
15 pysäkki = pysäkit[tunniste] 45 pysäkki = pysäkit[tunniste]
16 except KeyError: 46 except KeyError:
17 abort(404) 47 abort(404)
18 for (aika, pysähdys) in pysäkki.aikataulu(100): 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:])
19 aikataulu.append({ 55 aikataulu.append({
20 'aika': muotoile_aika(aika), 56 'aika': muotoile_aika(aika),
21 'linja': pysähdys.ajo.linja.viite, 57 'linja': pysähdys.ajo.linja.viite,
22 'kyltti': pysähdys.ajo.kyltti, 58 'kyltti': kylttiesitys,
23 'ajovuoro': pysähdys.ajo.nimi, 59 'ajovuoro': pysähdys.ajo.nimi,
24 'yö': yö(aika), 60 'yö': yö(aika),
25 }) 61 })
26 return render_template('pysäkki.html', aikataulu = aikataulu, viite = tunniste, nimi = pysäkki.nimi) 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 )
27 71
28 @app.route('/ajovuoro/<numero>') 72 @app.route('/ajovuoro/<numero>')
29 def ajoreitti(numero): 73 def ajoreitti(numero):
30 from flask import request 74 from flask import request
31 from bussit import ajot 75 from bussit import ajot
41 aika = datetime.combine(tänään(), time()) + pysähdys.saapumisaika 85 aika = datetime.combine(tänään(), time()) + pysähdys.saapumisaika
42 muotoiltu_aika = muotoile_aika(aika) 86 muotoiltu_aika = muotoile_aika(aika)
43 reitti.append({ 87 reitti.append({
44 'aika': muotoiltu_aika, 88 'aika': muotoiltu_aika,
45 'tunniste': pysähdys.pysäkki.tunniste, 89 'tunniste': pysähdys.pysäkki.tunniste,
46 'alue': pysähdys.pysäkki.alue, 90 'alue': käännä(pysähdys.pysäkki.alue or '', 'paikat'),
47 'nimi': pysähdys.pysäkki.nimi, 91 'nimi': käännä(pysähdys.pysäkki.nimi, 'pysäkit'),
48 }) 92 })
49 alue = pysähdys.pysäkki.alue 93 alue = pysähdys.pysäkki.alue
50 if alue: 94 if alue:
51 if alue not in käydyt_alueet: 95 if alue not in käydyt_alueet:
52 suppea_reitti.append({ 96 suppea_reitti.append({
53 'aika': muotoiltu_aika, 97 'aika': muotoiltu_aika,
54 'alue': alue 98 'alue': alue,
55 }) 99 })
56 käydyt_alueet.add(alue) 100 käydyt_alueet.add(alue)
101 kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True)
57 sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html' 102 sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html'
58 return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti, 103 return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti,
59 numero = numero, linja = ajovuoro.linja.viite, selite = ajovuoro.kyltti, 104 numero = numero, linja = ajovuoro.linja.viite,
60 yö = yö(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika)) 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 )
61 108
62 if __name__ == '__main__': 109 if __name__ == '__main__':
63 from argparse import ArgumentParser 110 from argparse import ArgumentParser
64 parser = ArgumentParser() 111 parser = ArgumentParser()
65 parser.add_argument('-p', '--port', type = int, default = 5000) 112 parser.add_argument('-p', '--port', type = int, default = 5000)

mercurial