2023-11-13 19:40:32 +01:00

187 lines
5.1 KiB
Python

# I know this code sucks and there are many repeating parts but it's just a simple temporary tool and I didn't bother to make it better
import os
import numpy as np
from order_items import possible_order_items
root= os.path.dirname(os.path.abspath(__file__))
def mkdir_if_not_exists_rel(path):
if not os.path.exists(root + "/" + path):
os.mkdir(root + "/" + path)
# create output dialogs folder if it does not exist
#if not os.path.exists(root + "/output_dialogs"):
# os.mkdir(root + "/output_dialogs")
mkdir_if_not_exists_rel("output_dialogs")
mkdir_if_not_exists_rel("temp")
# read templates/dialog_input.txt
with open(root + "/templates/dialog_input.txt", "r", encoding="utf-8") as f:
dialog_input_template = f.read()
# random phone number string. for example "123 456 789"
phone_number = " ".join("".join(map(str, pack)) for pack in np.random.randint(0, 10, 9).reshape(-1, 3))
payment_method = np.random.choice([
"cash",
"card",
"Cash",
"Card",
"gotówka",
"karta",
"Gotówka",
"Karta",
"gotówką",
"kartą",
"Gotówką",
"Kartą",
])
order_items = ""
# randint high is exclusive so range 1 to 3 is actually 1 to 2 !!!
# pizza
pizza = possible_order_items["pizza"].copy()
for _ in range(np.random.randint(1, 3)):
item_idx = np.random.randint(0, len(pizza))
order_items += f" \"{np.random.randint(1, 4)}x Pizza {pizza[item_idx]}\",\n"
del pizza[item_idx]
# drink
drink = possible_order_items["drink"].copy()
for _ in range(np.random.randint(0, 3)):
item_idx = np.random.randint(0, len(drink))
order_items += f" \"{np.random.randint(1, 4)}x {drink[item_idx]}\",\n"
del drink[item_idx]
# sauce
sauce = possible_order_items["sauce"].copy()
for _ in range(np.random.randint(0, 3)):
item_idx = np.random.randint(0, len(sauce))
order_items += f" \"{np.random.randint(1, 4)}x {sauce[item_idx]}\",\n"
del sauce[item_idx]
order_items = order_items[:-2]
dialog_input_template = dialog_input_template.replace("{{phone_number}}", phone_number)
dialog_input_template = dialog_input_template.replace("{{payment_method}}", payment_method)
dialog_input_template = dialog_input_template.replace("{{order_items}}", order_items)
# save to temp/dialog_input.py
with open(root + "/temp/dialog_input.py", "w", encoding="utf-8") as f:
f.write(dialog_input_template)
vscode_available = any(os.access(os.path.join(path, "code"), os.X_OK) for path in os.environ["PATH"].split(os.pathsep))
while True:
# open it in notepad and wait for user to close it
# (or vscode if installed)
if vscode_available:
# open in new process of code. not the same window
os.system("code " + root + "/temp/dialog_input.py --new-window --wait")
else:
os.system("notepad " + root + "/temp/dialog_input.py")
# read and print
dialog_input_f = open(root + "/temp/dialog_input.py", "r", encoding="utf-8")
dialog_input = dialog_input_f.read()
dialog_input_f.close()
# execute part from the beginning to "## PYTHON END ##" as a python code here
python_end_idx = dialog_input.find("## PYTHON END ##")
phone_number, payment_method, order_items = "", "", ""
exec(dialog_input[:python_end_idx])
# it will set variables: phone_number, payment_method and order_items
# check if theres any empty variables
not_ok = False
for val in [phone_number, delivery_address, payment_method, order_items]:
if val == "":
print("Some values are empty. Please fill them.")
not_ok = True
break
if not_ok:
continue
# check the conversation
dialog = []
not_ok = False
now_pizzeria = True
for line in dialog_input[python_end_idx:].splitlines():
if line == "" or line.startswith("#"):
continue
if line.startswith("piz ="):
if not now_pizzeria:
print("Wrong order of pizzeria (piz) and customer (bot) messages.")
not_ok = True
break
dialog.append(line[5:].strip())
now_pizzeria = not now_pizzeria
elif line.startswith("bot ="):
if now_pizzeria:
print("Wrong order of pizzeria (piz) and customer (bot) messages.")
not_ok = True
break
dialog.append(line[5:].strip())
now_pizzeria = not now_pizzeria
if not_ok:
continue
# check if dialog starts on pizzeria side and ends on customer side (length is even)
if len(dialog) % 2 != 0:
print("Dialog must start on pizzeria side and end on customer side.")
continue
break
dialog[-1] += " CALLEND"
now_pizzeria = True
for line in dialog:
print("piz -" if now_pizzeria else "bot -", line)
now_pizzeria = not now_pizzeria
## find all json files consisting of number (0.json, 1.json .... 123.json)
#files = [f for f in os.listdir("output_dialogs") if f.endswith(".json") and f[:-5].isdigit()]
#
## get name for next file (number higher than the highest number in the folder)
#if len(files) == 0:
# next_file = "0.json"
#else:
# next_file = str(max([int(f[:-5]) for f in files]) + 1) + ".json"