2626import gramps .gen .filters as filters
2727from flask import Response , abort
2828from gramps .gen .db .base import DbReadBase
29- from gramps .gen .lib import Person
3029from gramps .gen .filters import GenericFilter
3130from gramps .gen .filters .rules import Rule
31+ from gramps .gen .lib import Person
3232from marshmallow import Schema
3333from webargs import ValidationError , fields , validate
3434
35- from ..util import abort_with_message , use_args
3635from ...const import GRAMPS_NAMESPACES
3736from ...types import Handle
37+ from ..util import abort_with_message , use_args
3838from . import ProtectedResource
3939from .emit import GrampsJSONEncoder
4040
@@ -48,6 +48,7 @@ class HasAssociationType(Rule):
4848 category = "General filters"
4949
5050 def apply (self , db : DbReadBase , person : Person ) -> bool : # type: ignore
51+ """Apply the rule to the person."""
5152 for person_ref in person .get_person_ref_list ():
5253 if person_ref .get_relation () == self .list [0 ]:
5354 return True
@@ -57,23 +58,25 @@ def apply(self, db: DbReadBase, person: Person) -> bool: # type: ignore
5758additional_person_rules = [HasAssociationType ]
5859
5960
60- _RULES_LOOKUP = {
61- "Person" : filters .rules .person .editor_rule_list + additional_person_rules ,
62- "Family" : filters .rules .family .editor_rule_list ,
63- "Event" : filters .rules .event .editor_rule_list ,
64- "Place" : filters .rules .place .editor_rule_list ,
65- "Citation" : filters .rules .citation .editor_rule_list ,
66- "Source" : filters .rules .source .editor_rule_list ,
67- "Repository" : filters .rules .repository .editor_rule_list ,
68- "Media" : filters .rules .media .editor_rule_list ,
69- "Note" : filters .rules .note .editor_rule_list ,
70- }
61+ def get_rule_list (namespace : str ) -> List [Rule ]:
62+ """Return a list of available rules for a namespace."""
63+ return {
64+ "Person" : filters .rules .person .editor_rule_list + additional_person_rules ,
65+ "Family" : filters .rules .family .editor_rule_list ,
66+ "Event" : filters .rules .event .editor_rule_list ,
67+ "Place" : filters .rules .place .editor_rule_list ,
68+ "Citation" : filters .rules .citation .editor_rule_list ,
69+ "Source" : filters .rules .source .editor_rule_list ,
70+ "Repository" : filters .rules .repository .editor_rule_list ,
71+ "Media" : filters .rules .media .editor_rule_list ,
72+ "Note" : filters .rules .note .editor_rule_list ,
73+ }[namespace ]
7174
7275
7376def get_filter_rules (args : Dict [str , Any ], namespace : str ) -> List [Dict ]:
7477 """Return a list of available filter rules for a namespace."""
7578 rule_list = []
76- for rule_class in _RULES_LOOKUP [ namespace ] :
79+ for rule_class in get_rule_list ( namespace ) :
7780 add_rule = True
7881 if "rules" in args and args ["rules" ]:
7982 if rule_class .__name__ not in args ["rules" ]:
@@ -137,7 +140,7 @@ def build_filter(filter_parms: Dict, namespace: str) -> GenericFilter:
137140 filter_object .set_invert (filter_parms ["invert" ])
138141 for filter_rule in filter_parms ["rules" ]:
139142 rule_instance = None
140- for rule_class in _RULES_LOOKUP [ namespace ] :
143+ for rule_class in get_rule_list ( namespace ) :
141144 if filter_rule ["name" ] == rule_class .__name__ :
142145 rule_instance = rule_class
143146 break
0 commit comments