11"""This module provides a NameProvider class for generating Nigerian name combinations."""
22
3+ import difflib
34import random
45from pathlib import Path
56
@@ -104,11 +105,23 @@ def generate_first_name(
104105 gender = normalize_input (gender )
105106
106107 if tribe and tribe not in self .tribes :
107- msg = f"Unsupported tribe: { tribe } . Supported values are: { ', ' .join (self .tribes )} "
108+ suggestions = difflib .get_close_matches (tribe , self .tribes , n = 3 , cutoff = 0.6 )
109+ msg = (
110+ f"Unsupported tribe: { tribe } . Did you mean: { ', ' .join (suggestions )} ?"
111+ if suggestions
112+ else f"Unsupported tribe: { tribe } . Supported values are: { ', ' .join (self .tribes )} "
113+ )
108114 raise ValueError (msg )
109115
110116 if gender and gender not in self .genders :
111- msg = f"Unsupported gender: { gender } . Supported values are: { ', ' .join (self .genders )} "
117+ suggestions = difflib .get_close_matches (
118+ gender , self .genders , n = 3 , cutoff = 0.6
119+ )
120+ msg = (
121+ f"Unsupported gender: { gender } . Did you mean: { ', ' .join (suggestions )} ?"
122+ if suggestions
123+ else f"Unsupported gender: { gender } . Supported values are: { ', ' .join (self .genders )} "
124+ )
112125 raise ValueError (msg )
113126
114127 first_names = self .get_first_names (tribe , gender )
@@ -132,7 +145,12 @@ def generate_last_name(self, tribe: str | None = None) -> str:
132145 tribe = normalize_input (tribe )
133146
134147 if tribe and tribe not in self .tribes :
135- msg = f"Unsupported tribe: { tribe } . Supported values are: { ', ' .join (self .tribes )} "
148+ suggestions = difflib .get_close_matches (tribe , self .tribes , n = 3 , cutoff = 0.6 )
149+ msg = (
150+ f"Unsupported tribe: { tribe } . Did you mean: { ', ' .join (suggestions )} ?"
151+ if suggestions
152+ else f"Unsupported tribe: { tribe } . Supported values are: { ', ' .join (self .tribes )} "
153+ )
136154 raise ValueError (msg )
137155
138156 last_names = self .get_last_names (tribe )
@@ -164,13 +182,25 @@ def generate_full_name(
164182 gender = normalize_input (gender )
165183
166184 if gender and gender not in self .genders :
167- msg = f"Unsupported gender: { gender } . Supported values are: { ', ' .join (self .genders )} "
185+ suggestions = difflib .get_close_matches (
186+ gender , self .genders , n = 3 , cutoff = 0.6
187+ )
188+ msg = (
189+ f"Unsupported gender: { gender } . Did you mean: { ', ' .join (suggestions )} ?"
190+ if suggestions
191+ else f"Unsupported gender: { gender } . Supported values are: { ', ' .join (self .genders )} "
192+ )
168193 raise ValueError (msg )
169194
170195 if tribe is None :
171196 tribe = random .choice (self .tribes )
172197 elif tribe not in self .tribes :
173- msg = f"Unsupported tribe: { tribe } . Supported values are: { ', ' .join (self .tribes )} "
198+ suggestions = difflib .get_close_matches (tribe , self .tribes , n = 3 , cutoff = 0.6 )
199+ msg = (
200+ f"Unsupported tribe: { tribe } . Did you mean: { ', ' .join (suggestions )} ?"
201+ if suggestions
202+ else f"Unsupported tribe: { tribe } . Supported values are: { ', ' .join (self .tribes )} "
203+ )
174204 raise ValueError (msg )
175205
176206 first_name = self .generate_first_name (tribe , gender )
0 commit comments