9 from busroute import supista_reitti |
9 from busroute import supista_reitti |
10 |
10 |
11 app = Flask(__name__) |
11 app = Flask(__name__) |
12 |
12 |
13 # Varmista ettei järjestelmän kieliasetukset sotke muotoiluja |
13 # Varmista ettei järjestelmän kieliasetukset sotke muotoiluja |
14 locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) |
14 def reset_locale(): |
|
15 locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) |
|
16 |
|
17 def activate_locale(language = None): |
|
18 language = language or language_for_page() |
|
19 class result: |
|
20 def __enter__(self): |
|
21 locale.setlocale(locale.LC_ALL, tr('locale', 'other', language = language)) |
|
22 def __exit__(self, *args): |
|
23 reset_locale() |
|
24 return result() |
|
25 |
|
26 reset_locale() |
15 |
27 |
16 # Lataa käännökset |
28 # Lataa käännökset |
17 class Translator: |
29 class Translator: |
18 def __init__(self): |
30 def __init__(self): |
19 self.languages = {} |
31 self.languages = {} |
75 aikataulu = aikataulu, |
87 aikataulu = aikataulu, |
76 nimi = tunniste + ' ' + tr(pysäkki.nimi, 'pysäkit'), |
88 nimi = tunniste + ' ' + tr(pysäkki.nimi, 'pysäkit'), |
77 linkki_karttaan = pysäkki.sijainti.link_to_map, |
89 linkki_karttaan = pysäkki.sijainti.link_to_map, |
78 alue = pysäkki.alue, |
90 alue = pysäkki.alue, |
79 sijainti = pysäkki.sijainti, |
91 sijainti = pysäkki.sijainti, |
80 cluster = pysäkki.cluster.name, |
92 cluster = pysäkki.cluster.name if len(pysäkki.cluster.stops) > 1 else None, |
|
93 tr = tr, |
81 ) |
94 ) |
|
95 |
|
96 def time_representation(aika, suhteellinen = True): |
|
97 erotus = aika - nyt() |
|
98 if suhteellinen and erotus < timedelta(minutes = 1): |
|
99 return tr('right-now', 'misc-text') |
|
100 elif suhteellinen and erotus < timedelta(minutes = 10): |
|
101 return '%dm' % round(erotus.seconds / 60) |
|
102 elif aika.date() == tänään(): |
|
103 return '%d:%02d' % (aika.hour, aika.minute) |
|
104 elif erotus < timedelta(7): |
|
105 with activate_locale(): |
|
106 return aika.strftime('%-a %H:%M') |
|
107 else: |
|
108 with activate_locale(): |
|
109 return aika.strftime('%-d.%-m. %H:%M') |
82 |
110 |
83 @app.route('/pysäkkiryhmä/<cluster_name>') |
111 @app.route('/pysäkkiryhmä/<cluster_name>') |
84 def cluster_schedule(cluster_name): |
112 def cluster_schedule(cluster_name): |
85 from buses import pysäkit, clusters_by_name |
113 from buses import pysäkit, clusters_by_name |
86 aikataulu = [] |
114 aikataulu = [] |
108 ({ |
136 ({ |
109 'id': stop.tunniste, |
137 'id': stop.tunniste, |
110 'name': tr(stop.nimi, 'pysäkit'), |
138 'name': tr(stop.nimi, 'pysäkit'), |
111 } for stop in cluster.stops), |
139 } for stop in cluster.stops), |
112 key = lambda stop: (len(stop['id']), stop['id']) |
140 key = lambda stop: (len(stop['id']), stop['id']) |
113 ) |
141 ), |
|
142 tr = tr, |
114 ) |
143 ) |
115 |
144 |
116 @app.route('/ajovuoro/<numero>') |
145 @app.route('/ajovuoro/<numero>') |
117 def ajoreitti(numero): |
146 def ajoreitti(numero): |
118 from flask import request |
147 from flask import request |
143 }) |
172 }) |
144 käydyt_alueet.add(alue) |
173 käydyt_alueet.add(alue) |
145 kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True) |
174 kyltti = supista_reitti([k['alue'] for k in suppea_reitti], kokonainen = True) |
146 sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html' |
175 sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html' |
147 return render_template(sivu, |
176 return render_template(sivu, |
148 reitti = reitti, |
177 reitti = reitti, |
149 suppea_reitti = suppea_reitti, |
178 suppea_reitti = suppea_reitti, |
150 numero = numero, |
179 numero = numero, |
151 linja = ajovuoro.linja.viite, |
180 linja = ajovuoro.linja.viite, |
152 selite = ' - '.join(tr(paikka, 'paikat') for paikka in kyltti), |
181 selite = ' - '.join(tr(paikka, 'paikat') for paikka in kyltti), |
153 yö = time_representation(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika), |
182 yö = is_night_time(datetime.combine(tänään(), time()) + ajovuoro.reitti[-1].saapumisaika), |
154 ) |
183 tr = tr, |
|
184 ) |
155 |
185 |
156 @app.route('/static/<path:path>') |
186 @app.route('/static/<path:path>') |
157 def static_file(path): |
187 def static_file(path): |
158 return send_from_directory(path.join('static', path)) |
188 return send_from_directory(path.join('static', path)) |
159 |
189 |