Beispiel #1
0
    async def test_person_with_individual_and_affiliation_names(
            self, expected: str, locale: str):
        person_id = 'P1'
        individual_name = 'Jane'
        affiliation_name = 'Doughnut'
        person = Person(person_id)
        person.names.append(PersonName(individual_name, affiliation_name))

        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            async with Site(configuration).with_locale(locale) as site:
                site.ancestry.people[person_id] = person
                indexed = [item for item in await Index(site).build()]

        self.assertEquals('jane doughnut', indexed[0]['text'])
        self.assertIn(expected, indexed[0]['result'])
Beispiel #2
0
    def test_clean_should_not_clean_citation_with_facts(self) -> None:
        ancestry = Ancestry()

        source = IdentifiableSource('S0', 'The Source')
        ancestry.sources[source.id] = source

        citation = IdentifiableCitation('C0', source)
        citation.facts.append(PersonName('Jane'))
        ancestry.citations[citation.id] = citation

        fact = Person('P0')
        fact.citations.append(citation)
        ancestry.people[fact.id] = fact

        clean(ancestry)

        self.assertEqual(citation, ancestry.citations[citation.id])
        self.assertIn(citation, fact.citations)
        self.assertEqual(fact, ancestry.people[fact.id])
Beispiel #3
0
    def test_person_with_individual_and_affiliation_names(
            self, expected: str, locale: str):
        with TemporaryDirectory() as output_directory_path:
            configuration = Configuration(output_directory_path,
                                          'https://example.com')
            configuration.locales['en-US'] = LocaleConfiguration('en-US', 'en')
            configuration.locales['nl-NL'] = LocaleConfiguration('nl-NL', 'nl')
            site = Site(configuration)
            environment = create_environment(site, locale)
            person_id = 'P1'
            individual_name = 'Jane'
            affiliation_name = 'Doughnut'
            person = Person(person_id)
            person.names.append(PersonName(individual_name, affiliation_name))
            site.ancestry.people[person_id] = person

            indexed = list(index(site, environment))

            self.assertEquals('jane doughnut', indexed[0]['text'])
            self.assertIn(expected, indexed[0]['result'])
Beispiel #4
0
 def test_name_with_names(self) -> None:
     sut = Person('P1')
     name = PersonName()
     sut.names = [name, PersonName()]
     self.assertEquals(name, sut.name)
Beispiel #5
0
 def test_affiliation(self) -> None:
     affiliation = 'Not a Girl'
     sut = PersonName('Janet', affiliation)
     self.assertEquals(affiliation, sut.affiliation)
Beispiel #6
0
 def test_individual(self) -> None:
     individual = 'Janet'
     sut = PersonName(individual, 'Not a Girl')
     self.assertEquals(individual, sut.individual)
Beispiel #7
0
 def test_citations(self) -> None:
     sut = PersonName('Janet', 'Not a Girl')
     self.assertCountEqual([], sut.citations)
Beispiel #8
0
 def test_locale(self) -> None:
     sut = PersonName('Janet', 'Not a Girl')
     self.assertIsNone(sut.locale)
Beispiel #9
0
class PersonNameTest(TestCase):
    def test_person(self) -> None:
        sut = PersonName('Janet', 'Not a Girl')
        person = Person('1')
        sut.person = person
        self.assertEquals(person, sut.person)
        self.assertCountEqual([sut], person.names)
        sut.person = None
        self.assertIsNone(sut.person)
        self.assertCountEqual([], person.names)

    def test_locale(self) -> None:
        sut = PersonName('Janet', 'Not a Girl')
        self.assertIsNone(sut.locale)

    def test_citations(self) -> None:
        sut = PersonName('Janet', 'Not a Girl')
        self.assertCountEqual([], sut.citations)

    def test_individual(self) -> None:
        individual = 'Janet'
        sut = PersonName(individual, 'Not a Girl')
        self.assertEquals(individual, sut.individual)

    def test_affiliation(self) -> None:
        affiliation = 'Not a Girl'
        sut = PersonName('Janet', affiliation)
        self.assertEquals(affiliation, sut.affiliation)

    @parameterized.expand([
        (True, PersonName('Janet',
                          'Not a Girl'), PersonName('Janet', 'Not a Girl')),
        (True, PersonName('Janet'), PersonName('Janet')),
        (True, PersonName(None, 'Not a Girl'), PersonName(None, 'Not a Girl')),
        (False, PersonName('Janet'), PersonName(None, 'Not a Girl')),
        (False, PersonName('Janet', 'Not a Girl'), None),
        (False, PersonName('Janet', 'Not a Girl'), True),
        (False, PersonName('Janet', 'Not a Girl'), 9),
        (False, PersonName('Janet', 'Not a Girl'), object()),
    ])
    def test_eq(self, expected: bool, left: PersonName, right: Any) -> None:
        self.assertEquals(expected, left == right)

    @parameterized.expand([
        (False, PersonName('Janet',
                           'Not a Girl'), PersonName('Janet', 'Not a Girl')),
        (True, PersonName('Janet',
                          'Not a Girl'), PersonName('Not a Girl', 'Janet')),
        (True, PersonName('Janet', 'Not a Girl'), None),
    ])
    def test_gt(self, expected: bool, left: PersonName, right: Any) -> None:
        self.assertEquals(expected, left > right)
Beispiel #10
0
 def test_person_should_include_name(self):
     person = self.ancestry.people['I0000']
     expected = PersonName('Jane', 'Doe')
     self.assertEquals(expected, person.name)
Beispiel #11
0
from typing import Any, Set, Type

from betty.ancestry import Ancestry, PersonName
from betty.parse import PostParser
from betty.plugin import NO_CONFIGURATION, Plugin
from betty.plugin.anonymizer import Anonymizer, anonymize_person
from betty.plugin.cleaner import Cleaner
from betty.plugin.privatizer import Privatizer
from betty.site import Site

_PEOPLE = {
    'I0000': PersonName('Bart', 'Feenstra'),
    'I0863': PersonName('Ger', 'Huijbregts'),
}


class PublishPeople(Plugin, PostParser):
    def __init__(self, ancestry: Ancestry):
        self._ancestry = ancestry

    @classmethod
    def for_site(cls, site: Site, configuration: Any = NO_CONFIGURATION):
        return cls(site.ancestry)

    @classmethod
    def comes_before(cls) -> Set[Type]:
        return {Privatizer}

    async def post_parse(self) -> None:
        self._publish_people()
Beispiel #12
0
 def test_should_remove_facts(self) -> None:
     source = Source('S0', 'The Source')
     citation = Citation('C0', source)
     citation.facts.append(PersonName('Jane'))
     anonymize_citation(citation)
     self.assertEquals(0, len(citation.facts))
Beispiel #13
0
 def test_should_remove_names(self) -> None:
     person = Person('P0')
     person.names.append(PersonName('Jane', 'Doughh'))
     anonymize_person(person)
     self.assertEquals(0, len(person.names))
Beispiel #14
0
 def test_alternative_names(self) -> None:
     sut = Person('P1')
     name = PersonName('Janet', 'Not a Girl')
     alternative_name = PersonName('Janet', 'Still not a Girl')
     sut.names = [name, alternative_name]
     self.assertEquals([alternative_name], sut.alternative_names)
Beispiel #15
0
    def test_person_should_encode_full(self):
        parent_id = 'the_parent'
        parent = Person(parent_id)

        child_id = 'the_child'
        child = Person(child_id)

        sibling_id = 'the_sibling'
        sibling = Person(sibling_id)
        sibling.parents.append(parent)

        person_id = 'the_person'
        person_affiliation_name = 'Person'
        person_individual_name = 'The'
        person = Person(person_id)
        person.names.append(
            PersonName(person_individual_name, person_affiliation_name))
        person.parents.append(parent)
        person.children.append(child)
        person.private = False
        link = Link('https://example.com/the-person')
        link.label = 'The Person Online'
        person.links.add(link)
        person.citations.append(
            IdentifiableCitation('the_citation', Source('The Source')))
        Presence(person, Subject(), IdentifiableEvent('the_event', Birth()))

        expected = {
            '$schema':
            '/schema.json#/definitions/person',
            '@context': {
                'parents': 'https://schema.org/parent',
                'children': 'https://schema.org/child',
                'siblings': 'https://schema.org/sibling',
            },
            '@type':
            'https://schema.org/Person',
            'id':
            person_id,
            'names': [
                {
                    '@context': {
                        'individual': 'https://schema.org/givenName',
                        'affiliation': 'https://schema.org/familyName',
                    },
                    'individual': person_individual_name,
                    'affiliation': person_affiliation_name,
                },
            ],
            'parents': [
                '/en/person/the_parent/index.json',
            ],
            'children': [
                '/en/person/the_child/index.json',
            ],
            'siblings': [
                '/en/person/the_sibling/index.json',
            ],
            'private':
            False,
            'presences': [
                {
                    '@context': {
                        'event': 'https://schema.org/performerIn',
                    },
                    'role': 'subject',
                    'event': '/en/event/the_event/index.json',
                },
            ],
            'citations': [
                '/en/citation/the_citation/index.json',
            ],
            'links': [
                {
                    'url': '/en/person/the_person/index.json',
                    'relationship': 'canonical',
                    'mediaType': 'application/json',
                },
                {
                    'url': '/nl/person/the_person/index.json',
                    'relationship': 'alternate',
                    'locale': 'nl-NL',
                },
                {
                    'url': '/en/person/the_person/index.html',
                    'relationship': 'alternate',
                    'mediaType': 'text/html',
                },
                {
                    'url': 'https://example.com/the-person',
                    'label': 'The Person Online',
                },
            ],
        }
        self.assert_encodes(expected, person, 'person')
Beispiel #16
0
    def test_person_should_encode_full(self):
        parent_id = 'the_parent'
        parent = Person(parent_id)

        child_id = 'the_child'
        child = Person(child_id)

        sibling_id = 'the_sibling'
        sibling = Person(sibling_id)
        sibling.parents.append(parent)

        person_id = 'the_person'
        person_affiliation_name = 'Person'
        person_individual_name = 'The'
        person = Person(person_id)
        person.names.append(
            PersonName(person_individual_name, person_affiliation_name))
        person.parents.append(parent)
        person.children.append(child)
        person.private = False
        person.links.add(
            Link('https://example.com/the-person', 'The Person Online'))
        person.citations.append(
            Citation('the_citation', Source('the_source', 'The Source')))
        Presence(person, Presence.Role.SUBJECT,
                 IdentifiableEvent('the_event', Event.Type.BIRTH))

        expected = {
            '$schema':
            '/schema.json#/definitions/person',
            '@context': {
                'parents': 'https://schema.org/parent',
                'children': 'https://schema.org/child',
                'siblings': 'https://schema.org/sibling',
            },
            '@type':
            'https://schema.org/Person',
            'id':
            person_id,
            'names': [
                {
                    '@context': {
                        'individual': 'https://schema.org/givenName',
                        'affiliation': 'https://schema.org/familyName',
                    },
                    'individual': person_individual_name,
                    'affiliation': person_affiliation_name,
                },
            ],
            'parents': [
                '/person/the_parent/index.json',
            ],
            'children': [
                '/person/the_child/index.json',
            ],
            'siblings': [
                '/person/the_sibling/index.json',
            ],
            'private':
            False,
            'presences': [
                {
                    '@context': {
                        'event': 'https://schema.org/performerIn',
                    },
                    'role': Presence.Role.SUBJECT.value,
                    'event': '/event/the_event/index.json',
                },
            ],
            'citations': [
                '/citation/the_citation/index.json',
            ],
            'links': [
                {
                    'url': 'https://example.com/the-person',
                    'label': 'The Person Online',
                },
            ],
        }
        self.assert_encodes(expected, person, 'person')
Beispiel #17
0
    async def load(self) -> None:
        amsterdam = Place('betty-demo-amsterdam', [PlaceName('Amsterdam')])
        amsterdam.coordinates = Point(52.366667, 4.9)
        amsterdam.links.add(Link('https://nl.wikipedia.org/wiki/Amsterdam'))
        self._ancestry.places[amsterdam.id] = amsterdam

        ilpendam = Place('betty-demo-ilpendam', [PlaceName('Ilpendam')])
        ilpendam.coordinates = Point(52.465556, 4.951111)
        ilpendam.links.add(Link('https://nl.wikipedia.org/wiki/Ilpendam'))
        self._ancestry.places[ilpendam.id] = ilpendam

        personal_accounts = IdentifiableSource('betty-demo-personal-accounts',
                                               'Personal accounts')
        self._ancestry.sources[personal_accounts.id] = personal_accounts

        cite_first_person_account = IdentifiableCitation(
            'betty-demo-first-person-account', personal_accounts)
        self._ancestry.citations[
            cite_first_person_account.id] = cite_first_person_account

        bevolkingsregister_amsterdam = IdentifiableSource(
            'betty-demo-bevolkingsregister-amsterdam',
            'Bevolkingsregister Amsterdam')
        bevolkingsregister_amsterdam.author = 'Gemeente Amsterdam'
        bevolkingsregister_amsterdam.publisher = 'Gemeente Amsterdam'
        self._ancestry.sources[
            bevolkingsregister_amsterdam.id] = bevolkingsregister_amsterdam

        david_marinus_lankester = Person('betty-demo-david-marinus-lankester')
        david_marinus_lankester.names.append(
            PersonName('David Marinus', 'Lankester'))
        self._ancestry.people[
            david_marinus_lankester.id] = david_marinus_lankester

        geertruida_van_ling = Person('betty-demo-geertruida-van-ling')
        geertruida_van_ling.names.append(PersonName('Geertruida', 'Van Ling'))
        self._ancestry.people[geertruida_van_ling.id] = geertruida_van_ling

        marriage_of_dirk_jacobus_lankester_and_jannigje_palsen = IdentifiableEvent(
            'betty-demo-marriage-of-dirk-jacobus-lankester-and-jannigje-palsen',
            Marriage(), Date(1922, 7, 4))
        marriage_of_dirk_jacobus_lankester_and_jannigje_palsen.place = ilpendam
        self._ancestry.events[
            marriage_of_dirk_jacobus_lankester_and_jannigje_palsen.
            id] = marriage_of_dirk_jacobus_lankester_and_jannigje_palsen

        birth_of_dirk_jacobus_lankester = IdentifiableEvent(
            'betty-demo-birth-of-dirk-jacobus-lankester', Birth(),
            Date(1897, 8, 25))
        birth_of_dirk_jacobus_lankester.place = amsterdam
        self._ancestry.events[birth_of_dirk_jacobus_lankester.
                              id] = birth_of_dirk_jacobus_lankester

        death_of_dirk_jacobus_lankester = IdentifiableEvent(
            'betty-demo-death-of-dirk-jacobus-lankester', Death(),
            Date(1986, 8, 18))
        death_of_dirk_jacobus_lankester.place = amsterdam
        self._ancestry.events[death_of_dirk_jacobus_lankester.
                              id] = death_of_dirk_jacobus_lankester

        dirk_jacobus_lankester = Person('betty-demo-dirk-jacobus-lankester')
        dirk_jacobus_lankester.names.append(
            PersonName('Dirk Jacobus', 'Lankester'))
        Presence(dirk_jacobus_lankester, Subject(),
                 birth_of_dirk_jacobus_lankester)
        Presence(dirk_jacobus_lankester, Subject(),
                 death_of_dirk_jacobus_lankester)
        Presence(dirk_jacobus_lankester, Subject(),
                 marriage_of_dirk_jacobus_lankester_and_jannigje_palsen)
        dirk_jacobus_lankester.parents.append(david_marinus_lankester,
                                              geertruida_van_ling)
        self._ancestry.people[
            dirk_jacobus_lankester.id] = dirk_jacobus_lankester

        birth_of_marinus_david_lankester = IdentifiableEvent(
            'betty-demo-birth-of-marinus-david', Birth(),
            DateRange(Date(1874, 1, 15),
                      Date(1874, 3, 21),
                      start_is_boundary=True,
                      end_is_boundary=True))
        birth_of_marinus_david_lankester.place = amsterdam
        self._ancestry.events[birth_of_marinus_david_lankester.
                              id] = birth_of_marinus_david_lankester

        death_of_marinus_david_lankester = IdentifiableEvent(
            'betty-demo-death-of-marinus-david', Death(), Date(1971))
        death_of_marinus_david_lankester.place = amsterdam
        self._ancestry.events[death_of_marinus_david_lankester.
                              id] = death_of_marinus_david_lankester

        marinus_david_lankester = Person('betty-demo-marinus-david-lankester')
        marinus_david_lankester.names.append(
            PersonName('Marinus David', 'Lankester'))
        Presence(marinus_david_lankester, Subject(),
                 birth_of_marinus_david_lankester)
        Presence(marinus_david_lankester, Subject(),
                 death_of_marinus_david_lankester)
        marinus_david_lankester.parents.append(david_marinus_lankester,
                                               geertruida_van_ling)
        self._ancestry.people[
            marinus_david_lankester.id] = marinus_david_lankester

        birth_of_jacoba_gesina_lankester = IdentifiableEvent(
            'betty-demo-birth-of-jacoba-gesina', Birth(), Date(1900, 3, 14))
        birth_of_jacoba_gesina_lankester.place = amsterdam
        self._ancestry.events[birth_of_jacoba_gesina_lankester.
                              id] = birth_of_jacoba_gesina_lankester

        jacoba_gesina_lankester = Person('betty-demo-jacoba-gesina-lankester')
        jacoba_gesina_lankester.names.append(
            PersonName('Jacoba Gesina', 'Lankester'))
        Presence(jacoba_gesina_lankester, Subject(),
                 birth_of_jacoba_gesina_lankester)
        jacoba_gesina_lankester.parents.append(david_marinus_lankester,
                                               geertruida_van_ling)
        self._ancestry.people[
            jacoba_gesina_lankester.id] = jacoba_gesina_lankester

        jannigje_palsen = Person('betty-demo-jannigje-palsen')
        jannigje_palsen.names.append(PersonName('Jannigje', 'Palsen'))
        Presence(jannigje_palsen, Subject(),
                 marriage_of_dirk_jacobus_lankester_and_jannigje_palsen)
        self._ancestry.people[jannigje_palsen.id] = jannigje_palsen

        marriage_of_johan_de_boer_and_liberta_lankester = IdentifiableEvent(
            'betty-demo-marriage-of-johan-de-boer-and-liberta-lankester',
            Marriage(), Date(1953, 6, 19))
        marriage_of_johan_de_boer_and_liberta_lankester.place = amsterdam
        self._ancestry.events[
            marriage_of_johan_de_boer_and_liberta_lankester.
            id] = marriage_of_johan_de_boer_and_liberta_lankester

        cite_birth_of_liberta_lankester_from_bevolkingsregister_amsterdam = IdentifiableCitation(
            'betty-demo-birth-of-liberta-lankester-from-bevolkingsregister-amsterdam',
            bevolkingsregister_amsterdam)
        cite_birth_of_liberta_lankester_from_bevolkingsregister_amsterdam.location = 'Amsterdam'
        self._ancestry.citations[
            cite_birth_of_liberta_lankester_from_bevolkingsregister_amsterdam.
            id] = cite_birth_of_liberta_lankester_from_bevolkingsregister_amsterdam

        birth_of_liberta_lankester = IdentifiableEvent(
            'betty-demo-birth-of-liberta-lankester', Birth(),
            Date(1929, 12, 22))
        birth_of_liberta_lankester.place = amsterdam
        birth_of_liberta_lankester.citations.append(
            cite_birth_of_liberta_lankester_from_bevolkingsregister_amsterdam)
        self._ancestry.events[
            birth_of_liberta_lankester.id] = birth_of_liberta_lankester

        death_of_liberta_lankester = IdentifiableEvent(
            'betty-demo-death-of-liberta-lankester', Death(),
            Date(2015, 1, 17))
        death_of_liberta_lankester.place = amsterdam
        death_of_liberta_lankester.citations.append(cite_first_person_account)
        self._ancestry.events[
            death_of_liberta_lankester.id] = death_of_liberta_lankester

        liberta_lankester = Person('betty-demo-liberta-lankester')
        liberta_lankester.names.append(PersonName('Liberta', 'Lankester'))
        liberta_lankester.names.append(PersonName('Betty'))
        Presence(liberta_lankester, Subject(), birth_of_liberta_lankester)
        Presence(liberta_lankester, Subject(), death_of_liberta_lankester)
        Presence(liberta_lankester, Subject(),
                 marriage_of_johan_de_boer_and_liberta_lankester)
        liberta_lankester.parents.append(dirk_jacobus_lankester,
                                         jannigje_palsen)
        self._ancestry.people[liberta_lankester.id] = liberta_lankester

        birth_of_johan_de_boer = IdentifiableEvent(
            'betty-demo-birth-of-johan-de-boer', Birth(), Date(1930, 6, 20))
        birth_of_johan_de_boer.place = amsterdam
        self._ancestry.events[
            birth_of_johan_de_boer.id] = birth_of_johan_de_boer

        death_of_johan_de_boer = IdentifiableEvent(
            'betty-demo-death-of-johan-de-boer', Death(), Date(1999, 3, 10))
        death_of_johan_de_boer.place = amsterdam
        death_of_johan_de_boer.citations.append(cite_first_person_account)
        self._ancestry.events[
            death_of_johan_de_boer.id] = death_of_johan_de_boer

        johan_de_boer = Person('betty-demo-johan-de-boer')
        johan_de_boer.names.append(PersonName('Johan', 'De Boer'))
        johan_de_boer.names.append(PersonName('Hans'))
        Presence(johan_de_boer, Subject(), birth_of_johan_de_boer)
        Presence(johan_de_boer, Subject(), death_of_johan_de_boer)
        Presence(johan_de_boer, Subject(),
                 marriage_of_johan_de_boer_and_liberta_lankester)
        self._ancestry.people[johan_de_boer.id] = johan_de_boer

        parent_of_bart_feenstra_child_of_liberta_lankester = Person(
            'betty-demo-parent-of-bart-feenstra-child-of-liberta-lankester')
        parent_of_bart_feenstra_child_of_liberta_lankester.names.append(
            PersonName('Bart\'s parent'))
        parent_of_bart_feenstra_child_of_liberta_lankester.parents.append(
            johan_de_boer, liberta_lankester)
        self._ancestry.people[
            parent_of_bart_feenstra_child_of_liberta_lankester.
            id] = parent_of_bart_feenstra_child_of_liberta_lankester

        bart_feenstra = Person('betty-demo-bart-feenstra')
        bart_feenstra.names.append(PersonName('Bart', 'Feenstra'))
        bart_feenstra.parents.append(
            parent_of_bart_feenstra_child_of_liberta_lankester)
        self._ancestry.people[bart_feenstra.id] = bart_feenstra