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 }