From 19a054a78b94c955b35f55e66e8591e80fec3f15 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Mon, 10 Dec 2018 20:03:52 -0800 Subject: [PATCH 1/3] Add webapp stuff --- .docker/webapp.dockerfile | 19 +++++++++++ .docker/webapp.py | 69 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 .docker/webapp.dockerfile create mode 100644 .docker/webapp.py diff --git a/.docker/webapp.dockerfile b/.docker/webapp.dockerfile new file mode 100644 index 00000000..5d725185 --- /dev/null +++ b/.docker/webapp.dockerfile @@ -0,0 +1,19 @@ +# OCRmyPDF polyglot +# +FROM jbarlow83/ocrmypdf:latest + +USER root + +# Update system and install our dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + python3-flask + +RUN apt-get autoremove -y && apt-get clean -y + +EXPOSE 5000 + +COPY .docker/webapp.py /application + +USER docker + +ENTRYPOINT ["python3", "/application/webapp.py"] diff --git a/.docker/webapp.py b/.docker/webapp.py new file mode 100644 index 00000000..897f8dcf --- /dev/null +++ b/.docker/webapp.py @@ -0,0 +1,69 @@ +from flask import Flask, Response, flash, request, redirect, url_for, abort, send_from_directory +from subprocess import run, PIPE +from tempfile import TemporaryDirectory +from werkzeug.utils import secure_filename +import os +import shlex + +app = Flask(__name__) +app.secret_key = "secret" + +uploaddir = TemporaryDirectory(prefix="ocrmypdf-upload") +downloaddir = TemporaryDirectory(prefix="ocrmypdf-download") + +app.config["UPLOAD_FOLDER"] = uploaddir +ALLOWED_EXTENSIONS = set(["pdf"]) + + +def allowed_file(filename): + return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS + + +def do_ocrmypdf(file): + filename = secure_filename(file.filename) + up_file = os.path.join(uploaddir.name, filename) + file.save(up_file) + down_file = os.path.join(downloaddir.name, filename) + + cmd_args = [arg for arg in shlex.split(request.form["params"])] + if "--sidecar" in cmd_args: + return Response("--sidecar not supported", 501, mimetype='text/plain') + + ocrmypdf_args = ["ocrmypdf", *cmd_args, up_file, down_file] + proc = run(ocrmypdf_args, stdout=PIPE, stderr=PIPE, encoding="utf-8") + if proc.returncode != 0: + stderr = proc.stderr + return Response(stderr, 400, mimetype='text/plain') + + return send_from_directory(downloaddir.name, filename) + + +@app.route("/", methods=["GET", "POST"]) +def upload_file(): + if request.method == "POST": + if "file" not in request.files: + return Response("No file in POST", 400, mimetype='text/plain') + file = request.files["file"] + if file.filename == "": + return Response("Empty filename", 400, mimetype='text/plain') + if not allowed_file(file.filename): + return Response("Invalid filename", 400, mimetype='text/plain') + if file and allowed_file(file.filename): + return do_ocrmypdf(file) + return Response("Some other problem", 400, mimetype='text/plain') + + return """ + + OCRmyPDF webapp +

Upload a PDF (debug UI)

+
+ + + + + +
+ """ + +if __name__ == "__main__": + app.run(host='0.0.0.0') From 065db414c0ca1d37ad5b89b0d32191aed71857a0 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Wed, 12 Dec 2018 21:24:04 -0800 Subject: [PATCH 2/3] webapp docker: Build from polyglot --- .docker/webapp.dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.docker/webapp.dockerfile b/.docker/webapp.dockerfile index 5d725185..bccad509 100644 --- a/.docker/webapp.dockerfile +++ b/.docker/webapp.dockerfile @@ -1,6 +1,6 @@ # OCRmyPDF polyglot # -FROM jbarlow83/ocrmypdf:latest +FROM jbarlow83/ocrmypdf-polyglot:latest USER root From 2a04b2d82bce08fa886f4b8e9c419042db87e9e0 Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Wed, 12 Dec 2018 21:29:05 -0800 Subject: [PATCH 3/3] Rename webapp to webservice --- .docker/{webapp.dockerfile => webservice.dockerfile} | 6 +++--- .docker/{webapp.py => webservice.py} | 0 2 files changed, 3 insertions(+), 3 deletions(-) rename .docker/{webapp.dockerfile => webservice.dockerfile} (69%) rename .docker/{webapp.py => webservice.py} (100%) diff --git a/.docker/webapp.dockerfile b/.docker/webservice.dockerfile similarity index 69% rename from .docker/webapp.dockerfile rename to .docker/webservice.dockerfile index bccad509..385637d4 100644 --- a/.docker/webapp.dockerfile +++ b/.docker/webservice.dockerfile @@ -1,4 +1,4 @@ -# OCRmyPDF polyglot +# OCRmyPDF webservice # FROM jbarlow83/ocrmypdf-polyglot:latest @@ -12,8 +12,8 @@ RUN apt-get autoremove -y && apt-get clean -y EXPOSE 5000 -COPY .docker/webapp.py /application +COPY .docker/webservice.py /application USER docker -ENTRYPOINT ["python3", "/application/webapp.py"] +ENTRYPOINT ["python3", "/application/webservice.py"] diff --git a/.docker/webapp.py b/.docker/webservice.py similarity index 100% rename from .docker/webapp.py rename to .docker/webservice.py