From b3a3e20be1d0c220d3295b86cd74897a50c2d49c Mon Sep 17 00:00:00 2001 From: Cornelia Michlits <cornelia.michlits@tuwien.ac.at> Date: Sat, 26 Nov 2022 17:00:08 +0100 Subject: [PATCH] add rule-filter flasgger --- fda-units-service/app.py | 62 +++++++++++++++++++-------- fda-units-service/us-yml/ontology.yml | 2 +- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/fda-units-service/app.py b/fda-units-service/app.py index 06460a4ff2..6b2bc3e968 100644 --- a/fda-units-service/app.py +++ b/fda-units-service/app.py @@ -14,6 +14,8 @@ from werkzeug.utils import secure_filename from pathlib import Path from onto_feat import search_ontologies, setup_ontology_dir, list_ontologies, ontology_exists, get_ontology, allowed_file +logging.basicConfig(level=logging.DEBUG) + from logging.config import dictConfig dictConfig({ @@ -32,34 +34,56 @@ dictConfig({ } }) -logging.basicConfig(level=logging.DEBUG) - app = Flask(__name__) -app.config["SWAGGER"] = {"title": "FDA-Units-Service", "uiversion": 3} +app.config["SWAGGER"] = {"openapi": "3.0.1", "title": "Swagger UI", "uiversion": 3} swagger_config = { "headers": [], "specs": [ { - "title": "units", "endpoint": "api-units", - "route": "/api-units.json" - } + "route": "/api-units.json", + "rule_filter": lambda rule: rule.endpoint.startswith('units'), + "model_filter": lambda tag: True, # all in + }, + { + "endpoint": "api-ontologies", + "route": "/api-ontologies.json", + "rule_filter": lambda rule: rule.endpoint.startswith('ontologies'), + "model_filter": lambda tag: True, # all in + }, ], "static_url_path": "/flasgger_static", "swagger_ui": True, "specs_route": "/swagger-ui/", } -template = dict( - swaggerUiPrefix=LazyString(lambda: request.environ.get("HTTP_X_SCRIPT_NAME", "")) -) +template = { + "openapi": "3.0.0", + "info": { + "title": "Database Repository Unit / Ontology Service API", + "description": "Service for assigning concepts to database tables and columns.", + "version": "1.1.0-alpha", + "contact": { + "name": "Prof. Andreas Rauber", + "email": "andreas.rauber@tuwien.ac.at" + }, + "license": { + "name": "Apache 2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0" + } + }, + "servers": [{ + "url": "http://localhost:5010", + "description": "Generated server url" + }] +} app.json_encoder = LazyJSONEncoder swagger = Swagger(app, config=swagger_config, template=template) -@app.route('/api/units/suggest', methods=["POST"], endpoint='suggest') +@app.route('/api/units/suggest', methods=["POST"], endpoint='units_suggest') @swag_from('suggest.yml') def suggest(): logging.debug('endpoint suggest unit, body=%s', request) @@ -76,7 +100,7 @@ def suggest(): return jsonify(res), 500 -@app.route('/api/units/validate/<unit>', methods=["GET"], endpoint='validate') +@app.route('/api/units/validate/<unit>', methods=["GET"], endpoint='units_validate') @swag_from('validate.yml') def validate(unit): logging.debug('endpoint validate unit, unit=%s, body=%s', unit, request) @@ -90,7 +114,7 @@ def validate(unit): return jsonify(res), 500 -@app.route('/api/units/uri/<uname>', methods=["GET"], endpoint='uri') +@app.route('/api/units/uri/<uname>', methods=["GET"], endpoint='units_uri') @swag_from('geturi.yml') def get_uri(uname): logging.debug('endpoint get uri, uname=%s, body=%s', uname, request) @@ -104,7 +128,7 @@ def get_uri(uname): return jsonify(res), 500 -@app.route('/api/units/saveconcept', methods=["POST"], endpoint='saveconcept') +@app.route('/api/units/saveconcept', methods=["POST"], endpoint='units_saveconcept') @swag_from('saveconcept.yml') def save_concept(): logging.debug('endpoint save concept, body=%s', request) @@ -122,7 +146,7 @@ def save_concept(): return jsonify(res), 500 -@app.route('/api/units/savecolumnsconcept', methods=["POST"], endpoint='savecolumnsconcept') +@app.route('/api/units/savecolumnsconcept', methods=["POST"], endpoint='units_savecolumnsconcept') @swag_from('savecolumnsconcept.yml') def save_column_concept(): logging.debug('endpoint save column concept, body=%s', request) @@ -141,7 +165,7 @@ def save_column_concept(): res = {"success": False, "message": str(e)} return jsonify(res), 500 -@app.route('/api/ontologies/getconcept/<cname>', methods=["GET"], endpoint='get_concept') +@app.route('/api/ontologies/getconcept/<cname>', methods=["GET"], endpoint='ontologies_get_concept') @swag_from('getconcept.yml') def get_concept(cname): logging.debug('endpoint get concept, cname=%s, body=%s', cname, request) @@ -156,7 +180,7 @@ def get_concept(cname): ONTOLOGIES_DIRECTORY = 'ontologies' -@app.route('/api/ontology', methods=["POST"], endpoint='upload_onto') +@app.route('/api/ontologies/upload', methods=["POST"], endpoint='ontologies_upload_onto') @swag_from('ontologies.yml') def post_ontologies(): if 'file' not in request.files: @@ -173,13 +197,13 @@ def post_ontologies(): logging.debug('created ontology: %s', filename) return "created", 201 -@app.route('/api/ontologies', methods=["GET"], endpoint='get_ontos') +@app.route('/api/ontologies/listontologies', methods=["GET"], endpoint='ontologies_get_ontos') @swag_from('ontology.yml') def get_ontologies(): print(list_ontologies()) return jsonify(list_ontologies()) -@app.route('/api/ontologies/<o_name>', methods=["GET"], endpoint='get_onto') +@app.route('/api/ontologies/<o_name>', methods=["GET"], endpoint='ontologies_get_onto') @swag_from('ontologybyname.yml') def get_ontologies(o_name): ontology = get_ontology(o_name) @@ -187,7 +211,7 @@ def get_ontologies(o_name): return "ontology does not exist", 404 return ontology -rest_server_port = int(os.getenv("PORT_APP")) +rest_server_port = 5010 eureka_client.init(eureka_server=os.getenv('EUREKA_SERVER', 'http://localhost:9090/eureka/'), app_name=os.getenv('HOSTNAME', 'fda-units-service'), instance_ip=os.getenv('HOSTNAME', 'fda-units-service'), diff --git a/fda-units-service/us-yml/ontology.yml b/fda-units-service/us-yml/ontology.yml index 2ea5c02e4c..2898fd014f 100644 --- a/fda-units-service/us-yml/ontology.yml +++ b/fda-units-service/us-yml/ontology.yml @@ -1,4 +1,4 @@ -summary: "Get ontology" +summary: "List ontologies" description: "This is a simple API for listing all ontologies (.nt, .ttl files) used in DB-Repo." consumes: - "application/json" -- GitLab