def getTriggerAndTemplateAndParameterValues(self, ruleAntecedent): checkData(locals()) triggers = Triggers() triggerList = triggers.getAllTriggers() for trigger in triggerList: # A trigger.ruleAntecedent is represented as set of templates models: # Example "template1 | template2 | template2" # Where each template can be like # "it is between %d AM and %d AM | it is between %d AM and %d PM | it is between %d PM and %d AM | it is between %d PM and %d PM" models = trigger.ruleAntecedent.split('|') for model in models: parameterNumber = model.count("@val") originalModel = model.strip() model = model.replace("@val","(.+)").strip() matchObj = re.match( model, ruleAntecedent, re.M|re.I) if matchObj: parameterValues = {} for i in range(0,parameterNumber): parameterValues[str(i)] = matchObj.group(i + 1) return (trigger, originalModel, parameterValues) raise NotWellFormedRuleError("Impossible to find any trigger corresponding to the following rule consequent > " + ruleAntecedent)
def getTriggers(self, buildingName = None, groupId = None): checkData(locals()) from app.backend.model.triggers import Triggers triggers = Triggers() triggerList = [] for trigger in triggers.getAllTriggers(): triggerList.append(trigger.getDict()) return {"triggers" : triggerList}
def getTriggerCategories(self): checkData(locals()) triggers = Triggers() triggerList = triggers.getAllTriggers() categories = [] for trigger in triggerList: if trigger.category not in categories: categories.append(trigger.category) return categories
def translateTrigger(self, ruleAntecedent, getDict = False): checkData(locals()) translatedTriggers = [] ruleAntecedent = ruleAntecedent.split(",") for currentAntecedent in ruleAntecedent: currentAntecedent = currentAntecedent.strip() triggers = Triggers() trigger, originalTemplate, parameterValues = self.getTriggerAndTemplateAndParameterValues(currentAntecedent) translationTemplate = triggers.translateTemplate('Z3', originalTemplate) translatedParams = {} for key,value in parameterValues.iteritems(): translatedParams[key] = self.__translateParameters(trigger.category, value) translation = translationTemplate for i in range(0,len(parameterValues.keys())): value = translatedParams[str(i)] translation = translation.replace("@val", value, 1) currentTrigger = {} currentTrigger["antecedent"] = currentAntecedent currentTrigger["translation"] = translation currentTrigger["trigger"] = trigger if not getDict else trigger.getDict() currentTrigger["parameterValues"] = parameterValues currentTrigger["translatedParams"] = translatedParams translatedTriggers.append(currentTrigger) translationTemplate = "(and @@first_arg@@ @@second_arg@@)" translation = translatedTriggers[0]["translation"] for i in range(1,len(translatedTriggers)): translation = (translationTemplate.replace('@@first_arg@@', translation)).replace('@@second_arg@@', translatedTriggers[i]["translation"]) result = {} result["translation"] = translation result["triggers"] = translatedTriggers return result