From 5b786e3a808f76d5892bb6fb8a8bb85fd1da5d4f Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Fri, 25 Sep 2020 14:11:18 +0200 Subject: [PATCH] #8 - post route for device --- docs/api.yml | 37 ++++++++++++++++++++++++++++++++++ src/blueprints/Devices.py | 23 ++++++++++++++++++++- src/blueprints/Measurements.py | 2 +- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/docs/api.yml b/docs/api.yml index e835c62..dbf8491 100644 --- a/docs/api.yml +++ b/docs/api.yml @@ -103,6 +103,34 @@ paths: type: array items: $ref: '#/components/schemas/Sensor' + /device: + post: + tags: + - device + summary: Adds a new device. If a device with the provided name already exists an error response is returned. + operationId: addDevice + security: + - bearerAuth: [] + requestBody: + description: Device to add + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/NewDevice' + responses: + '200': + description: success response + content: + application/json: + schema: + $ref: '#/components/schemas/SuccessResponse' + default: + description: error response + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' /sensors: get: @@ -416,6 +444,15 @@ components: type: string example: "20.15" + NewDevice: + type: object + required: + - device + properties: + device: + type: string + example: "myDevice" + SuccessResponse: required: - success diff --git a/src/blueprints/Devices.py b/src/blueprints/Devices.py index c2088ba..4b84ea2 100644 --- a/src/blueprints/Devices.py +++ b/src/blueprints/Devices.py @@ -1,6 +1,8 @@ -from flask import Blueprint, jsonify +from flask import Blueprint, jsonify, request from logic.AuthenticationWrapper import require_api_key +from logic.Parameters import DeviceParameters +from logic.RequestValidator import RequestValidator, ValidationError from logic.database.Database import Database @@ -42,4 +44,23 @@ def construct_blueprint(settings): return jsonify({'success': True}) + @devices.route('/device', methods=['POST']) + @require_api_key(password=settings['api']['key']) + def add_device(): + try: + parameters = RequestValidator.validate(request, [DeviceParameters.DEVICE.value]) + database = Database(settings['database']['databasePath']) + + deviceName = parameters[DeviceParameters.DEVICE.value] + existingDevice = database.deviceAccess.get_device_by_name(deviceName) + if existingDevice: + return jsonify({'success': False, + 'msg': f'A device called "{deviceName}" already exists (ID: {existingDevice["id"]})'}) + + database.deviceAccess.add_device(deviceName) + except ValidationError as e: + return e.response, 400 + + return jsonify({'success': True}) + return devices diff --git a/src/blueprints/Measurements.py b/src/blueprints/Measurements.py index 536b8ee..535c9db 100644 --- a/src/blueprints/Measurements.py +++ b/src/blueprints/Measurements.py @@ -23,7 +23,7 @@ def construct_blueprint(settings): @measurements.route('/measurements', methods=['POST']) @require_api_key(password=settings['api']['key']) - def addMeasurement(): + def add_measurement(): try: parameters = RequestValidator.validate(request, DeviceParameters.get_values()) database = Database(settings['database']['databasePath']) -- GitLab