service.py

Sun, 11 Jun 2017 01:28:25 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Sun, 11 Jun 2017 01:28:25 +0300
changeset 20
3199e289ae62
parent 19
16fa9fb20b32
child 21
6a0394d5a159
permissions
-rwxr-xr-x

- Sivusto hieman edustuksellisempi
- Aikataulut ottavat edelliselle päivälle merkitty, mutta nykyiselle päivälle "vuotavat" vuorot huomioon (yölinjat)

0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 #!/usr/bin/env python3
11
e18ad36fbbf5 Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents: 10
diff changeset
2 from flask import Flask, render_template, abort, send_from_directory
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
3 from datetime import datetime, date, time, timedelta
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
4 from os import path, listdir
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
5 from configparser import ConfigParser
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
6 import locale
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
7
4
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
8 from misc import *
7
f3791dccfd03 Käännetty tiedostojen nimet englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
9 from busroute import supista_reitti
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
10
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
11 app = Flask(__name__)
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
12
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
13 # Varmista ettei järjestelmän kieliasetukset sotke muotoiluja
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
14 def reset_locale():
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
15 locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
16
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
17 def activate_locale(language = None):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
18 language = language or language_for_page()
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
19 class result:
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
20 def __enter__(self):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
21 locale.setlocale(locale.LC_ALL, tr('locale', 'other', language = language))
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
22 def __exit__(self, *args):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
23 reset_locale()
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
24 return result()
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
25
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
26 reset_locale()
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
27
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
28 # Lataa käännökset
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
29 class Translator:
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
30 def __init__(self):
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
31 self.languages = {}
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
32 def load_language(self, file_path):
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
33 language_name = path.splitext(path.basename(file_path))[0]
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
34 ini = ConfigParser()
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
35 ini.read(path.join(file_path))
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
36 self.languages[language_name] = ini
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
37 def __call__(self, name, section, language = None):
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
38 language = language or language_for_page()
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
39 try:
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
40 return self.languages[language][section][name]
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
41 except KeyError:
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
42 return name
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
43
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
44 tr = Translator()
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
45 for file in listdir('tr'):
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
46 tr.load_language(path.join('tr', file))
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
47
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
48 def language_for_page():
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
49 from flask import request
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
50 if request.args.get('kääntämätön') is not None:
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
51 return None
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
52 else:
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
53 for language_name in tr.languages:
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
54 if request.args.get(language_name) is not None:
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
55 return language_name
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
56 else:
11
e18ad36fbbf5 Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents: 10
diff changeset
57 return 'fi'
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
58
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
59 def sign(schedule_entry):
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
60 from math import ceil
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
61 sign = supista_reitti(schedule_entry['trip'].suppea_reitti(schedule_entry['stop']))
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
62 sign = [tr(paikka, 'paikat') for paikka in sign]
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
63 sign_representation = ' - '.join(sign)
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
64 if len(sign_representation) > 25:
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
65 k = ceil(len(sign) / 2)
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
66 sign_representation = ' - '.join(sign[:k]) + '\n' + ' - '.join(sign[k:])
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
67 return sign_representation
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
68
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
69 @app.route('/pysäkki/<tunniste>')
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
70 def pysäkkiaikataulu(tunniste):
7
f3791dccfd03 Käännetty tiedostojen nimet englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
71 from buses import pysäkit
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
72 aikataulu = []
3
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
73 try:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
74 pysäkki = pysäkit[tunniste]
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
75 except KeyError:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
76 abort(404)
18
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
77 for schedule_entry in pysäkki.schedule(100):
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
78 aikataulu.append({
18
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
79 'aika': time_representation(schedule_entry['time']),
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
80 'linja': schedule_entry['trip'].linja.viite,
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
81 'kyltti': sign(schedule_entry),
18
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
82 'ajovuoro': schedule_entry['stop'].ajo.nimi,
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
83 'yö': is_night_time(schedule_entry['time']),
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
84 })
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
85 return render_template(
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
86 'pysäkki.html',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
87 aikataulu = aikataulu,
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
88 nimi = tunniste + ' ' + tr(pysäkki.nimi, 'pysäkit'),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
89 linkki_karttaan = pysäkki.sijainti.link_to_map,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
90 alue = pysäkki.alue,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
91 sijainti = pysäkki.sijainti,
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
92 cluster = pysäkki.cluster.name if len(pysäkki.cluster.stops) > 1 else None,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
93 tr = tr,
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
94 )
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
95
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
96 def time_representation(aika, suhteellinen = True):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
97 erotus = aika - nyt()
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
98 if suhteellinen and erotus < timedelta(minutes = 1):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
99 return tr('right-now', 'misc-text')
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
100 elif suhteellinen and erotus < timedelta(minutes = 10):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
101 return '%dm' % round(erotus.seconds / 60)
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
102 elif aika.date() == tänään():
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
103 return '%d:%02d' % (aika.hour, aika.minute)
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
104 elif erotus < timedelta(7):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
105 with activate_locale():
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
106 return aika.strftime('%-a %H:%M')
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
107 else:
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
108 with activate_locale():
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
109 return aika.strftime('%-d.%-m. %H:%M')
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
110
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
111 @app.route('/pysäkkiryhmä/<cluster_name>')
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
112 def cluster_schedule(cluster_name):
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
113 from buses import pysäkit, clusters_by_name
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
114 aikataulu = []
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
115 try:
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
116 cluster = clusters_by_name[cluster_name]
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
117 except KeyError:
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
118 abort(404)
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
119 for schedule_entry in cluster.schedule(100):
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
120 aikataulu.append({
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
121 'aika': time_representation(schedule_entry['time']),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
122 'linja': schedule_entry['trip'].linja.viite,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
123 'kyltti': sign(schedule_entry),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
124 'ajovuoro': schedule_entry['stop'].ajo.nimi,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
125 'yö': is_night_time(schedule_entry['time']),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
126 'stop_id': schedule_entry['stop'].pysäkki.tunniste,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
127 'stop_name': tr(schedule_entry['stop'].pysäkki.nimi, 'pysäkit'),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
128 })
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
129 return render_template(
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
130 'cluster.html',
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
131 aikataulu = aikataulu,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
132 nimi = 'Yhdistetty pysäkkiaikataulu ' + cluster_name,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
133 linkki_karttaan = cluster.center.link_to_map,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
134 sijainti = cluster.center,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
135 stops_in_cluster = sorted(
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
136 ({
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
137 'id': stop.tunniste,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
138 'name': tr(stop.nimi, 'pysäkit'),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
139 } for stop in cluster.stops),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
140 key = lambda stop: (len(stop['id']), stop['id'])
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
141 ),
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
142 tr = tr,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
143 )
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
144
4
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
145 @app.route('/ajovuoro/<numero>')
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
146 def ajoreitti(numero):
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
147 from flask import request
7
f3791dccfd03 Käännetty tiedostojen nimet englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
148 from buses import ajot
3
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
149 try:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
150 ajovuoro = ajot[numero]
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
151 except KeyError:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
152 abort(404)
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
153 suppea = request.args.get('suppea') is not None
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
154 reitti = []
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
155 suppea_reitti = []
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
156 käydyt_alueet = set()
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
157 for pysähdys in ajovuoro.reitti:
4
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
158 aika = datetime.combine(tänään(), time()) + pysähdys.saapumisaika
18
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
159 muotoiltu_aika = time_representation(aika)
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
160 reitti.append({
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
161 'aika': muotoiltu_aika,
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
162 'tunniste': pysähdys.pysäkki.tunniste,
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
163 'alue': tr(pysähdys.pysäkki.alue or '', 'paikat'),
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
164 'nimi': tr(pysähdys.pysäkki.nimi, 'pysäkit'),
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
165 })
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
166 alue = pysähdys.pysäkki.alue
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
167 if alue:
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
168 if alue not in käydyt_alueet:
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
169 suppea_reitti.append({
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
170 'aika': muotoiltu_aika,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
171 'alue': alue,
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
172 })
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
173 käydyt_alueet.add(alue)
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
174 kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True)
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
175 sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html'
18
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
176 return render_template(sivu,
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
177 reitti = reitti,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
178 suppea_reitti = suppea_reitti,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
179 numero = numero,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
180 linja = ajovuoro.linja.viite,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
181 selite = ' - '.join(tr(paikka, 'paikat') for paikka in kyltti),
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
182 yö = is_night_time(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika),
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
183 tr = tr,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
184 )
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
185
11
e18ad36fbbf5 Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents: 10
diff changeset
186 @app.route('/static/<path:path>')
e18ad36fbbf5 Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents: 10
diff changeset
187 def static_file(path):
e18ad36fbbf5 Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents: 10
diff changeset
188 return send_from_directory(path.join('static', path))
e18ad36fbbf5 Lisätty favicon, korjattu tr()-funktio joka ei olettunut suomen kieleen (vaan kääntämättömään)
Teemu Piippo <teemu@hecknology.net>
parents: 10
diff changeset
189
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
190 if __name__ == '__main__':
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
191 from argparse import ArgumentParser
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
192 parser = ArgumentParser()
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
193 parser.add_argument('-p', '--port', type = int, default = 5000)
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
194 parser.add_argument('-d', '--debug', action = 'store_true')
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
195 args = parser.parse_args()
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
196 app.run(debug = args.debug, port = args.port)

mercurial