Files

104 lines
3.4 KiB
Python

from flask import redirect, render_template, request, url_for, flash
from app import webapp
from app.homeassistant import HomeAssistant
from app.models.callback import Callback
from app.models.settings import Setting
from app.views.auth import login_required
@webapp.route('/callbacks')
@login_required
def callbacks():
hass_url = Setting.get_value(Setting.Keys.HASS_URL)
hass_token = Setting.get_value(Setting.Keys.HASS_TOKEN)
validConnection = HomeAssistant.testConnection(hass_url, hass_token)
if not validConnection:
flash("Valid connection to Home Assistant is required!", "error")
return redirect(url_for('settings'))
callbacks = Callback.get_callbacks()
return render_template("callbacks.html", callbacks=callbacks)
@webapp.route('/create-callback')
@login_required
def create_callback():
domain, service, entity = HomeAssistant.getInstance().get_defaults()
callback = Callback("New callback", domain, service, entity)
callback.save()
flash("Callback created", "success")
return redirect(url_for("callback", uuid=callback.uuid))
@webapp.route('/callback/<uuid>')
@login_required
def callback(uuid:str):
callback = Callback.get_callback(uuid)
domains = HomeAssistant.getInstance().get_domains()
services = HomeAssistant.getInstance().get_services(callback.domain)
entities = HomeAssistant.getInstance().get_entities(callback.domain)
return render_template("callback.html",callback=callback, domains=domains, services=services, entities=entities)
@webapp.route('/save-callback/<uuid>', methods=['POST'])
@login_required
def save_callback(uuid:str):
callback = None
try:
callback = Callback.get_callback(uuid=uuid)
except Exception as e:
flash("Something went wrong.", "error")
return redirect(url_for('callbacks'))
if not request.form['name']:
flash("Name required", "error")
return redirect(url_for('callback', uuid=callback.uuid))
callback.name = request.form['name']
callback.domain = request.form['domain']
callback.service = request.form['service']
callback.note = request.form['note']
if 'active' in request.form and request.form['active'] == 'true':
callback.active = True
else:
callback.active = False
service = HomeAssistant.getInstance().get_service(callback.domain, callback.service)
entity = None
if 'entity_id' or 'target' in service.fields:
entity = request.form['entity']
callback.entity = entity
data = request.form['data']
data_formatted = ""
if data:
for line in data.split("\n"):
if line.strip():
keypair = line.split(":", 1)
key = ""
value = ""
if len(keypair) == 2:
key = keypair[0].strip()
value = keypair[1].strip()
if not key or not value:
flash("Data ({}) incorrectly formatted!".format(key or value), "warning")
elif key in ['entity_id', 'target'] or key not in service.fields:
flash("{} ({}) not supported for this service".format(key, value), "error")
else:
data_formatted += "{key}: {value}\n".format(key=key, value=value)
callback.data = data_formatted.rstrip()
callback.save()
flash("Changes saved successfully", "success")
return redirect(url_for('callback', uuid=callback.uuid))