From e87575240d318bff1c29548579d2caeb4443bb69 Mon Sep 17 00:00:00 2001 From: Jonas Winkler Date: Thu, 26 Nov 2020 00:08:23 +0100 Subject: [PATCH] more tests of the new parser --- src/paperless_tesseract/parsers.py | 4 +- .../tests/samples/multi-page-digital.pdf | Bin 0 -> 25743 bytes .../tests/samples/multi-page-images.pdf | Bin 0 -> 150479 bytes .../tests/samples/no-text-alpha.png | Bin 0 -> 32595 bytes .../tests/samples/simple-alpha.png | Bin 0 -> 8404 bytes .../{simple.pdf => simple-digital.pdf} | Bin .../tests/samples/simple-no-dpi.png | Bin 0 -> 6980 bytes .../tests/samples/simple.png | Bin 7913 -> 7380 bytes .../tests/samples/with-form.pdf | Bin 0 -> 12022 bytes src/paperless_tesseract/tests/test_parser.py | 152 ++++++++++++++++-- 10 files changed, 146 insertions(+), 10 deletions(-) create mode 100644 src/paperless_tesseract/tests/samples/multi-page-digital.pdf create mode 100644 src/paperless_tesseract/tests/samples/multi-page-images.pdf create mode 100644 src/paperless_tesseract/tests/samples/no-text-alpha.png create mode 100644 src/paperless_tesseract/tests/samples/simple-alpha.png rename src/paperless_tesseract/tests/samples/{simple.pdf => simple-digital.pdf} (100%) create mode 100644 src/paperless_tesseract/tests/samples/simple-no-dpi.png create mode 100644 src/paperless_tesseract/tests/samples/with-form.pdf diff --git a/src/paperless_tesseract/parsers.py b/src/paperless_tesseract/parsers.py index b181364aa..2289619f6 100644 --- a/src/paperless_tesseract/parsers.py +++ b/src/paperless_tesseract/parsers.py @@ -160,7 +160,9 @@ def strip_excess_whitespace(text): r"([\n\r]+)([^\S\n\r]+)", '\\1', collapsed_spaces) no_trailing_whitespace = re.sub( r"([^\S\n\r]+)$", '', no_leading_whitespace) - return no_trailing_whitespace + + # TODO: this needs a rework + return no_trailing_whitespace.strip() def get_text_from_pdf(pdf_file): diff --git a/src/paperless_tesseract/tests/samples/multi-page-digital.pdf b/src/paperless_tesseract/tests/samples/multi-page-digital.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5e75266ca7e534ae87533e612c662a32320eb0c6 GIT binary patch literal 25743 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 literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/samples/multi-page-images.pdf b/src/paperless_tesseract/tests/samples/multi-page-images.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ea08363bfe30f5728675913667557755113fe4f9 GIT binary patch literal 150479 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 L<;wMr8!-O@UHFXz literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/samples/no-text-alpha.png b/src/paperless_tesseract/tests/samples/no-text-alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..e78b22bfbe53be5a9046bbfb32fef7e98abb9be9 GIT binary patch literal 32595 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 LNkvXXu0mjfD4>h= literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/samples/simple-alpha.png b/src/paperless_tesseract/tests/samples/simple-alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..0a267db1fb09355eab80c029a379fabe0001bb3d GIT binary patch literal 8404 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 bb4dr&R!K$?H2wUy0+xb|>Z_6$1_A#AiZe=e literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/samples/simple.pdf b/src/paperless_tesseract/tests/samples/simple-digital.pdf similarity index 100% rename from src/paperless_tesseract/tests/samples/simple.pdf rename to src/paperless_tesseract/tests/samples/simple-digital.pdf diff --git a/src/paperless_tesseract/tests/samples/simple-no-dpi.png b/src/paperless_tesseract/tests/samples/simple-no-dpi.png new file mode 100644 index 0000000000000000000000000000000000000000..84b2dc29b0d0cbba67c01638e743a61819921f82 GIT binary patch literal 6980 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 literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/samples/simple.png b/src/paperless_tesseract/tests/samples/simple.png index a3a76840103812c371dd78f2e8bc704ea3eec1ba..6fa0490e4d484950430de0d7e0bcafb20ace7530 100644 GIT binary patch literal 7380 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 V^<+9n_HHMjQYD literal 7913 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 Ruvbl>s;I6|ENAlKe*j2SP+b53 diff --git a/src/paperless_tesseract/tests/samples/with-form.pdf b/src/paperless_tesseract/tests/samples/with-form.pdf new file mode 100644 index 0000000000000000000000000000000000000000..afbeef5c8fc783d55b40d5a642a6d523413472d5 GIT binary patch literal 12022 zcma)i1z40#*S~<&5+YsVilX#(krL7k0!qh%)KW`>s0dP`w3MVMiU=Yg(kUq*f^@f( zl!3zkUVOsmdEf8*{x{b!bI+VPbLO1ioHKjfM?gnWNem{A1_?CfHB~p2H)Vq0U?|wt z+7Tor1<}A0?1|UF2%tv~qU7LA#Ct%LoUMp>MZArxEnY?jGg1TB(6CO-tE(>XX8lPi96kOCT%uYM!^4>k<85w(<--$ z3>ruIjZaHSWw-N?xzVIA_l!7CF(* zLa);1g&R`bbSfsloBe}HOwuzCveIs83BnU>|JXUuA}I?*(h;cvN8m`KM}3(8&?NSM z(BvPQhJj%S6bk*jUg!M-0!;=|roOEYbS61V7uvI`8tJAdPbRUruV;jm@RaI&3wbJ*%@{X(c9rvEGyOHhUU3uQ&f=<{2##fS^b$P`-T;zcsJk5`8pWT3snL#bNjS5e+fuS=5?Ii5Z6X zjZm%P;5$o`dNhWaJ0|d;P4-SnP%4uboKHQ!ac+W3-Z53tU+QE;#i{iGhS9brK1JTC zOkW2kgK(Fy#CA5d%W~OQ^$iLKmKg+;;)ksT4(m*}D4G?o&OeJtYF_pnY~eeL-ol>-YJaU4R*bnxc)V(r^#J#JJh7bVlk%v=bu#aM5>FlrkOXM@NND_vJ&~9X0#f5tFwOy%RamtubAT-%uh=`M> z=~u7){_KltLsw?+)6q7nEsU)gS4X@rZA@_}XPvmm@u2UZmdp5v4#PdFg$wkEpHMX4 zImyqAWFzl*Ek9llxpVLWQl7@zU|pWTYI?Wh!%3I#bot&3{F0fhaqB4sq6E9yuFN4F zf5kzOG!YB2fS;qSI#Pl>N)GVt(H*hn;%c)4dZkZS(#$Z|{IQt09tZoA1W;u( z{zif)`SCQ$@`V0<`G07{*@?8$ z#uCl$)raYLN4xOxR4Ml+(?&^aHqNB=nDlLh>#RFCvUfC_V+iecOFwVj2e+wv@ex*g zj(2}H{c4Lof6j{a(HmKoldKQC$eownqmsw()bjCc`(Y=I-9(8VcCUJxmZfZ1xVw$3 zxyChrNDsBNr*LeP($(%$+!E&uWg}}RPA1)zZ(mrGCf8q?%{kLN6&&)mW^8?M(f7xs z;`t?ZBBTG%8vD50r0T;RD+SK+v3Lj1yq*K8>1Q3}1F6k*rvxqF$cqchv^Q&UJf*y4tkd_f>t z7mu#3hB8k}GW-RdH?QT*iTZ(nVxE#rJ8e&$?~^QL*3`TbZ^}gDY0RX_CvP7+9mhW? zrE3<-oDHUOE{>qmf3np~nfn;VVW#_hq2V2$Fn9%pPQ0}dv zWP8sZx@JjFLQYKS=`V2-%-5Jxx<5fX*^&2lZ&M#P>g8+o!_@B%jgz0Qr=gaTj=k}~ zdnvnRaTSRpM;g8HM|=CD2@`{*rh4ZTn5yCv(H4DoAHRLLOvR$3llb&CU+X)n`?_~% z-rc$J*qu#=5?=svJtdKD-O}u0+Om5i!?seF!3y?~*CFm}^IoCWytTx0r|!LcrnI4+ zH-=S`Q}0aK=IP^b4weZz5n3+Yam5;ENbGujInEWm0RbCd!FDj>) zKLplXY-U|Z{RI4w1@OqMwS)MJf?A0!WXrPcwr+2_F48Ssl(M?d->LIew1VFK zDLo-!W(g&ynEW}^!@PxKlRH1WMEgd#KOYP-BU65?&7FbuW)S(Ka-AJj&J4k+HLe)l zxhVwq#AuM;(z=WEThwcb(Pb8DM^=aihZAea-A*+G2RqCB;626{o6$dWH~V7vM~K8%(s;a%O(TOvoZ z3T5$==;iAsH#??r@(ZofPa=)m&&jH3Y&FV1SCxEgm_6%(r1g>inQ@sk;2EIcscY@z@{A~ErzqX-KcYTgCkSy~@=444@|71q(r_B~(ZqTw`)#}EA zsOHA?ZKDU5qTDU=nxy^7a2;>wUt@H?QoPQMEA6u4i z#oPGy1u&R;mW^A z>pyP_PBqszOD$!!p41*~ecP~Ddf8xTF8Xrxi{J&8!MC+xi+3yMj@5NjE!iciI(cAS znoswRn4*=MMx41r8dl$8o#xUgxVQ6Ij$eqDoX%oV%3$)5@1?zdf$2hF1INZ~#|v&+ zy*R7Ltuy*)dC4s{0Rv5#PK{(yPpdGGXnY?n=QAgbmZ_AAixw4Koy(d~Z7YwDV#kJ8 zeo7{vdRlbd{}c6#IzJFq|2-v}&0ep~hgPfZb#gUhm%q`rL4uO_hRC&L_CL5w*+TQ! zT*g~!eCmygk2;Xyiz}B7bH&(&HWW=9yU)Ys*@dOHcf6dk$dU%d zHoN+7*)PL&*mDbVvN!jpseK;z3q(Z77M%`Wz1SJ%wpcx{d~?j*XM;lXXW6RA5Ly&t9p{ zYwNx$suf&M=qqu2bq94%{N`6?8ga5i=BcE5PxUMxTB7JpXF@C$q%7*HK`;)PgTmS@ zh#9~B-~~4M{Sy-OrziV%y1Km>ee~-#2B}S5>5aant&A>yFf1BXQw-P) zY(Ah`ONkm-MC<8UUv@&OJ$pZ$?zBz4;HX|~RsNkK)GnS3cV#^3*t38R+Qp2`r!3H$ zwpvf#ww}3=m(JuZpUje)uCsXin^v(t+zuX}`SwB0PAE)(q1M&L7iULOpnwB2`Z-)N0{ZNiWx*fB14{!GvX*$8~h9W-aFDGLQEfIRlUA zi^Fy4{(IppNz2QtUK+{a;Lc&;UW`(-SLmv@^?9)$jg2$bc-qdZh48yqLv~dP2Dxeb zTp5|RPm0hOUMrSQy!?va=vJC12tgvM~l)M{}(bdF8H|h7-$^URfY5eN5s8+SYsC!n0(Y6SSY$IX0Tv!U5 zf6m9{6zj@|_-F~USlO(8VN~c7>+FJ$^x}w3yP-s*%9gxse|Pca(x>>RH|?jTE z3b~*4w{m8w*y%_X3ixZn9BqXMndcXdsV`W+q{mu`QLk>Vnnn~vC?ydw`1>}McRv=z^C_&t4a(rbK5g@ zmvqX%K+915`^JkK7LtXpYIYLNPFNl|HAN_$XEPL*ZCfU$5#s^ zB0M#&i{z>2$UqhEK|Gy#wjL@*4rg6VJz(OlPqvJ!h(r?*&z}!TCk* z=_F+4JQXrjrv0`xYXCnR*7NDb&T!0&Z^9KC%MeK#A|ZXnx(_Y#DKGV|I@5mOo87Le zjf3w-8<}6FQppD>@1Ddc{~?*#@40F5-T#7 z7H8pBN(-*BbKP~j^vLU$c-0JJ<9WMdAMQ;`?3it?YaYrCY*{yb(40En4dd7@c|P;3 zsXVegbl1|Bs`yPLI_YFiu~nhdlwXOR;KDnv_)Ag3!eiWnCMNpJCq7)`s9an@vEkVc zZm65sy%b`lq-+(tNj@&`4ijeM$dxu9S_#FQKiHrw-G zKyFOZX_`OD4^)D*RWoIDz#nePchFUHtO#;BaMWzxqoWoYy=!i~Oerqey47`T)||#aTSPJ}R_)>AxI5L*$fj+)A5k(Dd{o>LY zI5QY9l2CkzI}h(GxiKm^p05t}xSpK_N&CTDu@!nMLb|ER%-^Lr`3QT1sQv0P8H?v1 zKbkJO)E4EJl~Ktp^#C{3ORYEP89r8Y3(7Y`s_TsYZNS>L>u>7r^+3MET;r@x8*2?&${7R? z<9s(8R|fN+X@uAtSzn!RM6!Gq~V1pMG2Ukvd6b~wcf#r6IbE}I; z(#ND9k?PmnPd$1-&y?rej&7f;#$Wl)?17Vm?g<))rX! z*pGj`Y1G}-?!4S}w)Mtt55#(7+3Pn?h<0b4n)TDUFiB2ZKJWF3Co+aj`44a+JCSLf zrU~A2?8>g!lagoFWBdD0@LFpy<*$^kq2881dhu;M;7hcH{$Prl#gF~d(ntf@VAzk( zU;2x7IC=~o<=S6gW%t6{$;8%02jI_sW7!Z*aJuV}+uk)*o}DNp40oiPSF4oGGIER> zScykuZu@}cy2)cxs=9h@!@k+|rpVcaMcHBHIw#K{#vH;}9~tV0Jr;yJhlyW}T8Z72 zay));(7DlWh?tV2)dqJ7CE~A4}=wMfrZ-2$(qCR`w z%$HZWk9pmou1_SWyB_m4lXWFfyu(esqG&w@UAgg^!k5~Ou@`qSOY_ux+Whzrh3yzu zL180N@I>`l-3jHku2@d>?ZOvCMkd+My&l_XxyqRb6Zx&Fk$wXVUKW9${jYkT9@Q@` z{=8EehatdPPRI`L4hUc#20$6VOqtuA_M`p+H#FB|1!?NqQ7F7j3mcZC8v1B@VV${J z#=&PQw{F+U`5va*uei{tYNe++@mofFu#3dcg?WpUc|jl^C6gZ~L1(jdw3f9n@lKu^ zZY|m;oFn~BrQ>V`^tIVbsl!ii7!Jz4X%@G=ZE$9y?Z(&>#QP91oX-MI2=BEXBKd6;M6_ua1dC~kp?0YuqJ!Mhy*mLe4rfRFae2XjR z90hY1vm{rNCD+!NNP~x-B44~EWnbK50b^Cd`3vWaLjy|GXvM)Ty@Cy)Q1a`vhVhkM zos|~&%kT|#x06>oo}PRCpv%fAYNWH-BA(agMWQ7*Jvz}cjI~pWxhoF;lAAW^Opg|A zQatWuz&T^N^p_jz#c`$y8F7|uSI)_bH&EIZ{h*)~x4kZQ7JpHTRU28e@+e zHJG)#;{%+|#j^60C882h$q`0djOQzvlGScE#!lcgCy{BUvd@dGr##5B-lBVlW2B$_C^?plVTq2HQtGX{G zay7y&O}@b392buRy@0#uhe9W}b4j9$drH*%xnmPLadgUYA(G1Xhbr!+i8Y-;-7b%g zZr-y@4&a}E^5r6bTr^|M>Ren-dmJ)3GE6V0uPN5Rx>y#8e04$r&8u7>6Wuq_V8BYv z7jv$1ug#pG?uVIOsE^{644|{!w$9g1#E5#_Q{=aDS2PIFwxtPm zo60s`RqA_q)0mu%;c*U|U+RfwB|SmzS@~%wcg#fO?gk(G>}`S;K9O$sg0)K2iBP?v zPPdovRJ9f(gUf5PJW$1@VZLLHJ^4VwnQC_#B%y?}cZNYR-yq_f^*3 z{S=-X9QcIy0xZFExU0E3A?zZCu~omlV{S?ZFIrOiwCST#Y8!Ys!UwdGrh5A}?HwPQ z(KENdt424s%fw}w>Nb1Wp0wtetx7V8=dQ-Rzhw%`JCQA=Ja{JkqR?lqoS&_2GzI5E z6SmfB2KZlHdY_Z1mVEXV-~4{b9dyDc1;^`kyvunH&oY3o-r@mxOZin+*1OPI4$zx^7e72|USN zb54){6yRsX7%t~^^)@liE zE8$1y%)*v`gukbcj%RyaQYgRHT&I?L=UZvMMJggO?%m}>E1d2N?5^d(50yD0 zm(r=xykXh6G_R`d1y?k4hH=QqwVH7CZ?o}IZ_WBbuuesVDJlNA(MSz6qqXFvT~$2` zLp>gE{u&D9Yb;-ScTy|qF2CtO=}uXUQlBJe3eCv7{Ti$?lATO!y84paH*j0Usrie9 zbJT{Kv8Gb2D{AJWWdPfZk@XsJx|D2#vHEnqNtjPqE;sJ!rkOyQNU>QAv+Fd=l9)9Q zlSnPbvWjg|?EUDSuXceL^|jrhRt)VeJt=7aqR{=%Z>PtQ)hLEBTX5E834XXv&b<}T8%!irerg)9 zuR2^@vG9p6y*50&QhHFDYad#=Ra)<*S6 z2`BFfd{mGAfr84a`Ho`{SWL zY_C3d4o_^{{C;L%0e@nAt2gLG`>fBsiJ(n__fAoW53FYmS9VABJ4coES$t7!l7M*H z$C2kdFULW=RLYAVza)xpQ3m)KLEtWvhHE2(FNZGApopD)mRxYhD;%Ts-o>yzvOU&k z1}>i^&C)*0EM{&Ys_QP!_ItmUcq%azk68TLri9rmKT~T(q^O#x7#bLPIrhlKz09Dj zdSJ_{^RZau1UvTDVeMkz<3Q036Vv(GAgu~l!n2yuRg~8!xzXp_j#XUs7Xws%61|l= zua(t|{Jd(Y&P{`Gq{5}&4q-9Nz~gzeh3(6oSq%=>$j3wyyd$-*Z=>bhUtD}s;j)o( z>?>iah=N)r*CtnIbolJ?Q#bF*bCQ`KS322?JKvQDyRVVou|$c-(`>X}5E?ZLYdh6W zpES3WCrYa-s;eq|9M7+i&+t{0#UY$&{@5d*a}i&eBJf;ibR~qmltU3GK*l~lBomod z_5RBzb<)Rj(sy(W4u<^en>z0AZ|VkqZg_~2D}ktp_q6eFa3i_`*$Kd_mX!-0A}>dJ zL^K?%@g7!02UmhV-owETL`q+<_XHz>20$q<@9JwJhC(91VhAV#41;4ZU>p`^22mwi zIXl?M5$v7uU?>P8=V^l{5W!d+3L_c}De8&ZPr#9EY>NG1}(tvtW46AU`=O+E1_G@&?uuvf2GHe^|`g^ZhIv->uCS2e+Eah;HTK zudgdj_9-bITv3$MrD4dBT`VZ;Svz*d%f)G}^JlelP-o^;Pzl&NQouwvH>|xJWa>m< zn$tB1uYMYNEc(DGiiJ?=y;ACBE?k3*+|!-Lo!3&IJGIS+vr1|Um~p<7&iwX6TFJt# zKugVAfwnQR+FiPz=fpEXC&tUihP4c`Hvm$*BJ`vK%}-i3-=OJV=Pqu==A72cTx;U`xE_ zX@UXJ1!Q-CNhm`Cm?ISg76*o-pkNdfdeo0VAdcFkcTyqEA<+YE5UEB3;K9J*M|?=* zBp#%9(mWC$vtP*j`$T|A2SyJBF>t+1a3Ce^fREt!PeA^b^7EGl{$}y_q0(|Cy6RgI zJjL|z_Fm3b9{=??q2Vy#IFa^+!Qp__(3t<}JON|4-wzZH@%w=y&HU{|{eFP{Ott}1 zl>U!6 z8jQlg!B_+gi~(lA;V3WyunVc6P_UyhI2sE^05&?RF>nxx{{N?t=t<>wS|kDq!UAeV zBY*;7L2zI$3JuW1P+%k$kO8PsXe1bc zL>{%#FhFk9uYy7#kJ>l{3K#?Q1x0~K^ha}Hz!|^*{Ev76`vmlfA+1eX3qUCn1LzUp zPtxO24Xh6Zk(}rM^7ns^|7pG7wR+ShSqqQ|1+0h#w2DBHPTj9vldMPTBb`DdpkWd{ z0?5I z`C9>zto?^2k9d;!{#i(J9kq|pNJ8YVLb4{w>SzQEM6%p}D_FpSBx{l^`Fr`(l7G}k z==sBvzj%`P{!vKlAGJxA{;iO#d4v)e6!f1S3Py52dcU1-6!1<8{J`;60#f2g{uxL= zgagTOq}D$|De^Z`z&V3SQvq+MR)0p6Er_K#VAPdaiRI#%|0h>n#9 zDXgPO3?O=VPggGw8@wkNMp{7+qKUV4up-?SNYFzA5@T?1Gl(34;7ar~0Ugnhe6O;H ztCt%fwmuLy06*zQ;%VatQP2mj4c-nmcs*r#h$@%}#1t7Bhyoxmu%svW-}@)Y@W=lD zlFt+LA3}ltmI|2gmslh@)E#U+O~6NrBfToPdI4L5{ib5z2>x>oV{L0kybTd>xPJsb zC07p@5aj5FL}Ctu!o;y)tT+M%@cXxVfOz*SQxt|JdC-67iIQ~xSE6YDi2@zBEw2R+ zO6y~+=gB|*mx%nEQIGb2q~^Z_1EQ%to(NGQUE=frkxhV$m^cjZV?Z1fhm(8-3?q&M zYT%@Zqi{GtUL^yFfiHlHUm5{|p&$tpV8EVWm=FkJ2$oX1q@*MR#G>DtdL;P$g(+YQ z5Jfpbs5lM?wEzzPuHhsf>R}H)LMRk$U!zzc z06}{IaYqOQLA2fQ1UVbh&DG?W9U;b7u7U|(&d$I7L4kc~SP|?6@dUBU`lK~&JX}de zBZ=*RcLo6P2QEQo5JkN|fvknc+se7Q;jI9ClJNZti~l$szoo4z0NK63wfaasP$&um zg<{}PAZi0O5~u-xh=Bu&0gjukmks_;I;6rc8ZJLv%v{^$eRKxq7TA1TcJvkwNvK>_`fp18-+C;r_>a>D=a!=VA_k)FTj;^4r2>)(9{9ALzM z&;dFCg2BK0FhI!uS0AA4|LlWfe_NO6VFmoK@gTWpeFuNwLWzawxw-=WT zuwOrWAgYRB6R;ElE)U0DLdgLYRskjthhD-cK$Q?U1snhYC8)d%=>H}mIWk388-;6l z8z)aM7cc~lMPpFFB@BzfA~6_692BmoAdi+qUQ(2k!^j~Of4Lni58@F-U@#;K3lb2x Iq^$({f5Aoqy#N3J literal 0 HcmV?d00001 diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index 84363a18d..70fb494ef 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -33,7 +33,7 @@ class FakeImageFile(ContextManager): return os.path.basename(self.fname) -class TestAuxilliaryFunctions(TestCase): +class TestParser(TestCase): def setUp(self): self.scratch = tempfile.mkdtemp() @@ -46,18 +46,13 @@ class TestAuxilliaryFunctions(TestCase): SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples") def test_get_text_from_pdf(self): - text = get_text_from_pdf(os.path.join(self.SAMPLE_FILES, 'simple.pdf')) + text = get_text_from_pdf(os.path.join(self.SAMPLE_FILES, 'simple-digital.pdf')) self.assertEqual(text.strip(), "This is a test document.") - def test_get_text_from_pdf_error(self): - text = get_text_from_pdf(os.path.join(self.SAMPLE_FILES, 'simple.png')) - - self.assertIsNone(text) - def test_thumbnail(self): parser = RasterisedDocumentParser(uuid.uuid4()) - parser.get_thumbnail(os.path.join(self.SAMPLE_FILES, 'simple.pdf'), "application/pdf") + parser.get_thumbnail(os.path.join(self.SAMPLE_FILES, 'simple-digital.pdf'), "application/pdf") # dont really know how to test it, just call it and assert that it does not raise anything. @mock.patch("paperless_tesseract.parsers.run_convert") @@ -72,5 +67,144 @@ class TestAuxilliaryFunctions(TestCase): m.side_effect = call_convert parser = RasterisedDocumentParser(uuid.uuid4()) - parser.get_thumbnail(os.path.join(self.SAMPLE_FILES, 'simple.pdf'), "application/pdf") + parser.get_thumbnail(os.path.join(self.SAMPLE_FILES, 'simple-digital.pdf'), "application/pdf") # dont really know how to test it, just call it and assert that it does not raise anything. + + def test_get_dpi(self): + parser = RasterisedDocumentParser(None) + + dpi = parser.get_dpi(os.path.join(self.SAMPLE_FILES, "simple-no-dpi.png")) + self.assertEqual(dpi, None) + + dpi = parser.get_dpi(os.path.join(self.SAMPLE_FILES, "simple.png")) + self.assertEqual(dpi, 72) + + def test_simple_digital(self): + parser = RasterisedDocumentParser(None) + + parser.parse(os.path.join(self.SAMPLE_FILES, "simple-digital.pdf"), "application/pdf") + + self.assertTrue(os.path.isfile(parser.archive_path)) + + self.assertEqual(parser.get_text(), "This is a test document.") + + def test_with_form(self): + parser = RasterisedDocumentParser(None) + + parser.parse(os.path.join(self.SAMPLE_FILES, "with-form.pdf"), "application/pdf") + + self.assertTrue(os.path.isfile(parser.archive_path)) + + self.assertEqual(parser.get_text(), "Please enter your name in here:\n\nThis is a PDF document with a form.") + + @override_settings(OCR_MODE="redo") + def test_with_form_error(self): + parser = RasterisedDocumentParser(None) + + parser.parse(os.path.join(self.SAMPLE_FILES, "with-form.pdf"), "application/pdf") + + self.assertIsNone(parser.archive_path) + + self.assertEqual(parser.get_text(), "Please enter your name in here:\n\nThis is a PDF document with a form.") + + @override_settings(OCR_MODE="redo") + @mock.patch("paperless_tesseract.parsers.get_text_from_pdf", lambda _: None) + def test_with_form_error_notext(self): + parser = RasterisedDocumentParser(None) + + def f(): + parser.parse(os.path.join(self.SAMPLE_FILES, "with-form.pdf"), "application/pdf") + + self.assertRaises(ParseError, f) + + @override_settings(OCR_MODE="force") + def test_with_form_force(self): + parser = RasterisedDocumentParser(None) + +# parser.parse(os.path.join(self.SAMPLE_FILES, "with-form.pdf"), "application/pdf") + +# self.assertEqual(parser.get_text(), "Please enter your name in here:\n\nThis is a PDF document with a form.") + + def test_image_simple(self): + parser = RasterisedDocumentParser(None) + + parser.parse(os.path.join(self.SAMPLE_FILES, "simple.png"), "image/png") + + self.assertTrue(os.path.isfile(parser.archive_path)) + + self.assertEqual(parser.get_text(), "This is a test document.") + + def test_image_simple_alpha_fail(self): + parser = RasterisedDocumentParser(None) + + def f(): + parser.parse(os.path.join(self.SAMPLE_FILES, "simple-alpha.png"), "image/png") + + self.assertRaises(ParseError, f) + + + def test_image_no_dpi_fail(self): + parser = RasterisedDocumentParser(None) + + def f(): + parser.parse(os.path.join(self.SAMPLE_FILES, "simple-no-dpi.png"), "image/png") + + self.assertRaises(ParseError, f) + + @override_settings(OCR_IMAGE_DPI=72) + def test_image_no_dpi_default(self): + parser = RasterisedDocumentParser(None) + + parser.parse(os.path.join(self.SAMPLE_FILES, "simple-no-dpi.png"), "image/png") + + self.assertTrue(os.path.isfile(parser.archive_path)) + + self.assertEqual(parser.get_text(), "This is a test document.") + + def test_multi_page(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-digital.pdf"), "application/pdf") + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertEqual(parser.get_text(), "This is a multi page document. Page 1.\n\nThis is a multi page document. Page 2.\n\nThis is a multi page document. Page 3.") + + @override_settings(OCR_PAGES=2, OCR_MODE="skip") + def test_multi_page_pages_skip(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-digital.pdf"), "application/pdf") + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertEqual(parser.get_text(), "This is a multi page document. Page 1.\n\nThis is a multi page document. Page 2.\n\nThis is a multi page document. Page 3.") + + @override_settings(OCR_PAGES=2, OCR_MODE="redo") + def test_multi_page_pages_redo(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-digital.pdf"), "application/pdf") + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertEqual(parser.get_text(), "This is a multi page document. Page 1.\n\nThis is a multi page document. Page 2.\n\nThis is a multi page document. Page 3.") + + @override_settings(OCR_PAGES=2, OCR_MODE="force") + def test_multi_page_pages_force(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-digital.pdf"), "application/pdf") + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertEqual(parser.get_text(), "This is a multi page document. Page 1.\n\nThis is a multi page document. Page 2.\n\nThis is a multi page document. Page 3.") + + @override_settings(OOCR_MODE="skip") + def test_multi_page_analog_pages_skip(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-images.pdf"), "application/pdf") + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertEqual(parser.get_text(), "This is a multi page document. Page 1.\n\nThis is a multi page document. Page 2.\n\nThis is a multi page document. Page 3.") + + @override_settings(OCR_PAGES=2, OCR_MODE="redo") + def test_multi_page_analog_pages_redo(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-images.pdf"), "application/pdf") + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertEqual(parser.get_text(), "This is a multi page document. Page 1.\n\nThis is a multi page document. Page 2.") + + @override_settings(OCR_PAGES=1, OCR_MODE="force") + def test_multi_page_analog_pages_force(self): + parser = RasterisedDocumentParser(None) + parser.parse(os.path.join(self.SAMPLE_FILES, "multi-page-images.pdf"), "application/pdf") + self.assertTrue(os.path.isfile(parser.archive_path)) + self.assertEqual(parser.get_text(), "This is a multi page document. Page 1.")