From 1a87c730bc9190ab83ea298f3fde984e2f468eaa Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Mon, 11 Sep 2023 20:07:06 -0700 Subject: [PATCH] Logs the errors during thumbnail generation, updates default to be WebP --- src/documents/parsers.py | 15 +++++++++------ src/documents/resources/document.png | Bin 10885 -> 0 bytes src/documents/resources/document.webp | Bin 0 -> 4870 bytes src/documents/tests/test_file_handling.py | 6 +++--- 4 files changed, 12 insertions(+), 9 deletions(-) delete mode 100644 src/documents/resources/document.png create mode 100644 src/documents/resources/document.webp diff --git a/src/documents/parsers.py b/src/documents/parsers.py index 2e6b17cb5..dc67af1a2 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -166,11 +166,11 @@ def run_convert( raise ParseError(f"Convert failed at {args}") -def get_default_thumbnail() -> str: +def get_default_thumbnail() -> Path: """ Returns the path to a generic thumbnail """ - return os.path.join(os.path.dirname(__file__), "resources", "document.png") + return (Path(__file__).parent / "resources" / "document.webp").resolve() def make_thumbnail_from_pdf_gs_fallback(in_path, temp_dir, logging_group=None) -> str: @@ -183,12 +183,13 @@ def make_thumbnail_from_pdf_gs_fallback(in_path, temp_dir, logging_group=None) - "to ghostscript. Check your /etc/ImageMagick-x/policy.xml!", extra={"group": logging_group}, ) + # Ghostscript doesn't handle WebP outputs gs_out_path = os.path.join(temp_dir, "gs_out.png") cmd = [settings.GS_BINARY, "-q", "-sDEVICE=pngalpha", "-o", gs_out_path, in_path] try: if not subprocess.Popen(cmd).wait() == 0: raise ParseError(f"Thumbnail (gs) failed at {cmd}") - # then run convert on the output from gs + # then run convert on the output from gs to make WebP run_convert( density=300, scale="500x5000>", @@ -203,11 +204,12 @@ def make_thumbnail_from_pdf_gs_fallback(in_path, temp_dir, logging_group=None) - return out_path - except ParseError: + except ParseError as e: + logger.error(f"Unable to make thumbnail with Ghostscript: {e}") # The caller might expect a generated thumbnail that can be moved, # so we need to copy it before it gets moved. # https://github.com/paperless-ngx/paperless-ngx/issues/3631 - default_thumbnail_path = os.path.join(temp_dir, "document.png") + default_thumbnail_path = os.path.join(temp_dir, "document.webp") copy_file_with_basic_stats(get_default_thumbnail(), default_thumbnail_path) return default_thumbnail_path @@ -231,7 +233,8 @@ def make_thumbnail_from_pdf(in_path, temp_dir, logging_group=None) -> str: output_file=out_path, logging_group=logging_group, ) - except ParseError: + except ParseError as e: + logger.error(f"Unable to make thumbnail with convert: {e}") out_path = make_thumbnail_from_pdf_gs_fallback(in_path, temp_dir, logging_group) return out_path diff --git a/src/documents/resources/document.png b/src/documents/resources/document.png deleted file mode 100644 index 164afd14d0f56fdd27962ff5dafffd73d387ef65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10885 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 diff --git a/src/documents/resources/document.webp b/src/documents/resources/document.webp new file mode 100644 index 0000000000000000000000000000000000000000..700dd79e2aacb105a46aca60bc4c4dbab10eb670 GIT binary patch literal 4870 zcmWIYbaVSB#J~{l>J$(bU=hK^z`(%4z`*dCk)e@^AuPZ`VFw!ngFzm{Tt=-gj7>~- z6Fuhps4iKwNO{u?jtxSbnRyS(Cc7mUtl1ZIk3FjN=B@Y}dzL8~pP2ncjc?npUj|cR zLw+oHc6iHGy;U^<#fi7Fria>TSZ;W0>b+{dh|G<$Sxc|_ck$&|`v$#Qew5uzcG=3( z;784~`7Vd-TKUoOY>s;Z}IQsTfw_uC465M zVV$3zwzqlS?KhIX5Jz7*Bs2NM!E%xPnHr)6m&Ld~9>`^NfV!DAHam9K*7ntLHa{=5 zL<+90dcw18RZT$AyO^Qu8?XP{HS@ljI7lOl>-*%B6ptHVHz|??8QwLNd-oyue==4fLJg=Ns56d z>S)_(`xwUwHuY~K-iH5XsTV6nQla?C_x_`m+mf*U4IE!petgAO_&12U9C_dz4vYm)s0Zt+Q`Q#*Kj1_(|`DZ)Jt^|GfrBI!>NEc0d}MRL(hGf%u5_sfljs z`N#KKk9a+hsolpW>^K57}g#^=fhx&-9sblh3jg zuKBg)YZ)9h*Ns(SWC zWo_q;4;jyESx~%mmfyGg8DRHwL*B(z^C#Zm`2A+jTlIB4f=#xEYo5;L|7>zB@haa04-ZX$6?rn~ykkLA~mC)A$4e({9rAxCddr48ZH8jJpGO%A`7`MzY& zV*Z9N<>y~ElpLN=#QN(9|6y_Nh#3C)kA42Ul)l^>7G1DMnT>awrP##%J!&^QoHBH) z-|w(Yk$+ld9{$T&UUvUYgW^NB&#hNKXD~@%eaFe-_V?q9vK1fNTvHZ5QvI^S_=v%i z9kZ_cH+rRdEzF##J+WcKk*A9u9lE*uQ?p?5C#L{uxii}Y#Fe$1lGNIz1vUj;$!HXg z+`+wX)xtQdw&#Ktnx2a;@0rwfhiTZ5y@ZWQtN z&v)QCS-<^U9;5WxqOSjysUN?62;B0(W&VN}vz|y?5i2b_l2_+(d4Kc0IWGh317cMU zxUyAVjy$+9QSS0~rEk?cyH(toUM+RepXMdu^3`KIOWkdE7X7LTSKe9N(9KCOcXU{F z>DVEMhW!&`72DT7$-ewyYDB}ugHI3m)u$|t@fKyg(fj*kmRYzS-xs#~vt`sDKMvjF zcK**7jrERyYhUelJEj_c<5;log%8)649ev1&1g2_@mVHRUA&_>LFHl~cP1-CLu9D8 zb3(TLr^Qk){;6@aF6C3(xIy->=Oy(|iH<=UkcW=fq`KK0|P^5JH)O%Q1@^!fS?Qm1K30u?e6ItpkSnD zXrO0gWMp7uU}b1vWoW5jU|?lzWMyj1z{tS30O1~xQ4ziY44&K!3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbW>1sj#ZZEyztR zNmQuF&B-gas<2f`Ovz75waP2D0txFYDS(xfWZNo5_y#CA=NF|anCO}48R)uJWR@8z z*>Ne@6s4qD1-ZCEjVMYRtPXT0RVp4u-iLH_nmx6)<)bNtbG=%AS#d=`J z>Lusr>VstT4fPE4k(H-bWa3Z`lEF}3ky`+FI*Q>Hi3JG7Ae*crgHnt0b4o#OwN)}T zGgr`8FfssJ4VL!IO-xVqNzF?y$*@&2vouGO3C~OcNthZSY4I=0OwB7vgqUcE&=7&& zCWLHgUS^4{k}+5($a_}K`8oMT!3BxQskTZG11oY1telHd6HD@oLh|!-Y?Y7`99Sbr zg>QaJW?H37Vo9p45-1hw8XD*tT86+