palvelu.py

Sun, 23 Apr 2017 11:01:51 +0300

author
Teemu Piippo <teemu@hecknology.net>
date
Sun, 23 Apr 2017 11:01:51 +0300
changeset 3
ca2df60215ff
parent 2
48efa8ca14dd
child 4
312c432bb9e6
permissions
-rwxr-xr-x

Lisätty alueita

#!/usr/bin/env python3
from flask import Flask, render_template, abort
from datetime import datetime, date, time, timedelta
import locale

app = Flask(__name__)
locale.setlocale(locale.LC_ALL, locale.getdefaultlocale())

def muotoile_aika(aika, suhteellinen = True):
	erotus = aika - datetime.now()
	if suhteellinen and erotus < timedelta(minutes = 30):
		return '%dm' % round(erotus.seconds / 60)
	elif aika.day == datetime.now().day:
		return '%d:%02d' % (aika.hour, aika.minute)
	elif erotus < timedelta(7):
		return aika.strftime('%-a %H:%M')
	else:
		return aika.strftime('%-d.%-m. %H:%M')

@app.route('/pysäkki/<tunniste>')
def pysäkkiaikataulu(tunniste):
	from bussit import pysäkit
	aikataulu = []
	try:
		pysäkki = pysäkit[tunniste]
	except KeyError:
		abort(404)
	for (aika, pysähdys) in pysäkki.aikataulu(100):
		aikataulu.append({
			'aika': muotoile_aika(aika),
			'linja': pysähdys.ajo.linja.viite,
			'kyltti': pysähdys.ajo.kyltti,
			'ajovuoro': pysähdys.ajo.nimi,
		})
	return render_template('pysäkki.html', aikataulu = aikataulu, viite = tunniste, nimi = pysäkki.nimi)

@app.route('/ajovuoro/<int:numero>')
def ajoreitti(numero):
	from flask import request
	from bussit import ajot
	try:
		ajovuoro = ajot[numero]
	except KeyError:
		abort(404)
	suppea = request.args.get('suppea') is not None
	reitti = []
	suppea_reitti = []
	käydyt_alueet = set()
	for pysähdys in ajovuoro.reitti:
		aika = datetime.combine(date.today(), time()) + pysähdys.saapumisaika
		muotoiltu_aika = muotoile_aika(aika, suhteellinen = False)
		reitti.append({
			'aika': muotoiltu_aika,
			'tunniste': pysähdys.pysäkki.tunniste,
			'alue': pysähdys.pysäkki.alue,
			'nimi': pysähdys.pysäkki.nimi,
		})
		alue = pysähdys.pysäkki.alue
		if alue:
			if alue not in käydyt_alueet:
				suppea_reitti.append({
					'aika': muotoiltu_aika,
					'alue': alue
				})
				käydyt_alueet.add(alue)
	sivu = suppea and 'ajovuoro-suppea.html' or 'ajovuoro.html'
	return render_template(sivu, reitti = reitti, suppea_reitti = suppea_reitti,
						numero = numero, linja = ajovuoro.linja.viite, selite = ajovuoro.kyltti)

if __name__ == '__main__':
	from argparse import ArgumentParser
	parser = ArgumentParser()
	parser.add_argument('-p', '--port', type = int, default = 5000)
	args = parser.parse_args()
	app.run(debug = True, port = args.port)

mercurial