コード例 #1
0
    def test_get_normalized_name__removes_honorifics(self):
        self.assertEqual(normalize_name("Rt Hon Alistair Darling"),
                         "Alistair Darling")
        self.assertEqual(normalize_name("Sir Christopher Chope"),
                         "Christopher Chope")

        # Check that name beginning with an honorific ("Sir") are unaffected.
        self.assertEqual(normalize_name("Sirius Snape"), "Sirius Snape")
コード例 #2
0
ファイル: all_members.py プロジェクト: beatonma/snommoc
def _update_lord_basic_info(data: MemberResponseData, house: House) -> None:
    member_id = data.get_parliament_id()

    party = get_or_create_party(data.get_party_id(), data.get_party())
    is_active = data.get_is_active()

    try:
        lords_type, _ = LordsType.objects.get_or_create(name=data.get_lords_type())
    except:
        lords_type = None

    Person.objects.update_or_create(
        parliamentdotuk=member_id,
        defaults={
            "name": normalize_name(data.get_name()),
            "full_title": data.get_full_title(),
            "party": party,
            "lords_type": lords_type,
            "house": house,
            "date_entered_house": data.get_house_start_date(),
            "date_left_house": data.get_house_end_date(),
            "date_of_birth": data.get_date_of_birth(),
            "date_of_death": data.get_date_of_death(),
            "gender": data.get_gender(),
            "active": is_active,
        },
    )
コード例 #3
0
def _create_candidate(
    election_result: ConstituencyResultDetail,
    candidate,
    constituency: Constituency,
    election: Election,
):
    check_required_fields(
        candidate,
        contract.CANDIDATE_NAME,
        contract.CANDIDATE_PARTY,
    )

    name = get_str(candidate, contract.CANDIDATE_NAME)
    person = get_member_for_election_result(
        normalize_name(name),
        constituency,
        election,
    )
    party_name = get_str(candidate, contract.CANDIDATE_PARTY)
    party = get_party_by_name(party_name)

    votes = get_int(candidate, contract.CANDIDATE_VOTES)
    order = get_int(candidate, contract.CANDIDATE_ORDINAL)

    ConstituencyCandidate.objects.update_or_create(
        election_result=election_result,
        name=name,
        defaults={
            "person": person,
            "votes": votes,
            "order": order,
            "party_name": party_name,
            "party": party,
        },
    )
コード例 #4
0
def _migrate_people_normalized_names():
    people = Person.objects.all()
    for p in people:
        normalized_name = normalize_name(p.name)
        if normalized_name != p.name:
            print(f" [{p.pk}] {p.name} -> {normalized_name}")
            p.name = normalized_name
            p.save()
コード例 #5
0
def _update_single_member(id: int = None, name: str = None):
    if id:
        member = Person.objects.get(pk=id)
    else:
        member = get_member_by_name(normalize_name(name))

    if member is None:
        raise Exception(f"Member not found: name={name} [id={id}]")

    print(f"Trying to update portrait for member {member}")
    update_member_portrait(member)

    try:
        print(f"Portrait: {MemberPortrait.objects.get(person=member)}")
    except MemberPortrait.DoesNotExist:
        print(f"Unable to find portrait for member {member}")
コード例 #6
0
def _update_sponsor(bill: Bill, data: dict):
    sponsor_name = get_str(data, contract.SPONSOR_NAME)
    normalized_name = normalize_name(sponsor_name)

    if not normalized_name:
        log.warning(
            f"Sponsor name is empty (bill:{bill.parliamentdotuk}): '{sponsor_name}' -> '{normalized_name}'"
        )
        return

    person = get_member_by_name(normalized_name)
    BillSponsor.objects.update_or_create(
        name=normalized_name,
        bill=bill,
        defaults={
            "person": person,
        },
    )
コード例 #7
0
ファイル: all_members.py プロジェクト: beatonma/snommoc
def _update_mp_basic_info(data: MemberResponseData, house: House) -> None:
    member_id = data.get_parliament_id()

    party = get_or_create_party(data.get_party_id(), data.get_party())
    is_active = data.get_is_active()

    if is_active:
        constituency = get_current_constituency(data.get_constituency())
    else:
        constituency = get_constituency_for_date(
            data.get_constituency(),
            data.get_house_end_date() or data.get_house_start_date(),
        )

    person, _ = Person.objects.update_or_create(
        parliamentdotuk=member_id,
        defaults={
            "name": normalize_name(data.get_name()),
            "full_title": data.get_full_title(),
            "party": party,
            "constituency": constituency,
            "house": house,
            "date_entered_house": data.get_house_start_date(),
            "date_left_house": data.get_house_end_date(),
            "date_of_birth": data.get_date_of_birth(),
            "date_of_death": data.get_date_of_death(),
            "gender": data.get_gender(),
            "active": is_active,
        },
    )

    if is_active and constituency and house.name == HOUSE_OF_COMMONS:
        # If the member is registered to some other constituency,
        # remove that relation first before updating.
        existing = get_or_none(Constituency, mp__pk=member_id)
        if existing:
            existing.mp = None
            existing.save()

        constituency.mp = person
        constituency.save()
コード例 #8
0
def _migrate_billsponsor_normalized_names():
    sponsors = BillSponsor.objects.all()

    for sponsor in sponsors:
        try:
            name = sponsor.name or sponsor.person.name
        except AttributeError:
            print(f"[{sponsor.id}] No name!")
            continue

        normalized_name = normalize_name(name)

        person = get_member_by_name(normalized_name)
        if sponsor.person is not None and person != sponsor.person:
            print(
                f"Resolved person {person} != existing person {sponsor.person} (name={normalized_name}, id={sponsor.id})"
            )

        elif sponsor.person != person or name != normalized_name:
            print(
                f"Update {name} [{sponsor.person}] -> {normalized_name} [{person}]"
            )

            existing = BillSponsor.objects.filter(
                bill_id=sponsor.bill_id,
                person=person,
            )
            pre_existing = existing.count()
            if pre_existing > 0:
                print(f"Clash detected {name} | {person} --- {existing}")

                if pre_existing == 1:
                    clash = existing.first()
                    print(f"Deleting duplicate {clash}")
                    clash.delete()

            sponsor.name = normalized_name
            sponsor.person = person
            sponsor.save()
コード例 #9
0
    def test_get_normalized_name__normalises_whitespace(self):
        self.assertEqual(normalize_name("Caroline   Lucas"), "Caroline Lucas")
        self.assertEqual(normalize_name("Lucas,   Caroline"), "Caroline Lucas")

        self.assertEqual(normalize_name(" Caroline Lucas "), "Caroline Lucas")
        self.assertEqual(normalize_name(" Lucas, Caroline "), "Caroline Lucas")
コード例 #10
0
 def test_get_normalized_name__normalizes_name_ordering(self):
     """Names in the format `Surname, Forename` should be rearranged to `Forename Surname`"""
     self.assertEqual(normalize_name("Caroline Lucas"), "Caroline Lucas")
     self.assertEqual(normalize_name("Lucas, Caroline"), "Caroline Lucas")