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 import locale |
5 import locale |
5 |
6 |
6 app = Flask(__name__) |
7 app = Flask(__name__) |
7 locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) |
8 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 |
9 |
20 @app.route('/pysäkki/<tunniste>') |
10 @app.route('/pysäkki/<tunniste>') |
21 def pysäkkiaikataulu(tunniste): |
11 def pysäkkiaikataulu(tunniste): |
22 from bussit import pysäkit |
12 from bussit import pysäkit |
23 aikataulu = [] |
13 aikataulu = [] |
29 aikataulu.append({ |
19 aikataulu.append({ |
30 'aika': muotoile_aika(aika), |
20 'aika': muotoile_aika(aika), |
31 'linja': pysähdys.ajo.linja.viite, |
21 'linja': pysähdys.ajo.linja.viite, |
32 'kyltti': pysähdys.ajo.kyltti, |
22 'kyltti': pysähdys.ajo.kyltti, |
33 'ajovuoro': pysähdys.ajo.nimi, |
23 'ajovuoro': pysähdys.ajo.nimi, |
|
24 'yö': yö(aika), |
34 }) |
25 }) |
35 return render_template('pysäkki.html', aikataulu = aikataulu, viite = tunniste, nimi = pysäkki.nimi) |
26 return render_template('pysäkki.html', aikataulu = aikataulu, viite = tunniste, nimi = pysäkki.nimi) |
36 |
27 |
37 @app.route('/ajovuoro/<int:numero>') |
28 @app.route('/ajovuoro/<numero>') |
38 def ajoreitti(numero): |
29 def ajoreitti(numero): |
39 from flask import request |
30 from flask import request |
40 from bussit import ajot |
31 from bussit import ajot |
41 try: |
32 try: |
42 ajovuoro = ajot[numero] |
33 ajovuoro = ajot[numero] |
45 suppea = request.args.get('suppea') is not None |
36 suppea = request.args.get('suppea') is not None |
46 reitti = [] |
37 reitti = [] |
47 suppea_reitti = [] |
38 suppea_reitti = [] |
48 käydyt_alueet = set() |
39 käydyt_alueet = set() |
49 for pysähdys in ajovuoro.reitti: |
40 for pysähdys in ajovuoro.reitti: |
50 aika = datetime.combine(date.today(), time()) + pysähdys.saapumisaika |
41 aika = datetime.combine(tänään(), time()) + pysähdys.saapumisaika |
51 muotoiltu_aika = muotoile_aika(aika, suhteellinen = False) |
42 muotoiltu_aika = muotoile_aika(aika) |
52 reitti.append({ |
43 reitti.append({ |
53 'aika': muotoiltu_aika, |
44 'aika': muotoiltu_aika, |
54 'tunniste': pysähdys.pysäkki.tunniste, |
45 'tunniste': pysähdys.pysäkki.tunniste, |
55 'alue': pysähdys.pysäkki.alue, |
46 'alue': pysähdys.pysäkki.alue, |
56 'nimi': pysähdys.pysäkki.nimi, |
47 'nimi': pysähdys.pysäkki.nimi, |
63 'alue': alue |
54 'alue': alue |
64 }) |
55 }) |
65 käydyt_alueet.add(alue) |
56 käydyt_alueet.add(alue) |
66 sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html' |
57 sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html' |
67 return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti, |
58 return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti, |
68 numero = numero, linja = ajovuoro.linja.viite, selite = ajovuoro.kyltti) |
59 numero = numero, linja = ajovuoro.linja.viite, selite = ajovuoro.kyltti, |
|
60 yö = yö(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika)) |
69 |
61 |
70 if __name__ == '__main__': |
62 if __name__ == '__main__': |
71 from argparse import ArgumentParser |
63 from argparse import ArgumentParser |
72 parser = ArgumentParser() |
64 parser = ArgumentParser() |
73 parser.add_argument('-p', '--port', type = int, default = 5000) |
65 parser.add_argument('-p', '--port', type = int, default = 5000) |