From b0fda6055fcf934a879ef94a4da98da24e1c4413 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Sat, 2 Jan 2021 21:25:46 +0100 Subject: [PATCH] =?UTF-8?q?Export=20seznamu=20=C5=A1kol?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mo/web/org.py | 49 +++++++++++++++++++++++++++++++++++++- mo/web/templates/main.html | 2 ++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/mo/web/org.py b/mo/web/org.py index bde5ffc8..5c811f78 100644 --- a/mo/web/org.py +++ b/mo/web/org.py @@ -1,8 +1,55 @@ -from flask import render_template, g, redirect, url_for +from flask import render_template, g, redirect, url_for, request +from sqlalchemy.orm import aliased +import mo.db as db +from mo.web.table import Table, Column from mo.web import app @app.route('/org/') def org_index(): return render_template('org_index.html') + + +school_export_columns = ( + Column(key='code', name='kod'), + Column(key='name', name='nazev'), + Column(key='town_code', name='kod_obce'), + Column(key='town', name='obec'), + Column(key='red_izo', name='red_izo'), + Column(key='ico', name='ico'), + Column(key='official_name', name='ofic_nazev'), + Column(key='address', name='adresa'), + Column(key='is_zs', name='typ_zs'), + Column(key='is_ss', name='typ_ss'), +) + + +@app.route('/org/export/skoly') +def org_export_skoly(): + sess = db.get_session() + format = request.args.get('format', 'csv') + + def gen_rows(): + town = aliased(db.Place) + for p, s, t in ( + sess.query(db.Place, db.School, town) + .filter(db.Place.type == db.PlaceType.school) + .filter(db.Place.place_id == db.School.place_id) + .filter(db.Place.parent == town.place_id) + .yield_per(100)): + yield { + 'code': p.get_code(), + 'name': p.name, + 'red_izo': s.red_izo, + 'ico': s.ico, + 'official_name': s.official_name, + 'address': s.address, + 'is_zs': int(s.is_zs), + 'is_ss': int(s.is_ss), + 'town_code': t.get_code(), + 'town': t.name, + } + + table = Table(school_export_columns, gen_rows(), 'skoly') + return table.send_as(format, streaming=True) diff --git a/mo/web/templates/main.html b/mo/web/templates/main.html index c6ce3043..7d8921c0 100644 --- a/mo/web/templates/main.html +++ b/mo/web/templates/main.html @@ -4,6 +4,8 @@ {% if g.user.is_org or g.user.is_admin %} <p><a href='{{ url_for('org_place_root') }}'>Hierarchie míst</a> + <p>Export všech škol: <a href='{{ url_for('org_export_skoly', format='csv') }}'>CSV</a>, + <a href='{{ url_for('org_export_skoly', format='tsv') }}'>TSV</a> {% endif %} <h3>Práva</h3> -- GitLab