diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e9d6e9c06d3cae80108456cf4d39bf012e4286cc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +formats/__pycache__ diff --git a/formats/acknowledgement.py b/formats/acknowledgement.py index 70f89a3290cc3324a03caca25275602028ff96fb..944f15e5088318d2662bc32a9f4f06703d749f5d 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 0e6c975c7b2318ab5bcd6478a2e36c89296446c8..5cb530590c4676476f143b5029428d6b5d8eb29a 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 d67ff3839eea5ab7a884a6e99ca48294c4cf3f03..a5a251be4e7aab060d44f927926086965f7876e3 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 50da1848b9611622c6a4bdb216db689d652855af..2050dbfda82b6759236efe003c94b726b90020de 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 87853c67f443394775becf2b9083226cd10151e9..f54b4c3b76e189d72d4a8bfe8e43198cecd44c8f 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 99938a0b772ea86ac3734e1c789a7f1239d6aa3e..c75f674d5a45d5ab31d10d691fd2d57004e7bc62 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