From 6810f272abb252ceb3de43d1193eb74882c8e4c2 Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Sat, 10 Oct 2020 23:57:33 +0200 Subject: [PATCH] v1.2.0 - added limit to measurement get routes --- docs/api.yml | 23 +++++++++++++++++++---- src/blueprints/Measurements.py | 6 +++--- src/blueprints/Sensors.py | 8 ++++---- src/logic/database/MeasurementAccess.py | 15 +++++++++++---- src/version.json | 6 +++--- 5 files changed, 40 insertions(+), 18 deletions(-) diff --git a/docs/api.yml b/docs/api.yml index 4faa08b..8d0b35e 100644 --- a/docs/api.yml +++ b/docs/api.yml @@ -194,11 +194,11 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorResponse' - /sensor/{sensorID}/measurements: + /sensor/{sensorID}/measurements/{limit}: get: tags: - sensor - summary: Gets all measurements for a specific sensor + summary: Gets all measurements for a specific sensor (Maximum number of results can be limited with parameter "limit". Set to "0" to disable limit.) operationId: sensorMeasurements parameters: - in: path @@ -207,6 +207,12 @@ paths: required: true schema: type: integer + - in: path + name: limit + description: Maximum number of results. + required: true + schema: + type: integer responses: '200': description: All available measurements @@ -267,12 +273,19 @@ paths: schema: $ref: '#/components/schemas/ErrorResponse' - /measurements: + /measurements/{limit}: get: tags: - measurement - summary: Gets all measurements + summary: Gets all measurements (Maximum number of results can be limited with parameter "limit". Set to "0" to disable limit.) operationId: measurements + parameters: + - in: path + name: limit + description: Maximum number of results. + required: true + schema: + type: integer responses: '200': description: All available measurements @@ -282,6 +295,8 @@ paths: type: array items: $ref: '#/components/schemas/Measurement' + + /measurements: post: tags: - measurement diff --git a/src/blueprints/Measurements.py b/src/blueprints/Measurements.py index 228d803..1d76e0a 100644 --- a/src/blueprints/Measurements.py +++ b/src/blueprints/Measurements.py @@ -12,10 +12,10 @@ from logic.database.Database import Database def construct_blueprint(settings: Dict, backupService: BackupService): measurements = Blueprint('measurements', __name__) - @measurements.route('/measurements', methods=['GET']) - def get_all_measurements(): + @measurements.route('/measurements/<int:limit>', methods=['GET']) + def get_all_measurements(limit: int): database = Database(settings['database']['databasePath'], backupService) - return jsonify(database.measurementAccess.get_all_measurements()) + return jsonify(database.measurementAccess.get_all_measurements(limit)) @measurements.route('/measurement/<int:measurementID>', methods=['GET']) def get_measurement(measurementID): diff --git a/src/blueprints/Sensors.py b/src/blueprints/Sensors.py index 9c3daf8..35294e9 100644 --- a/src/blueprints/Sensors.py +++ b/src/blueprints/Sensors.py @@ -22,17 +22,17 @@ def construct_blueprint(settings: Dict, backupService: BackupService): database = Database(settings['database']['databasePath'], backupService) return jsonify(database.sensorAccess.get_sensor(sensorID)) - @sensors.route('/sensor/<int:sensorID>/measurements', methods=['GET']) - def get_all_measurements_for_sensor(sensorID): + @sensors.route('/sensor/<int:sensorID>/measurements/<int:limit>', methods=['GET']) + def get_all_measurements_for_sensor_with_limit(sensorID: int, limit: int): database = Database(settings['database']['databasePath'], backupService) sensor = database.sensorAccess.get_sensor(sensorID) if not sensor: return jsonify({'success': False, 'msg': f'No sensor with id "{sensorID}" existing'}) - return jsonify(database.measurementAccess.get_all_measurements_for_sensor(sensorID)) + return jsonify(database.measurementAccess.get_all_measurements_for_sensor(sensorID, limit)) @sensors.route('/sensor/<int:sensorID>/measurements/latest', methods=['GET']) - def get_latest_measurements_for_sensor(sensorID): + def get_latest_measurements_for_sensor(sensorID: int): database = Database(settings['database']['databasePath'], backupService) sensor = database.sensorAccess.get_sensor(sensorID) if not sensor: diff --git a/src/logic/database/MeasurementAccess.py b/src/logic/database/MeasurementAccess.py index b5a6755..e120131 100644 --- a/src/logic/database/MeasurementAccess.py +++ b/src/logic/database/MeasurementAccess.py @@ -21,8 +21,12 @@ class MeasurementAccess(DatabaseAccess): def __get_current_datetime(self): return datetime.strftime(datetime.now(), self.DATE_FORMAT) - def get_all_measurements(self) -> List[Dict[str, str]]: - return self._query(f'SELECT * FROM {self.TABLE_NAME} ORDER BY sensor_id ASC, datetime(timestamp) DESC', + def get_all_measurements(self, limit: int) -> List[Dict[str, str]]: + limitParameter = '' + if limit > 0: + limitParameter = f'LIMIT {limit}' + return self._query(f'SELECT * FROM {self.TABLE_NAME} ORDER BY sensor_id ASC, ' + f'datetime(timestamp) DESC {limitParameter}', fetch_type=FetchType.ALL) def get_measurement(self, measurementID: int) -> Dict[str, str] or None: @@ -30,9 +34,12 @@ class MeasurementAccess(DatabaseAccess): measurementID, fetch_type=FetchType.ALL) - def get_all_measurements_for_sensor(self, sensorID: int) -> List[Dict[str, str]]: + def get_all_measurements_for_sensor(self, sensorID: int, limit: int) -> List[Dict[str, str]]: + limitParameter = '' + if limit > 0: + limitParameter = f'LIMIT {limit}' return self._query(f'SELECT * FROM {self.TABLE_NAME} WHERE sensor_id = ? ' - f'ORDER BY datetime(timestamp) DESC', + f'ORDER BY datetime(timestamp) DESC {limitParameter}', sensorID, fetch_type=FetchType.ALL) diff --git a/src/version.json b/src/version.json index 1eb2ebc..63df336 100644 --- a/src/version.json +++ b/src/version.json @@ -1,7 +1,7 @@ { "version": { - "name": "v1.1.1", - "code": 3, - "date": "04.10.20" + "name": "v1.2.0", + "code": 4, + "date": "10.10.20" } } \ No newline at end of file -- GitLab