gear-orders/generate.py
2026-03-04 21:01:35 -06:00

68 lines
1.6 KiB
Python

import yaml
import json
import logging
import random
from db.queries import repeat_get, repeat_increment, repeat_clear, repeat_put
from settings import ORDERS_YML
logger = logging.getLogger(__name__)
def pick_order(orders):
picked = random.choices(orders,
weights=[o.weight for o in orders],
k=1)[0]
result = []
result.append(picked.name)
for add_on in picked.add_ons:
if add_on.probability > random.random():
result.append(add_on.name)
return (result, picked.repeat)
def read_config():
with open(ORDERS_YML) as stream:
try:
orders = yaml.safe_load(stream)
except yaml.YAMLError as exc:
logger.error(exc)
return orders
def generate_order(orders_pool):
# Do we want to repeat?
if orders_pool.repeat.count() != 0:
repeat = orders_pool.repeat.get()
if repeat.probability > random.random():
repeat_increment(repeat.id)
return {
"orders": json.loads(repeat.orders),
"count": repeat.count
}
else:
repeat_clear(repeat.id)
if orders_pool.probability < random.random():
# No orders today
return { }
# Pick new orders
(result, repeat_p) = pick_order(orders_pool.orders)
# Log the repeat
if repeat_p > 0.0:
repeat_put(orders_pool.id, repeat_p, json.dumps(result))
return {
"orders": result
}
def generate_punishment(orders_pool):
# Pick new orders
(result, repeat_p) = pick_order(orders_pool.orders)
return {
"orders": result
}