TandoorRecipes/cookbook/helper/automation_helper.py
2023-09-12 09:39:45 -05:00

58 lines
1.9 KiB
Python

from django.core.cache import caches
from django.db.models import Q
from django.db.models.functions import Lower
from cookbook.models import Automation
class AutomationEngine:
request = None
use_cache = None
food_aliases = None
unit_aliases = None
never_unit = None
transpose_words = None
description_replace = None
instruction_replace = None
def __init__(self, request, use_cache=True):
self.request = request
self.use_cache = use_cache
def apply_keyword_automation(self, keyword):
return keyword
def apply_unit_automation(self, unit):
return unit
def apply_food_automation(self, food):
food = food.strip()
if self.use_cache and self.food_aliases is None:
self.food_aliases = {}
FOOD_CACHE_KEY = f'automation_food_alias_{self.request.space.pk}'
if c := caches['default'].get(FOOD_CACHE_KEY, None):
self.food_aliases = c
caches['default'].touch(FOOD_CACHE_KEY, 30)
else:
for a in Automation.objects.filter(space=self.request.space, disabled=False, type=Automation.FOOD_ALIAS).only('param_1', 'param_2').order_by('order').all():
self.food_aliases[a.param_1.lower()] = a.param_2
caches['default'].set(FOOD_CACHE_KEY, self.food_aliases, 30)
else:
self.food_aliases = {}
if self.food_aliases:
try:
return self.food_aliases[food.lower()]
except KeyError:
return food
else:
if automation := Automation.objects.filter(space=self.request.space, type=Automation.FOOD_ALIAS, param_1__iexact=food, disabled=False).order_by('order').first():
return automation.param_2
return food
def apply_transpose_automation(self, string):
return string
def apply_regex_replace_automation(self, string):
return string