Skip to content

Commit 36374fb

Browse files
committed
New function accepting callback lambda's, to evaluate string index placements for 'suffixes' and 'prefixes' properties in EntityFields
1 parent 48bfc06 commit 36374fb

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

pyttman/core/entity_parsing/parsers.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@ def parse_message(self, message: MessageMixin,
129129
else:
130130
self.value = Entity(self.default, is_fallback_default=True)
131131

132+
self._validate_prefixes_suffixes(message)
133+
132134
if self.value:
133135
entity = self.value
134136
if isinstance(entity.value, list):
@@ -152,6 +154,35 @@ def parse_message(self, message: MessageMixin,
152154
else:
153155
self.reset()
154156

157+
def _validate_message_with_affixes(self,
158+
affixes: tuple[str],
159+
message: MessageMixin,
160+
comparator: callable):
161+
entity = self.value
162+
if not (common_strings := set(affixes).intersection(message.content)):
163+
entity.value = self.default
164+
return
165+
for string in common_strings:
166+
if not comparator(message.content.index(string), entity.index_in_message):
167+
entity.value = self.default
168+
169+
def _validate_prefixes_suffixes(self, message: MessageMixin):
170+
"""
171+
Check 'prefixes' and 'suffixes' for Entity values to make sure
172+
that they comply
173+
:return:
174+
"""
175+
if self.prefixes:
176+
self._validate_message_with_affixes(
177+
self.prefixes,
178+
message,
179+
lambda affix_index, value_index: affix_index < value_index)
180+
if self.suffixes:
181+
self._validate_message_with_affixes(
182+
self.suffixes,
183+
message,
184+
lambda affix_index, value_index: affix_index > value_index)
185+
155186
def _identify_value(self, message: MessageMixin,
156187
start_index: int = 0) -> Union[None, Entity]:
157188
"""

0 commit comments

Comments
 (0)