diff --git a/src/dynamicprompts/wildcards/collection/structured.py b/src/dynamicprompts/wildcards/collection/structured.py index c670042..180a370 100644 --- a/src/dynamicprompts/wildcards/collection/structured.py +++ b/src/dynamicprompts/wildcards/collection/structured.py @@ -60,8 +60,17 @@ def _parse_structured_file_dict( for name, value in data.items(): if not isinstance(name, str): continue + + if not value: + continue + prefix_and_name = (*prefix, name) name = "/".join(prefix_and_name) + + if isinstance(value, str): + # Parse a single string as a list of one item. + value = [value] + if isinstance(value, list): try: entries = list(_parse_structured_file_list(value)) diff --git a/tests/test_data/wildcards/pantry.yaml b/tests/test_data/wildcards/pantry.yaml index 09d97c0..b8f9be2 100644 --- a/tests/test_data/wildcards/pantry.yaml +++ b/tests/test_data/wildcards/pantry.yaml @@ -11,5 +11,7 @@ artists: - Piet Mondrian - Rembrandt van Rijn - Vincent van Gogh + moonbase: john madden # interpreted as a single john madden 1234: 5678 # this is ignored flurp: 12345 # this too + flem: "" # and this diff --git a/tests/wildcard/test_wildcardmanager.py b/tests/wildcard/test_wildcardmanager.py index da04739..831015e 100644 --- a/tests/wildcard/test_wildcardmanager.py +++ b/tests/wildcard/test_wildcardmanager.py @@ -132,6 +132,7 @@ def test_hierarchy(wildcard_manager: WildcardManager): "animals/reptiles/snakes", "artists/dutch", "artists/finnish", + "artists/moonbase", "cars/ford/colors", "cars/ford/name", "cars/ford/types", @@ -192,8 +193,9 @@ def test_hierarchy(wildcard_manager: WildcardManager): "bitter", # from .json } assert set(root.child_nodes["artists"].collections) == { - "finnish", # from root pantry YAML's nested dict "dutch", # from root pantry YAML's nested dict + "finnish", # from root pantry YAML's nested dict + "moonbase", # from root pantry YAML's nested dict } @@ -389,3 +391,9 @@ def test_weight_parsing(wildcard_manager: WildcardManager): assert name_to_entry["cat"].weight == 3 assert name_to_entry["elephant"].weight == 50 assert name_to_entry["rhino"].weight == 20.5 + + +def test_single_string_in_structured_parsed_as_list(wildcard_manager: WildcardManager): + assert wildcard_manager.get_values("artists/moonbase").string_values == [ + "john madden", + ]