clean up docs, fix tests

This commit is contained in:
InspectorCaracal 2022-07-27 13:51:28 -06:00
parent 3b039fdaff
commit ed25224699
3 changed files with 43 additions and 35 deletions

View file

@ -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'
```

View file

@ -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 ]

View file

@ -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)