63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
#!/usr/bin/python3
|
|
|
|
from flask import request, send_from_directory
|
|
from flask_api import FlaskAPI
|
|
import RPi.GPIO as GPIO
|
|
import shutil
|
|
import os
|
|
|
|
from xml_reader import Xml_reader
|
|
from interface_handler import Interface_handler
|
|
|
|
xml_reader = Xml_reader('XML/config.xml','XML/config.xsd')
|
|
interface_handler = Interface_handler(xml_reader)
|
|
|
|
device_names = xml_reader.get_device_names()
|
|
|
|
app = FlaskAPI(__name__)
|
|
|
|
@app.route('/', methods=["GET"])
|
|
def api_root():
|
|
return {
|
|
"device_url": request.url + "device/<device_name>",
|
|
"device_url_POST": {"output": "<value>"}
|
|
}
|
|
|
|
@app.route('/XML/', methods=["GET","POST"])
|
|
def xml_transfer():
|
|
try:
|
|
#return the current config.xml
|
|
if request.method == "GET":
|
|
return send_from_directory('XML','config.xml')
|
|
|
|
# set a new config.xml
|
|
if request.method == "POST":
|
|
if not os.path.exists('/tmp/aped_device'):
|
|
os.mkdir("/tmp/aped_device")
|
|
tmp_file = open("/tmp/aped_device/config.xml","w")
|
|
data = request.get_data(as_text=True)
|
|
tmp_file.write(data)
|
|
tmp_file.close()
|
|
#check config.xml against the XSD file
|
|
if xml_reader.validate('/tmp/aped_device/config.xml','XML/config.xsd'):
|
|
shutil.move('XML/config.xml','XML/config_old.xml')
|
|
shutil.move('/tmp/aped_device/config.xml','XML/config.xml')
|
|
else:
|
|
SyntaxError('the config.xml has invalid content')
|
|
return {'error': ''}
|
|
except Exception as e:
|
|
return {'error' : str(e)}
|
|
|
|
@app.route('/device/<device_name>/', methods=["GET", "POST"])
|
|
def api_leds_control(device_name):
|
|
try:
|
|
if request.method == "POST":
|
|
response = interface_handler.write(device_name,request.data.get("output"))
|
|
return {'output': response}
|
|
return {'state': interface_handler.read(device_name)}
|
|
except Exception as e:
|
|
return {'error': str(e)}
|
|
|
|
if __name__ == "__main__":
|
|
app.run(port=8080,host="0.0.0.0")
|