58 lines
1.9 KiB
Python
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
|