Browse Source

added person collection

Fabian Peter Hammerle 4 years ago
parent
commit
bf71ead846
1 changed files with 37 additions and 0 deletions
  1. 37 0
      family_tree_yaml/__init__.py

+ 37 - 0
family_tree_yaml/__init__.py

@@ -95,3 +95,40 @@ class Person:
         for attr in ["name", "birth_date", "mother", "father"]:
             if getattr(person, attr) is not None:
                 setattr(self, attr, getattr(person, attr))
+
+
+class PersonCollection:
+    def __init__(self):
+        self._persons = {}
+
+    def __getitem__(self, identifier: str) -> Person:
+        """
+        >>> c = PersonCollection()
+        >>> c.add_person(Person("alice"))
+        Person(alice)
+        >>> c["alice"]
+        Person(alice)
+        """
+        return self._persons[identifier]
+
+    def add_person(self, person: Person) -> Person:
+        """
+        >>> c = PersonCollection()
+        >>> c.add_person(Person("alice"))
+        Person(alice)
+        >>> c.add_person(Person("bob"))
+        Person(bob)
+        >>> c["bob"]
+        Person(bob)
+
+        >>> bob = Person("bob")
+        >>> bob.birth_date = datetime.date(2010, 2, 3)
+        >>> c.add_person(bob)
+        Person(bob, *2010-02-03)
+        """
+        if person.identifier not in self._persons:
+            self._persons[person.identifier] = person
+            return person
+        existing_person = self._persons[person.identifier]
+        existing_person.merge(person)
+        return existing_person