Fri, 24 Nov 2017 22:41:48 +0200
stop_description ja muuta roinaa
0 | 1 | #!/usr/bin/env python3 |
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
2 | from flask import Flask, render_template, abort, send_from_directory, redirect |
0 | 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 | 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 | 10 | import buses |
0 | 11 | |
12 | app = Flask(__name__) | |
73
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
13 | suffix_regions = {'naantalin pikatie', 'helsingin valtatie', 'kansanpuisto'} |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
14 | |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
15 | # Varmista ettei järjestelmän kieliasetukset sotke muotoiluja |
20
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
16 | def reset_locale(): |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
17 | locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
18 | |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
19 | def activate_locale(language = None): |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
20 | language = language or language_for_page() |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
21 | class result: |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
22 | def __enter__(self): |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
23 | locale.setlocale(locale.LC_ALL, tr('locale', 'other', language = language)) |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
24 | def __exit__(self, *args): |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
25 | reset_locale() |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
26 | return result() |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
27 | |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
28 | reset_locale() |
0 | 29 | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
30 | # Lataa käännökset |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
31 | class Translator: |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
32 | def __init__(self): |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
33 | self.languages = {} |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
34 | def load_language(self, file_path): |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
35 | 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
|
36 | ini = ConfigParser() |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
37 | ini.read(path.join(file_path)) |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
38 | 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
|
39 | 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
|
40 | 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
|
41 | for section in sections: |
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
42 | try: |
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
43 | 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
|
44 | except KeyError: |
72 | 45 | try: |
46 | return profile['tr:' + language + ':' + section][name] | |
47 | except KeyError: | |
48 | pass | |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
49 | else: |
72 | 50 | return name[:1].upper() + name[1:] |
5 | 51 | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
52 | tr = Translator() |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
53 | for file in listdir('tr'): |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
54 | tr.load_language(path.join('tr', file)) |
5 | 55 | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
56 | def language_for_page(): |
5 | 57 | from flask import request |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
58 | 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
|
59 | return None |
5 | 60 | else: |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
61 | for language_name in tr.languages: |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
62 | 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
|
63 | return language_name |
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
64 | else: |
61
0c9b09f694f3
Kielituki käyttöön. Kauhean monimutkaista koodia tähänkin vaadittiin viime kädessä
Teemu Piippo <teemu@hecknology.net>
parents:
55
diff
changeset
|
65 | return request.accept_languages.best_match(tr.languages) |
5 | 66 | |
73
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
67 | def sign_elements(schedule_entry, long = False): |
19
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
68 | from math import ceil |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
69 | trip_length = schedule_entry['trip'].length - schedule_entry['stop'].traveled_distance |
73
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
70 | return reduce_schedule( |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
71 | schedule_entry['trip'].concise_schedule(schedule_entry['stop']), |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
72 | trip_length = trip_length, |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
73 | long = long) |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
74 | |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
75 | def sign(schedule_entry, long = False): |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
76 | sign = sign_elements(schedule_entry, long = long) |
29 | 77 | if sign: |
72 | 78 | sign_representation = ' - '.join(tr(place, 'places') for place in sign if place not in suffix_regions) |
55
0f1d046b3f78
Suppeampi näkymä, pikatiet ja mootoritiet
Teemu Piippo <teemu@hecknology.net>
parents:
53
diff
changeset
|
79 | sign_representation += ''.join(' ' + tr(place, 'suffix-places') for place in sign if place in suffix_regions) |
29 | 80 | return sign_representation |
81 | else: | |
82 | 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
|
83 | |
68 | 84 | def long_form_sign(schedule_entry): |
85 | from math import ceil | |
86 | trip_length = schedule_entry['trip'].length - schedule_entry['stop'].traveled_distance | |
87 | sign = reduce_schedule(schedule_entry['trip'].concise_schedule(schedule_entry['stop']), trip_length = trip_length, long = True) | |
88 | if sign: | |
89 | return { | |
72 | 90 | 'destination': tr(sign[-1], 'places'), |
91 | 'via': [tr(place, 'places') for place in sign[:-1]], | |
68 | 92 | } |
93 | else: | |
94 | return { | |
95 | 'destination': schedule_entry['trip'].schedule[-1].stop.name, | |
96 | 'via': [], | |
97 | } | |
98 | ||
99 | ||
38
d0ae1996abdd
Lisätty vilkkuvat merkit hetken päästä lähteville
Teemu Piippo <teemu@hecknology.net>
parents:
31
diff
changeset
|
100 | def imminent(schedule_entry): |
d0ae1996abdd
Lisätty vilkkuvat merkit hetken päästä lähteville
Teemu Piippo <teemu@hecknology.net>
parents:
31
diff
changeset
|
101 | return (schedule_entry['time'] - now()) <= timedelta(minutes = 3) |
d0ae1996abdd
Lisätty vilkkuvat merkit hetken päästä lähteville
Teemu Piippo <teemu@hecknology.net>
parents:
31
diff
changeset
|
102 | |
71
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
103 | def first_halt_in_trip_in_place(trip, place): |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
104 | for halt in trip.schedule: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
105 | if halt.stop.region == place: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
106 | return halt |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
107 | else: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
108 | return None |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
109 | |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
110 | place_abbreviations = ConfigParser() |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
111 | place_abbreviations.read('abbreviations.ini') |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
112 | |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
113 | def place_abbreviation(place): |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
114 | try: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
115 | return place_abbreviations['abbreviations'][place] |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
116 | except KeyError: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
117 | return place |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
118 | |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
119 | def trip_abbreviation(trip): |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
120 | entries = [trip.from_place] |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
121 | old_places = None |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
122 | starting_halt = None |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
123 | while True: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
124 | remaining_length = trip.length |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
125 | if starting_halt: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
126 | remaining_length -= starting_halt.traveled_distance |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
127 | places = reduce_schedule(trip.concise_schedule(starting_stop = starting_halt), trip_length = remaining_length, long = False) |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
128 | new_places = set(places) - set(entries) |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
129 | if not new_places or places == old_places: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
130 | break |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
131 | for place in places: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
132 | if place in new_places: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
133 | starting_halt = first_halt_in_trip_in_place(trip, place) |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
134 | entries += [place] |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
135 | break |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
136 | old_places = places |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
137 | if trip.to_place not in entries: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
138 | entries += [trip.to_place] |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
139 | return trip.route.reference + ':' + '-'.join(map(place_abbreviation, entries)) |
68 | 140 | |
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
141 | @app.route('/stop/<reference>') |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
142 | def bus_stop_schedule(reference): |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
143 | from buses import bus_stops |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
144 | schedule = [] |
3 | 145 | try: |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
146 | bus_stop = bus_stops[reference] |
3 | 147 | except KeyError: |
148 | abort(404) | |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
149 | 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
|
150 | schedule.append({ |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
151 | 'time': time_representation(schedule_entry['time']), |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
152 | 'route': schedule_entry['trip'].route.reference, |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
153 | 'sign': sign(schedule_entry), |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
154 | 'trip': schedule_entry['stop'].trip.name, |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
155 | 'night': is_night_time(schedule_entry['time']), |
38
d0ae1996abdd
Lisätty vilkkuvat merkit hetken päästä lähteville
Teemu Piippo <teemu@hecknology.net>
parents:
31
diff
changeset
|
156 | 'imminent': imminent(schedule_entry), |
0 | 157 | }) |
5 | 158 | return render_template( |
25
cb423946cf33
Uudelleennimetty templaatit
Teemu Piippo <teemu@hecknology.net>
parents:
24
diff
changeset
|
159 | 'stop.html', |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
160 | schedule = schedule, |
72 | 161 | name = bus_stop.code + ' ' + tr(bus_stop.name, 'bus-stops', 'places'), |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
162 | link_to_map = bus_stop.location.link_to_map, |
72 | 163 | region = hasattr(bus_stop, 'region') and bus_stop.region or None, |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
164 | location = bus_stop.location, |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
165 | 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
|
166 | tr = tr, |
19
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
167 | ) |
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
168 | |
73
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
169 | @app.route('/stop_description/<reference>') |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
170 | def bus_stop_description(reference): |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
171 | from buses import bus_stops |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
172 | schedule = [] |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
173 | try: |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
174 | bus_stop = bus_stops[reference] |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
175 | except KeyError: |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
176 | abort(404) |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
177 | from collections import defaultdict, Counter |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
178 | from busroute import simplify_name |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
179 | destinations_per_route = defaultdict(Counter) |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
180 | def route_key(route_ref): |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
181 | from re import search |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
182 | match = search(r'^([^0-9]*)([0-9]+)(.*)$', route_ref).groups() |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
183 | if match: |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
184 | return match[0], int(match[1]), match[2] |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
185 | else: |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
186 | return () |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
187 | def filter_names(names): |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
188 | if len(names) == 1 and names[0] == (bus_stop.region and simplify_name(bus_stop.region)): |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
189 | return type(names)() |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
190 | else: |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
191 | return names |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
192 | for schedule_entry in bus_stop.schedule(max_amount = 100, arrivals = True): |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
193 | sign_tuple = tuple(sign_elements(schedule_entry)) |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
194 | destinations_per_route[schedule_entry['trip'].route.reference][sign_tuple] += 1 |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
195 | routes_per_destination = defaultdict(set) |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
196 | for route in destinations_per_route: |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
197 | winner = filter_names(destinations_per_route[route].most_common()[0][0]) |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
198 | destinations_per_route[route] = winner and ' - '.join(winner) or '' |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
199 | routes_per_destination[winner].add(route) |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
200 | for key in routes_per_destination: |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
201 | routes_per_destination[key] = sorted(routes_per_destination[key], key = route_key) |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
202 | from pprint import pformat |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
203 | return pformat(routes_per_destination) |
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
204 | |
71
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
205 | @app.route('/api/describe_destination/<trip_reference>/<stop_reference>/<int:index>') |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
206 | def describe_destination(trip_reference, stop_reference, index): |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
207 | from buses import bus_stops, all_trips |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
208 | from busroute import simplify_name |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
209 | from flask import jsonify |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
210 | try: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
211 | trip = all_trips[trip_reference] |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
212 | bus_stop = bus_stops[stop] |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
213 | schedule_entry = [schedule_entry for schedule_entry in trip.schedule if schedule_entry.stop.reference == stop_reference][index] |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
214 | except KeyError: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
215 | abort(404) |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
216 | except ValueError: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
217 | abort(404) |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
218 | return jsonify(long_form_sign({'trip': trip, 'stop': schedule_entry})) |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
219 | |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
220 | @app.route('/api/trip_abbreviation/<block_id>/<int:arrival_time_offset>') |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
221 | def api_trip_abbreviation(block_id, arrival_time_offset): |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
222 | from buses import trips_by_vehicle_info |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
223 | from flask import jsonify |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
224 | from datetime import timedelta |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
225 | try: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
226 | trip = trips_by_vehicle_info[block_id, timedelta(seconds = arrival_time_offset)] |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
227 | except KeyError: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
228 | abort(404) |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
229 | return jsonify({ |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
230 | 'abbreviation': trip_abbreviation(trip), |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
231 | }) |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
232 | |
68 | 233 | @app.route('/stop_display/<reference>') |
234 | def stop_display(reference): | |
235 | from buses import bus_stops | |
236 | schedule = [] | |
237 | try: | |
238 | bus_stop = bus_stops[reference] | |
239 | except KeyError: | |
240 | abort(404) | |
73
c56b0ef96514
stop_description ja muuta roinaa
Teemu Piippo <teemu@hecknology.net>
parents:
72
diff
changeset
|
241 | for i, schedule_entry in enumerate(bus_stop.schedule_for_day(today(), arrivals = False)[:6]): |
68 | 242 | schedule.append({ |
243 | 'time_data': schedule_entry['time'], | |
244 | 'time': time_representation(schedule_entry['time']), | |
245 | 'route': schedule_entry['trip'].route.reference, | |
246 | 'sign': long_form_sign(schedule_entry), | |
247 | 'trip': schedule_entry['stop'].trip.name, | |
248 | 'night': is_night_time(schedule_entry['time']), | |
249 | 'imminent': imminent(schedule_entry), | |
250 | 'index': i, | |
251 | }) | |
252 | from pprint import pprint | |
253 | pprint(schedule) | |
254 | if schedule: | |
255 | num_imminent_leaves = max(1, len([schedule_entry for schedule_entry in schedule if schedule_entry['time_data'] - schedule[0]['time_data'] < timedelta(minutes = 3)])) | |
256 | else: | |
257 | num_imminent_leaves = 1 | |
258 | return render_template( | |
259 | 'stop_display.html', | |
260 | schedule = schedule, | |
261 | ref = bus_stop.code, | |
262 | name = tr(bus_stop.name, 'bus-stops'), | |
263 | link_to_map = bus_stop.location.link_to_map, | |
264 | region = bus_stop.region, | |
265 | location = bus_stop.location, | |
266 | cluster = bus_stop.cluster.url_name if len(bus_stop.cluster.stops) > 1 else None, | |
267 | num_imminent_leaves = num_imminent_leaves, | |
268 | tr = tr, | |
269 | ) | |
270 | ||
271 | @app.route('/test') | |
272 | def test(): | |
273 | from buses import bus_stops | |
274 | bus_stop = bus_stops['16'] | |
275 | schedule = [{'imminent': True, | |
276 | 'index': 0, | |
277 | 'night': False, | |
278 | 'route': '2A', | |
279 | 'sign': {'destination': 'Kohmo', 'via': ['Nummenmäki', 'Kurala']}, | |
280 | 'time': '1m', | |
281 | 'trip': '00012501__3798generatedBlock'}, | |
282 | {'imminent': True, | |
283 | 'index': 1, | |
284 | 'night': False, | |
285 | 'route': '54', | |
286 | 'sign': {'destination': 'Ylioppilaskylä', 'via': []}, | |
287 | 'time': '2m', | |
288 | 'trip': '00014359__5656generatedBlock'}, | |
289 | {'imminent': True, | |
290 | 'index': 2, | |
291 | 'night': False, | |
292 | 'route': '1', | |
293 | 'sign': {'destination': 'Lentoasema ✈', 'via': ['Urusvuori']}, | |
294 | 'time': '3m', | |
295 | 'trip': '00010281__1281generatedBlock'}, | |
296 | {'imminent': False, | |
297 | 'index': 3, | |
298 | 'night': False, | |
299 | 'route': '56', | |
300 | 'sign': {'destination': 'Räntämäki', 'via': ['Nummenmäki', 'Halinen']}, | |
301 | 'time': '8m', | |
302 | 'trip': '00014686__5983generatedBlock'}, | |
303 | {'imminent': False, | |
304 | 'index': 4, | |
305 | 'night': False, | |
306 | 'route': '42', | |
307 | 'sign': {'destination': 'Varissuo', 'via': ['Kupittaa as', 'Itäharju']}, | |
308 | 'time': '18:30', | |
309 | 'trip': '00014010__5307generatedBlock'}, | |
310 | {'imminent': False, | |
311 | 'index': 5, | |
312 | 'night': False, | |
313 | 'route': '2B', | |
314 | 'sign': {'destination': 'Littoinen', | |
315 | 'via': ['Nummenmäki', 'Kurala', 'Kohmo']}, | |
316 | 'time': '18:35', | |
317 | 'trip': '00012629__3926generatedBlock'}] | |
318 | return render_template( | |
319 | 'stop_display.html', | |
320 | schedule = schedule, | |
321 | ref = bus_stop.code, | |
322 | name = tr(bus_stop.name, 'bus-stops'), | |
323 | link_to_map = bus_stop.location.link_to_map, | |
324 | region = bus_stop.region, | |
325 | location = bus_stop.location, | |
326 | cluster = bus_stop.cluster.url_name if len(bus_stop.cluster.stops) > 1 else None, | |
327 | num_imminent_leaves = max(1, sum(schedule_entry['imminent'] for schedule_entry in schedule)), | |
328 | tr = tr, | |
329 | ) | |
330 | ||
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
331 | def time_representation(time, relative = True): |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
332 | time_difference = time - now() |
42
0b53b7c70875
Näytä myös aikataulut jotka ovat minuutti sitten menneet
teemu
parents:
38
diff
changeset
|
333 | if relative and timedelta(minutes = -1) < time_difference < timedelta(minutes = 1): |
20
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
334 | return tr('right-now', 'misc-text') |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
335 | 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
|
336 | return '%dm' % round(time_difference.seconds / 60) |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
337 | elif time.date() == today(): |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
338 | return '%d:%02d' % (time.hour, time.minute) |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
339 | elif time_difference < timedelta(7): |
20
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
340 | with activate_locale(): |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
341 | return time.strftime('%-a %H:%M').replace(' ', '\xa0') |
20
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
342 | else: |
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
343 | with activate_locale(): |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
344 | return time.strftime('%-d.%-m. %H:%M').replace(' ', '\xa0') |
20
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
345 | |
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
346 | @app.route('/stop_cluster/<cluster_name>') |
19
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
347 | def cluster_schedule(cluster_name): |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
348 | from buses import bus_stops, clusters_by_name |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
349 | schedule = [] |
19
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
350 | try: |
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
351 | cluster = clusters_by_name[cluster_name] |
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
352 | except KeyError: |
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
353 | abort(404) |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
354 | 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
|
355 | schedule.append({ |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
356 | 'time': time_representation(schedule_entry['time']), |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
357 | 'route': schedule_entry['trip'].route.reference, |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
358 | 'sign': sign(schedule_entry), |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
359 | 'trip': schedule_entry['stop'].trip.name, |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
360 | 'night': is_night_time(schedule_entry['time']), |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
361 | 'stop_id': schedule_entry['stop'].stop.reference, |
29 | 362 | 'stop_code': schedule_entry['stop'].stop.code, |
72 | 363 | 'stop_name': tr(schedule_entry['stop'].stop.name, 'bus-stops', 'places'), |
38
d0ae1996abdd
Lisätty vilkkuvat merkit hetken päästä lähteville
Teemu Piippo <teemu@hecknology.net>
parents:
31
diff
changeset
|
364 | 'imminent': imminent(schedule_entry), |
19
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
365 | }) |
27 | 366 | stops_in_cluster = sorted( |
367 | ({ | |
368 | 'id': stop.reference, | |
29 | 369 | 'code': stop.code, |
63 | 370 | 'name': tr(stop.name, 'bus-stops'), |
27 | 371 | } for stop in cluster.stops), |
372 | key = lambda stop: (len(stop['id']), stop['id']) | |
373 | ) | |
19
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
374 | return render_template( |
16fa9fb20b32
Lisätty pysäkkiryhmän aikataulunäkymä
Teemu Piippo <teemu@hecknology.net>
parents:
18
diff
changeset
|
375 | 'cluster.html', |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
376 | schedule = schedule, |
72 | 377 | name = tr(cluster.name, 'places', 'place-clusters', 'bus-stops'), |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
378 | link_to_map = cluster.center.link_to_map, |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
379 | location = cluster.center, |
27 | 380 | stops_in_cluster = stops_in_cluster, |
381 | amount_of_stops_in_cluster = len(stops_in_cluster), | |
20
3199e289ae62
- Sivusto hieman edustuksellisempi
Teemu Piippo <teemu@hecknology.net>
parents:
19
diff
changeset
|
382 | tr = tr, |
5 | 383 | ) |
0 | 384 | |
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
385 | @app.route('/trip/<trip_reference>') |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
386 | def trip(trip_reference): |
2 | 387 | from flask import request |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
388 | 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
|
389 | from busroute import simplify_name |
3 | 390 | try: |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
391 | trip = all_trips[trip_reference] |
3 | 392 | except KeyError: |
393 | abort(404) | |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
394 | schedule = [] |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
395 | region = '' |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
396 | for halt in trip.schedule: |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
397 | stop_time = datetime.combine(today(), time()) + halt.arrival_time |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
398 | formatted_time = time_representation(stop_time) |
71
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
399 | if profile['regions']['use-regions']: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
400 | if halt.stop.region != region and not (region and not halt.stop.region): |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
401 | if len(schedule) and not schedule[-1]['name']: |
72 | 402 | schedule[-1]['name'] = tr(halt.stop.region or '', 'places') |
71
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
403 | else: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
404 | schedule.append({ |
72 | 405 | 'name': tr(halt.stop.region or '', 'places'), |
71
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
406 | 'time': formatted_time, |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
407 | 'stops': [], |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
408 | 'index': len(schedule), |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
409 | }) |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
410 | region = halt.stop.region |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
411 | else: |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
412 | schedule.append({ |
72 | 413 | 'name': tr(halt.stop.name or '', 'bus-stops', 'places'), |
71
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
414 | 'time': formatted_time, |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
415 | 'stops': [], |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
416 | 'index': len(schedule), |
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
417 | }) |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
418 | schedule[-1]['stops'].append({ |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
419 | 'time': formatted_time, |
29 | 420 | 'id': halt.stop.reference, |
421 | 'code': halt.stop.code, | |
72 | 422 | 'name': tr(halt.stop.name, 'bus-stops', 'places'), |
0 | 423 | }) |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
424 | sign = trip.concise_schedule() |
29 | 425 | try: |
31
60045b362d71
- Ajovuoroa ei enää esitetä kahdessa välilehdessä vaan puukuvaimessa
Teemu Piippo <teemu@hecknology.net>
parents:
30
diff
changeset
|
426 | sign = [simplify_name(sign[0]), simplify_name(sign[-1])] |
29 | 427 | except IndexError: |
428 | sign = [trip.schedule[0].stop.name, trip.schedule[-1].stop.name] | |
25
cb423946cf33
Uudelleennimetty templaatit
Teemu Piippo <teemu@hecknology.net>
parents:
24
diff
changeset
|
429 | return render_template('trip.html', |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
430 | schedule = schedule, |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
431 | trip_reference = trip_reference, |
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
432 | route = trip.route.reference, |
72 | 433 | description = ' - '.join(tr(place, 'places') for place in sign), |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
434 | 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
|
435 | tr = tr, |
27 | 436 | length = trip.length / 1000, |
437 | ) | |
438 | ||
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
439 | @app.route('/route/<name>') |
27 | 440 | def route_page(name): |
441 | from buses import routes | |
442 | route = routes[name.upper()] | |
443 | schedule = [] | |
444 | for trip in route.trips: | |
445 | if trip.is_served_at(today()) and datetime.combine(today(), time()) + trip.schedule[-1].arrival_time < now(): | |
446 | schedule.append({ | |
447 | 'name': trip.reference, | |
448 | 'from': trip.from_place, | |
449 | 'to': trip.to_place, | |
450 | 'time': time_representation(datetime.combine(today(), time()) + trip.schedule[0].departure_time), | |
451 | }) | |
452 | return render_template('route.html', | |
453 | name = route.reference + ' ' + route.description, | |
454 | tr = tr, | |
455 | schedule = schedule, | |
24
e6bdb9c54096
Yhtenäistetty ohjelmakoodin kieli englanniksi
Teemu Piippo <teemu@hecknology.net>
parents:
22
diff
changeset
|
456 | ) |
0 | 457 | |
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
458 | @app.route('/') |
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
459 | def index(): |
49 | 460 | return redirect('stop_cluster/kauppatori') |
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
461 | |
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
462 | @app.route('/pysäkki/<reference>') |
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
463 | def redirect_pysäkki(reference): |
50 | 464 | return redirect('stop/' + str(reference)) |
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
465 | |
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
466 | @app.route('/pysäkkiryhmä/<reference>') |
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
467 | def redirect_pysäkkiryhmä(reference): |
50 | 468 | return redirect('stop_cluster/' + str(reference)) |
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
469 | |
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
470 | @app.route('/ajovuoro/<reference>') |
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
471 | def redirect_ajovuoro(reference): |
50 | 472 | return redirect('trip/' + str(reference)) |
48
428cfdf64ccc
Lisätty uudelleenohjauksia
Teemu Piippo <teemu@hecknology.net>
parents:
42
diff
changeset
|
473 | |
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
|
474 | @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
|
475 | 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
|
476 | 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
|
477 | |
30 | 478 | from argparse import ArgumentParser |
479 | parser = ArgumentParser() | |
480 | parser.add_argument('gtfs_zip_path') | |
481 | parser.add_argument('profile_path') | |
482 | ||
0 | 483 | if __name__ == '__main__': |
2 | 484 | 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
|
485 | parser.add_argument('-d', '--debug', action = 'store_true') |
30 | 486 | |
487 | args = parser.parse_args() | |
488 | profile.read(args.profile_path) | |
71
d2e19670b772
Remove assumptions and added some api stuff
Teemu Piippo <teemu@hecknology.net>
parents:
68
diff
changeset
|
489 | buses.load_buses(args.gtfs_zip_path) |
30 | 490 | |
491 | if __name__ == '__main__': | |
10
843c6ee340e7
Refaktoroitu käännä-funktio, kaikki kielet luetaan automaattisesti
Teemu Piippo <teemu@hecknology.net>
parents:
9
diff
changeset
|
492 | app.run(debug = args.debug, port = args.port) |