service.py

Wed, 28 Jun 2017 16:25:17 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Wed, 28 Jun 2017 16:25:17 +0300
changeset 37
5da3315058a2
parent 31
60045b362d71
child 38
d0ae1996abdd
permissions
-rwxr-xr-x

Kavennettu hieman

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 *
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
9 from busroute import reduce_schedule
30
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
10 import buses
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
11
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
12 app = Flask(__name__)
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
13
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
14 # Varmista ettei järjestelmän kieliasetukset sotke muotoiluja
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
15 def reset_locale():
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
16 locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
17
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
18 def activate_locale(language = None):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
19 language = language or language_for_page()
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
20 class result:
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
21 def __enter__(self):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
22 locale.setlocale(locale.LC_ALL, tr('locale', 'other', language = language))
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
23 def __exit__(self, *args):
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
24 reset_locale()
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
25 return result()
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
26
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
27 reset_locale()
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
28
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
29 # Lataa käännökset
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
30 class Translator:
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
31 def __init__(self):
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
32 self.languages = {}
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
33 def load_language(self, file_path):
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
34 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
35 ini = ConfigParser()
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
36 ini.read(path.join(file_path))
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
37 self.languages[language_name] = ini
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
38 def __call__(self, name, *sections, language = None):
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
39 language = language or language_for_page()
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
40 for section in sections:
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
41 try:
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
42 return self.languages[language][section][name]
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
43 except KeyError:
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
44 pass
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
45 else:
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
46 return name
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 tr = Translator()
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
49 for file in listdir('tr'):
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
50 tr.load_language(path.join('tr', file))
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
51
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
52 def language_for_page():
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
53 from flask import request
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
54 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
55 return None
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
56 else:
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
57 for language_name in tr.languages:
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
58 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
59 return language_name
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
60 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
61 return 'fi'
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
62
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
63 def sign(schedule_entry):
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
64 from math import ceil
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
65 trip_length = schedule_entry['trip'].length - schedule_entry['stop'].traveled_distance
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
66 sign = reduce_schedule(schedule_entry['trip'].concise_schedule(schedule_entry['stop']), trip_length = trip_length)
29
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
67 if sign:
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
68 sign = [tr(place, 'paikat') for place in sign]
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
69 sign_representation = ' - '.join(sign)
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
70 #if len(sign_representation) > 25:
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
71 # k = ceil(len(sign) / 2)
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
72 # sign_representation = ' - '.join(sign[:k]) + '\n' + ' - '.join(sign[k:])
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
73 return sign_representation
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
74 else:
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
75 return schedule_entry['trip'].schedule[-1].stop.name
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
76
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
77 @app.route('/pysäkki/<reference>')
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
78 def bus_stop_schedule(reference):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
79 from buses import bus_stops
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
80 schedule = []
3
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
81 try:
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
82 bus_stop = bus_stops[reference]
3
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
83 except KeyError:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
84 abort(404)
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
85 for schedule_entry in bus_stop.schedule(max_amount = 100, arrivals = True):
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
86 schedule.append({
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
87 'time': time_representation(schedule_entry['time']),
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
88 'route': schedule_entry['trip'].route.reference,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
89 'sign': sign(schedule_entry),
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
90 'trip': schedule_entry['stop'].trip.name,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
91 'night': is_night_time(schedule_entry['time']),
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
92 })
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
93 return render_template(
25
cb423946cf33 Uudelleennimetty templaatit
Teemu Piippo <teemu@hecknology.net>
parents: 24
diff changeset
94 'stop.html',
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
95 schedule = schedule,
29
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
96 name = bus_stop.code + ' ' + tr(bus_stop.name, 'bus_stops'),
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
97 link_to_map = bus_stop.location.link_to_map,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
98 region = bus_stop.region,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
99 location = bus_stop.location,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
100 cluster = bus_stop.cluster.url_name if len(bus_stop.cluster.stops) > 1 else None,
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
101 tr = tr,
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
102 )
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
103
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
104 def time_representation(time, relative = True):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
105 time_difference = time - now()
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
106 if relative and time_difference > timedelta(0) and time_difference < timedelta(minutes = 1):
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
107 return tr('right-now', 'misc-text')
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
108 elif relative and time_difference > timedelta(0) and time_difference < timedelta(minutes = 10):
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
109 return '%dm' % round(time_difference.seconds / 60)
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
110 elif time.date() == today():
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
111 return '%d:%02d' % (time.hour, time.minute)
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
112 elif time_difference < timedelta(7):
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
113 with activate_locale():
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
114 return time.strftime('%-a %H:%M').replace(' ', '\xa0')
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
115 else:
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
116 with activate_locale():
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
117 return time.strftime('%-d.%-m. %H:%M').replace(' ', '\xa0')
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
118
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
119 @app.route('/pysäkkiryhmä/<cluster_name>')
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
120 def cluster_schedule(cluster_name):
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
121 from buses import bus_stops, clusters_by_name
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
122 schedule = []
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
123 try:
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
124 cluster = clusters_by_name[cluster_name]
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
125 except KeyError:
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
126 abort(404)
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
127 for schedule_entry in cluster.schedule(max_amount = 100):
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
128 schedule.append({
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
129 'time': time_representation(schedule_entry['time']),
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
130 'route': schedule_entry['trip'].route.reference,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
131 'sign': sign(schedule_entry),
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
132 'trip': schedule_entry['stop'].trip.name,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
133 'night': is_night_time(schedule_entry['time']),
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
134 'stop_id': schedule_entry['stop'].stop.reference,
29
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
135 'stop_code': schedule_entry['stop'].stop.code,
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
136 'stop_name': tr(schedule_entry['stop'].stop.name, 'pysäkit'),
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
137 })
27
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
138 stops_in_cluster = sorted(
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
139 ({
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
140 'id': stop.reference,
29
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
141 'code': stop.code,
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
142 'name': tr(stop.name, 'pysäkit'),
27
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
143 } for stop in cluster.stops),
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
144 key = lambda stop: (len(stop['id']), stop['id'])
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
145 )
19
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
146 return render_template(
16fa9fb20b32 Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
147 'cluster.html',
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
148 schedule = schedule,
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
149 name = tr(cluster.name, 'paikat', 'pysäkkiryhmät', 'pysäkit'),
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
150 link_to_map = cluster.center.link_to_map,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
151 location = cluster.center,
27
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
152 stops_in_cluster = stops_in_cluster,
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
153 amount_of_stops_in_cluster = len(stops_in_cluster),
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
154 tr = tr,
5
a65b680f1774 Paljon asioita
Teemu Piippo <teemu@hecknology.net>
parents: 4
diff changeset
155 )
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
156
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
157 @app.route('/ajovuoro/<trip_reference>')
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
158 def trip(trip_reference):
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
159 from flask import request
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
160 from buses import all_trips
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
161 from busroute import simplify_name
3
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
162 try:
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
163 trip = all_trips[trip_reference]
3
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
164 except KeyError:
ca2df60215ff Lisätty alueita
Teemu Piippo <teemu@hecknology.net>
parents: 2
diff changeset
165 abort(404)
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
166 schedule = []
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
167 region = ''
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
168 for halt in trip.schedule:
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
169 stop_time = datetime.combine(today(), time()) + halt.arrival_time
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
170 formatted_time = time_representation(stop_time)
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
171 if halt.stop.region != region and not (region and not halt.stop.region):
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
172 if len(schedule) and not schedule[-1]['name']:
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
173 schedule[-1]['name'] = tr(halt.stop.region or '', 'paikat')
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
174 else:
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
175 schedule.append({
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
176 'name': tr(halt.stop.region or '', 'paikat'),
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
177 'time': formatted_time,
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
178 'stops': [],
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
179 'index': len(schedule),
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
180 })
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
181 region = halt.stop.region
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
182 schedule[-1]['stops'].append({
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
183 'time': formatted_time,
29
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
184 'id': halt.stop.reference,
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
185 'code': halt.stop.code,
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
186 'name': tr(halt.stop.name, 'bus_stops'),
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
187 })
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
188 sign = trip.concise_schedule()
29
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
189 try:
31
60045b362d71 - Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents: 30
diff changeset
190 sign = [simplify_name(sign[0]), simplify_name(sign[-1])]
29
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
191 except IndexError:
2c78e68d7363 Mööö
Teemu Piippo <teemu@hecknology.net>
parents: 27
diff changeset
192 sign = [trip.schedule[0].stop.name, trip.schedule[-1].stop.name]
25
cb423946cf33 Uudelleennimetty templaatit
Teemu Piippo <teemu@hecknology.net>
parents: 24
diff changeset
193 return render_template('trip.html',
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
194 schedule = schedule,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
195 trip_reference = trip_reference,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
196 route = trip.route.reference,
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
197 description = ' - '.join(tr(place, 'paikat') for place in sign),
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
198 night = is_night_time(datetime.combine(today(), time()) + trip.schedule[-1].arrival_time),
20
3199e289ae62 - Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents: 19
diff changeset
199 tr = tr,
27
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
200 length = trip.length / 1000,
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
201 )
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
202
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
203 @app.route('/linja/<name>')
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
204 def route_page(name):
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
205 from buses import routes
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
206 route = routes[name.upper()]
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
207 schedule = []
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
208 for trip in route.trips:
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
209 if trip.is_served_at(today()) and datetime.combine(today(), time()) + trip.schedule[-1].arrival_time < now():
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
210 schedule.append({
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
211 'name': trip.reference,
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
212 'from': trip.from_place,
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
213 'to': trip.to_place,
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
214 'time': time_representation(datetime.combine(today(), time()) + trip.schedule[0].departure_time),
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
215 })
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
216 return render_template('route.html',
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
217 name = route.reference + ' ' + route.description,
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
218 tr = tr,
f89504285945 Lisää aluejuttuja
Teemu Piippo <teemu@hecknology.net>
parents: 25
diff changeset
219 schedule = schedule,
24
e6bdb9c54096 Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents: 22
diff changeset
220 )
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
221
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
222 @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
223 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
224 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
225
30
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
226 from argparse import ArgumentParser
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
227 parser = ArgumentParser()
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
228 parser.add_argument('gtfs_zip_path')
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
229 parser.add_argument('profile_path')
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
230
0
fc48613c73e5 Alustava versio
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
231 if __name__ == '__main__':
2
48efa8ca14dd Suppea ajovuoroesitys
Teemu Piippo <teemu@hecknology.net>
parents: 0
diff changeset
232 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
233 parser.add_argument('-d', '--debug', action = 'store_true')
30
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
234
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
235 args = parser.parse_args()
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
236 profile = ConfigParser()
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
237 profile.read(args.profile_path)
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
238 buses.load_buses(args.gtfs_zip_path, profile = profile)
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
239
a5bfd99bc2a3 Lisää päivityksiä
Teemu Piippo <teemu@hecknology.net>
parents: 29
diff changeset
240 if __name__ == '__main__':
10
843c6ee340e7 Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents: 9
diff changeset
241 app.run(debug = args.debug, port = args.port)

mercurial