From c4dfe263dabf8424b7daf0d880aad40a40f8ecad Mon Sep 17 00:00:00 2001 From: Juan Ramon Date: Fri, 8 Apr 2022 09:24:29 +0200 Subject: [PATCH 1/3] add wkhtmltopdf bin --- bin/wkhtmltopdf | 98 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100755 bin/wkhtmltopdf diff --git a/bin/wkhtmltopdf b/bin/wkhtmltopdf new file mode 100755 index 00000000..5b60f973 --- /dev/null +++ b/bin/wkhtmltopdf @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# Copyright (c) 2019 ACSONE SA/NV +# Distributed under the MIT License (http://opensource.org/licenses/MIT) + +from __future__ import print_function + +import os +import sys + +import requests + +CHUNK_SIZE = 2 ** 16 + + +class Error(Exception): + pass + + +class UsageError(Error): + pass + + +class ServerError(Error): + pass + + +def wkhtmltopdf(args): + url = os.getenv("KWKHTMLTOPDF_SERVER_URL") + + if url == "": + raise UsageError("KWKHTMLTOPDF_SERVER_URL not set") + elif url == "MOCK": + print("wkhtmltopdf 0.12.5 (mock)") + return + + parts = [] + + def add_option(option): + # TODO option encoding? + parts.append(("option", (None, option))) + + def add_file(filename): + with open(filename, "rb") as f: + parts.append(("file", (filename, f.read()))) + + if "-" in args: + raise UsageError("stdin/stdout input is not implemented") + + output = "-" + if len(args) >= 2 and not args[-1].startswith("-") and not args[-2].startswith("-"): + output = args[-1] + args = args[:-1] + + for arg in args: + if arg.startswith("-"): + add_option(arg) + elif arg.startswith("http://") or arg.startswith("https://"): + add_option(arg) + elif arg.startswith("file://"): + add_file(arg[7:]) + elif os.path.isfile(arg): + # TODO better way to detect args that are actually options + # TODO in case an option has the same name as an existing file + # TODO only way I see so far is enumerating them in a static + # TODO datastructure (that can be initialized with a quick parse + # TODO of wkhtmltopdf --extended-help) + add_file(arg) + else: + add_option(arg) + + if not parts: + add_option("-h") + + try: + r = requests.post(url, files=parts) + r.raise_for_status() + + if output == "-": + if sys.version_info[0] < 3: + out = sys.stdout + else: + out = sys.stdout.buffer + else: + out = open(output, "wb") + for chunk in r.iter_content(chunk_size=CHUNK_SIZE): + out.write(chunk) + except requests.exceptions.ChunkedEncodingError: + # TODO look if client and server could use trailer headers + # TODO to report errors + raise ServerError("kwkhtmltopdf server error, consult server log") + + +if __name__ == "__main__": + try: + wkhtmltopdf(sys.argv[1:]) + except Error as e: + print(e, file=sys.stderr) + sys.exit(-1) From 7010668de43c8c4c87d6d08cc3ad04a3f114d49c Mon Sep 17 00:00:00 2001 From: Juan Ramon Date: Fri, 8 Apr 2022 09:52:39 +0200 Subject: [PATCH 2/3] made wkhtml optional on build --- 11.0.Dockerfile | 6 +++--- 12.0.Dockerfile | 5 +++-- 13.0.Dockerfile | 9 ++++++--- 14.0.Dockerfile | 6 ++++-- 15.0.Dockerfile | 6 ++++-- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/11.0.Dockerfile b/11.0.Dockerfile index 6bdf1edd..13b67dea 100644 --- a/11.0.Dockerfile +++ b/11.0.Dockerfile @@ -1,7 +1,7 @@ FROM python:3.5-stretch AS base EXPOSE 8069 8072 - +ARG WKHTMLTOPDF_SKIP=0 ARG GEOIP_UPDATER_VERSION=4.1.5 ARG MQT=https://github.com/OCA/maintainer-quality-tools.git ARG WKHTMLTOPDF_VERSION=0.12.5 @@ -56,11 +56,11 @@ RUN apt-get -qq update \ && curl -sL https://deb.nodesource.com/setup_6.x | bash - \ && apt-get update \ && apt-get install -yqq --no-install-recommends nodejs \ - && curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.stretch_amd64.deb \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 || (curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.stretch_amd64.deb \ && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ && apt-get install -yqq --no-install-recommends ./wkhtmltox.deb \ && rm wkhtmltox.deb \ - && wkhtmltopdf --version \ + && wkhtmltopdf --version) \ && curl --silent -L --output geoipupdate_${GEOIP_UPDATER_VERSION}_linux_amd64.deb https://github.com/maxmind/geoipupdate/releases/download/v${GEOIP_UPDATER_VERSION}/geoipupdate_${GEOIP_UPDATER_VERSION}_linux_amd64.deb \ && dpkg -i geoipupdate_${GEOIP_UPDATER_VERSION}_linux_amd64.deb \ && rm geoipupdate_${GEOIP_UPDATER_VERSION}_linux_amd64.deb \ diff --git a/12.0.Dockerfile b/12.0.Dockerfile index 427f69bd..1a316be8 100644 --- a/12.0.Dockerfile +++ b/12.0.Dockerfile @@ -4,6 +4,7 @@ EXPOSE 8069 8072 ARG GEOIP_UPDATER_VERSION=4.1.5 ARG MQT=https://github.com/OCA/maintainer-quality-tools.git +ARG WKHTMLTOPDF_SKIP=0 ARG WKHTMLTOPDF_VERSION=0.12.5 ARG WKHTMLTOPDF_CHECKSUM='1140b0ab02aa6e17346af2f14ed0de807376de475ba90e1db3975f112fbd20bb' ENV DB_FILTER=.* \ @@ -56,11 +57,11 @@ RUN apt-get -qq update \ && curl -sL https://deb.nodesource.com/setup_8.x | bash - \ && apt-get update \ && apt-get install -yqq --no-install-recommends nodejs \ - && curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.stretch_amd64.deb \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 || ( curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.stretch_amd64.deb \ && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ && apt-get install -yqq --no-install-recommends ./wkhtmltox.deb \ && rm wkhtmltox.deb \ - && wkhtmltopdf --version \ + && wkhtmltopdf --version) \ && curl --silent -L --output geoipupdate_${GEOIP_UPDATER_VERSION}_linux_amd64.deb https://github.com/maxmind/geoipupdate/releases/download/v${GEOIP_UPDATER_VERSION}/geoipupdate_${GEOIP_UPDATER_VERSION}_linux_amd64.deb \ && dpkg -i geoipupdate_${GEOIP_UPDATER_VERSION}_linux_amd64.deb \ && rm geoipupdate_${GEOIP_UPDATER_VERSION}_linux_amd64.deb \ diff --git a/13.0.Dockerfile b/13.0.Dockerfile index a248d90c..9e43db95 100644 --- a/13.0.Dockerfile +++ b/13.0.Dockerfile @@ -4,6 +4,7 @@ EXPOSE 8069 8072 ARG GEOIP_UPDATER_VERSION=4.1.5 ARG MQT=https://github.com/OCA/maintainer-quality-tools.git +ARG WKHTMLTOPDF_SKIP=0 ARG WKHTMLTOPDF_VERSION=0.12.5 ARG WKHTMLTOPDF_CHECKSUM='dfab5506104447eef2530d1adb9840ee3a67f30caaad5e9bcb8743ef2f9421bd' ENV DB_FILTER=.* \ @@ -39,10 +40,12 @@ ENV DB_FILTER=.* \ RUN apt-get -qq update \ && apt-get install -yqq --no-install-recommends \ curl \ - && curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ - && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 || (curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ + && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ + && apt-get install -yqq --no-install-recommends ./wkhtmltox.deb \ + && rm wkhtmltox.deb \ + && wkhtmltopdf --version) \ && apt-get install -yqq --no-install-recommends \ - ./wkhtmltox.deb \ chromium \ ffmpeg \ fonts-liberation2 \ diff --git a/14.0.Dockerfile b/14.0.Dockerfile index 1c3fde3f..59e261a2 100644 --- a/14.0.Dockerfile +++ b/14.0.Dockerfile @@ -3,6 +3,7 @@ FROM python:3.8-slim-buster AS base EXPOSE 8069 8072 ARG GEOIP_UPDATER_VERSION=4.3.0 +ARG WKHTMLTOPDF_SKIP=0 ARG WKHTMLTOPDF_VERSION=0.12.5 ARG WKHTMLTOPDF_CHECKSUM='dfab5506104447eef2530d1adb9840ee3a67f30caaad5e9bcb8743ef2f9421bd' ENV DB_FILTER=.* \ @@ -36,10 +37,11 @@ ENV DB_FILTER=.* \ RUN apt-get -qq update \ && apt-get install -yqq --no-install-recommends \ curl \ - && curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 || (curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ + && rm wkhtmltox.deb \ + && wkhtmltopdf --version) \ && apt-get install -yqq --no-install-recommends \ - ./wkhtmltox.deb \ chromium \ ffmpeg \ fonts-liberation2 \ diff --git a/15.0.Dockerfile b/15.0.Dockerfile index 71c6aa76..f1a7de41 100644 --- a/15.0.Dockerfile +++ b/15.0.Dockerfile @@ -3,6 +3,7 @@ FROM python:3.8-slim-bullseye AS base EXPOSE 8069 8072 ARG GEOIP_UPDATER_VERSION=4.3.0 +ARG WKHTMLTOPDF_SKIP=0 ARG WKHTMLTOPDF_VERSION=0.12.5 ARG WKHTMLTOPDF_CHECKSUM='dfab5506104447eef2530d1adb9840ee3a67f30caaad5e9bcb8743ef2f9421bd' ENV DB_FILTER=.* \ @@ -36,10 +37,11 @@ ENV DB_FILTER=.* \ RUN apt-get -qq update \ && apt-get install -yqq --no-install-recommends \ curl \ - && curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 || ( curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ + && rm wkhtmltox.deb \ + && wkhtmltopdf --version) \ && apt-get install -yqq --no-install-recommends \ - ./wkhtmltox.deb \ chromium \ ffmpeg \ fonts-liberation2 \ From 9c42029acfd2be5d5a08fced894b2f7686330ab6 Mon Sep 17 00:00:00 2001 From: Juan Ramon Date: Fri, 8 Apr 2022 10:00:40 +0200 Subject: [PATCH 3/3] fix wkhtltopdf --- 11.0.Dockerfile | 2 +- 12.0.Dockerfile | 2 +- 13.0.Dockerfile | 2 +- 14.0.Dockerfile | 2 +- 15.0.Dockerfile | 2 +- bin/{wkhtmltopdf => kwkhtmltopdf} | 0 6 files changed, 5 insertions(+), 5 deletions(-) rename bin/{wkhtmltopdf => kwkhtmltopdf} (100%) diff --git a/11.0.Dockerfile b/11.0.Dockerfile index 13b67dea..f5ae698f 100644 --- a/11.0.Dockerfile +++ b/11.0.Dockerfile @@ -56,7 +56,7 @@ RUN apt-get -qq update \ && curl -sL https://deb.nodesource.com/setup_6.x | bash - \ && apt-get update \ && apt-get install -yqq --no-install-recommends nodejs \ - && test ${WKHTMLTOPDF_SKIP} -ne 0 || (curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.stretch_amd64.deb \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 && ln -s /usr/local/bin/wkhtmltopdf /usr/local/bin/kwkhtmltopdf || (curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.stretch_amd64.deb \ && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ && apt-get install -yqq --no-install-recommends ./wkhtmltox.deb \ && rm wkhtmltox.deb \ diff --git a/12.0.Dockerfile b/12.0.Dockerfile index 1a316be8..df5e62b3 100644 --- a/12.0.Dockerfile +++ b/12.0.Dockerfile @@ -57,7 +57,7 @@ RUN apt-get -qq update \ && curl -sL https://deb.nodesource.com/setup_8.x | bash - \ && apt-get update \ && apt-get install -yqq --no-install-recommends nodejs \ - && test ${WKHTMLTOPDF_SKIP} -ne 0 || ( curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.stretch_amd64.deb \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 && ln -s /usr/local/bin/wkhtmltopdf /usr/local/bin/kwkhtmltopdf || ( curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.stretch_amd64.deb \ && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ && apt-get install -yqq --no-install-recommends ./wkhtmltox.deb \ && rm wkhtmltox.deb \ diff --git a/13.0.Dockerfile b/13.0.Dockerfile index 9e43db95..2ebcf810 100644 --- a/13.0.Dockerfile +++ b/13.0.Dockerfile @@ -40,7 +40,7 @@ ENV DB_FILTER=.* \ RUN apt-get -qq update \ && apt-get install -yqq --no-install-recommends \ curl \ - && test ${WKHTMLTOPDF_SKIP} -ne 0 || (curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 && ln -s /usr/local/bin/wkhtmltopdf /usr/local/bin/kwkhtmltopdf || (curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ && apt-get install -yqq --no-install-recommends ./wkhtmltox.deb \ && rm wkhtmltox.deb \ diff --git a/14.0.Dockerfile b/14.0.Dockerfile index 59e261a2..f6b0f818 100644 --- a/14.0.Dockerfile +++ b/14.0.Dockerfile @@ -37,7 +37,7 @@ ENV DB_FILTER=.* \ RUN apt-get -qq update \ && apt-get install -yqq --no-install-recommends \ curl \ - && test ${WKHTMLTOPDF_SKIP} -ne 0 || (curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 && ln -s /usr/local/bin/wkhtmltopdf /usr/local/bin/kwkhtmltopdf || (curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ && rm wkhtmltox.deb \ && wkhtmltopdf --version) \ diff --git a/15.0.Dockerfile b/15.0.Dockerfile index f1a7de41..bb303826 100644 --- a/15.0.Dockerfile +++ b/15.0.Dockerfile @@ -37,7 +37,7 @@ ENV DB_FILTER=.* \ RUN apt-get -qq update \ && apt-get install -yqq --no-install-recommends \ curl \ - && test ${WKHTMLTOPDF_SKIP} -ne 0 || ( curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ + && test ${WKHTMLTOPDF_SKIP} -ne 0 && ln -s /usr/local/bin/wkhtmltopdf /usr/local/bin/kwkhtmltopdf || ( curl -SLo wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.buster_amd64.deb \ && echo "${WKHTMLTOPDF_CHECKSUM} wkhtmltox.deb" | sha256sum -c - \ && rm wkhtmltox.deb \ && wkhtmltopdf --version) \ diff --git a/bin/wkhtmltopdf b/bin/kwkhtmltopdf similarity index 100% rename from bin/wkhtmltopdf rename to bin/kwkhtmltopdf