def add_dynasty(): response.content_type = 'application/json' print('POST', request.json) result = dict() try: founder = Person(request.json['name'], request.json['byear'], request.json['dyear'], request.json['gender'], None, None) dynasty = Dynasty(request.json['dyn'], founder) founder_key = db.add_person(founder) dynasty_key = db.add_dynasty(dynasty, founder_key) founder.add_dynasty(dynasty_key) db.update_person(founder_key, founder) result['success'] = True result['dynasty_id'] = dynasty_key result['founder_id'] = founder_key result['dyn'] = request.json['dyn'] result['name'] = request.json['name'] result['byear'] = request.json['byear'] result['dyear'] = request.json['dyear'] result['gender'] = request.json['gender'] except: result['success'] = False print(result) return json.dumps(result)
def add_person(self, person: Person): id_ = self.persons.next_id() mother = self.get_person(person.parents.__getitem__(0)) father = self.get_person(person.parents.__getitem__(1)) if mother is not None: mother.add_children(id_) self.update_person(person.parents.__getitem__(0), mother) if father is not None: father.add_children(id_) self.update_person(person.parents.__getitem__(1), father) if mother is not None and father is not None: mother_dynasty = self.get_dynasty({"_id": mother.dynasty}) father_dynasty = self.get_dynasty({"_id": father.dynasty}) if mother_dynasty is None: person.add_dynasty(self.get_dynasty({"_id": father.dynasty})) elif father_dynasty is None: person.add_dynasty(self.get_dynasty({"_id": mother.dynasty})) else: if self.get_person(mother_dynasty.founder ).gender == 'F' and self.get_person( father_dynasty.founder).gender == 'M': person.add_dynasty(father_dynasty) elif self.get_person(mother_dynasty.founder).gender == 'F': person.add_dynasty(mother_dynasty) elif self.get_person(father_dynasty.founder).gender == 'F': person.add_dynasty(father_dynasty) else: person.add_dynasty(father_dynasty) try: self.persons.collection.insert_one({ "_id": id_, "name": person.name, "byear": person.byear, "dyear": person.dyear, "gender": person.gender, "dynasty": person.dynasty, "mid": person.parents.__getitem__(0), "fid": person.parents.__getitem__(1), "children": person.children }) return id_ except: self.persons.collection.replace_one( self.persons.collection.find({ "_id": id_ }).next(), { "_id": id_, "name": person.name, "byear": person.byear, "dyear": person.dyear, "gender": person.gender, "dynasty": person.dynasty, "mid": person.parents.__getitem__(0), "fid": person.parents.__getitem__(1), "children": person.children }) return id_