Skip to content
Snippets Groups Projects
Commit b512456d authored by REIG Julien's avatar REIG Julien
Browse files

Merge branch 'send-more-data' into 'master'

send more data using events

See merge request !13
parents 8c164e57 7872f816
No related branches found
No related tags found
1 merge request!13send more data using events
......@@ -4,11 +4,11 @@ from flask import Blueprint, jsonify, request
from flask_restful import Api, Resource
from consts.status import Status, response_offline
from utils.database_utils import get_resource, get_state, insert_command, insert_resource, update_state
from utils.http_utils import normalize_url
from models.resource import Resource as ResourceModel
from models.command import Command
from models.resource import Resource as ResourceModel
from utils.database_utils import (get_resource, get_state, insert_command,
insert_resource, update_state)
from utils.http_utils import normalize_url
duplicate_controller = Blueprint('duplicate_controller', __name__)
api = Api(duplicate_controller)
......@@ -26,17 +26,18 @@ class DuplicateResourceResource(Resource):
resource = body.get('resource')
if resource is None:
update_state(Status.ONLINE, normalize_url(request.host_url))
update_state(Status.ONLINE, normalize_url(request.host_url), {"message": "Resource is missing from body", "statusCode": 400})
return {"message": "Resource is missing from body"}, 400
resource = ResourceModel.from_full_dict(resource)
if get_resource(resource.id) is not None:
update_state(Status.ONLINE, normalize_url(request.host_url))
update_state(Status.ONLINE, normalize_url(request.host_url), {"message": "Resource already exists", "statusCode": 400})
return {"message": "Resource already exists"}, 400
insert_resource(resource)
insert_command(resource.id, resource.commands[0])
update_state(Status.ONLINE, normalize_url(request.host_url))
return resource.to_full_dict(), 201
......@@ -51,12 +52,12 @@ class DuplicateCommandResource(Resource):
resource = get_resource(id)
if resource is None:
update_state(Status.ONLINE, normalize_url(request.host_url))
update_state(Status.ONLINE, normalize_url(request.host_url), {"message": "Resource not found", "statusCode": 404})
return {"message": "Resource not found"}, 404
request_command: Optional[str] = request.get_json().get('command')
if request_command is None:
update_state(Status.ONLINE, normalize_url(request.host_url))
update_state(Status.ONLINE, normalize_url(request.host_url), {"message": "command is missing", "statusCode": 400})
return {"message": "command is missing"}, 400
command = Command.from_full_dict(request_command)
......
......@@ -34,12 +34,12 @@ class ResourceResource(Resource):
request_addresses: list[str] = request.get_json().get('addresses', [])
if request_command is None:
update_state(Status.ONLINE, node_address)
update_state(Status.ONLINE, node_address, {"message": "command is missing", "statusCode": 400})
return {"message": "command is missing"}, 400
resource = get_resource(id)
if resource is None:
update_state(Status.ONLINE, node_address)
update_state(Status.ONLINE, node_address, {"message": "Resource not found", "statusCode": 404})
return {"message": "Resource not found"}, 404
request_addresses = list(map(lambda x: normalize_url(x, True), request_addresses))
......@@ -67,7 +67,7 @@ class ResourceResource(Resource):
resource = get_resource(id)
if resource is None:
update_state(Status.ONLINE, node_address)
update_state(Status.ONLINE, node_address, {"message": "Resource not found", "statusCode": 404})
return {"message": "Resource not found"}, 404
if len(request_addresses) > 0 and node_address in request_addresses:
......
......@@ -37,11 +37,11 @@ class ResourcesResource(Resource):
request_addresses = list(map(lambda x: normalize_url(x, True), request_addresses))
if request_command is None:
update_state(Status.ONLINE, node_address)
update_state(Status.ONLINE, node_address, {"message": "command is missing", "statusCode": 400})
return {"message": "command is missing"}, 400
if request_name is None:
update_state(Status.ONLINE, node_address)
update_state(Status.ONLINE, node_address, {"message": "name is missing", "statusCode": 400})
return {"message": "name is missing"}, 400
if len(request_addresses) != 0 and node_address in request_addresses:
......
......@@ -32,11 +32,13 @@ def format_sse(data: str, event=None) -> str:
return msg
def send_status_change(node_address: str, status: Status):
def send_status_change(node_address: str, status: Status, extra_data: dict = None):
data = {
"node_address": node_address,
"status": status.value
}
if extra_data is not None:
data.update(extra_data)
data = json.dumps(data)
msg = format_sse(data=data, event='status_change')
......
......@@ -13,7 +13,7 @@ db_file = 'assets/' + os.environ.get('NODE_FILE') + '.db'
db_queue_file = 'assets/queue.db'
def update_state(state: Status, node_address: str = None) -> bool:
def update_state(state: Status, node_address: str = None, extra_data: dict = None) -> bool:
with sqlite3.connect(db_file) as db_conn:
try:
cursor = db_conn.cursor()
......@@ -21,7 +21,7 @@ def update_state(state: Status, node_address: str = None) -> bool:
db_conn.commit()
cursor.close()
if node_address is not None:
send_status_change(node_address=node_address, status=state)
send_status_change(node_address=node_address, status=state, extra_data=extra_data)
return True
except Exception as e:
print(e, file=sys.stderr)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment