except Exception as e: if 'duplicate' in e.message: pass else: print 'Error on line #{0}: {1}'.format(inspect.currentframe().f_lineno, e) for candidate in race.candidates: candidate.race = race.id raw_name = candidate.raw_name parsed_name = parse_name(candidate.raw_name.replace(',,', ','))['name_dict'] # set the person attribute candidate.person = get_or_create_person(parsed_name)['person'] for k, v in candidate._data.iteritems(): print ' {0}: {1}'.format(k, repr(v)) # now save try: with db.atomic(): candidate.save() except Exception as e: if 'duplicate' in e.message: pass else: print 'Error on line #{0}: {1}'.format(inspect.currentframe().f_lineno, e) print '------'
member_query = (Assembly_Member .select() .where( (Assembly_Member.person << person_names) & (Assembly_Member.district == member['district']) & (Assembly_Member.chamber == member['chamber']) & (Assembly_Member.assembly == member['assembly']) ) ) if member_query.count() == 1: a_m = member_query.get() else: # if we can't find an existing member... # then, get or create a person record person_select = get_or_create_person(member['name_dict']) # if we made a new person, then we need to make a new member record if person_select['new_person'] == True: print ' Creating new assembly {0} member record for {1}'.format(member['assembly'].id, member['raw_name']) with db.atomic(): a_m = Assembly_Member.create(person = person_select['person'], **member) else: # if it isn't a new person, try to select a member record for the found person try: a_m = (Assembly_Member .select() .where( (Assembly_Member.district == member['district']) & (Assembly_Member.assembly == member['assembly']) & (Assembly_Member.chamber == member['chamber'])
def get_hb_sponsor(bill, sponsor_type): """ Takes a bill and a sponsor type. Parse out the name, and queries to find the member's record. Returns a Bill_Sponsor object, ready to save. """ bill_sponsor = Bill_Sponsor(bill=bill, sponsor_type=sponsor_type) if sponsor_type == 'S': bill_sponsor.raw_name = bill.sponsor_string elif sponsor_type == 'C': bill_sponsor.raw_name = bill.co_sponsor_string # parse the district from the raw_name try: district = re.search(r'\((\d+)\)', bill_sponsor.raw_name).group(1) except AttributeError: # if this fails, set up the first query to fail and deal with it downstream district = 0 # query for member by district, assembly and chamber member_query = (Assembly_Member.select().where( (Assembly_Member.district == district) & (Assembly_Member.assembly == bill.session.assembly) & (Assembly_Member.chamber == 'H'))) # if there's only one result in the member query, use that member if member_query.count() == 1: bill_sponsor.sponsor = member_query.get() # if there are more than one members... elif member_query.count() != 1: # for some reason, these two legislator names are sometimes formatted differently if 'Stacey Newman' in bill_sponsor.raw_name: last = 'Newman' elif 'Scharnhorst' in bill_sponsor.raw_name: last = 'Scharnhorst' else: last = re.search(r'^([\w-]+)(?:\s\w+)?,', bill_sponsor.raw_name).group(1) if district > 0: # query for member by last_name, district, assembly and chamber member_query = (Assembly_Member.select().join(Person).where( (Person.last_name == last) & (Assembly_Member.district == district) & (Assembly_Member.assembly == bill.session.assembly) & (Assembly_Member.chamber == 'H'))) elif district == 0: # query for member by last_name, assembly and chamber member_query = (Assembly_Member.select().join(Person).where( (Person.last_name == last) & (Assembly_Member.assembly == bill.session.assembly) & (Assembly_Member.chamber == 'H'))) if member_query.count() == 1: bill_sponsor.sponsor = member_query.get() else: # remove the 'etal' from the raw_name name_string = re.sub(r'[\.\s]+et\s*al\.*', '', bill_sponsor.raw_name).strip() # parse the name parsed_name = parse_name(name_string) # remove the district district = parsed_name['name_dict'].pop('district') # get or create a person person = get_or_create_person(parsed_name['name_dict'])['person'] # get or create an assembly_member with db.atomic(): bill_sponsor.sponsor = Assembly_Member.get_or_create( person=person, district=district, assembly=bill.session.assembly, chamber='H')[0] # save the new bill_sponsor record return bill_sponsor
def get_hb_sponsor(bill, sponsor_type): """ Takes a bill and a sponsor type. Parse out the name, and queries to find the member's record. Returns a Bill_Sponsor object, ready to save. """ bill_sponsor = Bill_Sponsor( bill = bill , sponsor_type = sponsor_type ) if sponsor_type == 'S': bill_sponsor.raw_name = bill.sponsor_string elif sponsor_type == 'C': bill_sponsor.raw_name = bill.co_sponsor_string # parse the district from the raw_name try: district = re.search(r'\((\d+)\)', bill_sponsor.raw_name).group(1) except AttributeError: # if this fails, set up the first query to fail and deal with it downstream district = 0 # query for member by district, assembly and chamber member_query = (Assembly_Member .select() .where( (Assembly_Member.district == district) & (Assembly_Member.assembly == bill.session.assembly) & (Assembly_Member.chamber == 'H') ) ) # if there's only one result in the member query, use that member if member_query.count() == 1: bill_sponsor.sponsor = member_query.get() # if there are more than one members... elif member_query.count() != 1: # for some reason, these two legislator names are sometimes formatted differently if 'Stacey Newman' in bill_sponsor.raw_name: last = 'Newman' elif 'Scharnhorst' in bill_sponsor.raw_name: last = 'Scharnhorst' else: last = re.search(r'^([\w-]+)(?:\s\w+)?,', bill_sponsor.raw_name).group(1) if district > 0: # query for member by last_name, district, assembly and chamber member_query = (Assembly_Member .select() .join(Person) .where( (Person.last_name == last) & (Assembly_Member.district == district) & (Assembly_Member.assembly == bill.session.assembly) & (Assembly_Member.chamber == 'H') ) ) elif district == 0: # query for member by last_name, assembly and chamber member_query = (Assembly_Member .select() .join(Person) .where( (Person.last_name == last) & (Assembly_Member.assembly == bill.session.assembly) & (Assembly_Member.chamber == 'H') ) ) if member_query.count() == 1: bill_sponsor.sponsor = member_query.get() else: # remove the 'etal' from the raw_name name_string = re.sub(r'[\.\s]+et\s*al\.*', '', bill_sponsor.raw_name).strip() # parse the name parsed_name = parse_name(name_string) # remove the district district = parsed_name['name_dict'].pop('district') # get or create a person person = get_or_create_person(parsed_name['name_dict'])['person'] # get or create an assembly_member with db.atomic(): bill_sponsor.sponsor = Assembly_Member.get_or_create( person = person , district = district , assembly = bill.session.assembly , chamber = 'H' )[0] # save the new bill_sponsor record return bill_sponsor
except Exception as e: if 'duplicate' in e.message: pass else: print 'Error on line #{0}: {1}'.format(inspect.currentframe().f_lineno, e) # now loop over the candidates for candidate in race.candidates: # set the race attribute candidate.race = race.id parsed_name = parse_name(candidate.raw_name)['name_dict'] # set the person attribute candidate.person = get_or_create_person(parsed_name)['person'] for k, v in candidate._data.iteritems(): print ' {0}: {1}'.format(k, v) print '------' # now save try: with db.atomic(): candidate.save() except Exception as e: if 'duplicate' in e.message: pass else: print 'Error on line #{0}: {1}'.format(inspect.currentframe().f_lineno, e)