from formats import message_header from formats.mission_plan import mission_plan_schema from formats.mission_plan_encoded import mission_plan_encoded_schema from formats.observation import observation_schema from formats.observation_encoded import observation_encoded_schema from formats.planning_configuration import planning_configuration_schema from formats.platform_status import platform_status_schema from formats.platform_status_encoded import platform_status_encoded_schema from formats.survey import survey_schema from formats.survey_encoded import survey_encoded_schema from formats.acknowledgement import acknowledgement_schema from flasgger import Swagger from flask import Flask import os app = Flask(__name__) url_prefix = os.getenv("URL_PREFIX", "") swagger_config = { "openapi": "3.0.2", "swagger_ui": True, "specs_route": "/", "info": { "title": "SoAR Backbone Message Formats", "version": "1.0", "description": "SoAR message protocol in schemas", }, "specs": [ { "endpoint": "swagger", "route": "/soar_protocol.json", } ], "url_prefix": url_prefix, "paths": {}, "components": { "schemas": { "MESSAGE": { "type": "object", "description": "Full message definition with" + " message-metadata in `header` and different" + " message type schemas under `payload`", "properties": { "header": { "$ref": "#/components/schemas/header", }, "payload": {"$ref": "#/components/schemas/payload"}, }, "required": ["header", "payload"], }, "payload": { "discriminator": { "propertyName": "message_type", "mapping": { "mission_plan": "#/components/schemas/mission_plan", "mission_plan_encoded": "#/components/schemas/" + "mission_plan_encoded", "observation": "#/components/schemas/observation", "observation_encoded": "#/components/schemas/" + "observation_encoded", "planning_configuration": "#/components/schemas/" + "planning_configuration", "platform_status": "#/components/schemas/platform_status", "platform_status_encoded": "#/components/schemas/" + "platform_status_encoded", "acknowledgement": "#/components/schemas/acknowledgement", "survey": "#/components/schemas/survey", "survey_encoded": "#/components/schemas/" + "survey_encoded", }, }, "oneOf": [ {"$ref": "#/components/schemas/acknowledgement"}, {"$ref": "#/components/schemas/mission_plan"}, {"$ref": "#/components/schemas/mission_plan_encoded"}, {"$ref": "#/components/schemas/observation"}, {"$ref": "#/components/schemas/observation_encoded"}, {"$ref": "#/components/schemas/planning_configuration"}, {"$ref": "#/components/schemas/platform_status"}, {"$ref": "#/components/schemas/platform_status_encoded"}, {"$ref": "#/components/schemas/survey"}, {"$ref": "#/components/schemas/survey_encoded"}, ], }, "header": message_header, "mission_plan": mission_plan_schema, "mission_plan_encoded": mission_plan_encoded_schema, "observation": observation_schema, "observation_encoded": observation_encoded_schema, "planning_configuration": planning_configuration_schema, "platform_status": platform_status_schema, "platform_status_encoded": platform_status_encoded_schema, "survey": survey_schema, "survey_encoded": survey_encoded_schema, "acknowledgement": acknowledgement_schema, } }, } swag = Swagger(app, config=swagger_config, merge=True) flask_host = os.getenv( "FLASK_HOST", "localhost" ) # Sets to whatever FLASK_HOST is, or defaults to localhost if __name__ == "__main__": app.run(debug=False, host=flask_host)