platypush/platypush/backend/http/app/routes/execute.py

41 lines
1.0 KiB
Python

import json
from flask import Blueprint, abort, request, Response
from platypush.backend.http.app import template_folder
from platypush.backend.http.app.utils import authenticate, logger, send_message
execute = Blueprint('execute', __name__, template_folder=template_folder)
# Declare routes list
__routes__ = [
execute,
]
@execute.route('/execute', methods=['POST'])
@authenticate()
def execute():
"""Endpoint to execute commands"""
try:
msg = json.loads(request.data.decode('utf-8'))
except Exception as e:
logger().error(
'Unable to parse JSON from request {}: {}'.format(request.data, str(e))
)
abort(400, str(e))
logger().info('Received message on the HTTP backend: {}'.format(msg))
try:
response = send_message(msg)
return Response(str(response or {}), mimetype='application/json')
except Exception as e:
logger().error(
'Error while running HTTP action: {}. Request: {}'.format(str(e), msg)
)
abort(500, str(e))
# vim:sw=4:ts=4:et: