Skip to content

Commit 03e9320

Browse files
authored
Fix regression with external filters (#613)
1 parent 9ce37cc commit 03e9320

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

gramps_webapi/api/resources/filters.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@
2626
import gramps.gen.filters as filters
2727
from flask import Response, abort
2828
from gramps.gen.db.base import DbReadBase
29-
from gramps.gen.lib import Person
3029
from gramps.gen.filters import GenericFilter
3130
from gramps.gen.filters.rules import Rule
31+
from gramps.gen.lib import Person
3232
from marshmallow import Schema
3333
from webargs import ValidationError, fields, validate
3434

35-
from ..util import abort_with_message, use_args
3635
from ...const import GRAMPS_NAMESPACES
3736
from ...types import Handle
37+
from ..util import abort_with_message, use_args
3838
from . import ProtectedResource
3939
from .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
5758
additional_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

7376
def 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

Comments
 (0)