From 9433969d08d768d10f3894699082999832c9e2b8 Mon Sep 17 00:00:00 2001 From: Erik Reid <erik.reid@geant.org> Date: Wed, 24 Mar 2021 12:31:30 +0100 Subject: [PATCH] added timestamp to version & latch schema optional for now --- inventory_provider/routes/default.py | 51 ++++++++++++------------ inventory_provider/tasks/common.py | 21 +++++----- test/test_general_routes.py | 58 ++++++++++++++-------------- 3 files changed, 66 insertions(+), 64 deletions(-) diff --git a/inventory_provider/routes/default.py b/inventory_provider/routes/default.py index f65d6124..047cc10e 100644 --- a/inventory_provider/routes/default.py +++ b/inventory_provider/routes/default.py @@ -4,42 +4,43 @@ from flask import Blueprint, jsonify, current_app from inventory_provider.routes import common from inventory_provider.tasks.common import get_current_redis, get_latch -routes = Blueprint("inventory-data-default-routes", __name__) +routes = Blueprint('inventory-data-default-routes', __name__) API_VERSION = '0.1' VERSION_SCHEMA = { - "$schema": "http://json-schema.org/draft-07/schema#", + '$schema': 'http://json-schema.org/draft-07/schema#', - "definitions": { - "latch": { - "type": "object", - "properties": { - "current": {"type": "integer"}, - "next": {"type": "integer"}, - "this": {"type": "integer"}, - "failure": {"type": "boolean"}, - "pending": {"type": "boolean"}, + 'definitions': { + 'latch': { + 'type': 'object', + 'properties': { + 'current': {'type': 'integer'}, + 'next': {'type': 'integer'}, + 'this': {'type': 'integer'}, + 'failure': {'type': 'boolean'}, + 'pending': {'type': 'boolean'}, + 'timestamp': {'type': 'number'} }, - "required": ["current", "next", "this", "pending", "failure"], - "additionalProperties": False + 'required': ['current', 'next', 'this', 'pending', 'failure'], + 'additionalProperties': False } }, - "type": "object", - "properties": { - "api": { - "type": "string", - "pattern": r'\d+\.\d+' + 'type': 'object', + 'properties': { + 'api': { + 'type': 'string', + 'pattern': r'\d+\.\d+' }, - "module": { - "type": "string", - "pattern": r'\d+\.\d+' + 'module': { + 'type': 'string', + 'pattern': r'\d+\.\d+' }, - "latch": {"$ref": "#/definitions/latch"} + 'latch': {'$ref': '#/definitions/latch'} }, - "required": ["api", "module"], - "additionalProperties": False + 'required': ['api', 'module'], + 'additionalProperties': False } @@ -48,7 +49,7 @@ def after_request(resp): return common.after_request(resp) -@routes.route("/version", methods=['GET', 'POST']) +@routes.route('/version', methods=['GET', 'POST']) @common.require_accepts_json def version(): """ diff --git a/inventory_provider/tasks/common.py b/inventory_provider/tasks/common.py index ac85afb7..533295b3 100644 --- a/inventory_provider/tasks/common.py +++ b/inventory_provider/tasks/common.py @@ -11,17 +11,18 @@ DEFAULT_REDIS_SENTINEL_TIMEOUT = 0.1 DEFAULT_SENTINEL_SOCKET_TIMEOUT = 0.1 DB_LATCH_SCHEMA = { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "properties": { - "current": {"type": "integer"}, - "next": {"type": "integer"}, - "this": {"type": "integer"}, - "pending": {"type": "boolean"}, - "failure": {"type": "boolean"} + '$schema': 'http://json-schema.org/draft-07/schema#', + 'type': 'object', + 'properties': { + 'current': {'type': 'integer'}, + 'next': {'type': 'integer'}, + 'this': {'type': 'integer'}, + 'pending': {'type': 'boolean'}, + 'failure': {'type': 'boolean'}, + 'timestamp': {'type': 'number'} }, - "required": ["current", "next", "this"], - "additionalProperties": False + 'required': ['current', 'next', 'this'], + 'additionalProperties': False } TASK_LOG_SCHEMA = { diff --git a/test/test_general_routes.py b/test/test_general_routes.py index 254d9db1..8bc82db7 100644 --- a/test/test_general_routes.py +++ b/test/test_general_routes.py @@ -5,59 +5,59 @@ from inventory_provider.routes import common from inventory_provider.routes.default import VERSION_SCHEMA DEFAULT_REQUEST_HEADERS = { - "Content-type": "application/json", - "Accept": ["application/json"] + 'Content-type': 'application/json', + 'Accept': ['application/json'] } def test_version_request(client, mocked_redis): rv = client.post( - "version", + 'version', headers=DEFAULT_REQUEST_HEADERS) assert rv.status_code == 200 jsonschema.validate( - json.loads(rv.data.decode("utf-8")), + json.loads(rv.data.decode('utf-8')), VERSION_SCHEMA) def test_load_json_docs(data_config, mocked_redis): INTERFACE_SCHEMA = { - "$schema": "http://json-schema.org/draft-07/schema#", + '$schema': 'http://json-schema.org/draft-07/schema#', - "definitions": { - "interface": { - "type": "object", - "properties": { - "logical-system": {"type": "string"}, - "name": {"type": "string"}, - "description": {"type": "string"}, - "bundle": { - "type": "array", - "items": {"type": "string"} + 'definitions': { + 'interface': { + 'type': 'object', + 'properties': { + 'logical-system': {'type': 'string'}, + 'name': {'type': 'string'}, + 'description': {'type': 'string'}, + 'bundle': { + 'type': 'array', + 'items': {'type': 'string'} }, - "ipv4": { - "type": "array", - "items": {"type": "string"} + 'ipv4': { + 'type': 'array', + 'items': {'type': 'string'} }, - "ipv6": { - "type": "array", - "items": {"type": "string"} + 'ipv6': { + 'type': 'array', + 'items': {'type': 'string'} } }, - "required": ["name", "description", "ipv4", "ipv6"], - "additionalProperties": False + 'required': ['name', 'description', 'ipv4', 'ipv6'], + 'additionalProperties': False } }, - "type": "object", - "properties": { - "key": {"type": "string"}, - "value": {"$ref": "#/definitions/interface"} + 'type': 'object', + 'properties': { + 'key': {'type': 'string'}, + 'value': {'$ref': '#/definitions/interface'} }, - "required": ["key", "value"], - "additionalProperties": False + 'required': ['key', 'value'], + 'additionalProperties': False } for ifc in common.load_json_docs( -- GitLab