diff --git a/faker/providers/person/__init__.py b/faker/providers/person/__init__.py index 54760558bb..8a0a2af27f 100644 --- a/faker/providers/person/__init__.py +++ b/faker/providers/person/__init__.py @@ -52,6 +52,7 @@ class Provider(BaseProvider): "Ewe", "Greek", "English", + "Efik", "Esperanto", "Spanish", "Estonian", diff --git a/faker/providers/person/efik_NG/__init__.py b/faker/providers/person/efik_NG/__init__.py new file mode 100644 index 0000000000..7bdaa6e061 --- /dev/null +++ b/faker/providers/person/efik_NG/__init__.py @@ -0,0 +1,43 @@ +# Data sources: +# Efik Names: https://efikeburutu.org/efik%20naming%20system.html +# Additional references: +# - https://en.wikipedia.org/wiki/Efik_name +# Compiled by: https://x.com/mb_awak +# programming help: https://github.com/ifeoluwaoladeji + +from faker.providers.person import Provider as PersonProvider + +class Provider(PersonProvider): + # Male first names + first_names_male = [ + "Etim", "Antigha", "Bassey", "Nyong", "Nkese", "Edet", + "Odionka", "Efefiom", "Andem", "Henshaw", "Ndiyo", "Duke", + "Orok", "Mesembe", "Namondo", "Efiwat", "Asikpo", "Archibong", + "Ekpe", + ] + + # Female first names + first_names_female = [ + "Okoho", "Edemanwan", "Ansa", "Asari", "Efioanwan", "Ekanem", + "Orokanwan", "Eyoanwan", "Itamanwan", "Efiokanwan", "Eke", "Atim", + "Inyang", "Nsikak", "Ekerette", "Ekanem", "Udobong", "Ankwa", "Minika" + ] + + # Combined list + first_names = first_names_male + first_names_female + + # Prefixes + prefixes_male = ["Mr", "Dr.", "Prof."] + prefixes_female = ["Miss", "Mrs.", "Dr.", "Prof."] + + prefixes = prefixes_male + prefixes_female + + # Last names + last_names = [ + "Oku", "Aye", "Ewa", "Ibok", "Efiok", + "Itam", "Essien", "Eyonsa", "Okokon", "Cobham", "Offiong", + "Ekeng", "Efa", "Otu", "Itam", "Orok", "Eyo", + "Nsa", "Ita", "Hogan", "Esu", "Ekpenyong", "Otu", + "Etetim", "Inyang", "Effiong", + ] + diff --git a/faker/providers/person/en_NG/__init__.py b/faker/providers/person/en_NG/__init__.py new file mode 100644 index 0000000000..8a96d049d0 --- /dev/null +++ b/faker/providers/person/en_NG/__init__.py @@ -0,0 +1,44 @@ +# Data sources: +# Yoruba names: https://en.wikipedia.org/wiki/List_of_Yoruba_given_names +# Igbo names: https://en.wikipedia.org/wiki/Igbo_names +# Hausa names: https://en.wikipedia.org/wiki/Hausa_names +# Nigerian English names: https://en.wikipedia.org/wiki/Nigerian_name +# Additional references: +# - Behind the Name (Igbo, Yoruba): https://www.behindthename.com +# - Journal of West African Languages (Hausa naming practices, 2016) + +from faker.providers.person import Provider as PersonProvider + +class Provider(PersonProvider): + # Male first names + first_names_male = [ + "John", "Emmanuel", "Peter", "Samuel", "David", "Michael", + "Joseph", "Daniel", "James", "Paul", "Gabriel", "Joshua", + "Philip", "Andrew", "Stephen", "Benjamin", "Mark", "Nathaniel", + "Simon", "Cornelius", + ] + + # Female first names + first_names_female = [ + "Mary", "Grace", "Joy", "Patience", "Elizabeth", "Victoria", + "Sarah", "Deborah", "Esther", "Blessing", "Charity", "Hope", + "Gloria", "Agnes", "Peace", "Comfort", "Juliet", "Ruth", + "Angela", "Faith", + ] + + # Combined list + first_names = first_names_male + first_names_female + + # Prefixes + prefixes_male = ["Mr.", "Chief", "Dr.", "Prof.", "Engr."] + prefixes_female = ["Mrs.", "Miss", "Dr.", "Prof.", "Lady"] + + prefixes = prefixes_male + prefixes_female + + # Last names + last_names = [ + "Okonkwo", "Adeyemi", "Olawale", "Chukwu", "Eze", + "Obi", "Abiola", "Okafor", "Balogun", "Uche", "Ogunleye", + "Nnamani", "Adetokunbo", "Ojo", "Ekwueme", "Oshodi", + "Ibrahim", "Akinwale", "Obasanjo", "Oyekan", + ] diff --git a/faker/providers/person/ha_NG/__init__.py b/faker/providers/person/ha_NG/__init__.py new file mode 100644 index 0000000000..16f4a36f45 --- /dev/null +++ b/faker/providers/person/ha_NG/__init__.py @@ -0,0 +1,40 @@ +# Data sources: +# Hausa names: https://en.wikipedia.org/wiki/Hausa_names +# Additional references: +# - Journal of West African Languages (Hausa naming practices, 2016) + +from faker.providers.person import Provider as PersonProvider + +class Provider(PersonProvider): + # Male first names + first_names_male = [ + "Abdullahi", "Musa", "Sani", "Ibrahim", "Aliyu", "Bello", + "Kabiru", "Shehu", "Yusuf", "Haruna", "Ismail", "Usman", + "Nasiru", "Mahmud", "Umar", "Habibu", "Danjuma", "Tanimu", + "Shamsuddeen", "Ahmad", + ] + + # Female first names + first_names_female = [ + "Zainab", "Aisha", "Hauwa", "Fatima", "Hadiza", "Maryam", + "Sa’adatu", "Jamila", "Rabi", "Khadija", "Bilkisu", "Asma’u", + "Halima", "Safiya", "Sumayya", "Habiba", "Ruqayya", "Hafsat", + "Aminatu", "Gambo", + ] + + # Combined list + first_names = first_names_male + first_names_female + + # Prefixes + prefixes_male = ["Alhaji", "Mallam", "Dr.", "Prof."] + prefixes_female = ["Hajiya", "Mrs.", "Dr.", "Prof."] + + prefixes = prefixes_male + prefixes_female + + # Last names + last_names = [ + "Abubakar", "Mohammed", "Yahaya", "Garba", "Danjuma", + "Buhari", "Zubairu", "Jibril", "Suleiman", "Lawal", "Tukur", + "Ali", "Shehu", "Mustapha", "Kabir", "Idris", "Sa’idu", + "Bappa", "Yusuf", "Isah", + ] diff --git a/faker/providers/person/ig_NG/__init__.py b/faker/providers/person/ig_NG/__init__.py new file mode 100644 index 0000000000..7570f0bf6d --- /dev/null +++ b/faker/providers/person/ig_NG/__init__.py @@ -0,0 +1,40 @@ +# Data sources: +# Igbo names: https://en.wikipedia.org/wiki/Igbo_names +# Additional references: +# - Behind the Name (Igbo, Yoruba): https://www.behindthename.com +# - Journal of West African Languages (Hausa naming practices, 2016) +from faker.providers.person import Provider as PersonProvider + +class Provider(PersonProvider): + # Male first names + first_names_male = [ + "Chinedu", "Obinna", "Ifeanyi", "Emeka", "Uche", "Chukwudi", + "Nnamdi", "Ikenna", "Ekene", "Chibuzo", "Ebuka", "Nonso", + "Chukwuemeka", "Somtochukwu", "Uchenna", "Ifechukwu", "Chigozie", + "Okechukwu", "Kelechi", "Chijioke", + ] + + # Female first names + first_names_female = [ + "Adaeze", "Chiamaka", "Oluchi", "Ngozi", "Amarachi", "Ifunanya", + "Chinelo", "Ogechi", "Nneka", "Obianuju", "Ujunwa", "Ifeoma", + "Chidimma", "Nkiruka", "Onyinye", "Chizoba", "Chinyere", "Kosisochukwu", + "Ozioma", "Somadina", + ] + + # Combined list + first_names = first_names_male + first_names_female + + # Prefixes + prefixes_male = ["Mr.", "Chief", "Dr.", "Engr.", "Prof."] + prefixes_female = ["Mrs.", "Miss", "Dr.", "Prof.", "Lady"] + + prefixes = prefixes_male + prefixes_female + + # Last names + last_names = [ + "Okafor", "Eze", "Obi", "Nwosu", "Okeke", "Nwachukwu", + "Onoh", "Ogbuehi", "Iwu", "Chukwu", "Onwuka", "Anyanwu", + "Udeh", "Ihejirika", "Madu", "Njoku", "Ezeugo", "Ojukwu", + "Iroha", "Okoro", + ] diff --git a/tests/providers/test_person.py b/tests/providers/test_person.py index 385f2b25bf..f282fcda7b 100644 --- a/tests/providers/test_person.py +++ b/tests/providers/test_person.py @@ -10,10 +10,12 @@ from faker.providers.person.cs_CZ import Provider as CsCZProvider from faker.providers.person.de_AT import Provider as DeAtProvider from faker.providers.person.de_LI import Provider as DeLiProvider +from faker.providers.person.efik_NG import Provider as EfikNgProvider from faker.providers.person.en import Provider as EnProvider from faker.providers.person.en_GB import Provider as EnGBProvider from faker.providers.person.en_IE import Provider as EnIEProvider from faker.providers.person.en_IN import Provider as EnINProvider +from faker.providers.person.en_NG import Provider as EnNgProvider from faker.providers.person.en_PK import Provider as EnPKprovider from faker.providers.person.en_US import Provider as EnUSProvider from faker.providers.person.es import Provider as EsProvider @@ -23,9 +25,11 @@ from faker.providers.person.fr_BE import Provider as FrBEProvider from faker.providers.person.ga_IE import Provider as GaIEProvider from faker.providers.person.gu_IN import Provider as GuINProvider +from faker.providers.person.ha_NG import Provider as HaNgProvider from faker.providers.person.he_IL import Provider as HeILProvider from faker.providers.person.hi_IN import Provider as HiINProvider from faker.providers.person.hy_AM import Provider as HyAmProvider +from faker.providers.person.ig_NG import Provider as IgNgProvider from faker.providers.person.is_IS import Provider as IsISProvider from faker.providers.person.lv_LV import Provider as LvProvider from faker.providers.person.ne_NP import Provider as NeProvider @@ -298,6 +302,52 @@ def test_first_name_male(self): assert isinstance(name_male, str) assert name_male in DeLiProvider.first_names_male +class TestEfikNg(unittest.TestCase): + """Tests for the Efik_NG locale person provider""" + + def setUp(self): + self.fake = Faker("efik_NG") + Faker.seed(0) + + def test_first_name(self): + # General first name + name = self.fake.first_name() + self.assertIsInstance(name, str) + self.assertIn(name, EfikNgProvider.first_names) + + # Female first name + name_female = self.fake.first_name_female() + self.assertIsInstance(name_female, str) + self.assertIn(name_female, EfikNgProvider.first_names) + self.assertIn(name_female, EfikNgProvider.first_names_female) + + # Male first name + name_male = self.fake.first_name_male() + self.assertIsInstance(name_male, str) + self.assertIn(name_male, EfikNgProvider.first_names) + self.assertIn(name_male, EfikNgProvider.first_names_male) + + def test_last_name(self): + # General last name + last = self.fake.last_name() + self.assertIsInstance(last, str) + self.assertIn(last, EfikNgProvider.last_names) + + # Female last name + last_female = self.fake.last_name_female() + self.assertIsInstance(last_female, str) + self.assertIn(last_female, EfikNgProvider.last_names) + + # Male last name + last_male = self.fake.last_name_male() + self.assertIsInstance(last_male, str) + self.assertIn(last_male, EfikNgProvider.last_names) + + def test_full_name(self): + name = self.fake.name() + self.assertIsInstance(name, str) + self.assertTrue(any(fn in name for fn in EfikNgProvider.first_names)) + self.assertTrue(any(ln in name for ln in EfikNgProvider.last_names)) class TestEn(unittest.TestCase): """Tests person in the en locale""" @@ -341,6 +391,54 @@ def get_first_name_from_full_name(self, full_name): if len(names) == 2: return names[0] return names[1] + + +class TestEnNG(unittest.TestCase): + """Tests person in the en_NG (English - Nigeria) locale""" + + def setUp(self): + self.fake = Faker("en_NG") + Faker.seed(0) + + def test_name(self): + name = self.fake.name() + self.assertIsInstance(name, str) + + name = self.fake.name_female() + self.assertIsInstance(name, str) + + name = self.fake.name_male() + self.assertIsInstance(name, str) + + def test_first_name(self): + name = self.fake.first_name() + self.assertIsInstance(name, str) + assert name in EnNgProvider.first_names + + name = self.fake.first_name_female() + self.assertIsInstance(name, str) + assert name in EnNgProvider.first_names + assert name in EnNgProvider.first_names_female + + name = self.fake.first_name_male() + self.assertIsInstance(name, str) + assert name in EnNgProvider.first_names + assert name in EnNgProvider.first_names_male + + def test_last_name(self): + assert hasattr(EnNgProvider, "last_names") + + name = self.fake.last_name() + self.assertIsInstance(name, str) + assert name in EnNgProvider.last_names + + name = self.fake.last_name_female() + self.assertIsInstance(name, str) + assert name in EnNgProvider.last_names + + name = self.fake.last_name_male() + self.assertIsInstance(name, str) + assert name in EnNgProvider.last_names class TestEnIE(unittest.TestCase): @@ -826,6 +924,55 @@ def test_prefix_male(self): assert prefix in GuINProvider.prefixes_male +class TestHaNG(unittest.TestCase): + """Tests person in the ha_NG (Hausa - Nigeria) locale""" + + def setUp(self): + self.fake = Faker("ha_NG") + Faker.seed(0) + + def test_name(self): + name = self.fake.name() + self.assertIsInstance(name, str) + + name = self.fake.name_female() + self.assertIsInstance(name, str) + + name = self.fake.name_male() + self.assertIsInstance(name, str) + + def test_first_name(self): + name = self.fake.first_name() + self.assertIsInstance(name, str) + assert name in HaNgProvider.first_names + + name = self.fake.first_name_female() + self.assertIsInstance(name, str) + assert name in HaNgProvider.first_names + assert name in HaNgProvider.first_names_female + + name = self.fake.first_name_male() + self.assertIsInstance(name, str) + assert name in HaNgProvider.first_names + assert name in HaNgProvider.first_names_male + + def test_last_name(self): + assert hasattr(HaNgProvider, "last_names") + + name = self.fake.last_name() + self.assertIsInstance(name, str) + assert name in HaNgProvider.last_names + + name = self.fake.last_name_female() + self.assertIsInstance(name, str) + assert name in HaNgProvider.last_names + + name = self.fake.last_name_male() + self.assertIsInstance(name, str) + assert name in HaNgProvider.last_names + + + class TestHeIL(unittest.TestCase): """Tests person in the he_IL locale.""" @@ -957,6 +1104,54 @@ def test_last_name(self): name = self.fake.last_name_male() self.assertIsInstance(name, str) assert name in HyAmProvider.last_names + + +class TestIgNG(unittest.TestCase): + """Tests person in the ig_NG (Igbo - Nigeria) locale""" + + def setUp(self): + self.fake = Faker("ig_NG") + Faker.seed(0) + + def test_name(self): + name = self.fake.name() + self.assertIsInstance(name, str) + + name = self.fake.name_female() + self.assertIsInstance(name, str) + + name = self.fake.name_male() + self.assertIsInstance(name, str) + + def test_first_name(self): + name = self.fake.first_name() + self.assertIsInstance(name, str) + assert name in IgNgProvider.first_names + + name = self.fake.first_name_female() + self.assertIsInstance(name, str) + assert name in IgNgProvider.first_names + assert name in IgNgProvider.first_names_female + + name = self.fake.first_name_male() + self.assertIsInstance(name, str) + assert name in IgNgProvider.first_names + assert name in IgNgProvider.first_names_male + + def test_last_name(self): + assert hasattr(IgNgProvider, "last_names") + + name = self.fake.last_name() + self.assertIsInstance(name, str) + assert name in IgNgProvider.last_names + + name = self.fake.last_name_female() + self.assertIsInstance(name, str) + assert name in IgNgProvider.last_names + + name = self.fake.last_name_male() + self.assertIsInstance(name, str) + assert name in IgNgProvider.last_names class TestIsIS(unittest.TestCase): @@ -1734,7 +1929,7 @@ def setUp(self): def test_last_name(self): """ - Test the generation of Zulu last names. + Test the generation of yoruba last names. """ # There's no gender-specific last name in Zulu. self.assertTrue(hasattr(YoNGProvider, "last_names_male")) @@ -1760,7 +1955,7 @@ def test_last_name(self): def test_first_name(self): """ - Test the generation of Zulu first names. + Test the generation of yoruba first names. """ # General first name. name = self.fake.first_name() @@ -1781,7 +1976,7 @@ def test_first_name(self): def test_full_name(self): """ - Test the generation of full Zulu names. + Test the generation of full yoruba names. """ # Full name. name = self.fake.name()