def position(): name_search = models.NameSearch( models.Person.query .join(models.Mandate) .filter(models.Mandate.year == 2012) .all() ) position_patcher = TablePatcher( models.Position, models.db.session, key_columns=['person_id', 'interval', 'title'], ) with position_patcher.process(remove=True) as add_position: for row in get_gdrive_csv(POSITION_PONTA2_CSV_KEY): if row['temporary'].strip(): continue name = row['name'].strip() matches = name_search.find(name) if len(matches) == 1: [person] = matches interval = parse_interval(row['start_date'], row['end_date']) add_position({ 'person_id': person.id, 'interval': interval, 'title': row['title'], 'url': row['url'] or None, }) elif len(matches) > 1: logger.warn("Multiple matches for %r", name) else: logger.warn("No matches for %r", name) for row in get_gdrive_csv(POSITION_BIROU_CDEP_CSV_KEY): name = row['name'].strip() matches = name_search.find(name) assert len(matches) == 1, \ "Expected a single match for %r, got %r" % (name, matches) [person] = matches add_position({ 'person_id': person.id, 'interval': parse_interval(row['start_date'], row['end_date']), 'title': row['title'] + ", Biroul Permanent", }) models.db.session.commit()
def cabinet_party(): patcher = TablePatcher( models.CabinetMembership, models.db.session, key_columns=['mp_group_id', 'interval'], ) group_by_code = {g.short_name: g for g in models.MpGroup.query} with patcher.process(remove=True) as add_membership: for row in get_gdrive_csv(CABINET_PARTY_CSV_KEY): assert row['legislature'] == '2012' group = group_by_code[row['code']] add_membership({ 'mp_group_id': group.id, 'interval': parse_interval(row['start_date'], row['end_date']), }) models.db.session.commit()