From ed252246999e749b0f848ca59bff3055a118fac0 Mon Sep 17 00:00:00 2001 From: InspectorCaracal Date: Wed, 27 Jul 2022 13:51:28 -0600 Subject: [PATCH] clean up docs, fix tests --- .../contrib/utils/name_generator/README.md | 34 +++++++++++-------- .../contrib/utils/name_generator/namegen.py | 14 ++++---- evennia/contrib/utils/name_generator/tests.py | 30 ++++++++-------- 3 files changed, 43 insertions(+), 35 deletions(-) diff --git a/evennia/contrib/utils/name_generator/README.md b/evennia/contrib/utils/name_generator/README.md index d368a9d7f..ac45d52ae 100644 --- a/evennia/contrib/utils/name_generator/README.md +++ b/evennia/contrib/utils/name_generator/README.md @@ -66,13 +66,15 @@ NAMEGEN_FANTASY_RULES = { ## Generating Real Names The contrib offers three functions for generating random real-world names: -`first_name()`, `family_name()`, and `full_name()`. If you want more than one name +`first_name()`, `last_name()`, and `full_name()`. If you want more than one name generated at once, you can use the `num` keyword argument to specify how many. Example: ``` >>> namegen.first_name(num=5) ['Genesis', 'Tali', 'Budur', 'Dominykas', 'Kamau'] +>>> namegen.first_name(gender='m') +'Blanchard' ``` The `first_name` function also takes a `gender` keyword argument to filter names @@ -153,18 +155,20 @@ several approaches. If all you need is for it to have multiple parts, you can generate multiple names at once and `join` them. ```py ->>> name = " ".join(namegen.fantasy_name(num=2) ->>> print(name) -Dezhvözh Khäk +>>> name = " ".join(namegen.fantasy_name(num=2)) +>>> name +'Dezhvözh Khäk' ``` If you want a little more variation between first/last names, you can also generate names for different styles and then combine them. ```py ->>> name = "{first} {last}".format( first=namegen.fantasy_name(style="fluid"), last=namegen.fantasy_name(style="harsh") ) ->>> print(name) -Ofasa Käkudhu +>>> first = namegen.fantasy_name(style="fluid") +>>> last = namegen.fantasy_name(style="harsh") +>>> name = f"{first} {last}" +>>> name +'Ofasa Käkudhu' ``` #### "Nakku Silversmith" @@ -178,9 +182,11 @@ Example: NAMEGEN_LAST_NAMES = [ "Silversmith", "the Traveller", "Destroyer of Worlds" ] NAMEGEN_REPLACE_LISTS = True ->>> name = "{first} {last}".format( first=namegen.fantasy_name(), last=namegen.last_name() ) ->>> print(name) -Tözhkheko the Traveller +>>> first = namegen.fantasy_name() +>>> last = namegen.last_name() +>>> name = f"{first} {last}" +>>> name +'Tözhkheko the Traveller' ``` #### Elarion d'Yrinea, Thror Obinson @@ -192,13 +198,13 @@ Examples: ```py >>> names = namegen.fantasy_name(num=2) >>> name = f"{names[0]} za'{names[1]}" ->>> print(name) -Tithe za'Dhudozkok +>>> name +"Tithe za'Dhudozkok" >>> names = namegen.fantasy_name(num=2) >>> name = f"{names[0]} {names[1]}son" ->>> print(name) -Kön Ködhöddoson +>>> name +'Kön Ködhöddoson' ``` diff --git a/evennia/contrib/utils/name_generator/namegen.py b/evennia/contrib/utils/name_generator/namegen.py index e205e702c..b415afe40 100644 --- a/evennia/contrib/utils/name_generator/namegen.py +++ b/evennia/contrib/utils/name_generator/namegen.py @@ -71,6 +71,8 @@ import re from os import path from django.conf import settings +from evennia.utils.utils import is_iter + # Load name data from Behind the Name lists dirpath = path.dirname(path.abspath(__file__)) _FIRSTNAME_LIST = [] @@ -152,7 +154,7 @@ def fantasy_name(num=1, style="harsh", return_list=False): keys = set(style_dict.keys()) missing_keys = _REQUIRED_KEYS - keys - if len(set): + if len(missing_keys): raise KeyError(f"Style dictionary {style_name} is missing required keys: {' '.join(missing_keys)}") if not (type(style_dict['consonants']) is list and type(style_dict['vowels']) is list): @@ -181,13 +183,13 @@ def fantasy_name(num=1, style="harsh", return_list=False): weight = weight*2 else: if key == "C": - type = "consonants" + sound_type = "consonants" elif key == "V": - type = "vowels" + sound_type = "vowels" else: - type = key + sound_type = key # append the sound type and weight - syllable.append( (type, int(weight)) ) + syllable.append( (sound_type, int(weight)) ) name_list = [] @@ -254,7 +256,7 @@ def first_name(num=1, gender=None, return_list=False, ): # filter the options by gender name_options = [ name_data[0] for name_data in _FIRSTNAME_LIST if all([gender_key in gender for gender_key in name_data[1]])] if not len(name_options): - raise KeyError(f"Invalid gender key '{gender}'.") + raise ValueError(f"Invalid gender '{gender}'.") else: name_options = [ name_data[0] for name_data in _FIRSTNAME_LIST ] diff --git a/evennia/contrib/utils/name_generator/tests.py b/evennia/contrib/utils/name_generator/tests.py index b8b0f7354..5dba57f8f 100644 --- a/evennia/contrib/utils/name_generator/tests.py +++ b/evennia/contrib/utils/name_generator/tests.py @@ -4,7 +4,7 @@ Tests for the Random Name Generator """ from evennia.utils.test_resources import BaseEvenniaTest -from . import namegen +from evennia.contrib.utils.name_generator import namegen _INVALID_STYLES = { "missing_keys": { @@ -85,8 +85,8 @@ class TestNameGenerator(BaseEvenniaTest): self.assertEqual(type(single_name), str) three_names = namegen.first_name(num=3) - self.assertEqual(type(single_name), list) - self.assertEqual(len(single_name), 3) + self.assertEqual(type(three_names), list) + self.assertEqual(len(three_names), 3) gendered_name = namegen.first_name(gender='f') self.assertEqual(type(gendered_name), str) @@ -101,27 +101,27 @@ class TestNameGenerator(BaseEvenniaTest): with self.assertRaises(ValueError): namegen.first_name(num=-1) - def test_family_name(self): + def test_last_name(self): """ Verify output types and lengths. - family_name() - str - family_name(num=3) - list of length 3 - family_name(return_list=True) - list of length 1 + last_name() - str + last_name(num=3) - list of length 3 + last_name(return_list=True) - list of length 1 """ - single_name = namegen.family_name() + single_name = namegen.last_name() self.assertEqual(type(single_name), str) - three_names = namegen.family_name(num=3) - self.assertEqual(type(single_name), list) - self.assertEqual(len(single_name), 3) + three_names = namegen.last_name(num=3) + self.assertEqual(type(three_names), list) + self.assertEqual(len(three_names), 3) - single_list = namegen.family_name(return_list=True) + single_list = namegen.last_name(return_list=True) self.assertEqual(type(single_list), list) self.assertEqual(len(single_list), 1) with self.assertRaises(ValueError): - namegen.family_name(num=-1) + namegen.last_name(num=-1) def test_full_name(self): """ @@ -136,8 +136,8 @@ class TestNameGenerator(BaseEvenniaTest): self.assertEqual(type(single_name), str) three_names = namegen.full_name(num=3) - self.assertEqual(type(single_name), list) - self.assertEqual(len(single_name), 3) + self.assertEqual(type(three_names), list) + self.assertEqual(len(three_names), 3) gendered_name = namegen.full_name(gender='f') self.assertEqual(type(gendered_name), str)