fixing support for dicts of lists and lists of dicts

This commit is contained in:
evilchili 2023-12-08 14:52:40 -08:00
parent 3fbcb57aca
commit fd917bb59b
2 changed files with 18 additions and 9 deletions

View File

@ -135,15 +135,21 @@ class RollTable:
values.append([option])
continue
if hasattr(ds.data[option], 'keys'):
rand_key = random.choice(list(ds.data[option].keys()))
choice = [rand_key, *ds.data[option][rand_key]]
k, v = random.choice(list(ds.data[option].items()))
choice = [k] + v
else:
choice = random.choice(ds.data[option])
if hasattr(choice, 'keys'):
c = [option]
for (k, v) in choice.items():
if type(v) is list:
c.extend([k, *v])
else:
c.extend([k, v])
values.append(c)
else:
if type(choice) is list:
values.append([option, *choice])
else:
values.append([option, choice])
return sorted(values)

View File

@ -1,3 +1,5 @@
import pytest
from rolltable import tables
fixture_metadata = """
@ -104,7 +106,7 @@ metadata:
- two
- three
- four
Category:
list:
- foo:
- bar
- baz
@ -121,7 +123,7 @@ metadata:
- two
- three
- four
Category:
dict:
foo:
- bar
- baz
@ -133,9 +135,10 @@ Category:
"""]
def test_lists_and_dicts():
t = tables.RollTable(fixture_lists_and_dicts, die=1)
assert str(t)
@pytest.mark.parametrize('fixture', fixture_lists_and_dicts)
def test_lists_and_dicts(fixture):
t = tables.RollTable([fixture], die=1)
assert(str(t))
def test_combined_tables():