diff --git a/Dockerfile b/Dockerfile index e332aac..6d8bc68 100644 --- a/Dockerfile +++ b/Dockerfile @@ -38,6 +38,6 @@ WORKDIR /app COPY ./requirements.txt . RUN pip install -r requirements.txt -COPY app.py gunicorn.conf.py ./ +COPY app.py gunicorn_conf.py ./ -ENTRYPOINT ["gunicorn", "--conf", "gunicorn.conf.py", "--bind", "0.0.0.0:80", "app:app"] +ENTRYPOINT ["gunicorn", "--conf", "gunicorn_conf.py", "--bind", "0.0.0.0:80", "app:app"] diff --git a/app.py b/app.py index 79c4aa6..197f3fa 100644 --- a/app.py +++ b/app.py @@ -1,12 +1,56 @@ -from flask import Flask +from flask import Flask, request, flash, Response +from werkzeug.utils import secure_filename +import logging +from os import path, remove +import tempfile +import subprocess as sp app = Flask(__name__) -@app.route('/', methods=["GET"]) -def hello_world(): # put application's code here - return 'Hello World!' +def get_format(req, fallback=("application/json", "json")): + accept = req.headers.get("accept").lower() + if accept == "application/json": + return accept, "json" + elif accept == "application/xml": + return accept, "xml" + elif accept == "text/plain": + return accept, "txt" + else: + return fallback +@app.route('/analyze', methods=["POST"]) +def analyze(): + if "file" not in request.files or len(request.files["file"].filename) == 0: + flash("No file.") + return + + # save file to tmp folder + file = request.files["file"] + file_path = path.join(tempfile.gettempdir(), secure_filename(file.filename)) + app.logger.debug(f"saving file as {file_path}") + file.save(file_path) + + + + mime, response_format = get_format(request) + cmd = ["java", "-jar", "/pdfact.jar", file_path, "--format", response_format] + app.logger.debug(f"running {' '.join(cmd)}") + + try: + result = sp.check_output(cmd) + return Response(result, mimetype=mime) + except sp.CalledProcessError: + return "Something went wrong", 500 + finally: + remove(file_path) + if __name__ == '__main__': - app.run(host="0.0.0.0", port=5000) + app.run() +else: + # use gunicorns loglevel + gunicorn_logger = logging.getLogger("gunicorn.error") + app.logger.handlers = gunicorn_logger.handlers + app.logger.setLevel(gunicorn_logger.level) + app.logger.warn(gunicorn_logger.level) diff --git a/gunicorn.conf.py b/gunicorn_conf.py similarity index 100% rename from gunicorn.conf.py rename to gunicorn_conf.py