Ejemplo n.º 1
0
			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 '------'
Ejemplo n.º 2
0
					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'])
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
				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)