palvelu.py

Tue, 18 Apr 2017 14:59:18 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Tue, 18 Apr 2017 14:59:18 +0300
changeset 2
48efa8ca14dd
parent 0
fc48613c73e5
child 3
ca2df60215ff
permissions
-rwxr-xr-x

Suppea ajovuoroesitys

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

mercurial