From 17c41794fce9b3cf389bca034d66d1e37859c65a Mon Sep 17 00:00:00 2001 From: Tom Weber Date: Fri, 14 Jun 2024 12:57:57 -0400 Subject: [PATCH] Loglines (#605) * HTTP loglines * add IOM am for loglines * add IOM am for loglines * add IOM am for loglines --- saspy/java/pyiom/saspy2j.class | Bin 18884 -> 19861 bytes saspy/java/pyiom/saspy2j.java | 59 ++++++++++++++++++++++++++++++--- saspy/java/saspyiom.jar | Bin 15824 -> 21860 bytes saspy/sasiohttp.py | 44 ++++++++++++++++-------- saspy/sasioiom.py | 49 +++++++++++++++++++++++---- 5 files changed, 128 insertions(+), 24 deletions(-) diff --git a/saspy/java/pyiom/saspy2j.class b/saspy/java/pyiom/saspy2j.class index 189b018ef080bc55c1c0aefb1f8113fa3b8e6b03..0d78a8decfd54aa9f64b3dcbd813f8bf7c795b26 100644 GIT binary patch literal 19861 zcmcgU31CxIw&$GtlJ}ClByFM4lr0Eo0ZZ8|QZ`G=QY*%;IGw#Z;^`HBawCTp+{P`bv@7(p=d(S=FJvWb+k37B$ z07eLl6-~H8!<8zovVy=B0^mGQvBnB!T%qD>D`*m)Z3U}@=U7m|bLDG|6?9yy;dxdl z!}B$~z={{*MH*hL;UyZb)9_N+>M{*4m+%S=uaxjA4X>7Py@uCFc&&!lX?VR%-k{-) z65gcY%@W?C;RXpeYIv(0<2ISOUA{J{c!w2+;GHsamweqVU-ziE*$N|Yi>%u!UttyR zRq;Lz@3+Fq_<$8g;e)c}Ln=P3;v-fVkB?em9Bz|^wenS`;&vkgQ^f`=Ov4p6d>k8P^CztQdQ!z*D(<$z3`xnSBz)Qmg}6tio{{*Um9OV4_&mN~ z#TW4GTH_(Z-w)$s2&{0u*rnJ+B(C4ObYukjldzm+B5srbDW z|AGIs;t%+v4S&L)Rs2Q6U#+l4u457YCR0q=5pwlE;qMy$A+hWiaLY|=Wy!xR%svOK zcn}ZC*K-;kw&4+MQVFbZHSW;}C1ez^5?cQ>6r%NwiWDby2CS%p_ak9_l7j-8D+#Rg+7Wq-xYdqn;-o{WR*Y(EyE(*XRU|(li>V(jY4|$T>F1*^Z*YOcXj%VosM`hcMwNL#3fs zcp6v8l3^MR=e?#8GBZ-XPO^ZNGMV5sN@h>iXtc~^$>ojFXso2;9+?>@);2XY$<%m> zVS)uTI>k!aG*P1*jdC@bq|sz6td{dxjayWjVucTxJ!z^HK9(@g3ZF20(lk0%t|?!m z>2lEp8Wl=7gBg}ilQlEtt4PvumP)f#nxoQOl}=Y_o|Wd)0y)n!Y_yQhl&NBwS|nc{ z`C2T?N;E39k(bJ3rrbtLs6wTsDlM~8B~OoETUdL1yGT|qmoJ}6ewC^aM6k+-fb$X5 zP{neuzdFRZJkFI>RC;~Y%MqxI8zki~^{nt@RC;{n8AYK$g|B=Jf?lE3Xon*2SyTO$rQQJd6cs)mJ0*g&!k;m*x~$9_ z@RrW>dLj)Jo=Ar+<_0Q41`5R+2yhFUXFkHa=$Ml&uHWGMY@=(t1C*mgQyNv$VtYp${$!PS2lZQ9^*E1 z111K77Vwt%eMZt^Bqb&$+F8|}%Gp70K+-3&c7&d7W*VVpGi4IXy}lWqU~r{BP#WuE zDOpvPDk;h%A6T_bNvCXicUy!Ho|f3Tjg^_HPfpoLT;XlAsWFIB?!ISH=oR6 z)6&#jS+O|aWm>t~x6C)HV)%?!sqI@yd|b!P%+*z8Mk}?{6Y_L6elFLwjIS&XO8)HA z9`D2opC?em%;)tim&oM?NS+wf+*Fpd<*$i>iqZ%vB4Qk@VBL@y5o4b>lu_g_S>}~u zrvwd6qA(Ihssu|s+)(vYRYg>V%A2snA7mMksVaX!ru@qT)!ZJz#Hp&4yyqU~5lt!? zpP^t(vP+PQqP;oUWkE-Z$yCWwSjmVg{pG>cj3~t79IwJ=E#Y;S%5{&e@KuDyGfSrp zoWm2%@t3kDbLLn0yamguJ0S4ubD+7BgYd6RB(c|O(@{6j6*T{SW!rd z&#I|n*@;>SR@iO&c4AJX9jcK+%{*4(t<>=p9H(PC4&en;4KqQyWE-7U)7ebk^kArz zjSq92O6TZwF0DbZ$wFyx3_dh+(zrx(5wwwt>uEYpmDNteNVf>0q`>()j+F!%FJBXI9LtQ+imh&5VKcMo zbOFxL=|Z|lr;F(l=JZ&j)~1;?S*#+@S5+N~D3FNR<`vDJH97rcIqEw3x>QFeCUk%+ zV#EL_%URWO44L3nn3)6k~~wl+%2sX2jk#Yxbh3R%_`_~k77FIOs+r}d9?A{VTc+`ovx&-{>|Kryd}J|p_-^faOs)%e|qN#aMN^mafz3db&ZU z8|CXJx>=`NaE3}7blOO_s&t!9x68s!l8Nr1J9X@Vx=wd-Yn&vRHKAqXi0+jHy<5lW zSinplm0Y?<;@B*;R9yRrgTyK}Z(%qfopZDqwPALgd5Bt^HyfA=OWuBAw#(c>@(ClL7&MfK|Ot zjr4>{PwKRbcB}N1PEXUGm>e3r5w}NOTkS+q_2T6fA>M*#BxRqKq%r3fL>BrS?a=9Y zdO@cb*~Sp7xSJ$eb9T|Zf*iIDFX{9$-Hgzy^*VC1XJr@X6c)^xG?P7aCV$GLf?Rh; zqq4fp%`4)j1(S04V6qp%UsPSfE@xSFWo3=KR65p%(0EISxF>qu!Rmn59rC-Ecvg7b z9`_1QWkso*wGsQW%iPhXY}nk3y=8uG88p@w;T>sOKJ87++61KhvW$CBJ&(d-HhMe?1(eoA?{o`6>iir=~ly-c^KY6 zo%TsOze2C-*cFpidQGR-=?xvbVRx0@)afsB2gbJF_MCPHiI{C<*5K2H^dcr3@};8- zQ&oCPr@zwM>;lJdb)=c%-7Ounq{e?oiqvF7|DT}KyY!w;@5@bgvTdp4vzYW8qTUj( zXGV=qAJB(7_Qm6L?1%kz9Dv8`cmk$Lt@06%-?H)X1e01ILXsiwxwGfanqXyv!;d;+ zW?sRpS%oY``Gr&R^9m*vF#}nv0{#+r6(0*jA^(^_wQr1d0PAx%dtPI>lR1{_-I@~% zCr)F=DlRCTRXpkRyrNlBPCk}G@;52HpXfLON9y#cBzYTIjOc{O`AFw^vF%ffSwHwo zgHl`lT}K=1AGD)`g@er_eI|)8MUqW*8y1!o$mjHhPG8bC_TyWK!0VQ-q2$HT60bYI zA}FQrE7lE#6345zf}$Lnoiv-{VQ-8XE;|tL)C?~zER+3WhskCW)&_UGPVqEW z=^r}%lYWp)^CQo1vx_0p#2CF+pi?&Xc9G3p0}mBF7Su4D=Ymg z(0MLn{^VRH`C2pt!qh+6yTIQ}kQwZZ2D4YN zs*wm)`j=E-2Xq{aC#rN%r$bVIq)6j@n2zYwBtRD^NXJYZ#r~z#t*Q{ZP=raxVK`hB zW?iU4V?J*)sf>JimMidQ2ZI&md^SpNTb~zq7L94c0>3==^2w9WEjsqbK03Ow4;%N0 z3m-kNw6gz^P!6k-1v&CHkxz0h&cw`W)^^4Tt!qcVWX#A)XSc;&Wr1(OV8jXn)m0&H zX`B_N1soCU(OO-}NKRan%(Qmr-sZD&lyTY}n8wJnVuDx3g@SqIKDL56o**C8lB2ld zT(dC)c?OBC=V?T3v?@;^=;dj5(k+iwPLOQ@*PqZ4+73>z@?hKk9Gxd8>ol~wak`xq z;8+Qluy+{mud^mg8yM-$WR9=l^R+;mWM3a$5QO#6AsX?1C7965X# zlpWks+G-yE7DqIyC^0k5VvO98NiH&64r4ScuPqv8Ls)V2ZaGIiU5puc)G^z2j*oBs zxx+wnPZqgWUOvKtf3t$-Bgrw(ws|laXkq`v>toHB-T|jY*(Z+sqX!f2D5*T%8w_%I z0ikP*d*YgM8!hCIof1qdWq`O7(ctYhl~q;;m$XtaMK!^Ymjm5`Z7_FiX5|^upJBX_ z2wC%~Ij)$|8REgPq|z@1S@Eutf~TYz!ozW4PpOP-@X;%N*)gqUu#p<{hNLEyVjJ=p zk+2G1sdrT&hYigfgD(&9bU8f5a&2LkIcP-RrNrjtwWpgT2AjqZN2@qG)+2t+;5KTWXy1yBzwn`>KT)% zX3Z!gR8p8Y#K@b>x>Xh!@y#I}4&EVxNMy8k+q%f66*9w3H{y9ItqUgm15)7G$3t*8 zOI~bdt=sY{Q`(}>Yo2O?93wuIijdtRMx9`65%ySvym%Bmq9XZ*_akk=MBZfH_{ed% zI#f}aVK{ZXx3&_0RZU^pOb$;o0kud|X&u|y=~md8%M4}5kh@5Qr!4i$(55LT!olrn zB^9heD@CRd2B+nPQ2(Xv1dx z!s{;%cq_ezEw!-1i1`fCGPO41%@;$1Vq-)%ftQfe&gGoyt*nya5iGJEBU&E-}xP1^mnTddiq;tb<%)+|5yHG!)quCE(lGzI@zU8!r^M-pR^{=EBdSZ-`molE%sHa_ESxVi;@*6* z6hB0?M;!8KNrz}Fj;U)$$YQkWh$J1b9MgxzGbbXREPXO19aO#{$mwuq)?8-LP&6># zvm-UxV)L}g9AJsi#U635n>EgP|KS4LFS!jPN2nUThiu`HW)&5kf#i$H(uB&BG0R;f z?PpDDk0qtSV+D0zdo|I{AC4UhI=es^(^k=RilN>8LA$Oo9Tiz<^D){`Qa#f;*tC}Y z7_s0_&x7eSG{#cRG;E{sVylnMow+BzON+#^0^$o(K0+g$*unm{-mR8yJcp$nH1B{F zS}c21xTdw>Ja&OdJEp-5&nU?d|5hX0t{ftEp;z6P_BQc{A5GV`e{O zwy%Oc$UNg-zN|u;MrRwQmd<0#>YI_YX~lbFlNv>u0K)@xcho7ah3pU)PhfwdqYiN` zxI=rVGp?TX7(1PjOZd)CCGAMjd}rUilPboV?_J@o%=4A`5qqR9nBUC9QBriKhB|B4 zE-u#+%ZU6_Tl|{p|^f1mhij$1ugh=sD=rT5p z*+xazHWlN-m}XQYx2YH(MyFBH&8SFhMwO|A;WwkEyHO)s@z`~c5{8eAa+gt_)ZC*E zQp2#vsOn)=XE4|_{gQTkdid09tPLJ ziM4Rzt~y9>gdy`>dXF8DQ3pdKnVv>wSR~WS$PABUk`*Io4}&$UkBe6|vKEHb!%10v z449eaZiG?u8sTK#@uBsQnKXI_WbJ@4buhLO#&N}Xu8rYFXSr0`nCi*Of^)Nf@xLTMfQOsdj4|8kbbeW4xe!ekNe)F{E z%T5at4(x<8!qB@G`fY@yT3Gl3=(RAm9?qN)`r;|VbMHS?;YT&gT=M5IH{x_ zN*UIJw-L&CM&((FuEeAz^-wV{Q@d3?!IfAKOOv$(`=SK*qRnb|SE7-Ll=NLx56iNW zTuDil^{{*cCb<$tvc_dQ!B-FdQPybd1lh1ED-rA9tXc>p1sfnF2~u4v|E*|%l`?l$ z7=~r_t%aHm&|fj;e$=)m+4ijGn~J(wEjMg}D_m|@sz@@`!`Yc?vbqU+bh9R_7kfup zxfRzWt2^PG1~``>-1K@2{ntk6e_m(wXQpXIcUBxm36t#n*zU-^xS$b6F#Rsv&BHao zMF`;|4NRDe4Z`ThM2JiN1R>(uG9g%dDw(Pz$B|sQ_G>wrw9b{%0GA4IrEG`Gc14Kd zN;W5}i!#lwK1OLhTrOqiig44u{}+-R-pVAoQj!FIWc3?kmj<|sw*~gLpTm0ImZWPs z+nb1NNa|l3hO45yGdRXOtAAlqcO3k@o0xScv7CZ;nictHRJlwz?(KN>)U5L%UJ(c$5tWzm+p_8()}4mC*7a)Ks`J-SL#E~vO=tbhoTy>4j!(R{~ltcSO<@= zp4tFiYh~imm{JTwccXxn7!zk}18h^It_;K3Qm;m|WGz!e>cNpcD-D7lES)Eu5m|XjZtAqi)**D({}73h4JQ&hS2XKdmBeUWTWg2yA|Y;SRow(0R2zcD86Y;j#Kk(dDW@Ir zGg(ojhfoXg12Dp5bJTMDpDM|4Q#Oxfn9Ahjjo{#EG{93*WmPu9(`-ujNIE>DEUJTN zVtnx|6Oha5;W=jBI(VKPgj)H2VLQAihBv@Vf>p=MkWZVdfvQARpuZ!z9$k@FiF29exl1DL~<7+L+1!^zz@LMoG>7EWk@ z*O>-(7rQ!4gD|X+lzGF|!`0K(s{!6L0Ta&d>cv!Nzd~g8P41hl-VJ#%uIFw=Ms0Fm zc2$cKto860scr1B1`gSv=XQ9@XzWkr~`sk=~M|iU*%4}43$GSUZcR2_n zbtM@}c7WU?PR>bA-T+R{Fkf(v4~daYQ!=}_>{-rmQ}<5y?rn+nzq@xw?vuV5pHL%a zEH=V_Vfzjjbck8{OC9R!115Sn2rUjzly?}k+pS}UQ!rrMHiDX_|bqhPfy*A}#`fK~dn z`VRf^2(+ic2>W_R(81*f{5+C(j)$wo)!HuS`>)D8{E!+?}bgU9qxdq z;ZAr3?t=H>Zuk=JfnQ)VG{F|M!&Y>$t2hAe#bIzCo&xt{K0JWM@E|UOhj1l4j2FTq zxE>zGTVWgC1-1AP)Zup6j!(g3_!`vX2e1Rbg`N02e}mZs8_5JuPy#$j-Qj8K4|`}B zJVWE*S;~i(c$c52)8Iv#1AFOA*hgjXDy@ar=oVH^+u%)hK;Nd_@D9BU@6uo3J^B#d zr!U|``UyU!Kj1s&j!)Uiejn;5Ts|{4OqqKg88=SnzLT#daj|A}ZodG>gBZDtND@(GxtWMdCy3ieV8u&**7k5h`Vzfz6^l$CgrvKrHr zb8wJyBMw$>#}k!%FkQJ1hbWI=hVmE=RT^=a@-z-tUcwQ|t2k158%HUhVwUn9j#Uoe zc;yIYn`}7IuAsIMp-=^Gu^~nrRZ3PsQn`X*k0)9ZxgOz#`KeoNZcw z^GxM9-{i*yrVuVPosDOjF2-Wh<>)tEg^Nw=vD9=gdQFdFnW-MjO;6ww(;loay@*Rq zui`S(TUcrO5SN=iMW5*#Jj?VehD=9rmDzzC%!#<#+y&1u55sfKqj8OS0`c_ChEUXGWU*Wy*?TkvZ0ow(k-6|XTrh}W8H@jCNPyxzPEZ!kZL zH=6h1P3AZ7X7hWv(fl3WX8sK~nGfQfs=&MW^WwYJfw)y2#-E0d#{1O?_<(vEe+#|< zYt<5bOfAFh>Jr?c`mjN*!N=7L_~Y)&@l*9G+^w$1XVjbVS@j-#PJIwxP`BfY>a+Ng z`Wo(4Kg50Nm-veMGrp$o$JaFrzNz)XPc%2ar5%TFYh&;oZ8pBE`T0xjYJ6Wi8$Zy_ z#}Bo2_>p!Meym-Of75Qk&$T=83vDZYsXd5aX|?#ZwiCb6cHy_$Zv0+*3ID0>!ymMd z@h9zT{y6(P{8c-Q`z}xkhjj#hMLn8& zStn3$>m=%9J(b+n)2Od?E*)nrrhe8^>Tj*26RbWOXkEwOPOs+=rf=l$rEjHl>s>U& z8m0{EL;SUL9SyTK@`ut-(Fp5{G}`($Wm!MqpKc$f2{xcpY=W|FD&^XesnC`}lWnOq z)#j#Yw&VH3=8;@BiVAF_`BUZz{1J05&9%*-(`~2IJljHAU@PTMmwmL*7NnK76|~5< ziWb|}@Yl-clh?M6%4|3C_sW}Tne9ocv^_`5ZF|XQdxQM8cc{wt5uIiGi~_cAC}{hM zLbl(j+IECi>PR)Zg;whhI$L+~XCTMXT73|I3N?|xb~>Fd&@Z4%^h@{~q|5m0p)2VM z{aRYD-_GCAY^H1V`{;Uo8~+G)2Y)^BIR75`3I2#>4{g-<((U@^v`PP-?$CecFIe`| zUHTEa+pf?(b}MbRC(ssq3T?IbqOg4c?XaiO{q{lhpgo5kvY$#1+fSoM?DObRdogXZ zd#TpGjOy%X(RTYvddz+f)!Wz7%~bj0xuH91Lu(<;!JAjp{_gtNC$oc)E#IY^kD zLxt+h6q<94usFvHoAVT5cjgF(^9f-)B>6V6nOyQ@ z+Hpj(bxo99%J_?Hd=vIwuZ_5+lOU}S4eX@yj23cuILdK#P!r~BO`G6^5zzgq4t}nM zpBvy88RY%dNd6|1e4^*l-(@mjB>#}f{T#Mvzx}a$kpJcOUy!;Hme#`lq<=NQ0eQJ| zuoe!w6qoAKTxO2fxGXMf102#g0M1kT^AQ|VEP@jTj?PFF(JQ6hVOZIIRZY>;=l^b1 zGB(8llD6?d;}UKgAJyiwtx)(s|M5{jIvxu7%h5gb9DE;z|A@kWM&S=p_+u2Vro94$ zfHh*Fcw4*&tE2F66ds8j6>%dU;6P*o@gYVPCqsf54K9%d$B8j8Sd4{{e6SfOCP0qJ zhI~HY6o?#{DJF9)WGc)T`A{aNgI^TDN>K>w#0B8ayD@Qj$2I`iTqZcySS>iA!j>SVt#` zOQ}FyMoYxybb+{nE)`eO<)VVF5!cZT;s&}y+(`F|Tj(*dfp&?Fv`5@Y&xzaU1#t&c zaWlOow$R_iR{BPhu~!)@_9+v^E6P;y zsxn=?E?o;)1gT9h6Kv9PP;t46J{A3j$55r>S^N)RBwJs%VSW$7nTL2^N2W~ZmB7Yp z@gZ;+MtK&y5+M}>CjS4s*v`*82utl;A2;b zF32{iC*Rw58a|C0x;l7)Ti(XcCVqb9=PrI0@-t8>7pz0#M{xcjejeuM5q=)!XF5MW z^W)$rz|TQ`cJous&whT+;%75IL-`rT&v1VDCmnV2GKqiQz}Qn|qPKh%%hy)vqSORmQl1r=D*$KgXj)^Sbh|3uqWm(A4l`}b_ zQp}MQ4@XcIbL6CiBPOLBE%9=6qztw~Io!_}9)Svun=FL}SO&Wo+aB=2iyUD=4DnnE GtN#b`up6%c literal 18884 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 0) { errp.write(log); @@ -727,6 +763,7 @@ else if (eol.contains("PRINTTO")) } catch (IOException e) { + llines = false; String msg = "We failed in reading the Log\n"+e.getMessage(); errp.write(msg); errp.flush(); @@ -741,6 +778,7 @@ else if (eol.contains("PRINTTO")) } catch (org.omg.CORBA.DATA_CONVERSION e) { + llines = false; String msg = "We failed in reading the Log\n"+e.getMessage(); errp.write(msg); errp.flush(); @@ -750,6 +788,17 @@ else if (eol.contains("PRINTTO")) } } } + + if (llines) + { + llines = false; + slen = types.length(); + if (slen > 0) + { + errp.write("TomSaysTypes="+types+"\n"+eol.substring(1)); + errp.flush(); + } + } } catch (GenericError e) { diff --git a/saspy/java/saspyiom.jar b/saspy/java/saspyiom.jar index 9a9e749c523a89ab6e4d003a521190ac6697aa6f..bd8b78fe09577182c1691c33ef8b3c227a231c63 100644 GIT binary patch delta 20231 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 A?f?J) diff --git a/saspy/sasiohttp.py b/saspy/sasiohttp.py index 192ee9bc..94c0e7a8 100644 --- a/saspy/sasiohttp.py +++ b/saspy/sasiohttp.py @@ -805,7 +805,7 @@ def _startsas(self): self.pid = self._session.get('id') - self._log = self._getlog() + self._log = self._getlog().replace(chr(12), chr(10)) # POST Job - Lets see if the server really came up, cuz you can't tell from what happend so far conn = self.sascfg.HTTPConn; conn.connect() @@ -903,9 +903,10 @@ def _refresh_token(self): self.sascfg._refresh = js.get('refresh_token') return - def _getlog(self, jobid=None): + def _getlog(self, jobid=None, loglines=False): start = 0 logr = '' + logl = [] # GET Log if jobid: @@ -937,17 +938,24 @@ def _getlog(self, jobid=None): break start += lines - for line in log: - logr += line.get('line')+'\n' + logl += log + + for line in logl: + logr += line.get('line')+'\n' if jobid != None: - self._log += logr.replace(chr(12), chr(10)) + logr = logr.replace(chr(12), chr(10)) + self._log += logr if logr.count('\nERROR:') > 0: warnings.warn("Noticed 'ERROR:' in LOG, you ought to take a look and see if there was a problem") self._sb.check_error_log = True - return logr + if not loglines: + del(logl) + return logr + else: + return (logr, logl) def _getlst(self, jobid=None): htm = '' @@ -1034,7 +1042,7 @@ def _getlsttxt(self, jobid=None): for line in lst: lstr += line.get('line')+'\n' - return lstr + return lstr.replace(chr(12), chr(10)) def _asubmit(self, code, results="html"): odsopen = json.dumps("ods listing close;ods "+self.sascfg.output+" (id=saspy_internal) options(bitmap_mode='inline') device=svg style="+self._sb.HTML_Style+"; ods graphics on / outputfmt=png;\n") @@ -1109,6 +1117,7 @@ def submit(self, code: str, results: str ="html", prompt: dict = None, **kwargs) prompt = prompt if prompt is not None else {} printto = kwargs.pop('undo', False) cancel = kwargs.pop('cancel', False) + lines = kwargs.pop('loglines', False) odsopen = json.dumps("ods listing close;ods "+self.sascfg.output+" (id=saspy_internal) options(bitmap_mode='inline') device=svg style="+self._sb.HTML_Style+"; ods graphics on / outputfmt=png;\n") odsclose = json.dumps("ods "+self.sascfg.output+" (id=saspy_internal) close;ods listing;\n") @@ -1237,12 +1246,17 @@ def submit(self, code: str, results: str ="html", prompt: dict = None, **kwargs) if excpcnt < 0: raise - logd = self._getlog(jobid).replace(chr(12), chr(10)) + logs = self._getlog(jobid, lines) + + if not lines: + logd = logs + else: + logd, logl = logs if ods: - lstd = self._getlst(jobid).replace(chr(12), chr(10)) + lstd = self._getlst(jobid) else: - lstd = self._getlsttxt(jobid).replace(chr(12), chr(10)) + lstd = self._getlsttxt(jobid) trip = lstd.rpartition("/*]]>*/") if len(trip[1]) > 0 and len(trip[2]) < 200: @@ -1263,6 +1277,10 @@ def submit(self, code: str, results: str ="html", prompt: dict = None, **kwargs) resp = req.read() conn.close() + if lines: + logd = list(logl) + del(logl) + return dict(LOG=logd, LST=lstd) def saslog(self): @@ -1696,7 +1714,7 @@ def dataframe2sasdata(self, df: '', table: str ='a', code += "end;\n" code += "datalines4;" jobid = self._asubmit(code, "text") - self._log += self._getlog(jobid).replace(chr(12), chr(10)) + self._log += self._getlog(jobid) blksz = int(kwargs.get('blocksize', 1000000)) noencode = self._sb.sascei == 'utf-8' or encode_errors == 'ignore' @@ -1751,7 +1769,7 @@ def dataframe2sasdata(self, df: '', table: str ='a', code = code.encode(self.sascfg.encoding, errors='replace').decode(self.sascfg.encoding) jobid = self._asubmit(code, "text") - self._log += self._getlog(jobid).replace(chr(12), chr(10)) + self._log += self._getlog(jobid) code = "" if not noencode and len(code) > 0: @@ -1769,7 +1787,7 @@ def dataframe2sasdata(self, df: '', table: str ='a', code = code.encode(self.sascfg.encoding, errors='replace').decode(self.sascfg.encoding) jobid = self._asubmit(code+";;;;\n;;;;", "text") - self._log += self._getlog(jobid).replace(chr(12), chr(10)) + self._log += self._getlog(jobid) ll = self.submit("quit;", 'text') return None diff --git a/saspy/sasioiom.py b/saspy/sasioiom.py index f4c91c46..2f816e6a 100644 --- a/saspy/sasioiom.py +++ b/saspy/sasioiom.py @@ -858,6 +858,7 @@ def submit(self, code: str, results: str ="html", prompt: dict = None, **kwargs) prompt = prompt if prompt is not None else {} printto = kwargs.pop('undo', False) cancel = kwargs.pop('cancel', False) + lines = kwargs.pop('loglines', False) #odsopen = b"ods listing close;ods html5 (id=saspy_internal) file=STDOUT options(bitmap_mode='inline') device=svg; ods graphics on / outputfmt=png;\n" odsopen = b"ods listing close;ods "+self.sascfg.output.encode()+ \ @@ -952,6 +953,8 @@ def submit(self, code: str, results: str ="html", prompt: dict = None, **kwargs) if printto: self.stdin[0].send(b'\ntom says EOL=PRINTTO \n') + if lines: + self.stdin[0].send(b'\ntom says EOL=LOGLINES \n') self.stdin[0].send(pgm+b'tom says EOL='+logcodeo+b'\n') while not done: @@ -1053,27 +1056,46 @@ def submit(self, code: str, results: str ="html", prompt: dict = None, **kwargs) except UnicodeDecodeError: lstf = lstf.decode(errors='replace') - logf = logf.decode(errors='replace').replace(chr(12), chr(10)) - trip = lstf.rpartition("/*]]>*/") if len(trip[1]) > 0 and len(trip[2]) < 200: lstf = '' + lstd = lstf.replace(chr(12), chr(10)).replace('', + '').replace("font-size: x-small;", + "font-size: normal;") + logf = logf.decode(errors='replace').replace(chr(12), chr(20)) self._log += logf final = logf.partition(logcodei) + types = final[2].encode() z = final[0].rpartition(chr(10)) prev = '%08d' % (self._log_cnt - 1) zz = z[0].rpartition("\nE3969440A681A24088859985" + prev +'\n') - logd = zz[2].replace(mj.decode(), '').replace(chr(12), chr(10)) + logd = zz[2].replace(mj.decode(), '') - lstd = lstf.replace(chr(12), chr(10)).replace('', - '').replace("font-size: x-small;", - "font-size: normal;") if logd.count('\nERROR:') > 0: warnings.warn("Noticed 'ERROR:' in LOG, you ought to take a look and see if there was a problem") self._sb.check_error_log = True self._sb._lastlog = logd + + if lines: + while True: + try: + types += self.stderr[0].recv(4096000) + except (BlockingIOError): + pass + if types.count(logcodeo) >= 1: + break + sas_linetype_mapping + types = types.partition(b"TomSaysTypes=")[2] + types = list(types.rpartition(logcodeo)[0].decode(errors='replace')) + + logl = [] + logs = logd.split('\n') + for i in range(len(logs)): + logl.append({'line':logs[i], 'type':sas_linetype_mapping[int(types[i])]}) + logd = logl + return dict(LOG=logd, LST=lstd) def _breakprompt(self, eos, cancel): @@ -2299,3 +2321,18 @@ def read(self, size=4096): else: return datap.decode(self._io.sascfg.encoding, errors=self.errs) +sas_linetype_mapping = { +0 : "Normal", +1 : "Hilighted", +2 : "Source", +3 : "Title", +4 : "Byline", +5 : "Footnote", +6 : "Error", +7 : "Warning", +8 : "Note", +9 : "Message" +} + + +