Sun, 23 Apr 2017 11:01:51 +0300
Lisätty alueita
0 | 1 | #!/usr/bin/env python3 |
3 | 2 | from flask import Flask, render_template, abort |
0 | 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 = [] | |
3 | 24 | try: |
25 | pysäkki = pysäkit[tunniste] | |
26 | except KeyError: | |
27 | abort(404) | |
0 | 28 | for (aika, pysähdys) in pysäkki.aikataulu(100): |
29 | aikataulu.append({ | |
30 | 'aika': muotoile_aika(aika), | |
31 | 'linja': pysähdys.ajo.linja.viite, | |
32 | 'kyltti': pysähdys.ajo.kyltti, | |
33 | 'ajovuoro': pysähdys.ajo.nimi, | |
34 | }) | |
35 | return render_template('pysäkki.html', aikataulu = aikataulu, viite = tunniste, nimi = pysäkki.nimi) | |
36 | ||
37 | @app.route('/ajovuoro/<int:numero>') | |
38 | def ajoreitti(numero): | |
2 | 39 | from flask import request |
0 | 40 | from bussit import ajot |
3 | 41 | try: |
42 | ajovuoro = ajot[numero] | |
43 | except KeyError: | |
44 | abort(404) | |
2 | 45 | suppea = request.args.get('suppea') is not None |
0 | 46 | reitti = [] |
2 | 47 | suppea_reitti = [] |
48 | käydyt_alueet = set() | |
0 | 49 | for pysähdys in ajovuoro.reitti: |
50 | aika = datetime.combine(date.today(), time()) + pysähdys.saapumisaika | |
2 | 51 | muotoiltu_aika = muotoile_aika(aika, suhteellinen = False) |
0 | 52 | reitti.append({ |
2 | 53 | 'aika': muotoiltu_aika, |
0 | 54 | 'tunniste': pysähdys.pysäkki.tunniste, |
2 | 55 | 'alue': pysähdys.pysäkki.alue, |
0 | 56 | 'nimi': pysähdys.pysäkki.nimi, |
57 | }) | |
2 | 58 | alue = pysähdys.pysäkki.alue |
59 | if alue: | |
60 | if alue not in käydyt_alueet: | |
61 | suppea_reitti.append({ | |
62 | 'aika': muotoiltu_aika, | |
63 | 'alue': alue | |
64 | }) | |
65 | käydyt_alueet.add(alue) | |
66 | sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html' | |
67 | return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti, | |
68 | numero = numero, linja = ajovuoro.linja.viite, selite = ajovuoro.kyltti) | |
0 | 69 | |
70 | if __name__ == '__main__': | |
2 | 71 | from argparse import ArgumentParser |
72 | parser = ArgumentParser() | |
73 | parser.add_argument('-p', '--port', type = int, default = 5000) | |
74 | args = parser.parse_args() | |
3 | 75 | app.run(debug = True, port = args.port) |