service.py

Tue, 20 Jun 2017 09:37:43 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Tue, 20 Jun 2017 09:37:43 +0300
changeset 22
3d094a804af8
parent 21
6a0394d5a159
child 24
e6bdb9c54096
permissions
-rwxr-xr-x

lisää muutoksia

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
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
61 ajomatka = schedule_entry['trip'].length - schedule_entry['stop'].ajettu_matka
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
62 sign = supista_reitti(schedule_entry['trip'].suppea_reitti(schedule_entry['stop']), ajomatka = ajomatka)
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
63 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
64 sign_representation = ' - '.join(sign)
21
6a0394d5a159 Yleistä päivittelyä
Teemu Piippo <teemu@hecknology.net>
parents: 20
diff changeset
65 #if len(sign_representation) > 25:
6a0394d5a159 Yleistä päivittelyä
Teemu Piippo <teemu@hecknology.net>
parents: 20
diff changeset
66 # k = ceil(len(sign) / 2)
6a0394d5a159 Yleistä päivittelyä
Teemu Piippo <teemu@hecknology.net>
parents: 20
diff changeset
67 # sign_representation = ' - '.join(sign[:k]) + '\n' + ' - '.join(sign[k:])
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
68 return sign_representation
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
69
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
70 @app.route('/pysäkki/<tunniste>')
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
71 def pysäkkiaikataulu(tunniste):
7
f3791dccfd03 Käännetty tiedostojen nimet englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
72 from buses import pysäkit
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
73 aikataulu = []
3
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
74 try:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
75 pysäkki = pysäkit[tunniste]
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
76 except KeyError:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
77 abort(404)
18
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
78 for schedule_entry in pysäkki.schedule(100):
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
79 aikataulu.append({
18
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
80 'aika': time_representation(schedule_entry['time']),
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
81 'linja': schedule_entry['trip'].linja.viite,
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
82 'kyltti': sign(schedule_entry),
18
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
83 'ajovuoro': schedule_entry['stop'].ajo.nimi,
1c8ff93fbfac Lisää käännöstä
Teemu Piippo <teemu@hecknology.net>
parents: 17
diff changeset
84 'yö': is_night_time(schedule_entry['time']),
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
85 })
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
86 from os import path
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
87 tausta = path.join('static', 'tausta-' + (pysäkki.alue or 'pysäkki').lower().replace(' ', '-') + '.png')
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
88 if not path.isfile(tausta):
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
89 tausta = None
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
90 return render_template(
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
91 'pysäkki.html',
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
92 aikataulu = aikataulu,
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
93 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
94 linkki_karttaan = pysäkki.sijainti.link_to_map,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
95 alue = pysäkki.alue,
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
96 sijainti = pysäkki.sijainti,
21
6a0394d5a159 Yleistä päivittelyä
Teemu Piippo <teemu@hecknology.net>
parents: 20
diff changeset
97 cluster = pysäkki.cluster.url_name if len(pysäkki.cluster.stops) > 1 else None,
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
98 tr = tr,
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
99 tausta = tausta,
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
100 )
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
101
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
102 def time_representation(aika, suhteellinen = True):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
103 erotus = aika - nyt()
21
6a0394d5a159 Yleistä päivittelyä
Teemu Piippo <teemu@hecknology.net>
parents: 20
diff changeset
104 if suhteellinen and erotus > timedelta(0) and erotus < timedelta(minutes = 1):
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
105 return tr('right-now', 'misc-text')
21
6a0394d5a159 Yleistä päivittelyä
Teemu Piippo <teemu@hecknology.net>
parents: 20
diff changeset
106 elif suhteellinen and erotus > timedelta(0) and erotus < timedelta(minutes = 10):
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
107 return '%dm' % round(erotus.seconds / 60)
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
108 elif aika.date() == tänään():
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
109 return '%d:%02d' % (aika.hour, aika.minute)
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
110 elif erotus < timedelta(7):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
111 with activate_locale():
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
112 return aika.strftime('%-a %H:%M')
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
113 else:
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
114 with activate_locale():
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
115 return aika.strftime('%-d.%-m. %H:%M')
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
116
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
117 @app.route('/pysäkkiryhmä/<cluster_name>')
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
118 def cluster_schedule(cluster_name):
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
119 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
120 aikataulu = []
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
121 try:
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
122 cluster = clusters_by_name[cluster_name]
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
123 except KeyError:
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
124 abort(404)
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
125 for schedule_entry in cluster.schedule(100):
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
126 aikataulu.append({
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
127 'aika': time_representation(schedule_entry['time']),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
128 'linja': schedule_entry['trip'].linja.viite,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
129 'kyltti': sign(schedule_entry),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
130 'ajovuoro': schedule_entry['stop'].ajo.nimi,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
131 'yö': is_night_time(schedule_entry['time']),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
132 '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
133 '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
134 })
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
135 return render_template(
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
136 'cluster.html',
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
137 aikataulu = aikataulu,
21
6a0394d5a159 Yleistä päivittelyä
Teemu Piippo <teemu@hecknology.net>
parents: 20
diff changeset
138 nimi = cluster.name,
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
139 linkki_karttaan = cluster.center.link_to_map,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
140 sijainti = cluster.center,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
141 stops_in_cluster = sorted(
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
142 ({
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
143 'id': stop.tunniste,
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
144 'name': tr(stop.nimi, 'pysäkit'),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
145 } for stop in cluster.stops),
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
146 key = lambda stop: (len(stop['id']), stop['id'])
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
147 ),
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
148 tr = tr,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
149 )
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
150
4
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
151 @app.route('/ajovuoro/<numero>')
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
152 def ajoreitti(numero):
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
153 from flask import request
7
f3791dccfd03 Käännetty tiedostojen nimet englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 5
diff changeset
154 from buses import ajot
3
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
155 try:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
156 ajovuoro = ajot[numero]
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
157 except KeyError:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
158 abort(404)
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
159 reitti = []
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
160 suppea_reitti = []
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
161 käydyt_alueet = set()
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
162 for pysähdys in ajovuoro.reitti:
4
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
163 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
164 muotoiltu_aika = time_representation(aika)
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
165 reitti.append({
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
166 'aika': muotoiltu_aika,
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
167 '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
168 '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
169 'nimi': tr(pysähdys.pysäkki.nimi, 'pysäkit'),
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
170 })
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
171 alue = pysähdys.pysäkki.alue
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
172 if alue:
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
173 if alue not in käydyt_alueet:
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
174 suppea_reitti.append({
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
175 'aika': muotoiltu_aika,
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
176 'alue': alue or '',
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
177 })
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
178 käydyt_alueet.add(alue)
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
179 kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True, ajomatka = ajovuoro.length)
21
6a0394d5a159 Yleistä päivittelyä
Teemu Piippo <teemu@hecknology.net>
parents: 20
diff changeset
180 kyltti = [kyltti[0], kyltti[-1]]
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
181 for entry in suppea_reitti:
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
182 entry['alue'] = tr(entry['alue'], 'paikat')
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
183 return render_template('ajovuoro.html',
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
184 reitti = reitti,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
185 suppea_reitti = suppea_reitti,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
186 numero = numero,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
187 linja = ajovuoro.linja.viite,
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
188 selite = ' - '.join(tr(paikka, 'paikat') for paikka in kyltti),
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
189 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
190 tr = tr,
22
3d094a804af8 lisää muutoksia
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
191 length = ajovuoro.length / 1000
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
192 )
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
193
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
194 @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
195 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
196 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
197
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
198 if __name__ == '__main__':
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
199 from argparse import ArgumentParser
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
200 parser = ArgumentParser()
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
201 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
202 parser.add_argument('-d', '--debug', action = 'store_true')
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
203 args = parser.parse_args()
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
204 app.run(debug = args.debug, port = args.port)

mercurial