Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Independent wkhtmltopdf #494

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions 11.0.Dockerfile
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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 && 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 \
&& 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 \
Expand Down
5 changes: 3 additions & 2 deletions 12.0.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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=.* \
Expand Down Expand Up @@ -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 && 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 \
&& 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 \
Expand Down
9 changes: 6 additions & 3 deletions 13.0.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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=.* \
Expand Down Expand Up @@ -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 && 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 \
&& wkhtmltopdf --version) \
&& apt-get install -yqq --no-install-recommends \
./wkhtmltox.deb \
chromium \
ffmpeg \
fonts-liberation2 \
Expand Down
6 changes: 4 additions & 2 deletions 14.0.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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=.* \
Expand Down Expand Up @@ -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 && 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) \
&& apt-get install -yqq --no-install-recommends \
./wkhtmltox.deb \
chromium \
ffmpeg \
fonts-liberation2 \
Expand Down
6 changes: 4 additions & 2 deletions 15.0.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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=.* \
Expand Down Expand Up @@ -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 && 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) \
&& apt-get install -yqq --no-install-recommends \
./wkhtmltox.deb \
chromium \
ffmpeg \
fonts-liberation2 \
Expand Down
98 changes: 98 additions & 0 deletions bin/kwkhtmltopdf
Original file line number Diff line number Diff line change
@@ -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)