def prepare_options(db_handle: DbReadBase, args: Dict): """Prepare the export options.""" options = ExportOptions() options.private = args["private"] options.living = LIVING_FILTERS[args["living"]] options.current_year = args["current_year"] options.years_after_death = args["years_after_death"] options.reference = args["reference"] options.include_individuals = int(args["include_individuals"]) options.include_marriages = int(args["include_marriages"]) options.include_children = int(args["include_children"]) options.include_places = int(args["include_places"]) options.include_witnesses = int(args["include_witnesses"]) options.include_media = int(args["include_media"]) options.translate_headers = int(args["translate_headers"]) options.compression = int(args["compress"]) if args["person"] is None: if args["gramps_id"] is not None or args["handle"] is not None: abort(422) else: if args["gramps_id"] is not None: gramps_id = args["gramps_id"] if db_handle.get_person_from_gramps_id(gramps_id) is None: abort(422) else: try: person = db_handle.get_person_from_handle(args["handle"]) except HandleError: abort(422) gramps_id = person.gramps_id try: options.set_person_filter(args["person"], gramps_id) except ValueError: abort(422) if args["event"] is not None: try: options.set_event_filter(args["event"]) except ValueError: abort(422) if args["note"] is not None: try: options.set_note_filter(args["note"]) except ValueError: abort(422) try: options.set_proxy_order(args["sequence"]) except ValueError: abort(422) if args["locale"] is not None: options.locale = get_locale_for_language(args["locale"]) if options.locale is None: abort(422) return options
def get_person_filter(db_handle: DbReadBase, args: Dict) -> Union[GenericFilter, None]: """Return the specified person filter.""" if args["person"] is None: if args["gramps_id"] is not None or args["handle"] is not None: abort(422) return None if args["gramps_id"]: gramps_id = args["gramps_id"] if db_handle.get_person_from_gramps_id(gramps_id) is None: abort(422) else: try: person = db_handle.get_person_from_handle(args["handle"]) except HandleError: abort(422) gramps_id = person.gramps_id person_filter = filters.GenericFilter() if args["person"] == "Descendants": person_filter.set_name(_("Descendants of %s") % gramps_id) person_filter.add_rule( filters.rules.person.IsDescendantOf([gramps_id, 1])) elif args["person"] == "DescendantFamilies": person_filter.set_name(_("Descendant Families of %s") % gramps_id) person_filter.add_rule( filters.rules.person.IsDescendantFamilyOf([gramps_id, 1])) elif args["person"] == "Ancestors": person_filter.set_name(_("Ancestors of %s") % gramps_id) person_filter.add_rule( filters.rules.person.IsAncestorOf([gramps_id, 1])) elif args["person"] == "CommonAncestor": person_filter.set_name( _("People with common ancestor with %s") % gramps_id) person_filter.add_rule( filters.rules.person.HasCommonAncestorWith([gramps_id])) else: person_filter = None filters.reload_custom_filters() for filter_class in filters.CustomFilters.get_filters("Person"): if args["person"] == filter_class.get_name(): person_filter = filter_class break if person_filter is None: abort(422) return person_filter