From 231dca1ee31f1174a0ad04878387ca53e64abfdb Mon Sep 17 00:00:00 2001 From: Trishna Saeharaseelan <trishna.saeharaseelan@noc.ac.uk> Date: Fri, 13 Jan 2023 17:02:26 +0800 Subject: [PATCH] refactor(specs): replace components/schemas to definitions --- .gitignore | 1 + formats/acknowledgement.py | 11 ++++- formats/mission_plan.py | 2 +- formats/observation.py | 2 +- formats/planning_configuration.py | 2 +- formats/platform_status.py | 2 +- generate_swagger.py | 71 ++++++++++++++----------------- 7 files changed, 48 insertions(+), 43 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e9d6e9c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +formats/__pycache__ diff --git a/formats/acknowledgement.py b/formats/acknowledgement.py index 70f89a3..944f15e 100644 --- a/formats/acknowledgement.py +++ b/formats/acknowledgement.py @@ -2,8 +2,12 @@ schemas: Acknowledgement status sent by the surface platform to report receipt of message. """ +# from openapi_schema_validator import validate +# from jsonschema import validate + + acknowledgement_schema = { - "allOf": [{"$ref": "#/components/schemas/Message"}], + "allOf": [{"$ref": "#/definitions/Message"}], "type": "object", "properties": { "acknowledged_message_ID": { @@ -24,3 +28,8 @@ acknowledgement_schema = { }, "required": ["acknowledged_message_ID", "status"], } + +# validate( +# {"acknowledged_message_ID": "string-type-id", "status": "c2_received"}, +# acknowledgement_schema, +# ) diff --git a/formats/mission_plan.py b/formats/mission_plan.py index 0e6c975..5cb5305 100644 --- a/formats/mission_plan.py +++ b/formats/mission_plan.py @@ -63,7 +63,7 @@ action_schema = { } mission_plan_schema = { - "allOf": [{"$ref": "#/components/schemas/Message"}], + "allOf": [{"$ref": "#/definitions/Message"}], "type": "object", "properties": { "autonomy_engine_plan_ID": { diff --git a/formats/observation.py b/formats/observation.py index d67ff38..a5a251b 100644 --- a/formats/observation.py +++ b/formats/observation.py @@ -30,7 +30,7 @@ hits_schema = { } observation_schema = { - "allOf": [{"$ref": "#/components/schemas/Message"}], + "allOf": [{"$ref": "#/definitions/Message"}], "type": "object", "properties": { "platform_ID": { diff --git a/formats/planning_configuration.py b/formats/planning_configuration.py index 50da184..2050dbf 100644 --- a/formats/planning_configuration.py +++ b/formats/planning_configuration.py @@ -157,7 +157,7 @@ squad_metadata_schema = { } planning_configuration_schema = { - "allOf": [{"$ref": "#/components/schemas/Message"}], + "allOf": [{"$ref": "#/definitions/Message"}], "type": "object", "properties": { "planning_config_ID": { diff --git a/formats/platform_status.py b/formats/platform_status.py index 87853c6..f54b4c3 100644 --- a/formats/platform_status.py +++ b/formats/platform_status.py @@ -26,7 +26,7 @@ sensor_schema = { } platform_status_message_schema = { - "allOf": [{"$ref": "#/components/schemas/Message"}], + "allOf": [{"$ref": "#/definitions/Message"}], "type": "object", "properties": { "platform_ID": { diff --git a/generate_swagger.py b/generate_swagger.py index 99938a0..c75f674 100644 --- a/generate_swagger.py +++ b/generate_swagger.py @@ -1,7 +1,3 @@ -from flask import Flask -from flasgger import Swagger - -# from . import properties from formats.message_wrapper import message_wrapper_schema from formats.mission_plan import mission_plan_schema from formats.observation import observation_schema @@ -9,11 +5,16 @@ from formats.planning_configuration import planning_configuration_schema from formats.platform_status import platform_status_message_schema from formats.acknowledgement import acknowledgement_schema +from flasgger import Swagger +from flask import Flask +# from openapi_schema_validator import validate +from openapi_spec_validator import validate_spec_url + app = Flask(__name__) swagger_config = { "headers": [], - "openapi": "3.0.2", + "openapi": "3.1", "swagger_ui": True, "specs_route": "/", "info": { @@ -29,15 +30,13 @@ swagger_config = { "model_filter": lambda tag: True, } ], - "components": { - "schemas": { - "Message": message_wrapper_schema, - "MissionPlan": mission_plan_schema, - "Observation": observation_schema, - "PlanningConfiguration": planning_configuration_schema, - "PlatformStatus": platform_status_message_schema, - "Acknowledgement": acknowledgement_schema, - }, + "definitions": { + "Message": message_wrapper_schema, + "MissionPlan": mission_plan_schema, + "Observation": observation_schema, + "PlanningConfiguration": planning_configuration_schema, + "PlatformStatus": platform_status_message_schema, + "Acknowledgement": acknowledgement_schema, }, "paths": { "/all_messages": { @@ -50,30 +49,14 @@ swagger_config = { "application/json": { "schema": { "oneOf": [ + {"$ref": "#/definitions/Acknowledgement"}, + {"$ref": "#/definitions/PlatformStatus"}, + {"$ref": "#/definitions/MissionPlan"}, + {"$ref": "#/definitions/Observation"}, { - "$ref": "#/components/" - + "schemas/Acknowledgement" - }, - { - "$ref": "#/components/" - + "schemas/PlatformStatus" - }, - { - "$ref": "#/components/" - + "schemas/MissionPlan" - }, - { - "$ref": "#/components/" - + "schemas/Observation" - }, - { - "$ref": "#/components/" - + "schemas/PlanningConfiguration" - }, - { - "$ref": "#/components/" - + "schemas/PlatformStatus" + "$ref": "#/definitions/PlanningConfiguration" }, + {"$ref": "#/definitions/PlatformStatus"}, ], "discriminator": { "propertyName": "message_type", @@ -90,7 +73,7 @@ swagger_config = { "consumes": ["application/json"], } message_types = [ - # "Message", + "Message", "Acknowledgement", "MissionPlan", "Observation", @@ -109,7 +92,7 @@ for item in message_types: "schema": { "allOf": [ { - "$ref": "#/components/schemas/" + item, + "$ref": "#/definitions/" + item, }, ], "discriminator": { @@ -125,11 +108,23 @@ for item in message_types: swag = Swagger(app, config=swagger_config, merge=True) +# validate({"acknowledged_message_ID": "string-type-id", "status": "c2_received"}, acknowledgement_schema) + + # app.add_url_rule( # '/coordinates', # view_func=Coordinates.as_view('coordinates'), # methods=['GET'] # ) +from openapi_spec_validator import validate_spec, openapi_v3_spec_validator if __name__ == "__main__": app.run(debug=True) + # print(validate_spec_url("http://127.0.0.1:5000/swagger.json")) + + # If no exception is raised by validate_spec(), the spec is valid. + # validate_spec(swagger_config) + # print("000 Schema validation passed") + + # errors_iterator = openapi_v3_spec_validator.iter_errors(swagger_config) + # print(errors_iterator) \ No newline at end of file -- GitLab