def action_add(form): """Add a function Action""" error = [] action = '{action} {controller}'.format( action=TRANSLATIONS['add']['title'], controller='{} {}'.format(TRANSLATIONS['conditional']['title'], TRANSLATIONS['actions']['title'])) dep_unmet, _ = return_dependencies(form.action_type.data) if dep_unmet: list_unmet_deps = [] for each_dep in dep_unmet: list_unmet_deps.append(each_dep[0]) error.append( "The {dev} device you're trying to add has unmet dependencies: " "{dep}".format(dev=form.function_type.data, dep=', '.join(list_unmet_deps))) if form.function_type.data == 'conditional': func = Conditional.query.filter( Conditional.unique_id == form.function_id.data).first() elif form.function_type.data == 'trigger': func = Trigger.query.filter( Trigger.unique_id == form.function_id.data).first() elif form.function_type.data == 'function_actions': func = Function.query.filter( Function.unique_id == form.function_id.data).first() else: func = None error.append("Invalid Function type: {}".format(form.function_type.data)) if form.function_type.data != 'function_actions' and func and func.is_activated: error.append("Deactivate before adding an Action") if form.action_type.data == '': error.append("Must select an action") try: new_action = Actions() new_action.function_id = form.function_id.data new_action.function_type = form.function_type.data new_action.action_type = form.action_type.data if form.action_type.data == 'command': new_action.do_output_state = 'mycodo' # user to execute shell command as if not error: new_action.save() except sqlalchemy.exc.OperationalError as except_msg: error.append(except_msg) except sqlalchemy.exc.IntegrityError as except_msg: error.append(except_msg) except Exception as except_msg: error.append(except_msg) flash_success_errors(error, action, url_for('routes_page.page_function')) if dep_unmet: return 1
def action_add(form): """Add a function Action""" error = [] action = '{action} {controller}'.format( action=TRANSLATIONS['add']['title'], controller='{} {}'.format(TRANSLATIONS['conditional']['title'], TRANSLATIONS['actions']['title'])) if form.function_type.data == 'conditional': func = Conditional.query.filter( Conditional.unique_id == form.function_id.data).first() elif form.function_type.data == 'trigger': func = Trigger.query.filter( Trigger.unique_id == form.function_id.data).first() elif form.function_type.data == 'function_actions': func = Function.query.filter( Function.unique_id == form.function_id.data).first() else: func = None error.append("Invalid Function type: {}".format( form.function_type.data)) if form.function_type.data != 'function_actions' and func and func.is_activated: error.append("Deactivate before adding an Action") if form.action_type.data == '': error.append("Must select an action") try: new_action = Actions() new_action.function_id = form.function_id.data new_action.function_type = form.function_type.data new_action.action_type = form.action_type.data if not error: new_action.save() except sqlalchemy.exc.OperationalError as except_msg: error.append(except_msg) except sqlalchemy.exc.IntegrityError as except_msg: error.append(except_msg) except Exception as except_msg: error.append(except_msg) flash_success_errors(error, action, url_for('routes_page.page_function'))
def action_add(form): """Add a function Action""" error = [] action = '{action} {controller}'.format( action=TRANSLATIONS['add']['title'], controller='{} {}'.format(TRANSLATIONS['conditional']['title'], TRANSLATIONS['actions']['title'])) dep_unmet, _ = return_dependencies(form.action_type.data) if dep_unmet: list_unmet_deps = [] for each_dep in dep_unmet: list_unmet_deps.append(each_dep[0]) error.append( "The {dev} device you're trying to add has unmet dependencies: " "{dep}".format(dev=form.function_type.data, dep=', '.join(list_unmet_deps))) if form.function_type.data == 'conditional': func = Conditional.query.filter( Conditional.unique_id == form.function_id.data).first() elif form.function_type.data == 'trigger': func = Trigger.query.filter( Trigger.unique_id == form.function_id.data).first() elif form.function_type.data == 'function_actions': func = Function.query.filter( Function.unique_id == form.function_id.data).first() else: func = None error.append("Invalid Function type: {}".format(form.function_type.data)) if form.function_type.data != 'function_actions' and func and func.is_activated: error.append("Deactivate before adding an Action") if form.action_type.data == '': error.append("Must select an action") try: new_action = Actions() new_action.function_id = form.function_id.data new_action.function_type = form.function_type.data new_action.action_type = form.action_type.data if form.action_type.data == 'command': new_action.do_output_state = 'mycodo' # user to execute shell command as elif form.action_type.data == 'mqtt_publish': # Fill in default values # TODO: Future improvements to actions will be single-file modules, making this obsolete custom_options = { "hostname": "localhost", "port": 1883, "topic": "paho/test/single", "keepalive": 60, "clientid": "mycodo_mqtt_client", "login": False, "username": "******", "password": "" } new_action.custom_options = json.dumps(custom_options) if not error: new_action.save() except sqlalchemy.exc.OperationalError as except_msg: error.append(except_msg) except sqlalchemy.exc.IntegrityError as except_msg: error.append(except_msg) except Exception as except_msg: error.append(except_msg) flash_success_errors(error, action, url_for('routes_page.page_function')) if dep_unmet: return 1
def action_add(form): """Add an Action.""" messages = { "success": [], "info": [], "warning": [], "error": [] } action_id = None list_unmet_deps = [] dep_name = "" page_refresh = False if not current_app.config['TESTING']: dep_unmet, _, dep_message = return_dependencies(form.action_type.data) if dep_unmet: for each_dep in dep_unmet: list_unmet_deps.append(each_dep[3]) messages["error"].append( f"{form.action_type.data} has unmet dependencies. " "They must be installed before the Action can be added.") dep_name = form.action_type.data return messages, dep_name, list_unmet_deps, dep_message, None dict_actions = parse_action_information() controller_type, controller_table, _ = which_controller(form.device_id.data) if controller_type not in ['Conditional', 'Trigger', 'Function', 'Input']: messages["error"].append(f"Invalid controller type: {controller_type}") if controller_type: controller = controller_table.query.filter( controller_table.unique_id == form.device_id.data).first() try: if controller and controller.is_activated: messages["error"].append("Deactivate controller before adding an Action") except: pass # is_activated doesn't exist if form.action_type.data == '': messages["error"].append("Must select an action") try: new_action = Actions() new_action.function_id = form.device_id.data new_action.function_type = form.function_type.data new_action.action_type = form.action_type.data # # Custom Options # # Generate string to save from custom options messages["error"], custom_options = custom_options_return_json( messages["error"], dict_actions, device=form.action_type.data, use_defaults=True) new_action.custom_options = custom_options if not messages["error"]: new_action.save() action_id = new_action.unique_id page_refresh = True messages["success"].append(f"{TRANSLATIONS['add']['title']} {TRANSLATIONS['actions']['title']}") except sqlalchemy.exc.OperationalError as except_msg: messages["error"].append(str(except_msg)) except sqlalchemy.exc.IntegrityError as except_msg: messages["error"].append(str(except_msg)) except Exception as except_msg: messages["error"].append(str(except_msg)) return messages, dep_name, list_unmet_deps, action_id, page_refresh
def action_add(form): """Add an Action""" messages = {"success": [], "info": [], "warning": [], "error": []} action_id = None dep_name = "" page_refresh = False dep_unmet, _ = return_dependencies(form.action_type.data) if dep_unmet: list_unmet_deps = [] for each_dep in dep_unmet: list_unmet_deps.append(each_dep[0]) messages["error"].append( "{dev} has unmet dependencies. They must be installed before the Action can be added." .format(dev=form.action_type.data)) dep_name = form.action_type.data return messages, dep_name, list_unmet_deps, None if form.function_type.data == 'conditional': func = Conditional.query.filter( Conditional.unique_id == form.function_id.data).first() elif form.function_type.data == 'trigger': func = Trigger.query.filter( Trigger.unique_id == form.function_id.data).first() elif form.function_type.data == 'function': func = Function.query.filter( Function.unique_id == form.function_id.data).first() else: func = None messages["error"].append("Invalid Function type: {}".format( form.function_type.data)) if form.function_type.data != 'function' and func and func.is_activated: messages["error"].append("Deactivate before adding an Action") if form.action_type.data == '': messages["error"].append("Must select an action") try: new_action = Actions() new_action.function_id = form.function_id.data new_action.function_type = form.function_type.data new_action.action_type = form.action_type.data if form.action_type.data == 'command': new_action.do_output_state = 'mycodo' # user to execute shell command as elif form.action_type.data == 'mqtt_publish': # Fill in default values # TODO: Future improvements to actions will be single-file modules, making this obsolete custom_options = { "hostname": "localhost", "port": 1883, "topic": "paho/test/single", "keepalive": 60, "clientid": "mycodo_mqtt_client", "login": False, "username": "******", "password": "" } new_action.custom_options = json.dumps(custom_options) if not messages["error"]: new_action.save() action_id = new_action.unique_id page_refresh = True messages["success"].append('{action} {controller}'.format( action=TRANSLATIONS['add']['title'], controller=TRANSLATIONS['actions']['title'])) except sqlalchemy.exc.OperationalError as except_msg: messages["error"].append(str(except_msg)) except sqlalchemy.exc.IntegrityError as except_msg: messages["error"].append(str(except_msg)) except Exception as except_msg: messages["error"].append(str(except_msg)) return messages, dep_name, dep_unmet, action_id, page_refresh