def get_backlinks(db_handle: DbReadBase, handle: Handle) -> Dict[str, List[Handle]]: """Get backlinks to a handle. Will return a dictionary of the form `{'object_type': ['handle1', 'handle2', ...], ...}` """ backlinks = {} for obj_type, target_handle in db_handle.find_backlink_handles(handle): key = obj_type.lower() if key not in backlinks: backlinks[key] = [] backlinks[key].append(target_handle) return backlinks
def get_event_participants_for_handle( db_handle: DbReadBase, handle: Handle, locale: GrampsLocale = glocale, ) -> Dict: """Get event participants given a handle.""" result = {"people": [], "families": []} seen = set() # to avoid duplicates for class_name, backref_handle in db_handle.find_backlink_handles( handle, include_classes=["Person", "Family"] ): if backref_handle in seen: continue seen.add(backref_handle) if class_name == "Person": person = db_handle.get_person_from_handle(backref_handle) if not person: continue for event_ref in person.get_event_ref_list(): if handle == event_ref.ref: result["people"].append( { "role": locale.translation.sgettext( event_ref.get_role().xml_str() ), "person": get_person_profile_for_handle( db_handle, backref_handle, args=[], locale=locale ), } ) elif class_name == "Family": family = db_handle.get_family_from_handle(backref_handle) if not family: continue for event_ref in family.get_event_ref_list(): if handle == event_ref.ref: result["families"].append( { "role": locale.translation.sgettext( event_ref.get_role().xml_str() ), "family": get_family_profile_for_handle( db_handle, backref_handle, args=[], locale=locale ), } ) return result