Spaces:
Sleeping
Sleeping
# split text along : into key values. | |
def dict_from_text(data): | |
lines = data.strip().split("\n") | |
current_item = {} | |
for line in lines: | |
if ":" in line: | |
key, value = line.split(":") | |
key = key.strip() | |
value = value.strip(", ") | |
current_item[key] = value | |
return current_item | |
def list_of_dict_from_text(data): | |
lines = data.strip().split("\n") | |
output_list = [] | |
# current_category = None | |
current_item = {} | |
for line in lines: | |
line = line.strip() | |
# print(f"line = {line}") | |
if not line: | |
continue | |
if "name :" in line: | |
if current_item: | |
output_list.append(current_item) | |
current_item = {"name": line.split(":")[1].strip(", ")} | |
elif ":" in line: | |
key, value = line.split(":") | |
key = key.strip() | |
value = value.strip(", ") | |
if key == "secrets" : | |
value = list_from_text(value) | |
current_item[key] = value | |
if current_item: | |
output_list.append(current_item) | |
return output_list | |
def list_from_text(data): | |
# print(f"Incoming Text: {data}") | |
value = [v.strip().strip("'").strip("\n") for v in data.split(",")] | |
# print(f"Returned List : {value}") | |
return value | |
#Function to process text from Key Value pairs into User Friendly text in a format that can be converted back to a dictionary | |
def format_qualities(qualities): | |
# print(f"Formatting Start,{type(qualities)} ") | |
formatted_text = "" | |
if type(qualities) == list: | |
# print("List") | |
for item in qualities: | |
if type(item) == dict : | |
# print("List item Dictionary") | |
for key, value in item.items(): | |
if type(value) == list: | |
formatted_text += f"{key} : " | |
for i in value: | |
formatted_text += f"{i} , " | |
formatted_text = formatted_text.rstrip(" ,") | |
formatted_text += "\n" | |
else : | |
formatted_text += f"{key} : {value}\n" | |
formatted_text = formatted_text.rstrip(",") | |
formatted_text += "\n" | |
if type(item) == list: | |
# print("List item List") | |
for i in item: | |
formatted_text += f"{i} , " | |
formatted_text = formatted_text.rstrip(" ,") | |
if type(item) == str: | |
print(f"List : {item}") | |
formatted_text += f"{item} , " | |
formatted_text = formatted_text.rstrip(",").rstrip(" ,") | |
formatted_text += "\n " | |
return formatted_text | |
elif type(qualities) == dict: | |
for key, value in qualities.items(): | |
formatted_text += f"{key} : {value}\n" | |
formatted_text = formatted_text.rstrip(",") | |
return formatted_text | |
def parse_text_to_store_dict(store_name, | |
store_description, | |
store_reputation, | |
store_backstory, | |
store_sd_prompt, | |
store_location, | |
store_type, | |
store_size, | |
store_owner, | |
store_employees, | |
store_hours, | |
store_services, | |
store_specialties, | |
store_customers, | |
store_quests, | |
store_rumors, | |
store_security, | |
store_inventory): | |
# Print variable, and check it's value and if length greater than 0. | |
# Check for dict, str, list | |
print(f"{store_inventory}") | |
# Parse store description key : values with string values first | |
store_dict = {} | |
if store_name : | |
store_dict['store_name'] = store_name | |
else: store_dict['store_name'] = "" | |
if store_description : | |
store_dict['store_description'] = store_description | |
else: store_dict['store_description'] = "" | |
if store_reputation : | |
store_dict['store_reputation'] = store_reputation | |
else: store_dict['store_reputation'] = "" | |
if store_backstory : | |
store_dict['store_backstory'] = store_backstory | |
else: store_dict['store_backstory'] = "" | |
if store_type : | |
store_dict['store_type'] = store_type | |
else: store_dict['store_type'] = "" | |
if store_size : | |
store_dict['store_size'] = store_size | |
else: store_dict['store_size'] = "" | |
if store_hours : | |
store_dict['store_hours'] = store_hours | |
else: store_dict['store_hours'] = "" | |
if store_sd_prompt : | |
store_dict['store_sd_prompt'] = store_sd_prompt | |
else: store_dict['store_sd_prompt'] = "" | |
if store_location : | |
store_dict['store_location'] = dict_from_text(store_location) | |
else: store_dict['store_location'] = '' | |
if store_owner : | |
store_dict['store_owners'] = list_of_dict_from_text(store_owner) | |
else: store_dict['store_owners'] = '' | |
if store_employees : | |
store_dict['store_employees'] = list_of_dict_from_text(store_employees) | |
else: store_dict['store_employees'] = '' | |
if store_quests : | |
store_dict['store_quests'] = list_of_dict_from_text(store_quests) | |
else: store_dict['store_quests'] = '' | |
if store_customers : | |
store_dict['store_customers'] = list_of_dict_from_text(store_customers) | |
else: store_dict['store_customers'] = '' | |
if store_rumors : | |
store_dict['store_rumors'] = list_from_text(store_rumors) | |
if store_services : | |
store_dict['store_services'] = list_of_dict_from_text(store_services) | |
else: store_dict['store_services'] = '' | |
if store_specialties : | |
store_dict['store_specialties'] = list_of_dict_from_text(store_specialties) | |
else: store_dict['store_specialties'] = '' | |
if store_security : | |
store_dict['store_security'] = list_of_dict_from_text(store_security) | |
else: store_dict['store_security'] = '' | |
return store_dict | |
def format_inventory(inventory): | |
formatted_text = "" | |
print(f"Formatting Inventory ,{type(inventory)} ") | |
# Iteration through item split_text keys in the inventory dictionary | |
for item_split_text, item_list in inventory.items(): | |
formatted_text += f"{item_split_text} \n\n " | |
# Iterate through List of Dictionaries of item qualities | |
for item in item_list: | |
# print(item) | |
# print(type(item)) | |
if type(item) == dict: | |
for key, value in item.items(): | |
if type(value) == list: | |
formatted_text += f"{key} :" | |
for i in value : | |
formatted_text += f" '{i}', " | |
formatted_text = formatted_text.rstrip(", ") | |
formatted_text += "\n" | |
else: | |
formatted_text += f"{key} : {value},\n" | |
formatted_text += "\n" | |
return formatted_text | |
# Take in the text from the inventory textbox, and reformat into a dictionary object | |
def parse_text_to_inventory_dict(data): | |
inventory_categories = [ | |
"core_inventory", | |
"weapons", | |
"armor", | |
"potions", | |
"scrolls", | |
"magical_items", | |
"mundane_items", | |
"miscellaneous_items" | |
] | |
lines = data.strip().split("\n") | |
inventory = {} | |
current_category = None | |
current_item = {} | |
for line in lines: | |
line = line.strip() | |
# print(f"line = {line}") | |
if not line: | |
continue | |
if line in inventory_categories: | |
# print(f"Current Category : {line}") | |
current_category = f"{line}" | |
inventory[f"{current_category}"] = [] | |
elif "name :" in line: | |
if current_item: | |
inventory[f"{current_category}"].append(current_item) | |
current_item = {"name": line.split(":")[1].strip(", ")} | |
# print(current_item) | |
elif ":" in line: | |
key, value = line.split(":") | |
key = key.strip() | |
value = value.strip(", ") | |
if key == "properties": | |
value = [v.strip().strip("'") for v in value.split(",")] | |
current_item[key] = value | |
# print(f"Inventory Dictionary = {inventory}") | |
if current_item: | |
inventory[current_category].append(current_item) | |
return inventory | |