Quellcode für wsgi.wahlen.nrw08.prepare

""""
    Prepare Wahl NR08
"""
__author__ = 'saf'

from wsgi import db
from wsgi.models import *
from dateutil.parser import parse
from wsgi.config import BASEDIR
from logging import getLogger
from os.path import join
from wsgi.einspiel import einspiel_file
from wsgi.util.colors import *
from wsgi.util import exit1

logger = getLogger(__name__)

getp = lambda x: Partei.query.filter_by(bez=x).one()

WAHL_ID = 1
WAHL_BEZ = 'NRW 2008'
WAHL_BEZL = 'Nationalratswahl Österreich 2008'
WAHL_BL = 0
WAHL_DATUM = parse('2008-09-28')
WAHL_WAHLSCHLUSS = parse('2008-09-28 17:00')
WAHL_ANZ_PARTEIEN = 14


[Doku]def export_existing_ergebnisse(path): """ Die bestehenden Einspielfiles aus 2008 haben die aktuellen Gemeindezusammenlegungen und Trennungen nicht berücksichtigt. Beim Wieder-drübergehen über die NRW08 muss das Ergebnis neu exportiert werden. Bei Gemeindezusammenlegungen werden alle Ergebnisse in der Datenbank korrekt adaptiert. :param path: Outputfile """ w = Wahl.query.get(WAHL_ID) # type: Wahl lines = [erg.einspiel_line for erg in w.gemeindeergebnisse if erg.gkz] with open(path, 'w') as f: f.write("\n".join(lines))
[Doku]def prepare_wahl(delete_if_exists=False): """ Return Das :py:class:`wsgi.models.Wahl` for die Wahl. Es wird angelegt falls es noch nicht existiert. :param delete_if_exists: Falls die Wahl schon existiert, wird sie zuerst gelöscht :return: das Wahl-Objekt """ logger.info(f"Create Wahl {WAHL_BEZ}") wahl = Wahl.query.get(WAHL_ID) if wahl is not None and delete_if_exists: logger.info(f"Deleting Existing Wahl {WAHL_BEZ}") db.session.delete(wahl) logger.info(f"Deleted Existing Wahl {WAHL_BEZ}") db.session.commit() if wahl is None or delete_if_exists: wahl = Wahl(id=WAHL_ID, bez=WAHL_BEZ, bezl=WAHL_BEZL, bl=WAHL_BL, datum=WAHL_DATUM, wahlschluss=WAHL_WAHLSCHLUSS, anz_parteien=WAHL_ANZ_PARTEIEN) db.session.add(wahl) db.session.flush() else: exit1(f"Wahl {WAHL_BEZ} existiert, aber Parameter -d wurde nicht angegeben") wahl.initialize_ergebnisse() logger.info(f"Created Wahl {WAHL_BEZ}") return wahl
[Doku]def prepare_eingabelisten(wahl): """ Erstellt die EingabeListen für die Wahl. Das ist die Reihenfolge, wie sie am Stimmzettel stehen und demzufolge via BMI gemeldet werden. Diese kann je nach Bundesland unterschiedlich sein. Die **Hauptreihenfolge** beinhaltet alle Listen und sieht (meist) so aus wie das BMI meldet. Die EingabeListen können je Bundesland unterschiedlich sein. Wenn BL=0 oder es eh nur ein BL gibt, ist das die Hauptreihenfolge. :param wahl: Für Welche Wahl werden die Listen angelegt """ logger.info(f"Prepare Eingabelisten für {wahl.bez}") # Löschen bestehende Eingabelisten für die wahl del wahl.eingabelisten # Hole die Parteien spo = getp('SPÖ') ovp = getp('ÖVP') gru = getp('Grüne') fpo = getp('FPÖ') bzo = getp('BZÖ') fritz = getp('FRITZ') cpo = getp('CPÖ') kpo = getp('KPÖ') lif = getp('LIF') retto = getp('RETTÖ') linke = getp('LINKE') khk = getp('KHK') stark = getp('STARK') trp = getp('TRP') parteien_in_hauptreihenfolge = (spo, ovp, fpo, gru, bzo, fritz, cpo, kpo, lif, retto, linke, khk, stark, trp) assert None not in parteien_in_hauptreihenfolge EingabeListe.create_listen_for_wahl_bl(wahl=wahl, bl=WAHL_BL, parteien=parteien_in_hauptreihenfolge) db.session.flush() logger.info(f"Prepared Eingabelisten für {wahl.bez}")
[Doku]def prepare_ergebnisse(wahl, importfile): """ Die Gemeindeergebnisse liegen im richtigen Format in ``/opt/hr/wahlen/nrw08/gemeindeergebnisse.in``. :param wahl: wahl """ logger.info(f"Einspiel ergebnisse für {WAHL_BEZ}") einspiel_file(filename=importfile, priority=10, update_wab=True, origin='bmi', wahl_id=wahl.id, show_errors=False, quiet=False) logger.info(f"Einspieled ergebnisse für {WAHL_BEZ}")
[Doku]def prepare_uws(wahl): """ Erstellt Urnenwahlsummen (UWS) Ergebnisse. Die GKZs der UWS enden auf 98, die der Wahlkarten auf 99. Die UWS eines Bezirks, Landes oder des Bundes sind die Urnenwahlergebnisse der entsprechenden Ebenen. Mit der vermehrten Nutzung der Eahlkarten und deren Berücksichtigung in der HR wurden die UWS eingeführt. Die QA liefert ein Ergebnise für die UWS und die WK und diese Ergebnisse werden in die jeweils korrekten GKZs geschrieben. Dann kann eine einfache HR über diese beiden GKZs gemacht werden und man hat das Gesamtergebnis. """ logger.info(f"Schreibe Urnenwahlsummen (UWS) Ergebnisse für {WAHL_BEZ}") wahl.fill_uws() logger.info(f"Done Schreibe Urnenwahlsummen (UWS) Ergebnisse für {WAHL_BEZ}")
[Doku]def prepare_wahlkarten(): """ Die Wahlkarten sind aus dem Ergebnisexcel des BMI genommen, manuell aufbereitet etc. Vorhandene GemeindeErgebnisse der Wahl für die Bundes- und LandesWK werden zuerst gelöscht. Danach werden die aufbereiteten Ergebnisse eingesepielt. Obacht auf die Reihenfolge! Alle Gemeindeergebnisse müssen in der EingabeHauptrreihenfolge eingespielt werden. Das BMI sortiert hier gerne nach Anzahl der Wahllkartenstimmen. Damit haben in diesem Beispiel die Grünen die FPÖ überholt. """ logger.info("Prepare Wahlkarten") db.engine.execute(text("delete from gemeindeergebnisse where wahl_id=:wahl_id and mod(gkz,10000) = 99"), wahl_id=WAHL_ID) wahlkarten = ( (99, 461408, 454104, 113773, 134263, 75622, 58714, 35706, 8039, 3070, 3273, 17355, 3630, 27, 250, 9, 373), (10099, 11993, 11789, 4073, 3796, 1193, 1522, 550, 195, 52, 60, 272, 62, 0, 14, 0, 0), (20099, 25941, 25525, 6084, 5323, 3636, 1681, 7173, 267, 148, 177, 807, 193, 27, 0, 9, 0), (30099, 87295, 85736, 23169, 30489, 10321, 11723, 4459, 1167, 552, 465, 2566, 825, 0, 0, 0, 0), (40099, 70848, 69417, 17559, 20574, 12094, 9427, 5183, 813, 630, 424, 1949, 716, 0, 48, 0, 0), (50099, 28904, 28418, 5424, 9174, 5662, 3463, 2566, 523, 236, 151, 942, 241, 0, 36, 0, 0), (60099, 67735, 66796, 17124, 19505, 9775, 8642, 6883, 1110, 476, 712, 1973, 596, 0, 0, 0, 0), (70099, 32594, 32241, 4648, 10814, 6149, 3784, 2368, 2336, 282, 146, 1476, 213, 0, 25, 0, 0), (80099, 16981, 16815, 1812, 5732, 4347, 1767, 1387, 557, 287, 80, 773, 73, 0, 0, 0, 0), (90099, 119117, 117367, 33880, 28856, 22445, 16705, 5137, 1071, 407, 1058, 6597, 711, 0, 127, 0, 373), ) for w in wahlkarten: assert len(w) == 17 #parteien_in_hauptreihenfolge = (spo, ovp, fpo, gru, bzo, fritz, cpo, kpo, lif, retto, linke, khk, stark, trp) g = GemeindeErgebnis(wahl_id=WAHL_ID, gkz=w[0], is_fake=False, wab=0, abg=w[1], gig=w[2]) _spo, _ovp, _gru, _fpo, _bzo, _fritz, _dc, _kpo, _lif, _retto, _khk, _lin, _sta, _trp = w[3:] g.pstimmen = [_spo, _ovp, _fpo, _gru, _bzo, _fritz, _dc, _kpo, _lif, _retto, _lin, _khk, _sta, _trp] db.session.add(g) db.session.commit() logger.info("Prepared Wahlkarten")
[Doku]def prepare(delete_if_exists=False): """ MAIN - prepare für die NRW08. Ruft ihrerseite die anderen prepares auf :param delete_if_exists: Lösche die Wahl falls es sie schon gibt """ logger.info(f"Prepare Wahl {WAHL_BEZ}") exportfile = '/opt/hr/wahlen/nrw08/export.in' export_existing_ergebnisse(exportfile) wahl = prepare_wahl(delete_if_exists) prepare_eingabelisten(wahl) prepare_ergebnisse(wahl, exportfile) prepare_uws(wahl) prepare_wahlkarten() logger.info(f"Prepared Wahl {WAHL_BEZ}")
if __name__ == '__main__': print("* Erstelle Ergebnis der Wahl NRW2008") prepare() print("NRW08 prepared")