domoboard/modules/api.py

71 lines
2.0 KiB
Python

#!/usr/bin/python
# Provides all the API functionality callable through "/api"
from flask import request
from flaskext.auth import login_required
import json, os, sys
import security, charts, plugins, webconfig, domoticz
apiDict = {}
modules = {}
def init():
global modules
modules = plugins.loadPlugins()
return
def addToApi(custom, module, function):
apiDict[custom] = [module, function]
@login_required()
def gateway():
requestedUrl = request.url.split("/api")
custom = request.args.get('custom', '')
if custom == "bar_chart":
result = charts.barChart()
elif custom == "donut_chart":
result = charts.donutChart()
elif custom == "modify_config":
idx = request.args.get('idx', '')
page = request.args.get('page', '')
component = request.args.get('component', '')
description = request.args.get('description', '')
extra = request.args.get('extra', '')
webconfig.writeToConfig(idx, page, component, description, extra)
elif custom == 'indexPlugins':
result = json.dumps(plugins.indexPlugins(request.args))
elif custom == "performUpgrade":
result = json.dumps(webconfig.performUpgrade())
elif custom in apiDict:
module = apiDict.get(custom)[0]
function = apiDict.get(custom)[1]
call = getattr(modules[module], function)
result = call(request.args)
else:
result = domoticz.queryDomoticz(requestedUrl[1])
try:
if not isJson(result):
result = json.dumps(result)
return security.sanitizeJSON(json.loads(result))
except:
return "No results returned"
def setConfig(cfg, orig_cfg):
global config
global originalCfg
config = cfg
originalCfg = orig_cfg
def getConfig():
return config
def getOriginalConfig():
return originalCfg
def isJson(myjson):
try:
json_object = json.loads(str(myjson))
except ValueError, e:
return False
return True