def load_abstimmung(engine, source_url): table = sl.get_table(engine, 'abstimmung') stimmen = list(sl.find(engine, table, source_url=source_url, matched=True)) if not len(stimmen): log.error("No reconciled votes, signals deeper trouble?") return thema = stimmen[0].get('subject') abst = Abstimmung.query.filter_by(thema=thema).first() if abst is None: abst = Abstimmung() abst.thema = thema abst.datum = to_date(stimmen[0].get('date')) db.session.add(abst) db.session.flush() for stimme_ in stimmen: person = Person.query.filter_by( fingerprint=stimme_.get('fingerprint')).first() if person is None: continue stimme = Stimme.query.filter_by( abstimmung=abst).filter_by( person=person).first() if stimme is not None: continue stimme = Stimme() stimme.entscheidung = stimme_['vote'] stimme.person = person stimme.abstimmung = abst db.session.add(stimme) db.session.commit()
def load_rollen(engine, person, data): _RolleSource = sl.get_table(engine, "rolle") for rdata in sl.find(engine, _RolleSource, fingerprint=data["fingerprint"]): rolle = Rolle.query.filter_by( person=person, funktion=rdata.get("funktion"), ressort=rdata.get("ressort"), fraktion=rdata.get("fraktion"), land=rdata.get("land"), ).first() if rolle is None: rolle = Rolle() rolle.person = person rolle.mdb_id = rdata.get("mdb_id") rolle.status = rdata.get("status") rolle.funktion = rdata.get("funktion") rolle.fraktion = rdata.get("fraktion") rolle.gewaehlt = rdata.get("gewaehlt") rolle.ressort = rdata.get("ressort") rolle.land = rdata.get("land") rolle.austritt = to_date(rdata.get("austritt")) if rdata.get("mdb_id"): rolle.wahlkreis = load_wahlkreis(engine, rolle, data) db.session.add(rolle)
def load_rollen(engine, person, data): _RolleSource = sl.get_table(engine, 'rolle') for rdata in sl.find(engine, _RolleSource, fingerprint=data['fingerprint']): rolle = Rolle.query.filter_by(person=person, funktion=rdata.get('funktion'), ressort=rdata.get('ressort'), fraktion=rdata.get('fraktion'), land=rdata.get('land')).first() if rolle is None: rolle = Rolle() rolle.person = person rolle.mdb_id = rdata.get('mdb_id') rolle.status = rdata.get('status') rolle.funktion = rdata.get('funktion') rolle.fraktion = rdata.get('fraktion') rolle.gewaehlt = rdata.get('gewaehlt') rolle.ressort = rdata.get('ressort') rolle.land = rdata.get('land') rolle.austritt = to_date(rdata.get('austritt')) if rdata.get('mdb_id'): rolle.wahlkreis = load_wahlkreis(engine, rolle, data) db.session.add(rolle)
def load_abstimmung(engine, source_url): table = sl.get_table(engine, 'abstimmung') stimmen = list(sl.find(engine, table, source_url=source_url, matched=True)) if not len(stimmen): log.error("No reconciled votes, signals deeper trouble?") return thema = stimmen[0].get('subject') abst = Abstimmung.query.filter_by(thema=thema).first() if abst is None: abst = Abstimmung() abst.thema = thema abst.datum = to_date(stimmen[0].get('date')) db.session.add(abst) db.session.flush() for stimme_ in stimmen: person = Person.query.filter_by( fingerprint=stimme_.get('fingerprint')).first() if person is None: continue stimme = Stimme.query.filter_by(abstimmung=abst).filter_by( person=person).first() if stimme is not None: continue stimme = Stimme() stimme.entscheidung = stimme_['vote'] stimme.person = person stimme.abstimmung = abst db.session.add(stimme) db.session.commit()
def load_sitzung(engine, indexer, wp, session): table = sl.get_table(engine, 'webtv_speech') data = sl.find_one(engine, table, wp=wp, session=session) log.info("Loading Sitzung: %s/%s...", wp, session) sitzung = Sitzung.query.filter_by(wahlperiode=wp, nummer=session).first() if sitzung is None: sitzung = Sitzung() sitzung.wahlperiode = wp sitzung.nummer = session sitzung.titel = data.get('session_name') sitzung.date = to_date(data.get('session_date')) sitzung.source_url = data.get('session_url') db.session.add(sitzung) db.session.flush() indexer.add(sitzung) load_debatten(engine, indexer, sitzung) db.session.commit() return sitzung
def load_position(engine, indexer, ablauf, data): position = Position.query.filter_by( ablauf=ablauf, urheber=data.get('urheber'), fundstelle=data.get('fundstelle')).first() if position is not None: indexer.add(position) return position = Position() position.key = data.get('hash') position.zuordnung = data.get('zuordnung') position.urheber = data.get('urheber') position.fundstelle = data.get('fundstelle') position.fundstelle_url = data.get('fundstelle_url') position.date = to_date(data.get('date')) position.quelle = data.get('quelle') position.typ = data.get('typ') position.ablauf = ablauf if data.get('debatte_item_id'): dq = Debatte.query.filter( Debatte.nummer == data.get('debatte_item_id')) dq = dq.join(Sitzung) dq = dq.filter(Sitzung.wahlperiode == data.get('debatte_wp')) dq = dq.filter(Sitzung.nummer == data.get('debatte_session')) position.debatte = dq.first() _Referenz = sl.get_table(engine, 'referenz') for ddata in sl.find(engine, _Referenz, fundstelle=position.fundstelle, urheber=position.urheber, source_url=ablauf.source_url): position.dokument = load_dokument(engine, indexer, ddata) db.session.add(position) db.session.flush() _Zuweisung = sl.get_table(engine, 'zuweisung') for zdata in sl.find(engine, _Zuweisung, fundstelle=position.fundstelle, urheber=position.urheber, source_url=ablauf.source_url): zuweisung = Zuweisung() zuweisung.text = zdata['text'] zuweisung.federfuehrung = True if \ str(zdata['federfuehrung']) == 'True' else False zuweisung.gremium = Gremium.query.filter_by( key=zdata.get('gremium_key')).first() zuweisung.position = position db.session.add(zuweisung) _Beschluss = sl.get_table(engine, 'beschluss') for bdata in sl.find(engine, _Beschluss, fundstelle=position.fundstelle, urheber=position.urheber, source_url=ablauf.source_url): beschluss = Beschluss() beschluss.position = position beschluss.seite = bdata['seite'] beschluss.tenor = bdata['tenor'] beschluss.dokument_text = bdata['dokument_text'] or '' for dokument_name in beschluss.dokument_text.split(','): dokument_name = dokument_name.strip() dok = Dokument.query.filter_by(nummer=dokument_name).first() if dok is not None: beschluss.dokumente.append(dok) db.session.add(beschluss) _Beitrag = sl.get_table(engine, 'beitrag') for bdata in sl.find(engine, _Beitrag, fundstelle=position.fundstelle, urheber=position.urheber, source_url=ablauf.source_url, matched=True): load_beitrag(engine, indexer, position, bdata) db.session.refresh(position) indexer.add(position)
def load_position(engine, indexer, ablauf, data): position = Position.query.filter_by( ablauf=ablauf, urheber=data.get('urheber'), fundstelle=data.get('fundstelle')).first() if position is not None: indexer.add(position) return position = Position() position.key = data.get('hash') position.zuordnung = data.get('zuordnung') position.urheber = data.get('urheber') position.fundstelle = data.get('fundstelle') position.fundstelle_url = data.get('fundstelle_url') position.date = to_date(data.get('date')) position.quelle = data.get('quelle') position.typ = data.get('typ') position.ablauf = ablauf if data.get('debatte_item_id'): dq = Debatte.query.filter(Debatte.nummer==data.get('debatte_item_id')) dq = dq.join(Sitzung) dq = dq.filter(Sitzung.wahlperiode==data.get('debatte_wp')) dq = dq.filter(Sitzung.nummer==data.get('debatte_session')) position.debatte = dq.first() _Referenz = sl.get_table(engine, 'referenz') for ddata in sl.find(engine, _Referenz, fundstelle=position.fundstelle, urheber=position.urheber, source_url=ablauf.source_url): position.dokument = load_dokument(engine, indexer, ddata) db.session.add(position) db.session.flush() _Zuweisung = sl.get_table(engine, 'zuweisung') for zdata in sl.find(engine, _Zuweisung, fundstelle=position.fundstelle, urheber=position.urheber, source_url=ablauf.source_url): zuweisung = Zuweisung() zuweisung.text = zdata['text'] zuweisung.federfuehrung = True if \ str(zdata['federfuehrung']) == 'True' else False zuweisung.gremium = Gremium.query.filter_by( key=zdata.get('gremium_key')).first() zuweisung.position = position db.session.add(zuweisung) _Beschluss = sl.get_table(engine, 'beschluss') for bdata in sl.find(engine, _Beschluss, fundstelle=position.fundstelle, urheber=position.urheber, source_url=ablauf.source_url): beschluss = Beschluss() beschluss.position = position beschluss.seite = bdata['seite'] beschluss.tenor = bdata['tenor'] beschluss.dokument_text = bdata['dokument_text'] or '' for dokument_name in beschluss.dokument_text.split(','): dokument_name = dokument_name.strip() dok = Dokument.query.filter_by(nummer=dokument_name).first() if dok is not None: beschluss.dokumente.append(dok) db.session.add(beschluss) _Beitrag = sl.get_table(engine, 'beitrag') for bdata in sl.find(engine, _Beitrag, fundstelle=position.fundstelle, urheber=position.urheber, source_url=ablauf.source_url, matched=True): load_beitrag(engine, indexer, position, bdata) db.session.refresh(position) indexer.add(position)