Skip to content

Commit d2a6ca2

Browse files
Correct errors
1 parent 155efba commit d2a6ca2

File tree

4 files changed

+37
-32
lines changed

4 files changed

+37
-32
lines changed

inclusivewriting/rulepacks.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,10 @@
1616
get_all_language_resources,
1717
)
1818
from inclusivewriting.file_utils import read_file
19+
from inclusivewriting.schema_utils import normalize_string_list
1920
from inclusivewriting.rules import Rule, RuleReplacement
2021

2122

22-
def _normalize_str_list(field_name: str, value) -> List[str]:
23-
if value is None:
24-
return []
25-
if isinstance(value, str):
26-
return [value]
27-
if isinstance(value, list) and all(isinstance(item, str) for item in value):
28-
return value
29-
raise ValueError(
30-
f'Invalid "{field_name}" format: expected string or list of strings'
31-
)
32-
33-
3423
def _build_rule(language: str, phrase: str, payload: Dict) -> Rule:
3524
if not isinstance(payload, dict):
3625
raise ValueError(f'Invalid rule "{phrase}": entry must be an object')
@@ -46,7 +35,7 @@ def _build_rule(language: str, phrase: str, payload: Dict) -> Rule:
4635
replacements.append(
4736
RuleReplacement(
4837
value=replacement_value,
49-
references=_normalize_str_list(
38+
references=normalize_string_list(
5039
"replacement.references", replacement_payload.get("references")
5140
),
5241
)

inclusivewriting/rules.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313

1414
@dataclass
15+
# pylint: disable=too-few-public-methods
1516
class RuleReplacement:
1617
"""A replacement option for a rule."""
1718

@@ -43,6 +44,7 @@ def compile_pattern(self) -> Pattern[str]:
4344

4445

4546
@dataclass
47+
# pylint: disable=too-few-public-methods
4648
class RuleMatch:
4749
"""A match produced by the rule engine."""
4850

inclusivewriting/schema_utils.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#
2+
# SPDX-FileCopyrightText: 2026 John Samuel <johnsamuelwrites@gmail.com>
3+
#
4+
# SPDX-License-Identifier: GPL-3.0-or-later
5+
#
6+
7+
"""Helpers for validating and normalizing resource schema fields."""
8+
9+
from typing import List
10+
11+
12+
def normalize_string_list(field_name: str, value) -> List[str]:
13+
"""Normalize a schema field to a list of strings."""
14+
if value is None:
15+
return []
16+
if isinstance(value, str):
17+
return [value]
18+
if isinstance(value, list) and all(isinstance(item, str) for item in value):
19+
return value
20+
raise ValueError(
21+
f'Invalid "{field_name}" format: expected string or list of strings'
22+
)

inclusivewriting/suggestions.py

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,9 @@
88

99
from typing import Dict, List, Tuple
1010

11-
from inclusivewriting.configuration import (
12-
get_all_language_resource_config_file,
13-
get_all_language_resources,
14-
)
11+
from inclusivewriting.configuration import get_all_language_resource_config_file
1512
from inclusivewriting.rulepacks import load_rulepack
13+
from inclusivewriting.schema_utils import normalize_string_list
1614
from inclusivewriting.rules import RuleEngine, RuleMatch
1715

1816

@@ -114,20 +112,14 @@ def __str__(self):
114112
)
115113

116114

117-
def _normalize_link_list(field_name: str, value) -> List[str]:
118-
"""
119-
Normalize a link-like field to a list of strings.
120-
"""
121-
if value is None:
122-
return []
123-
if isinstance(value, str):
124-
return [value]
125-
if isinstance(value, list) and all(isinstance(item, str) for item in value):
126-
return value
127-
raise ValueError(
128-
f'Invalid "{field_name}" format: expected string or list of strings'
115+
def get_all_language_resources(config_file: str = None):
116+
"""Backward-compatible re-export from configuration module."""
117+
from inclusivewriting.configuration import (
118+
get_all_language_resources as _configuration_language_resources,
129119
)
130120

121+
return _configuration_language_resources(config_file)
122+
131123

132124
def _validate_and_build_suggestion(key: str, value: dict) -> Suggestion:
133125
"""
@@ -148,7 +140,7 @@ def _validate_and_build_suggestion(key: str, value: dict) -> Suggestion:
148140
f'Invalid suggestion "{key}": "replacement" must be an object'
149141
)
150142

151-
lexeme = Lexeme(key, _normalize_link_list("lexeme", value.get("lexeme")))
143+
lexeme = Lexeme(key, normalize_string_list("lexeme", value.get("lexeme")))
152144
replacements = []
153145
for replacement_word, replacement_data in value["replacement"].items():
154146
if not isinstance(replacement_data, dict):
@@ -158,9 +150,9 @@ def _validate_and_build_suggestion(key: str, value: dict) -> Suggestion:
158150

159151
replacement_lexeme = Lexeme(
160152
replacement_word,
161-
_normalize_link_list("replacement.lexeme", replacement_data.get("lexeme")),
153+
normalize_string_list("replacement.lexeme", replacement_data.get("lexeme")),
162154
)
163-
references = _normalize_link_list(
155+
references = normalize_string_list(
164156
"replacement.references", replacement_data.get("references")
165157
)
166158
replacements.append(Replacement(replacement_lexeme, references))

0 commit comments

Comments
 (0)