From 4cd1b6e57c4ef836af7a12213c6f73982a44a5c0 Mon Sep 17 00:00:00 2001 From: Cornelia Michlits <cornelia.michlits@tuwien.ac.at> Date: Sun, 5 Dec 2021 15:21:49 +0100 Subject: [PATCH] #104 ontology add validation to app.py --- docker-compose.yml | 1 + fda-units-service/Dockerfile | 3 ++- fda-units-service/app.py | 32 +++++++++++++++++++++++---- fda-units-service/requirements.txt | 1 - fda-units-service/us-yml/suggest.yml | 25 +++++++++++++++++++++ fda-units-service/us-yml/validate.yml | 22 ++++++++++++++++++ fda-units-service/validate.py | 4 ++-- 7 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 fda-units-service/us-yml/suggest.yml create mode 100644 fda-units-service/us-yml/validate.yml diff --git a/docker-compose.yml b/docker-compose.yml index 316db35a75..4c2e887ab4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -265,6 +265,7 @@ services: - "5010:5010" volumes: - /tmp:/tmp + - /var/run/docker.sock:/var/run/docker.sock depends_on: fda-discovery-service: condition: service_healthy diff --git a/fda-units-service/Dockerfile b/fda-units-service/Dockerfile index 708c3d9f2c..40e95a160b 100644 --- a/fda-units-service/Dockerfile +++ b/fda-units-service/Dockerfile @@ -12,7 +12,8 @@ COPY requirements.txt requirements.txt RUN pip install -r requirements.txt > /dev/null -COPY ./us-yml ./ +COPY ./us-yml/*.yml ./ +COPY ./onto/*.ttl ./onto/ COPY ./*.py ./ COPY ./service_ready ./ diff --git a/fda-units-service/app.py b/fda-units-service/app.py index 542a3a1e1c..9d8a8684b9 100644 --- a/fda-units-service/app.py +++ b/fda-units-service/app.py @@ -6,6 +6,8 @@ import json from flasgger import Swagger from flasgger.utils import swag_from from flasgger import LazyString, LazyJSONEncoder +from list import list_units, get_uri +from validate import validator app = Flask(__name__) app.config["SWAGGER"] = {"title": "FDA-Units-Service", "uiversion": 3} @@ -31,10 +33,32 @@ template = dict( app.json_encoder = LazyJSONEncoder swagger = Swagger(app, config=swagger_config, template=template) -@app.route('/api/units/suggest', methods=["POST"], endpoint='units_suggest') -#@swag_from('/as-yml/suggest.yml') +@app.route('/units/suggest', methods=["POST"], endpoint='suggest') +@swag_from('suggest.yml') def suggest(): - return 200 + input_json = request.get_json() + try: + unit = str(input_json['ustring']) + offset = int(input_json['offset']) + res = list_units(unit,offset) + return jsonify(res),200 + except Exception as e: + print(e) + #str(print_exc()) + res = {"success": False, "message": "Unknown error"+str(e)+unit} + return jsonify(res) + +@app.route('/units/validate', methods=["POST"], endpoint='validate') +@swag_from('validate.yml') +def suggest(): + input_json = request.get_json() + try: + unit = str(input_json['ustring']) + res = validator(unit) + except Exception as e: + print(e) + res = {"success": False, "message": "Unknown error"+str(e)+unit} + return jsonify(res) rest_server_port = 5010 eureka_client.init(eureka_server=os.getenv('EUREKA_SERVER', 'http://localhost:9090/eureka/'), @@ -45,4 +69,4 @@ eureka_client.init(eureka_server=os.getenv('EUREKA_SERVER', 'http://localhost:90 if __name__ == '__main__': http_server = WSGIServer(('', 5010), app) - http_server.serve_forever() + http_server.serve_forever() \ No newline at end of file diff --git a/fda-units-service/requirements.txt b/fda-units-service/requirements.txt index d17d81d597..ae9776238a 100644 --- a/fda-units-service/requirements.txt +++ b/fda-units-service/requirements.txt @@ -2,6 +2,5 @@ flask==1.1.2 flasgger==0.9.5 py-eureka-client==0.9.1 docker==5.0.0 -sqlalchemy==1.4.15 gevent==21.8.0 rdflib==6.0.1 diff --git a/fda-units-service/us-yml/suggest.yml b/fda-units-service/us-yml/suggest.yml new file mode 100644 index 0000000000..b47a657ae9 --- /dev/null +++ b/fda-units-service/us-yml/suggest.yml @@ -0,0 +1,25 @@ +summary: "Autosuggest units" +description: "This is a simple API which returns a list of suggested units." +consumes: +- "application/json" +produces: +- "application/json" +parameters: +- in: "body" + name: "body" + description: "to-do description" + required: true + schema: + type: "object" + properties: + ustring: + type: "string" + example : "met" + offset: + type: "integer" + example: 0 +responses: + 200: + description: "OK" + 405: + description: "Invalid input" \ No newline at end of file diff --git a/fda-units-service/us-yml/validate.yml b/fda-units-service/us-yml/validate.yml new file mode 100644 index 0000000000..bd92c5cb29 --- /dev/null +++ b/fda-units-service/us-yml/validate.yml @@ -0,0 +1,22 @@ +summary: "Validate units" +description: "This is a simple API for validating units." +consumes: +- "application/json" +produces: +- "application/json" +parameters: +- in: "body" + name: "body" + description: "to-do description" + required: true + schema: + type: "object" + properties: + ustring: + type: "string" + example : "metre" +responses: + 200: + description: "OK" + 405: + description: "Invalid input" \ No newline at end of file diff --git a/fda-units-service/validate.py b/fda-units-service/validate.py index e74641dc08..6c57624703 100644 --- a/fda-units-service/validate.py +++ b/fda-units-service/validate.py @@ -17,6 +17,6 @@ def validator(value): tmp = str(om)+value t_uri = rdflib.term.URIRef(tmp) if next(g.triples((t_uri,None,om.Unit)), _exhausted) is _exhausted and next(g.triples((t_uri,None,om.PrefixedUnit)),_exhausted) is _exhausted and next(g.triples((t_uri,None,om.UnitDivision)),_exhausted) is _exhausted: - return 'invalid' + return {"valid": False} else: - return 'valid' \ No newline at end of file + return {"valid": True} \ No newline at end of file -- GitLab