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 zcmeHJdpMN&9)Cwf2vJhR^yU`F%$RYT$+(Twgqn;(QHFUjE;E`LV{(ZoYSn36+6qOa zi|VA#ZYWV>IBc8BZirr|k7bUM6QsN>*Jv zu2P}BfW`i|AlD-__EN1+kMg#-M~`=Q)tm(hO$Ae?8rP?%ad|<$?~0$+f7gL2PonV{ zk0Xz5aWW@XjM;jY7cDmE66BY4Z2CqcdX2Zw$hih(yA@|I#L@fG3pCn%Z(Nvgy_d-< z|2-U>Af3@3jvUYYoUl3M?T~Bamrzu&w)8{jWBSdJ;J4-eYdGOyx6)5_k1q3;CEYGI z$Zfh4zqpQNz9hCyS9RicjFO8yXQiO1p#1MMFYa)B-?}eg(dC2z^|Nq^-2U|QE*<;x zltm%X=yMu{(y23VwX{?h`@m|??lI8;e6Es~xoEQ5e}VCphTcvzWD8e(%wPqn$@sQI zOF(r~m90;q?$9ISWoVS!>xC-vMih&{<$(IOhK#$;fvzIQlrjG?zYmHjx^Z7=teo`j z?YnUOZ0bZq!5a3$UU`RC_ZTUADXz@ysTc&mY%&m7lf40w{VgJ z&CQLs_2p1$ac%#z(DbL_S<(ampFZavho48}GP+4p=*PC(Ul;rfEPRn9NjzD6@VyMg3+Iv%Myn2ZjnAxt8CIvnZ+ePIg(@&{BU)96v?5ze6<%gt2=YWIQ<6=p^@)3 zLgYwpn)v_O;D^Z6P6s7ng;dAX@B>6lP8IS6|Az8`zsu`{|vf@tUif z-EFk5=A;j1{q_6OT^&W)T`C_&YsSp}c4$!=xjt#IK=YMNBcns9-nr5;|8T2U{YaAG z@TmtiOrqhb=SmXp!Gs278@(S4vJ%Db&UF$*$#**+HkpWBJ*i-Y-*)qo&lb6U|75-7 z*OY3ePQ~9JPUY8&xJuI!&HANk{(+iB{a!y0>$e@=x;?gL)%=CmiMrW!hfE(GaEq`? zd|5?g8Vw5U{iZ2KE9xHMcw+LiH5Z=&Ho;0S7ASgroEQ?EAJ16JEbTLysv<~m16BE* zoAz#iHk@W#5YtS3t!qB*5qot4s?=)B zPwyaQJX_?jnp*Nu!#`(odSCKr&)DvTdT+JgzF6zxG zl`U+P{ypwDpLatOZ^k!&_r$%Zcqo5BuU$7zAYt!W-&U92Q#ed>rUe<_UORtxTfm*u z48yic@J(WMmhn1;kurDew;S}_U$3uJ+|#{I5t|@tf8o$&6&-Bv>Qdg?D0WG$%MMzZ zd3hkJZTzTz>ccyOw>PFR%K|-@pt=r!XpXe=!)Q#+?=3Je>+j!E<8lAzDf26?ACpIJ zdNi8s>}sTYKN#;+zzK|cj;G_*z0PVU@~U{j#t%2Ev6O(+fGwVs;3((G(&a;+OjY)m zX_#KESn-kCYBtGm^)Z(|Co{LT{#1_^_(-K%NZ)Gk+YO}%pkU4vd_&3UY6SpLK+OZ@ z!Tbz(X~Q(4gRJE!CFy<$ruF4?9!#6dbr2hClmeg*?}hNf!?X^(pNAJKQx>ZRrjbiU z`ZItj#PgSZ9o3tL#$&8;7(5=2!{bQS@Sljr;Yb8L$(8`?qKaqoLHzi8(*UX(0601e zV;P}Q5FZ@^g|paX@a4@q5Y1weK|fn>oOdh*ieRlz;6n6-jlQ7?QK3X8=Q5z$Y>o!RN=4u-N$ccuYJ2!{LTwt%*b;7Kg{;@m8>g6>m42&k$O%d8-f? zG9T^`FO@c9!8ohCX^F{MI=~j3=aFXIwWNM z4|PQH8+EuBzoz~l&V`KF8D%6ADFA-UaiZgpT*;uVojn?h#^a=+rDAFfBOLOA*x~#L zGH6G%|1XIji-`zqabKBi;<6yPCo+%LGY0Bb0`on*&omXm`c7MUwdNk=+czRdcITSw{0Nxz9M)A|Za za4;DU#wZMV?5~)YXMv#W54>ch{(%7y*K