service.py

Sat, 24 Jun 2017 19:38:05 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Sat, 24 Jun 2017 19:38:05 +0300
changeset 30
a5bfd99bc2a3
parent 29
2c78e68d7363
child 31
60045b362d71
permissions
-rwxr-xr-x

Lisää päivityksiä

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

mercurial