Tue, 18 Apr 2017 14:59:18 +0300
Suppea ajovuoroesitys
0 | 1 | #!/usr/bin/env python3 |
2 | from flask import Flask, render_template | |
3 | from datetime import datetime, date, time, timedelta | |
4 | import locale | |
5 | ||
6 | app = Flask(__name__) | |
7 | locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) | |
8 | ||
9 | def muotoile_aika(aika, suhteellinen = True): | |
10 | erotus = aika - datetime.now() | |
11 | if suhteellinen and erotus < timedelta(minutes = 30): | |
12 | return '%dm' % round(erotus.seconds / 60) | |
13 | elif aika.day == datetime.now().day: | |
14 | return '%d:%02d' % (aika.hour, aika.minute) | |
15 | elif erotus < timedelta(7): | |
16 | return aika.strftime('%-a %H:%M') | |
17 | else: | |
18 | return aika.strftime('%-d.%-m. %H:%M') | |
19 | ||
20 | @app.route('/pysäkki/<tunniste>') | |
21 | def pysäkkiaikataulu(tunniste): | |
22 | from bussit import pysäkit | |
23 | aikataulu = [] | |
24 | pysäkki = pysäkit[tunniste] | |
25 | for (aika, pysähdys) in pysäkki.aikataulu(100): | |
26 | aikataulu.append({ | |
27 | 'aika': muotoile_aika(aika), | |
28 | 'linja': pysähdys.ajo.linja.viite, | |
29 | 'kyltti': pysähdys.ajo.kyltti, | |
30 | 'ajovuoro': pysähdys.ajo.nimi, | |
31 | }) | |
32 | return render_template('pysäkki.html', aikataulu = aikataulu, viite = tunniste, nimi = pysäkki.nimi) | |
33 | ||
34 | @app.route('/ajovuoro/<int:numero>') | |
35 | def ajoreitti(numero): | |
2 | 36 | from flask import request |
0 | 37 | from bussit import ajot |
38 | ajovuoro = ajot[numero] | |
2 | 39 | suppea = request.args.get('suppea') is not None |
0 | 40 | reitti = [] |
2 | 41 | suppea_reitti = [] |
42 | käydyt_alueet = set() | |
0 | 43 | for pysähdys in ajovuoro.reitti: |
44 | aika = datetime.combine(date.today(), time()) + pysähdys.saapumisaika | |
2 | 45 | muotoiltu_aika = muotoile_aika(aika, suhteellinen = False) |
0 | 46 | reitti.append({ |
2 | 47 | 'aika': muotoiltu_aika, |
0 | 48 | 'tunniste': pysähdys.pysäkki.tunniste, |
2 | 49 | 'alue': pysähdys.pysäkki.alue, |
0 | 50 | 'nimi': pysähdys.pysäkki.nimi, |
51 | }) | |
2 | 52 | alue = pysähdys.pysäkki.alue |
53 | if alue: | |
54 | if alue not in käydyt_alueet: | |
55 | suppea_reitti.append({ | |
56 | 'aika': muotoiltu_aika, | |
57 | 'alue': alue | |
58 | }) | |
59 | käydyt_alueet.add(alue) | |
60 | sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html' | |
61 | return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti, | |
62 | numero = numero, linja = ajovuoro.linja.viite, selite = ajovuoro.kyltti) | |
0 | 63 | |
64 | if __name__ == '__main__': | |
2 | 65 | from argparse import ArgumentParser |
66 | parser = ArgumentParser() | |
67 | parser.add_argument('-p', '--port', type = int, default = 5000) | |
68 | args = parser.parse_args() | |
69 | app.run(debug = True, port = args.port) |