Skip to content

Commit

Permalink
Begin cleaning up the code to work in 2015.
Browse files Browse the repository at this point in the history
  • Loading branch information
pudo committed Dec 16, 2015
1 parent 9c13a23 commit b36f45e
Show file tree
Hide file tree
Showing 8 changed files with 244 additions and 311 deletions.
1 change: 1 addition & 0 deletions README.md
@@ -1,2 +1,3 @@
# ablaeufe-scraper

Drucksachen und Abläufe im Bundestag
28 changes: 4 additions & 24 deletions __init__.py
@@ -1,46 +1,26 @@
import logging

import sqlaload as sl

from offenesparlament.data.lib.db import fetch_row
from offenesparlament.data.lib.refresh import Unmodified
from offenesparlament.data.lib.reference import InvalidReference

from offenesparlament.data.ablaeufe.scrape import scrape_index, \
scrape_ablauf, NoContentException
from offenesparlament.data.ablaeufe.clean_positions import \
extend_positions
from offenesparlament.data.ablaeufe.clean_ablauf import clean_ablauf
from offenesparlament.data.ablaeufe.clean_beitraege import \
match_beitraege
from offenesparlament.data.ablaeufe.load import load_ablauf

log = logging.getLogger(__name__)


def process_ablauf(engine, indexer, url, force=False):
try:
data = scrape_ablauf(engine, url, force=force)
clean_ablauf(engine, data)
extend_positions(engine, url)
match_beitraege(engine, url)
except NoContentException:
pass

data = fetch_row(engine, 'ablauf', source_url=url)
load_ablauf(engine, indexer, data)
except Unmodified: pass
except NoContentException: pass

#import objgraph
#import random
#import inspect
#objgraph.show_growth()
#objgraph.show_chain(
# objgraph.find_backref_chain(
# random.choice(objgraph.by_type('dict')),
# inspect.ismodule),
# filename='chain.png')

ABLAUF = {
'generator': scrape_index,
'handler': process_ablauf
}

}
19 changes: 0 additions & 19 deletions clean_ablauf.py

This file was deleted.

6 changes: 2 additions & 4 deletions clean_positions.py
Expand Up @@ -25,11 +25,10 @@ def extend_position(engine, table, data):
data['fundstelle_doc'] = None
if data['fundstelle_url'] and \
'btp' in data['fundstelle_url']:
data['fundstelle_doc'] = data['fundstelle_url']\
.rsplit('#',1)[0]
data['fundstelle_doc'] = data['fundstelle_url'].rsplit('#', 1)[0]

hash = sha1(data['fundstelle'].encode('utf-8') \
+ data['urheber'].encode('utf-8') + \
+ data['urheber'].encode('utf-8') + \
data['source_url'].encode('utf-8')).hexdigest()
data['hash'] = hash[:10]
sl.upsert(engine, table, data, unique=['id'])
Expand All @@ -40,4 +39,3 @@ def extend_positions(engine, source_url):
table = sl.get_table(engine, 'position')
for data in sl.find(engine, table, source_url=source_url):
extend_position(engine, table, data)

41 changes: 41 additions & 0 deletions common.py
@@ -0,0 +1,41 @@
# coding: utf-8
import os
import dataset
from normality import slugify


db = os.environ.get('DATABASE_URI', 'sqlite:///data.sqlite')
engine = dataset.connect(db)

tbl_person = engine['de_bundestag_person']
tbl_ablauf = engine['de_bundestag_ablauf']
tbl_position = engine['de_bundestag_position']
tbl_beitrag = engine['de_bundestag_beitrag']
tbl_zuweisung = engine['de_bundestag_zuweisung']
tbl_beschluss = engine['de_bundestag_beschluss']
tbl_referenz = engine['de_bundestag_referenz']


def make_long_name(data):
pg = lambda n: data.get(n) if data.get(n) and data.get(n) != 'None' else ''
# dept. names are long and skew levenshtein otherwise:
ressort = "".join([x[0] for x in pg('ressort').split(' ') if len(x)])
fraktion = pg('fraktion').replace(u"BÜNDNIS ", "B")
return ' '.join((pg('titel'), pg('vorname'), pg('nachname'), pg('ort'),
fraktion or ressort))


def make_person(engine, beitrag, fp, source_url):
person = {
'fingerprint': fp,
'slug': slugify(fp, sep='-'),
'source_url': source_url,
'vorname': beitrag['vorname'],
'nachname': beitrag['nachname'],
'ort': beitrag.get('ort'),
'ressort': beitrag.get('ressort'),
'land': beitrag.get('land'),
'fraktion': beitrag.get('fraktion')
}
tbl_person.upsert(person, ['fingerprint'])
return fp
142 changes: 142 additions & 0 deletions constants.py
@@ -0,0 +1,142 @@
# -*- coding: UTF-8 -*-

CHAIRS = [u'Vizepräsidentin', u'Vizepräsident', u'Präsident']

SPEAKER_STOPWORDS = ['ich zitiere', 'zitieren', 'Zitat', 'zitiert',
'ich rufe den', 'ich rufe die',
'wir kommen zur Frage', 'kommen wir zu Frage', 'bei Frage',
'fordert', 'fordern', u'Ich möchte',
'Darin steht', ' Aspekte ', ' Punkte ']


FACTION_MAPS = {
u"BÜNDNIS 90/DIE GRÜNEN": u"B90/Die Grünen",
u"DIE LINKE.": u"Die LINKE.",
u"Bündnis 90/Die Grünen": u"B90/Die Grünen",
u"Die Linke": "Die LINKE."
}

DIP_GREMIUM_TO_KEY = {
u"Ausschuss für Bildung, Forschung und Technikfolgenabschätzung": "a18",
u"Ausschuss für Ernährung, Landwirtschaft und Verbraucherschutz": "a10",
u"Ausschuss für Tourismus": "a20",
u"Ausschuss für Umwelt, Naturschutz und Reaktorsicherheit": "a16",
u"Ausschuss für Verkehr, Bau und Stadtentwicklung": "a15",
u"Ausschuss für Arbeit und Soziales": "a11",
u"Ausschuss für Familie, Senioren, Frauen und Jugend": "a13",
u"Ausschuss für Wirtschaft und Technologie": "a09",
u"Finanzausschuss": "a07",
u"Haushaltsausschuss": "a08",
u"Ausschuss für die Angelegenheiten der Europäischen Union": "a21",
u"Ausschuss für Agrarpolitik und Verbraucherschutz": "a10",
u"Ausschuss für Innere Angelegenheiten": "a04",
u"Wirtschaftsausschuss": "a09",
u"Ausschuss für Gesundheit": "a14",
u"Ausschuss für Wahlprüfung, Immunität und Geschäftsordnung": "a01",
u"Rechtsausschuss": "a06",
u"Ausschuss für Fragen der Europäischen Union": "a21",
u"Ausschuss für Kulturfragen": "a22",
u"Gesundheitsausschuss": "a14",
u"Ausschuss für Menschenrechte und humanitäre Hilfe": "a17",
u"Ausschuss für wirtschaftliche Zusammenarbeit und Entwicklung": "a19",
u"Ausschuss für Auswärtige Angelegenheiten": "a03",
u"Ausschuss für Kultur und Medien": "a22",
u"Sportausschuss": "a05",
u"Auswärtiger Ausschuss": "a03",
u"Ausschuss für Arbeit und Sozialpolitik": "a11",
u"Ausschuss für Frauen und Jugend": "a13",
u"Ausschuss für Städtebau, Wohnungswesen und Raumordnung": "a15",
u"Innenausschuss": "a04",
u"Verkehrsausschuss": "a15",
u"Verteidigungsausschuss": "a12",
u"Ausschuss für Familie und Senioren": "a13",
u"Petitionsausschuss": "a02",
u"Ausschuss für Verteidigung": "a12",
u"Ältestenrat": "002"
}


DIP_ABLAUF_STATES_FINISHED = {
u'Beantwortet': True,
u'Abgeschlossen': True,
u'Abgelehnt': True,
u'In der Beratung (Einzelheiten siehe Vorgangsablauf)': False,
u'Verkündet': True,
u'Angenommen': True,
u'Keine parlamentarische Behandlung': False,
u'Überwiesen': False,
u'Beschlussempfehlung liegt vor': False,
u'Noch nicht beraten': False,
u'Für erledigt erklärt': True,
u'Noch nicht beantwortet': False,
u'Zurückgezogen': True,
u'Dem Bundestag zugeleitet - Noch nicht beraten': False,
u'Nicht beantwortet wegen Nichtanwesenheit des Fragestellers': True,
u'Zustimmung erteilt': True,
u'Keine parlamentarische Behandlung': True,
u'Aufhebung nicht verlangt': False,
u'Den Ausschüssen zugewiesen': False,
u'Zusammengeführt mit... (siehe Vorgangsablauf)': True,
u'Dem Bundesrat zugeleitet - Noch nicht beraten': False,
u'Zustimmung (mit Änderungen) erteilt': True,
u'Bundesrat hat Vermittlungsausschuss nicht angerufen': False,
u'Bundesrat hat zugestimmt': False,
u'1. Durchgang im Bundesrat abgeschlossen': False,
u'Einbringung abgelehnt': True,
u'Verabschiedet': True,
u'Entlastung erteilt': True,
u'Abschlussbericht liegt vor': True,
u'Erledigt durch Ende der Wahlperiode (§ 125 GOBT)': True,
u'Zuleitung beschlossen': False,
u'Zuleitung in geänderter Fassung beschlossen': False,
u'Für gegenstandslos erklärt': False,
u'Nicht ausgefertigt wegen Zustimmungsverweigerung des Bundespräsidenten': False,
u'Im Vermittlungsverfahren': False,
u'Zustimmung versagt': True,
u'Einbringung in geänderter Fassung beschlossen': False,
u'Bundesrat hat keinen Einspruch eingelegt': False,
u'Bundesrat hat Einspruch eingelegt': False,
u'Zuleitung in Neufassung beschlossen': True,
u'Untersuchungsausschuss eingesetzt': False
}

GREMIUM_RSS_FEEDS = {
"a11": "http://www.bundestag.de/rss_feeds/arbeitsoziales.rss",
"a03": "http://www.bundestag.de/rss_feeds/auswaertiges.rss",
"a18": "http://www.bundestag.de/rss_feeds/bildung.rss",
"a10": "http://www.bundestag.de/rss_feeds/landwirtschaftverbraucher.rss",
"a21": "http://www.bundestag.de/rss_feeds/eu.rss",
"a13": "http://www.bundestag.de/rss_feeds/familie.rss",
"a07": "http://www.bundestag.de/rss_feeds/finanzen.rss",
"a14": "http://www.bundestag.de/rss_feeds/gesundheit.rss",
"a08": "http://www.bundestag.de/rss_feeds/haushalt.rss",
"a04": "http://www.bundestag.de/rss_feeds/inneres.rss",
"a22": "http://www.bundestag.de/rss_feeds/kultur.rss",
"a17": "http://www.bundestag.de/rss_feeds/menschenrechte.rss",
"a02": "http://www.bundestag.de/rss_feeds/petitionen.rss",
"a06": "http://www.bundestag.de/rss_feeds/recht.rss",
"a05": "http://www.bundestag.de/rss_feeds/sport.rss",
"a20": "http://www.bundestag.de/rss_feeds/tourismus.rss",
"a16": "http://www.bundestag.de/rss_feeds/umwelt.rss",
"a15": "http://www.bundestag.de/rss_feeds/verkehr.rss",
"a14": "http://www.bundestag.de/rss_feeds/verteidigung.rss",
"a09": "http://www.bundestag.de/rss_feeds/wirtschaft.rss",
"a19": "http://www.bundestag.de/rss_feeds/entwicklung.rss",
"eig": "http://www.bundestag.de/rss_feeds/internetenquete.rss"
}

GERMAN_MONTHS = {
'Jan': 1,
'Feb': 2,
'Mrz': 3,
'Apr': 4,
'Mai': 5,
'Jun': 6,
'Jul': 7,
'Aug': 8,
'Sep': 9,
'Okt': 10,
'Nov': 11,
'Dez': 12
}

0 comments on commit b36f45e

Please sign in to comment.