From 7b90b5af57e8373044d059edad1309a290199f3a Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 16 May 2021 17:42:09 +0200 Subject: [PATCH] Added docs for cpl.console --- docs/build/doctrees/cpl.configuration.doctree | Bin 109008 -> 118311 bytes docs/build/doctrees/cpl.console.doctree | Bin 113074 -> 163800 bytes docs/build/doctrees/cpl.database.doctree | Bin 27794 -> 28715 bytes docs/build/doctrees/cpl.logging.doctree | Bin 80064 -> 80952 bytes docs/build/doctrees/cpl.mailing.doctree | Bin 62325 -> 63246 bytes docs/build/doctrees/cpl.time.doctree | Bin 21315 -> 22200 bytes docs/build/doctrees/environment.pickle | Bin 126993 -> 126993 bytes docs/build/html/cpl.configuration.html | 81 +++-- docs/build/html/cpl.console.html | 269 ++++++++++----- docs/build/html/cpl.database.html | 7 +- docs/build/html/cpl.logging.html | 7 +- docs/build/html/cpl.mailing.html | 7 +- docs/build/html/cpl.time.html | 7 +- docs/build/html/searchindex.js | 2 +- src/cpl/configuration/configuration.py | 11 + src/cpl/configuration/configuration_abc.py | 5 + src/cpl/console/console.py | 310 ++++++++++-------- src/cpl/console/console_call.py | 14 +- src/cpl/console/spinner_thread.py | 42 +-- 19 files changed, 479 insertions(+), 283 deletions(-) diff --git a/docs/build/doctrees/cpl.configuration.doctree b/docs/build/doctrees/cpl.configuration.doctree index 412dbfb9e44f13bbadd4c77a8b79758d3f9375f1..0afb489bdcd6541fc678ddbae29d45c60b3f1ae2 100644 GIT binary patch literal 118311 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,Z@0i2_~}UNZMd}5 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 Om534y?4>ug?f(N2DbG6q literal 109008 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 XU#cFnO?HFhxN%hMu|#c7?Hl=j=WV5_ delta 15861 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 Ux9D;#yzjF+5OHF|5_bLn0?UB%QUCw| diff --git a/docs/build/doctrees/cpl.database.doctree b/docs/build/doctrees/cpl.database.doctree index 853bad45173579a2bc9cb35279a5f68886d5bd2b..451e1917878a0067c752d8420a0b21cba20b15bc 100644 GIT binary patch delta 2249 zcmZ{lZA_C_6vw$wpB9jo7Zn7`OH0kbi3p0@fRvZ6yacq03>ge3r9R>IwiZTPrzQ$~ zFlMG%+)fvhWgEkpWeHh)X|j!Iq9z)*_yLuTWlM-#vL$l~ar$8&)NDKVK5eO6*AKVP zbMCqS^Lx&@_nvouAhSOa?WFcS)7S;=(iYfk%_2s4xW$+rrm1_wG%qCHVE@*^37Q_t z81|03Jp0}Vjs}!4gf~oukA^F#mg=}O%O@!*F;i%rUkL={Ot&Rf^YH_;8!YmDR@n5kIr0FLlJfsJy|tmewZ2!*vCay>qjf>R1lXBtth$8=dDEVo4W4Qo9V314i6P-Q)~RSzjif z!wsv2oP+z;7I{_;TO{f-C-b`GsCD@WXGC2XgHIZNO+CZahoh;#wIV+aSDHH0zU2lZ zyNg+TOr}BK@&re+yA>u{4KQG9B!9*-LLNotZ3TpAVaBn|{D`l^Iw7*G{qI*U$G)TtrZx=`2phrI?jtsgCJK_)$iwiR zVdz|d<&F;0EkI&s1lg4Yq)r=6cXb9&vq*TT9Gty{aJw@T(mIz&156Aw8yceWLPvlF z1lXY{7&NunVX^B*ld zMqi6Wu^fYg(s&$;_#!_Kt|royO66M-n@mFGPDW)$sxr9x`uCDYCGsSS2%@tp(Px6l zFwGA@kwg7tXenQ>x33(DewZApA{XJ@P@eRK@Gr?t^p9U76>KZoLly9(wj{F7c~c_4 zNA9_%HD%W^JiEpjJe1PYG|X0`Bg^8$Wj;3tACIgpWWxvUff9_GADc}xxm8w`v zF8F_scq7G@Y-FRD3%vG=z?7YiuU>o&4r5@0*BwyCo!)(-ohLN%(3)M&apwUAXIE{C z{bFI0&OIA&LJeriV@G)z)R1^L@t(?W^M~n$-CD15Q1OPlc4gUb?7@ueW delta 1605 zcmbW1ZERCj7=Ssax25Y^Sb>eLt=kFv|=kMrHmIe&9Lxwrkx_|Gc^P z{d(SybIzN$(a9S~JEeVf`p`StpC5s@o7N>=U6bKwq-Z=Q2IKMQSSS&fVq$z!JUBKQ zH@G9gXmCP|N%8nt_^FuN;Eqc1L^SM9leHshQkMFk(J!WtrJqmRiIzfJlOG0~Dq(hb zEqvv21W7T~gX0WP)P<~Fmr7OuDh*etLJr_m&=aUgA(wqr&D-ZCD|aet{f)? zxaM>gA7nbZ8!_R4nT{nE73r)sp2%mE;Em2bMW?yKN?+q$+d(WbK;6#I^b*&y0YapH zJGi>uMG}}FuLFx$Lhth#;CTTq3|)oft^xd|GE8wk8^X%|LV^6ZIhi%ri>X77bQd9f zk$2-UT`Y`&Iaeu&_2u{v0q*Xrz{>)ddp0q0^)nFz zX05VKL95ox3Md0}_eS&}hg|4ek1*15q!AT*UEbG#-C9mVJD{YeGz(kk|1=9b=R1st zRM>z#{AeA*qbh75pC+Wh`alfqK@QpOFGaXtW%U<2an?&JYo>tJFqj{%1zrglp>@cE z=Tzny`TUR-;qxlDxfbeb|UtqOUx3a)){<-RUY|}w?pqGvK$dej`8X+0%Ff|s2y2{}jntd74W_^9G(QC0|Ix@lg?_{6f_z1q)$E;NOghcMEAkN+-iaEXqA4M^K7Z(5G+3qFOTmxa|q=Xv+|fwTq`u}2kvg(c#@iO z5og&#&%&)k`u^Obmn&E;UJG#gPKMQml2Rr4a LiDCqQO>X}eK~?4j diff --git a/docs/build/doctrees/cpl.logging.doctree b/docs/build/doctrees/cpl.logging.doctree index 80002b8a5813fd402d8076fc28ea61053aa1abbf..9776b4f5c7d42ecd5c34157810f62f5b5a1dc465 100644 GIT binary patch delta 2304 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 diff --git a/docs/build/doctrees/cpl.mailing.doctree b/docs/build/doctrees/cpl.mailing.doctree index f416c838e08c6982b9e5e863a7e3dc6bec5083da..aed500ece6ddabd203973b0cc27758f995f28a1d 100644 GIT binary patch delta 2345 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 delta 1454 zcmZ`(VQ5=b6z;jtWJ#OQ>fYj-H1XBWnWk;lu8roU+w8Ki+1ACZ1L=Mgn$+mqU02&C z5%!}hRG~=N94FnR%I09qKP^}u==6t9MN!bPF;Ob*(1G9&l?sA781tUnCh1E3bKbk> zp7VX*IrrRqc@93m1eRAU)8WJO7FENWS`~z_NAomPMn;q4$>Ulkoy{H{c|H@VjEtwV zx$%)m!PqoVFkE>V=l=gVOlwEbw7YRYwc+B!5jM{7g6d)~GEDkaGuDs-mS;HsK&yot z9zKOj+x}s1k)uPKVigqz7>ZHHXXw`(&!y6aZ=&Egw1EPjG@G`2fW5}>{#eAZHWrh5 z3;TG5=rc)#->P=}x4RxU`$M(gh*;hZ6%~2Q&~P%7De#b3@N3LW`VRtIBzFJSoDndp zg`|ZNve9ICd!2Z?L&wHImMt*zeBeD0Up&-2$*Pr76;*gHa1|F?PB5Qz)=UVTDy3A7 z7Yo4@Yo@&p$36b=j$;tTi#uA`9tFpIJ{)yzs^qtYJb@4?xf=OjE3UQ4gukvuRt4vx zQJ-NoF7cq)r<$G>?exmnUJ#%*1wq?}KeR^SIdr$}hB54KYhW1#U#^d^7l`s9ylS`M zPi@sOfy-?>Z7IrL;z11Tyd{#H?TvvatNnoeO>%hn8LH8bm)ozykokHC01RQG zxd}fA8SEojzwLdB6sL@P!#A+?@hJOR_UsWFhvJ@){FP+5cLL_AynPTfonZ$sQxSup zJIz%*nIk9RHwE9&YuU1b7hQ%Tb#CX$Gi%i*w&jOX@eVji;~>(Le|CC9fqI(&CIuZerDh@UpjbR zd3u>Jekb!i-S-=0ex>Cv!sPPyk>v4o_QYs9QxFddr|7thjLWEa&d|tD0ERhdS?^!AhZRNrIXNkXM}N}|fQLg*07BO($%t$k1tOZ>1;gMR$6&(w>LNiM~$ kqH6gl@Ok>9QRjEa(9rR2GIaQSn#_#(<>4y8iDx?h12u1_mH+?% diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 4f3ac7213c4d80ec4f66dc1a364052c75118486f..5602a7f4f438cb18f94ed40a1a5adcab4f23d304 100644 GIT binary patch delta 7404 zcmZ`-cU)A*_U9O-3GA{Kun>U-X@Xclv0^W%K~bY(p@_2AW$!j176fA~C@N&oV{fs= zie44FA<@K$1yj^m0-9)&7fnolFUkA7MDxy_SysvC^ZRGNbIzGlX3m*2bGNL{t*p+i z;?K5B8_+!7Ek~Z7Ys|8hmozb$rf0oXUZTk~8)MSVW}_i9-ENRg{mO~>a-C#7BW;!UNJaZOBqGSVcwljyzsf;{N$u`DGO4qkYRwre> z>?-9uDSPrWDbGpGt{p7Ra#C|*QY7gmHK~^62KDq%7qY56yre685FE_{yG60l!M#~< za7R|F@51up^(-$&%St=8MUOVnl-&#N#txIPnLdgH8Yb(bJWBcc$q0)L)w4e$JF)oi zXqFO^z?O6lcAC+J^yiw3yCtwsLOVOOJFu|!@owslsrqu)&RqBRNPiX;)*8Z?rE5#3 z4{rvce58$VW1eB2kjM(7<5+EbZ|KKI8`}G@L18wwxN|T?qwcuF8l;juksS;VU^lyK zSYbp2>)c@s>k=8sa^pj2zMj3)p*QS!_o?o}!3uo!F|50c=97hVR+nI4#kk z3}U0$kT`X%!lRnT;@FYuT#>@JJBKl^a1C1(*P1Qt(8sa(VYJi*9iuQj0DQbvccr`n z>sRI4C5(*?>CQ9yNo-G^HCw|~vvpnK*$-iQwyAppbB%2e!RiXUY<4T1GQNN)wt##t z?$V6c)qt+iY7GiS^0+70F0I*|1aDT6(5_KQdo^xPYA^Pzx9qCNJ_$kWdctJLVI6whU=RB0Szymx zFt8Urg4wifP1xC{fPb_M+D~_PmFlnb$O7b9)!DPiao+ z>|mDIX9`Q{t!E$fDQ3(2sn(h>OJ6e^MwUCQZp8u;$1)&(o2{+b0UBEp^(` zX!a-R9qeadt9$C%^U6pzy?+*~B7aZ%n|OLHUX>PS5x zQlUCh%UxQbj?@yCHmD=D4N32-BeexdmFh@MwRBM(shvmqTpg+VDm_p~YR8d&eoarm zYP*r1t4y`kNKG5Nxa5{Jw#%8e@`CbkDM$HhKoGE^g}%&uxEbp==nUj2F9w}z#Lkw> zv=0Gn;II_-d<_>Xr-!8g5jrI>>6{om8*xPpu8lg*2dp;7n?)yiDTk5`Kq=7_nj9%< z&327RVF80elz^1cKm%W;aO`<8cw_txK41j}K1$yS_XRh4QjHk+OkM_TWu;6BHL~+3 zMKCyZA`qctiMzcOO?Xv2;pLcfOcj{RE}jihBIZm38u+qU z=A+J6D(0Ty45greR_AS#sX)Wnj=~f+J72hHQOYREM`~n|*8VqeQHWJ*Gb;SpTeB$zQV2dl%B518uy9lJKln@uj$E2~%S;SA-CGRl`KSwGiX>B91uk&?&!e+aU&f z-m4S?%g(c6khuFMAMgZ>+#P@wcj?Bgu=pyb_eTKRzeT1~Y+!ZUgvsOks4VNY>6BIn zsHkbc=3BgRsS!ezh(l9=1wD0JJEIV7KZsE(UXH(cJna^WCoULH3 zBrV&2s;zSI+!^4lBnfyQNovBINRlh>AOvdrAg0|-QoElXzPku4aeKAjcF<(_NPkb@YdofRYG0%E2PkJ%Wc`;9UG0%80&s8y*erq;l zfD!M`h7kneb6_07{5de1pk@vv69mnLegv6wIdya{OeD%@9;6Y-^I#Ccv3c+&fp-CC znhId1oBD>8uK1wlF|=UsCHuQcn{~u7qINzc(%jMWA(i03e6HD~5PE|F2Nc2(g5`xU z*_B_C57E2;24HLv_!ECv5u_9BD}pQn-vtzj0cR~Brv|*T05S<;--b8cxauE1sJ#O% zaAzSz;?=joU$Fn{gFX!WaqS|?OW;CqBc4oNZZ3s9f|12gAcBm=s+G_j zzb%F-g3(1VQkU_4IkSwm+knrP!3ZJlg=Oo&pRIk^L6dGY(1)0<+z~o%Urxnfz$PV- zO<*daVld!^5*Sa=W<`BYMj@<&*V+BYEwEw*xViE-%oyyq4q6j4V$I5W-Z<4$01Nys z(ksK5o8@q0!nBo?dJ~>m2~&mgR1tC1M(|cGur2>}b8IKKosO^pf>b*=Vgoc4I@491 zB;2zBd<0{rFjBKY81ag+W=(gxTvdP#|8D-FhLY!YlTW`Xn zWiX83MHvhbM&^kv(EeMi%QR-CTkHL(HDBnId1o4B`py-*Yr+rTrL$r}cX~z&D@*a0 za)`kK2Ht|P+^Nbs{_N^FF(#~LFkDP16VY`nhj8AIq;d@=U!nsx{#med`o?l9G7~;2 zr^K5udNtLy3Fobbkp!2C5~g-x1wsr<{?JKt)s zzg(Cep}z>{mCj38yc!J2a(1*aV76ubktc4_kzt%!u zf?n%*_$BM$O%Z90n*JoLSP4x@oVcFOjtRG{hsmnWdPo(s?x|Z7g!4B*cfqI?dqwr& z*zSjdK~*+@H06yjh2ZK&=t&CnezxOX$viv|C^872^n+(Mxea|=u(@Z3tr+=A1$!We?et#r67=(CNw zpao}aqy4bpfo*g?EaeWa-r5E2G1-gU9`pit z$1d2>YZo;wJ6d*8J=yX6E?Sfw+wG>_WXEL!e%lSRh)Ul>8=Z?g_fS4_@wYuNi6HrX z4*TAx=9G(Gdm+`0f90fU@i400x;cc_S4}Qf?4|9=MYny__jA!8pn4z7B&y4PYF4?p zWlNVY%4f~Pntim$a|fvOWb`}; zGYBjP!9Z|Vz@S55CF;Z>TB(e#6;yXJW>tWh;ARDw2nHR79AR%gMjU}uUmJZ^8?)^6 zub4RXGKL)C3agL6Y*NrDJlcs0(AC%%3fG$f5VO*PD=KfIIQP(L3b>Trz<-0Ecm-} z_HTIlER4fV#GvWN&w^D<|5J+(7Lv>3aWL3vwCo(^#=Pb{?X($(pQi#f9?QrNA(yC+KBRn^vG+$DDnC+9V*3kRw($ZLwi)X#(8igu z>qW>AQFg*#u2A7sT%?4Nb>b7GeOxc@A;kAShS$M{e|`)-2;x7XJB5GA55%e(%4FaW z(E7w=S*>#YtzyITpTIydX*dR4hEOaT3_jTF65ShIbtG=P04?#SOAz2?FwKx1#b?8n zm+BQ$oKwQdtKX;8r)-$~DK$SEmV63>grRAw`L5XXGI$Z+|1u@ohEoOXxD12EtXU#b z?QqaFbQfD)Z^-g;3LdJa#%;sX)zFLJKh=~M8}`2fV}!K=bz25u?G^6x$rTtc_zT5$ zO}z%4aK%-+_W4p53+|DtJo2Be*3T|+&h8~9t`dx+*C2%4eRYjGs|^FM)5F$=*6Wlx z8-9Ep#uButp@*#vjWyJ#Yxr_*J{jL+#(v*Py8>3*@|qt7YnRt)@tu4XHye?eCh|L^7seo##b zJog0z5x>sK{|u9FfgXz{(b*NJo3y^9>a*g`FX_c>#c#f($GH_lZ*s$FHz{LQ+;x*y zWW_&j(lV`>bc-%qD=xc5TVTZ-wTknn;rn+CtRdf}x9O>4#gA{(qOI8GD;{?0 zSF|Tq-1imrJ}Y|Op(iGf*B#4hN$1`j=R62f9(4ZTuG^c;!xoR|DCFVjN6<~o%+X;oqnSG%L8#!EbvXJKaUMMaJx%p^ z3<(4S9zzU)^)VG{9`1Nd+nI+yKc*ti!=B&4K!PFyVPYv6rH3ZgeFxzr@c15j^yZ&< zyM0_-vWH|3DYlm{D3^|?-*{{NTwKD%-<_2Wq*bp-vFLjUpbx;!Dj4vLfI9;ILy*cp zrNT6?nt!vI(>#|ZG?3=Kl!|YX2GVV>NYVTQc{Slm0s949R>6Yb6QuHY*NX-Q@|!!I zb7?E>tD&uVDdn%I&JCpRzaqu7f03VDoG)Ob3NoG&aGM~N-|xE`80gu;>6}ZCHIR<_ zhx9@N>6BNbnEWHTGowjBiGaN-*zgiTDsOcYeP3N$mzGZFT$;*O0q6Q0yDED#4-EqLhD1y&eP&AN5$6jKM z6+IQZA<;Y|7Bq<_mWU>r2Gc6PrjuTz!RsVaYO zpV&OZq^~ITpx@Zp>3Qk1(k+=4rQV#(Fy_qB&CSnE&(j%mDoWisPj8$%SC=!lqSOx; z`GcQ(MQKZ2&g{%LD@uKFoEm(?DoS1Xy!hJ3*4I0vQdNOEx5^$kek*=AO)9`^`L?qw)?jtuP&q4in zUNz4Ml0bWrW9Q7Ldxoi4j61_#x1n7?9iPy=mQihjI< z9Mxv5Vs%jCo7E_}4r)SCcg5tOrtHm7avaoDr${Bgfr^>T@`L)g@{PPx5m6e)yu+eg z(`RMGn&wrMc4y`ge-;_i%57#nD_XF0!L6Bha6fh>A%u+&>jH81iGFNpq?#3lv}Yr` z#4}@P2$~Y1CHpn1H9H*Fp1lh8axW8Ma@cB4ikW-ZaF!OD$d+~v=IYqQ=y>*7WC-gT z9n8X_5?M`rUv@gID_h$smW6jpaOI)p8V0f(;XT*~;a-p=Mup*?5XO!K2e5wOZtP;G zcy>M9!k#CnnI<$?XzUZOW*358m`8Xk(iY=dCK5xs*yf0tEHgfqE$JN6WJOe>nt8>z zGIf+U4sZr{78luqE$G>cb&p&?o8g({u5^Ak#+T;!i1kaN2e6W;ct~MeBL=d6boOT5 zJC75)$?l?I>KJ#nExMhWhqz26pDTEc<|Z-!Sa0&8A6bkN!L8RcMo6#3s2!TZJ8{2) zSY^-FgdUAF@&e)-MJ`2r)8f0ay4YxnC0`RIQa2*O-&vPqF=b}3^3X^YoY0B=H%cSY zgk99a*{yM78gdvE)ruX83wSrqQ>0`~r!MSQa$#n7HJcjm!H)M-b1|h@&6Y$>U@Nd!`WYv-!34=5Yg-JhN4-U_;j(TpA* zSUkxd|G_fq^y(&DPU#uV zwj@NeoP;>85JK3CptdTDA&+{(EOsL@f=WYO$?|7^_MOBw z_YYyFwJq8Fe#LC%zz|k8FPPfdbTF_j{r9s+1GuJ^%sjxvUiJ=Q(QDeWfTW2GXlA=@ zZP`H@o0CFV{F#{Z8II8z6(_*AJ1h63^C$M=|A-0_vIRS{!+5(f$%fXA$SLNXP*b`#F9vVDZOtOdV zaEcDt>MEl>9sX?h_zCR7DXA!6!Z;v8Yb%~eiufSq^;$7t3kyAM1ExHX+}Jm6$bouV z39zgzBPCSN-Z4roIAbahp=C*XJZrZMRHd#fzn9etFqIgqFQl?#Z4RT=B3QbhKT`Kg_v-?76{(b2{KQPip@)i@j~1 zTSo(1T4|(W%xASnrIyIIW&#mf+lKkK;BzpV!lp|$U17z){onbO9VlXT!-%+#`*r)nU_w)ym= zW-Mr)ks5|K%RM)N=?ld?_Wij^$Y+~RceY(Re-=b9Ne0nKl3R){lI$#62m$XO#N^E* zxw+^Z1iWn|t3=O8ZXp^5&E(yJfVT>o!utftc#lYKCK^OCYN6Cat1@yVP9zH1D2|q81V4{ebwW^5Y!5+RV^mNbZ^M5nw164E?}zC znP85K3r_`E&&NA&!stodmlBck5|Qx|k?<0+mlBcg5|Ql^k?azY>k^Ub5|QZ=k?0bU z=Ms^j5>oxwTStyt}g)mpeU&+c+?WA(Oy+5qXl0*^9_%HeOu>83b{E zgUKqf^fxcm+=Vu{s|cd-+TXxWvj69WUJU$j-4aSx;9^kGqKL&XmcY7LsJOQn=1S|% z=vE5hEah$>zVkM;rzr>C2EEkdp+@r}h{MVy(3aKQarcn>6QmEm|)Ac&~eza8B zUB~xUQZZy>%TmZ9$SI{_$i|DM@H#=eRrNU;i?AL#um?}uVC5=MIg6*ucpSJM{D~R4 zc6B{(61Nn<0>6#&n5ECpw3{(w+G2c>x;K?rrZ1jz3jEEEY2Gl#G>*rL4=3&h`^y#u^5rP5j{w!jpEFTD6m)$L6qWcI=%~S)CD00IK8BVU<_!Jt#(Ur+Wx;mY ztM|mB)E$r`1rc_^*E?XW7yn*A`B zsBQg0~Bim)*Ya}FFuauX)x_3HAMX>`x6+8+k+O<+JXjeRD!d!n6&_F_tPfN zAEeSVpxYssLts7xI)Zx=h8~7oqD~&Bof^=&lIqTYnU!E7xLpZ31VfL2LF(Ipkw+ob z+d_YS=`-`_4>)=14H$Y#q-+`R$w^A60mq%9EF19bDe7YuY<8OJ#)7G* z=|&XaqF+-Aiz$Uu;-L?AI0I^u#-5=X7Sitt_v~`v?-T zEP<}*sB_@wEZD!|nR74+Hxq-VpEw7(a{BKYe6*NMp6CI?97@a2Q*JD4FHoc{IO+lw zs0H_301H8f4?s__@&hmvyp)tu4S7U8tQNkE`4IAn`shQ-mj(NMB%taet`a+46tYbh zVes0UbQHh2NTqGT?w4Se^fMlRx=N*2d5Ka+`iW1F_Hn(qw-n$17&?F+fBzVI6D0hd zZWZwfKLo35DVKr6LE{yhnVV~@zgP5l;qNd+P8x*)S0D_Fhk+ONy-YWUSULu`Uj!fg z=Vb`+(B;fA+RIOmt1s6toZy%eK~{Y~p-!d8luxMr>9O<^7%CObPlQ?JO}Fa;0SQ0vy?nHuOz@ShsWj2;JFh4E5bArH$? ze0WvZe0CLHm;A*tTr;jiJg&M%7r)r*Qpr7fO?dv#YxT2B9kct&iSJ0pvFi{@=Dxg6 zy;YBaH|S}r$J`rK^m_dG223PqS4&S@J?d*Ioq9Z53quItCe^nd-?&Lm2-Bm~sa~u=ou+y7F+-s?VvbT5;Fs^kBB)*Pqkd+=^kh zh2pf^lrAgozD?V);%~QUk5){+LwBteSKOifTk+-{^4^LeU%)tN``;K?OSa3tpqGvn zKmLLOV#Rh}3b#|gq<~m)|CiMItmt-^UYNpP7c75BYwq8Lt{z!NOP;;jtXO@QVrE7E zdvv#2@y&abXe)krkGi)NL+^u0C6@bZ<#l%GK3%AS6VSjJ>0vVFHfS_IptCOKgxKf2 zd;npPiy>dZD1w}?V5&;|*%hP3%B|E3K3AY8`ac9u$&S-vU6o`H!U2!LnHH5kBsX*M z$wTUHxtLT(k;%nnb+pS|d|C$vxpI&&=*Jbd75_?Nppm{Ak{*FGcHuYi^&C*y^OB1- zkKir2ZiL-Yx~->3PO=uaU#Et4`!RF`6aM=#j35~BHF;sebzf7+P54~Gpl_fvQ8^Me zd;|Sd;t#ypTCA?2Z5;cC?y|r*Cc)%7X#A{hJ>VhM7eQlXk~=Ti!&34eS_MQp-8-_j8%9Xymh`#P7(4?&Z;KT>PAv5{tg1@`)><} zY&3-8aCKw#lUq5|3u&(=(t-x5{3K~2-QGxwrtitB8COdaptq(nX(*{yR897h630Bei8S^v(!NckLmQ+f SjC)STO*mFSmHs*GYW9Bv$l&h) diff --git a/docs/build/html/cpl.configuration.html b/docs/build/html/cpl.configuration.html index 4235fba0..7e3f735f 100644 --- a/docs/build/html/cpl.configuration.html +++ b/docs/build/html/cpl.configuration.html @@ -187,8 +187,12 @@ add_configuration(key_type: Union[str, type], value: cpl.configuration.configuration_model_abc.ConfigurationModelABC)ΒΆ

Add configuration object

-

key_type: Union[str, type] -value: cpl.configuration.configuration_model_abc.ConfigurationModelABC

+
+
key_type: Union[str, type]

Type of the value

+
+
value: cpl.configuration.configuration_model_abc.ConfigurationModelABC

Object of the value

+
+
@@ -197,7 +201,10 @@ value: add_console_argument(argument: cpl.configuration.console_argument.ConsoleArgument)ΒΆ

Adds console argument to known console arguments

-

argument: cpl.console.console_argument.ConsoleArgument

+
+
argument: cpl.configuration.console_argument.ConsoleArgument

Specifies the console argument

+
+
@@ -218,7 +225,10 @@ value: add_environment_variables(prefix: str)ΒΆ

Reads the environment variables

-

prefix: str

+
+
prefix: str

Prefix of the variables

+
+
@@ -227,10 +237,16 @@ value: add_json_file(name: str, optional: Optional[bool] = None, output: bool = True, path: Optional[str] = None)ΒΆ

Reads and saves settings from given json file

-

name (str): Name of the file -optional: str -output: bool -path: str

+
+
name: str

Name of the file

+
+
optional: str

Specifies whether an error should occur if the file was not found

+
+
output: bool

Specifies whether an output should take place

+
+
path: str

Path in which the file should be stored

+
+
@@ -254,7 +270,10 @@ path: get_configuration(search_type: Union[str, Type[cpl.configuration.configuration_model_abc.ConfigurationModelABC]])Union[str, collections.abc.Callable[cpl.configuration.configuration_model_abc.ConfigurationModelABC]]ΒΆ

Returns value from configuration by given type

-

search_type: Union[str, Type[cpl.configuration.configuration_model_abc.ConfigurationModelABC]]

+
+
search_type: Union[str, Type[cpl.configuration.configuration_model_abc.ConfigurationModelABC]]

Type to search for

+
+

Object of Union[str, Callable[cpl.configuration.configuration_model_abc.ConfigurationModelABC]]

@@ -275,8 +294,12 @@ path: abstract add_configuration(key_type: Union[str, type], value: cpl.configuration.configuration_model_abc.ConfigurationModelABC)ΒΆ

Add configuration object

-

key_type: Union[str, type] -value: cpl.configuration.configuration_model_abc.ConfigurationModelABC

+
+
key_type: Union[str, type]

Type of the value

+
+
value: cpl.configuration.configuration_model_abc.ConfigurationModelABC

Object of the value

+
+
@@ -285,7 +308,10 @@ value: abstract add_console_argument(argument: cpl.configuration.console_argument.ConsoleArgument
)ΒΆ

Adds console argument to known console arguments

-

argument: cpl.console.console_argument.ConsoleArgument

+
+
argument: cpl.configuration.console_argument.ConsoleArgument

Specifies the console argument

+
+
@@ -306,7 +332,10 @@ value: abstract add_environment_variables(prefix: str)ΒΆ

Reads the environment variables

-

prefix: str

+
+
prefix: str

Prefix of the variables

+
+
@@ -315,10 +344,16 @@ value: abstract add_json_file(name: str, optional: Optional[bool] = None, output: bool = True, path: Optional[str] = None)ΒΆ

Reads and saves settings from given json file

-

name (str): Name of the file -optional: str -output: bool -path: str

+
+
name: str

Name of the file

+
+
optional: str

Specifies whether an error should occur if the file was not found

+
+
output: bool

Specifies whether an output should take place

+
+
path: str

Path in which the file should be stored

+
+
@@ -342,7 +377,10 @@ path: abstract get_configuration(search_type: Union[str, Type[cpl.configuration.configuration_model_abc.ConfigurationModelABC]])Union[str, collections.abc.Callable[cpl.configuration.configuration_model_abc.ConfigurationModelABC]]ΒΆ

Returns value from configuration by given type

-

search_type: Union[str, Type[cpl.configuration.configuration_model_abc.ConfigurationModelABC]]

+
+
search_type: Union[str, Type[cpl.configuration.configuration_model_abc.ConfigurationModelABC]]

Type to search for

+
+

Object of Union[str, Callable[cpl.configuration.configuration_model_abc.ConfigurationModelABC]]

@@ -361,9 +399,10 @@ path:
abstract from_dict(settings: dict)ΒΆ
-

Converts attributes to dict -:param settings: -:return:

+

Converts attributes to dict

+
+

settings: dict

+
diff --git a/docs/build/html/cpl.console.html b/docs/build/html/cpl.console.html index 9b456b14..a5a47da4 100644 --- a/docs/build/html/cpl.console.html +++ b/docs/build/html/cpl.console.html @@ -246,53 +246,57 @@
classmethod banner(string: str)ΒΆ
-

Prints the string as a banner -:param string: -:return:

+

Prints the string as a banner

+
+
+
string: str

Message to print as banner

+
+
+
classmethod clear()ΒΆ
-

Clears the console -:return:

+

Clears the console

classmethod close()ΒΆ
-

Close the application -:return:

+

Closes the application

classmethod color_reset()ΒΆ
-

Resets color -:return:

+

Resets the color settings

classmethod disable()ΒΆ
-

Disable console interaction -:return:

+

Disables console interaction

classmethod enable()ΒΆ
-

Enable console interaction -:return:

+

Enables console interaction

classmethod error(string: str, tb: Optional[str] = None)ΒΆ
-

Prints an error with traceback -:param string: -:param tb: -:return:

+

Prints an error with traceback

+
+
+
string: str

Error message

+
+
tb: str

Error traceback

+
+
+
@@ -303,65 +307,106 @@
classmethod read(output: Optional[str] = None)strΒΆ
-

Read in line -:param output: -:return:

+

Reads in line

+
+
+
output: str

String to print before input

+
+
+
+
+

input()

+
classmethod read_line(output: Optional[str] = None)strΒΆ
-

Reads in next line -:param output: -:return:

+

Reads in next line

+
+
+
output: str

String to print before input

+
+
+
+
+

input()

+
classmethod reset_cursor_position()ΒΆ
-

Resets cursor position -:return:

+

Resets cursor position

classmethod select(char: str, message: str, options: list, header_foreground_color: Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum] = <ForegroundColorEnum.default: 'default'>, header_background_color: Union[str, cpl.console.background_color_enum.BackgroundColorEnum] = <BackgroundColorEnum.default: 'on_default'>, option_foreground_color: Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum] = <ForegroundColorEnum.default: 'default'>, option_background_color: Union[str, cpl.console.background_color_enum.BackgroundColorEnum] = <BackgroundColorEnum.default: 'on_default'>, cursor_foreground_color: Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum] = <ForegroundColorEnum.default: 'default'>, cursor_background_color: Union[str, cpl.console.background_color_enum.BackgroundColorEnum] = <BackgroundColorEnum.default: 'on_default'>)strΒΆ
-

Prints select menu -:param char: -:param message: -:param options: -:param header_foreground_color: -:param header_background_color: -:param option_foreground_color: -:param option_background_color: -:param cursor_foreground_color: -:param cursor_background_color: -:return: Selected option as str

+

Prints select menu

+
+
+
char: str

Character to show which element is selected

+
+
message: str

Message or header of the selection

+
+
options: List[str]

Selectable options

+
+
header_foreground_color: Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum]

Foreground color of the header

+
+
header_background_color: Union[str, cpl.console.background_color_enum.BackgroundColorEnum]

Background color of the header

+
+
option_foreground_color: Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum]

Foreground color of the options

+
+
option_background_color: Union[str, cpl.console.background_color_enum.BackgroundColorEnum]

Background color of the options

+
+
cursor_foreground_color: Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum]

Foreground color of the cursor

+
+
cursor_background_color: Union[str, cpl.console.background_color_enum.BackgroundColorEnum]

Background color of the cursor

+
+
+
+
+

Selected option as str

+
classmethod set_background_color(color: Union[cpl.console.background_color_enum.BackgroundColorEnum, str])ΒΆ
-

Sets the background color -:param color: -:return:

+

Sets the background color

+
+
+
color: Union[cpl.console.background_color_enum.BackgroundColorEnum, str]

Background color of the console

+
+
+
classmethod set_cursor_position(x: int, y: int)ΒΆ
-

Sets cursor position -:param x: -:param y: -:return:

+

Sets cursor position

+
+
+
x: int

X coordinate

+
+
y: int

Y coordinate

+
+
+
classmethod set_foreground_color(color: Union[cpl.console.foreground_color_enum.ForegroundColorEnum, str])ΒΆ
-

Sets the foreground color -:param color: -:return:

+

Sets the foreground color

+
+
+
color: Union[cpl.console.background_color_enum.BackgroundColorEnum, str]

Foreground color of the console

+
+
+
@@ -372,63 +417,102 @@
classmethod spinner(message: str, call: collections.abc.Callable, *args, text_foreground_color: Optional[Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum]] = None, spinner_foreground_color: Optional[Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum]] = None, text_background_color: Optional[Union[str, cpl.console.background_color_enum.BackgroundColorEnum]] = None, spinner_background_color: Optional[Union[str, cpl.console.background_color_enum.BackgroundColorEnum]] = None, **kwargs)anyΒΆ
-

Shows spinner and calls given function -When function has ended the spinner stops -:param message: -:param call: -:param args: -:param text_foreground_color: -:param spinner_foreground_color: -:param text_background_color: -:param spinner_background_color: -:param kwargs: -:return: Return value of call

+

Shows spinner and calls given function, when function has ended the spinner stops

+
+
+
message: str

Message of the spinner

+
+
call: Callable

Function to call

+
+
args: list

Arguments of the function

+
+
text_foreground_color: Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum]

Foreground color of the text

+
+
spinner_foreground_color: Union[str, cpl.console.foreground_color_enum.ForegroundColorEnum]

Foreground color of the spinner

+
+
text_background_color: Union[str, cpl.console.background_color_enum.BackgroundColorEnum]

Background color of the text

+
+
spinner_background_color: Union[str, cpl.console.background_color_enum.BackgroundColorEnum]

Background color of the spinner

+
+
kwargs: dict

Keyword arguments of the call

+
+
+
+
+

Return value of call

+
classmethod table(header: list, values: list)ΒΆ
-

Prints a table with header and values -:param header: -:param values: -:return:

+

Prints a table with header and values

+
+
+
header: List[str]

Header of the table

+
+
values: List[List[str]]

Values of the table

+
+
+
classmethod write(*args, end='')ΒΆ
-

Prints in active line -:param args: -:param end: -:return:

+

Prints in active line

+
+
+
args: list

Elements to print

+
+
end: str

Last character to print

+
+
+
classmethod write_at(x: int, y: int, *args)ΒΆ
-

Prints at given position -:param x: -:param y: -:param args: -:return:

+

Prints at given position

+
+
+
x: int

X coordinate

+
+
y: int

Y coordinate

+
+
args: list

Elements to print

+
+
+
classmethod write_line(*args)ΒΆ
-

Prints to new line -:param args: -:return:

+

Prints to new line

+
+
+
args: list

Elements to print

+
+
+
classmethod write_line_at(x: int, y: int, *args)ΒΆ
-

Prints new line at given position -:param x: -:param y: -:param args: -:return:

+

Prints new line at given position

+
+
+
x: int

X coordinate

+
+
y: int

Y coordinate

+
+
args: list

Elements to print

+
+
+
@@ -440,6 +524,15 @@ When function has ended the spinner stops
class cpl.console.console_call.ConsoleCall(function: collections.abc.Callable, *args)ΒΆ

Bases: object

+

Represents a console call, for hold back when spinner is active

+
+
+
function: Callable

Function to call

+
+
args: list

List of arguments

+
+
+
property argsΒΆ
@@ -514,25 +607,33 @@ When function has ended the spinner stops
class cpl.console.spinner_thread.SpinnerThread(msg_len: int, foreground_color: cpl.console.foreground_color_enum.ForegroundColorEnum, background_color: cpl.console.background_color_enum.BackgroundColorEnum)ΒΆ

Bases: threading.Thread

+

Thread to show spinner in terminal

+
+
+
msg_len: int

Length of the message

+
+
foreground_color: cpl.console.foreground_color.ForegroundColorEnum

Foreground color of the spinner

+
+
background_color: cpl.console.background_color.BackgroundColorEnum

Background color of the spinner

+
+
+
exit()ΒΆ
-

Stops the spinner -:return:

+

Stops the spinner

run()NoneΒΆ
-

Entry point of thread, shows the spinner -:return:

+

Entry point of thread, shows the spinner

stop_spinning()ΒΆ
-

Stops the spinner -:return:

+

Stops the spinner

diff --git a/docs/build/html/cpl.database.html b/docs/build/html/cpl.database.html index ae07374e..413f183d 100644 --- a/docs/build/html/cpl.database.html +++ b/docs/build/html/cpl.database.html @@ -236,9 +236,10 @@
from_dict(settings: dict)ΒΆ
-

Converts attributes to dict -:param settings: -:return:

+

Converts attributes to dict

+
+

settings: dict

+
diff --git a/docs/build/html/cpl.logging.html b/docs/build/html/cpl.logging.html index 6c82e33d..d4ce2d63 100644 --- a/docs/build/html/cpl.logging.html +++ b/docs/build/html/cpl.logging.html @@ -393,9 +393,10 @@
from_dict(settings: dict)ΒΆ
-

Converts attributes to dict -:param settings: -:return:

+

Converts attributes to dict

+
+

settings: dict

+
diff --git a/docs/build/html/cpl.mailing.html b/docs/build/html/cpl.mailing.html index f5e20219..3e8ea1f2 100644 --- a/docs/build/html/cpl.mailing.html +++ b/docs/build/html/cpl.mailing.html @@ -328,9 +328,10 @@
from_dict(settings: dict)ΒΆ
-

Converts attributes to dict -:param settings: -:return:

+

Converts attributes to dict

+
+

settings: dict

+
diff --git a/docs/build/html/cpl.time.html b/docs/build/html/cpl.time.html index 2d20b516..3868dfcb 100644 --- a/docs/build/html/cpl.time.html +++ b/docs/build/html/cpl.time.html @@ -197,9 +197,10 @@
from_dict(settings: dict)ΒΆ
-

Converts attributes to dict -:param settings: -:return:

+

Converts attributes to dict

+
+

settings: dict

+
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 4a466f51..b017381e 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["cpl","cpl.application","cpl.configuration","cpl.console","cpl.database","cpl.database.connection","cpl.database.context","cpl.dependency_injection","cpl.environment","cpl.logging","cpl.mailing","cpl.time","cpl.utils","index","modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["cpl.rst","cpl.application.rst","cpl.configuration.rst","cpl.console.rst","cpl.database.rst","cpl.database.connection.rst","cpl.database.context.rst","cpl.dependency_injection.rst","cpl.environment.rst","cpl.logging.rst","cpl.mailing.rst","cpl.time.rst","cpl.utils.rst","index.rst","modules.rst"],objects:{"cpl.application":{application_abc:[1,0,0,"-"],application_builder:[1,0,0,"-"],application_builder_abc:[1,0,0,"-"],startup_abc:[1,0,0,"-"]},"cpl.application.application_abc":{ApplicationABC:[1,1,1,""]},"cpl.application.application_abc.ApplicationABC":{configure:[1,2,1,""],main:[1,2,1,""],run:[1,2,1,""]},"cpl.application.application_builder":{ApplicationBuilder:[1,1,1,""]},"cpl.application.application_builder.ApplicationBuilder":{build:[1,2,1,""],use_startup:[1,2,1,""]},"cpl.application.application_builder_abc":{ApplicationBuilderABC:[1,1,1,""]},"cpl.application.application_builder_abc.ApplicationBuilderABC":{build:[1,2,1,""],use_startup:[1,2,1,""]},"cpl.application.startup_abc":{StartupABC:[1,1,1,""]},"cpl.application.startup_abc.StartupABC":{configure_configuration:[1,2,1,""],configure_services:[1,2,1,""]},"cpl.configuration":{configuration:[2,0,0,"-"],configuration_abc:[2,0,0,"-"],configuration_model_abc:[2,0,0,"-"],configuration_variable_name_enum:[2,0,0,"-"],console_argument:[2,0,0,"-"]},"cpl.configuration.configuration":{Configuration:[2,1,1,""]},"cpl.configuration.configuration.Configuration":{add_configuration:[2,2,1,""],add_console_argument:[2,2,1,""],add_console_arguments:[2,2,1,""],add_environment_variables:[2,2,1,""],add_json_file:[2,2,1,""],additional_arguments:[2,2,1,""],argument_error_function:[2,2,1,""],environment:[2,2,1,""],get_configuration:[2,2,1,""]},"cpl.configuration.configuration_abc":{ConfigurationABC:[2,1,1,""]},"cpl.configuration.configuration_abc.ConfigurationABC":{add_configuration:[2,2,1,""],add_console_argument:[2,2,1,""],add_console_arguments:[2,2,1,""],add_environment_variables:[2,2,1,""],add_json_file:[2,2,1,""],additional_arguments:[2,2,1,""],argument_error_function:[2,2,1,""],environment:[2,2,1,""],get_configuration:[2,2,1,""]},"cpl.configuration.configuration_model_abc":{ConfigurationModelABC:[2,1,1,""]},"cpl.configuration.configuration_model_abc.ConfigurationModelABC":{from_dict:[2,2,1,""]},"cpl.configuration.configuration_variable_name_enum":{ConfigurationVariableNameEnum:[2,1,1,""]},"cpl.configuration.configuration_variable_name_enum.ConfigurationVariableNameEnum":{customer:[2,3,1,""],environment:[2,3,1,""],name:[2,3,1,""],to_list:[2,2,1,""]},"cpl.configuration.console_argument":{ConsoleArgument:[2,1,1,""]},"cpl.configuration.console_argument.ConsoleArgument":{aliases:[2,2,1,""],console_arguments:[2,2,1,""],is_value_token_optional:[2,2,1,""],name:[2,2,1,""],token:[2,2,1,""],value_token:[2,2,1,""]},"cpl.console":{background_color_enum:[3,0,0,"-"],console:[3,0,0,"-"],console_call:[3,0,0,"-"],foreground_color_enum:[3,0,0,"-"],spinner_thread:[3,0,0,"-"]},"cpl.console.background_color_enum":{BackgroundColorEnum:[3,1,1,""]},"cpl.console.background_color_enum.BackgroundColorEnum":{"default":[3,3,1,""],blue:[3,3,1,""],cyan:[3,3,1,""],green:[3,3,1,""],grey:[3,3,1,""],magenta:[3,3,1,""],red:[3,3,1,""],white:[3,3,1,""],yellow:[3,3,1,""]},"cpl.console.console":{Console:[3,1,1,""]},"cpl.console.console.Console":{background_color:[3,3,1,""],banner:[3,2,1,""],clear:[3,2,1,""],close:[3,2,1,""],color_reset:[3,2,1,""],disable:[3,2,1,""],enable:[3,2,1,""],error:[3,2,1,""],foreground_color:[3,3,1,""],read:[3,2,1,""],read_line:[3,2,1,""],reset_cursor_position:[3,2,1,""],select:[3,2,1,""],set_background_color:[3,2,1,""],set_cursor_position:[3,2,1,""],set_foreground_color:[3,2,1,""],set_hold_back:[3,2,1,""],spinner:[3,2,1,""],table:[3,2,1,""],write:[3,2,1,""],write_at:[3,2,1,""],write_line:[3,2,1,""],write_line_at:[3,2,1,""]},"cpl.console.console_call":{ConsoleCall:[3,1,1,""]},"cpl.console.console_call.ConsoleCall":{"function":[3,2,1,""],args:[3,2,1,""]},"cpl.console.foreground_color_enum":{ForegroundColorEnum:[3,1,1,""]},"cpl.console.foreground_color_enum.ForegroundColorEnum":{"default":[3,3,1,""],blue:[3,3,1,""],cyan:[3,3,1,""],green:[3,3,1,""],grey:[3,3,1,""],magenta:[3,3,1,""],red:[3,3,1,""],white:[3,3,1,""],yellow:[3,3,1,""]},"cpl.console.spinner_thread":{SpinnerThread:[3,1,1,""]},"cpl.console.spinner_thread.SpinnerThread":{exit:[3,2,1,""],run:[3,2,1,""],stop_spinning:[3,2,1,""]},"cpl.database":{database_model:[4,0,0,"-"],database_settings:[4,0,0,"-"],database_settings_name_enum:[4,0,0,"-"]},"cpl.database.connection":{database_connection:[5,0,0,"-"],database_connection_abc:[5,0,0,"-"]},"cpl.database.connection.database_connection":{DatabaseConnection:[5,1,1,""]},"cpl.database.connection.database_connection.DatabaseConnection":{connect:[5,2,1,""],engine:[5,2,1,""],session:[5,2,1,""]},"cpl.database.connection.database_connection_abc":{DatabaseConnectionABC:[5,1,1,""]},"cpl.database.connection.database_connection_abc.DatabaseConnectionABC":{connect:[5,2,1,""],engine:[5,2,1,""],session:[5,2,1,""]},"cpl.database.context":{database_context:[6,0,0,"-"],database_context_abc:[6,0,0,"-"]},"cpl.database.context.database_context":{DatabaseContext:[6,1,1,""]},"cpl.database.context.database_context.DatabaseContext":{connect:[6,2,1,""],engine:[6,2,1,""],save_changes:[6,2,1,""],session:[6,2,1,""]},"cpl.database.context.database_context_abc":{DatabaseContextABC:[6,1,1,""]},"cpl.database.context.database_context_abc.DatabaseContextABC":{connect:[6,2,1,""],engine:[6,2,1,""],save_changes:[6,2,1,""],session:[6,2,1,""]},"cpl.database.database_settings":{DatabaseSettings:[4,1,1,""]},"cpl.database.database_settings.DatabaseSettings":{auth_plugin:[4,2,1,""],case_sensitive:[4,2,1,""],connection_string:[4,2,1,""],credentials:[4,2,1,""],echo:[4,2,1,""],encoding:[4,2,1,""],from_dict:[4,2,1,""]},"cpl.database.database_settings_name_enum":{DatabaseSettingsNameEnum:[4,1,1,""]},"cpl.database.database_settings_name_enum.DatabaseSettingsNameEnum":{auth_plugin:[4,3,1,""],case_sensitive:[4,3,1,""],connection_string:[4,3,1,""],credentials:[4,3,1,""],echo:[4,3,1,""],encoding:[4,3,1,""]},"cpl.dependency_injection":{service_collection:[7,0,0,"-"],service_collection_abc:[7,0,0,"-"],service_descriptor:[7,0,0,"-"],service_lifetime_enum:[7,0,0,"-"],service_provider:[7,0,0,"-"],service_provider_abc:[7,0,0,"-"]},"cpl.dependency_injection.service_collection":{ServiceCollection:[7,1,1,""]},"cpl.dependency_injection.service_collection.ServiceCollection":{add_db_context:[7,2,1,""],add_logging:[7,2,1,""],add_scoped:[7,2,1,""],add_singleton:[7,2,1,""],add_transient:[7,2,1,""],build_service_provider:[7,2,1,""]},"cpl.dependency_injection.service_collection_abc":{ServiceCollectionABC:[7,1,1,""]},"cpl.dependency_injection.service_collection_abc.ServiceCollectionABC":{add_db_context:[7,2,1,""],add_logging:[7,2,1,""],add_scoped:[7,2,1,""],add_singleton:[7,2,1,""],add_transient:[7,2,1,""],build_service_provider:[7,2,1,""]},"cpl.dependency_injection.service_descriptor":{ServiceDescriptor:[7,1,1,""]},"cpl.dependency_injection.service_descriptor.ServiceDescriptor":{implementation:[7,2,1,""],lifetime:[7,2,1,""],service_type:[7,2,1,""]},"cpl.dependency_injection.service_lifetime_enum":{ServiceLifetimeEnum:[7,1,1,""]},"cpl.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum":{"transient":[7,3,1,""],scoped:[7,3,1,""],singleton:[7,3,1,""]},"cpl.dependency_injection.service_provider":{ServiceProvider:[7,1,1,""]},"cpl.dependency_injection.service_provider.ServiceProvider":{build_service:[7,2,1,""],get_service:[7,2,1,""]},"cpl.dependency_injection.service_provider_abc":{ServiceProviderABC:[7,1,1,""]},"cpl.dependency_injection.service_provider_abc.ServiceProviderABC":{build_service:[7,2,1,""],get_service:[7,2,1,""]},"cpl.environment":{application_environment:[8,0,0,"-"],application_environment_abc:[8,0,0,"-"],environment_name_enum:[8,0,0,"-"]},"cpl.environment.application_environment":{ApplicationEnvironment:[8,1,1,""]},"cpl.environment.application_environment.ApplicationEnvironment":{application_name:[8,2,1,""],customer:[8,2,1,""],date_time_now:[8,2,1,""],end_time:[8,2,1,""],environment_name:[8,2,1,""],host_name:[8,2,1,""],runtime_directory:[8,2,1,""],set_runtime_directory:[8,2,1,""],set_working_directory:[8,2,1,""],start_time:[8,2,1,""],working_directory:[8,2,1,""]},"cpl.environment.application_environment_abc":{ApplicationEnvironmentABC:[8,1,1,""]},"cpl.environment.application_environment_abc.ApplicationEnvironmentABC":{application_name:[8,2,1,""],customer:[8,2,1,""],date_time_now:[8,2,1,""],end_time:[8,2,1,""],environment_name:[8,2,1,""],host_name:[8,2,1,""],runtime_directory:[8,2,1,""],set_runtime_directory:[8,2,1,""],set_working_directory:[8,2,1,""],start_time:[8,2,1,""],working_directory:[8,2,1,""]},"cpl.environment.environment_name_enum":{EnvironmentNameEnum:[8,1,1,""]},"cpl.environment.environment_name_enum.EnvironmentNameEnum":{development:[8,3,1,""],production:[8,3,1,""],staging:[8,3,1,""],testing:[8,3,1,""]},"cpl.logging":{logger_abc:[9,0,0,"-"],logger_service:[9,0,0,"-"],logging_level_enum:[9,0,0,"-"],logging_settings:[9,0,0,"-"],logging_settings_name_enum:[9,0,0,"-"]},"cpl.logging.logger_abc":{LoggerABC:[9,1,1,""]},"cpl.logging.logger_abc.LoggerABC":{debug:[9,2,1,""],error:[9,2,1,""],fatal:[9,2,1,""],header:[9,2,1,""],info:[9,2,1,""],trace:[9,2,1,""],warn:[9,2,1,""]},"cpl.logging.logger_service":{Logger:[9,1,1,""]},"cpl.logging.logger_service.Logger":{create:[9,2,1,""],debug:[9,2,1,""],error:[9,2,1,""],fatal:[9,2,1,""],header:[9,2,1,""],info:[9,2,1,""],trace:[9,2,1,""],warn:[9,2,1,""]},"cpl.logging.logging_level_enum":{LoggingLevelEnum:[9,1,1,""]},"cpl.logging.logging_level_enum.LoggingLevelEnum":{DEBUG:[9,3,1,""],ERROR:[9,3,1,""],FATAL:[9,3,1,""],INFO:[9,3,1,""],OFF:[9,3,1,""],TRACE:[9,3,1,""],WARN:[9,3,1,""]},"cpl.logging.logging_settings":{LoggingSettings:[9,1,1,""]},"cpl.logging.logging_settings.LoggingSettings":{console:[9,2,1,""],filename:[9,2,1,""],from_dict:[9,2,1,""],level:[9,2,1,""],path:[9,2,1,""]},"cpl.logging.logging_settings_name_enum":{LoggingSettingsNameEnum:[9,1,1,""]},"cpl.logging.logging_settings_name_enum.LoggingSettingsNameEnum":{console_level:[9,3,1,""],file_level:[9,3,1,""],filename:[9,3,1,""],path:[9,3,1,""]},"cpl.mailing":{email:[10,0,0,"-"],email_client_abc:[10,0,0,"-"],email_client_service:[10,0,0,"-"],email_client_settings:[10,0,0,"-"],email_client_settings_name_enum:[10,0,0,"-"]},"cpl.mailing.email":{EMail:[10,1,1,""]},"cpl.mailing.email.EMail":{add_header:[10,2,1,""],add_receiver:[10,2,1,""],body:[10,2,1,""],check_mail:[10,2,1,""],get_content:[10,2,1,""],header:[10,2,1,""],header_list:[10,2,1,""],receiver:[10,2,1,""],receiver_list:[10,2,1,""],subject:[10,2,1,""],transceiver:[10,2,1,""]},"cpl.mailing.email_client_abc":{EMailClientABC:[10,1,1,""]},"cpl.mailing.email_client_abc.EMailClientABC":{connect:[10,2,1,""],send_mail:[10,2,1,""]},"cpl.mailing.email_client_service":{EMailClient:[10,1,1,""]},"cpl.mailing.email_client_service.EMailClient":{connect:[10,2,1,""],create:[10,2,1,""],login:[10,2,1,""],send_mail:[10,2,1,""]},"cpl.mailing.email_client_settings":{EMailClientSettings:[10,1,1,""]},"cpl.mailing.email_client_settings.EMailClientSettings":{credentials:[10,2,1,""],from_dict:[10,2,1,""],host:[10,2,1,""],port:[10,2,1,""],user_name:[10,2,1,""]},"cpl.mailing.email_client_settings_name_enum":{EMailClientSettingsNameEnum:[10,1,1,""]},"cpl.mailing.email_client_settings_name_enum.EMailClientSettingsNameEnum":{credentials:[10,3,1,""],host:[10,3,1,""],port:[10,3,1,""],user_name:[10,3,1,""]},"cpl.time":{time_format_settings:[11,0,0,"-"],time_format_settings_names_enum:[11,0,0,"-"]},"cpl.time.time_format_settings":{TimeFormatSettings:[11,1,1,""]},"cpl.time.time_format_settings.TimeFormatSettings":{date_format:[11,2,1,""],date_time_format:[11,2,1,""],date_time_log_format:[11,2,1,""],from_dict:[11,2,1,""],time_format:[11,2,1,""]},"cpl.time.time_format_settings_names_enum":{TimeFormatSettingsNamesEnum:[11,1,1,""]},"cpl.time.time_format_settings_names_enum.TimeFormatSettingsNamesEnum":{date_format:[11,3,1,""],date_time_format:[11,3,1,""],date_time_log_format:[11,3,1,""],time_format:[11,3,1,""]},"cpl.utils":{credential_manager:[12,0,0,"-"],pip:[12,0,0,"-"],string:[12,0,0,"-"]},"cpl.utils.credential_manager":{CredentialManager:[12,1,1,""]},"cpl.utils.credential_manager.CredentialManager":{build_string:[12,2,1,""],decrypt:[12,2,1,""],encrypt:[12,2,1,""]},"cpl.utils.pip":{Pip:[12,1,1,""]},"cpl.utils.pip.Pip":{get_executable:[12,2,1,""],get_outdated:[12,2,1,""],get_package:[12,2,1,""],install:[12,2,1,""],reset_executable:[12,2,1,""],set_executable:[12,2,1,""],uninstall:[12,2,1,""]},"cpl.utils.string":{String:[12,1,1,""]},"cpl.utils.string.String":{convert_to_camel_case:[12,2,1,""],convert_to_snake_case:[12,2,1,""],first_to_lower:[12,2,1,""],first_to_upper:[12,2,1,""],random_string:[12,2,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute"},terms:{"abstract":[1,2,5,6,7,8,9,10],"byte":12,"case":12,"char":[3,12],"class":[1,2,3,4,5,6,7,8,9,10,11,12],"default":3,"enum":[2,3,4,7,8,9,10,11],"function":[3,12],"int":[3,12],"new":3,"return":[2,3,4,5,6,7,8,9,10,11,12],"static":[2,10,12],"transient":7,"true":2,The:13,These:13,Useful:[3,12],abc:[1,2,3,5,6,7,8,9,10],about:13,activ:3,add:[2,7,10],add_configur:2,add_console_argu:2,add_db_context:7,add_environment_vari:2,add_head:10,add_json_fil:2,add_log:7,add_receiv:10,add_scop:7,add_singleton:7,add_transi:7,additional_argu:2,address:10,alias:2,ani:3,app:[1,13],applic:[0,3,13,14],application_abc:[0,14],application_build:[0,14],application_builder_abc:[0,14],application_environ:[0,14],application_environment_abc:[0,9,10,14],application_nam:8,applicationabc:1,applicationbuild:1,applicationbuilderabc:1,applicationenviron:8,applicationenvironmentabc:[8,9,10],appset:1,arg:[1,3,6,12],argument:2,argument_error_funct:2,attribut:[2,4,9,10,11],auth_plugin:4,authplugin:4,background:3,background_color:3,background_color_enum:[0,14],backgroundcolorenum:3,banner:3,base64:12,base:[1,2,3,4,5,6,7,8,9,10,11,12],blue:3,bodi:10,bool:[2,3,10],build:[1,12],build_servic:7,build_service_provid:7,build_str:12,call:[1,3],callabl:[2,3,7],camel:12,can:13,case_sensit:4,casesensit:4,chang:6,check:10,check_mail:10,classmethod:[3,12],clear:3,close:3,collect:[2,3,7],color:3,color_reset:3,command:12,common:13,complex:13,config:[1,7],configur:[0,1,4,7,9,10,11,14],configuration_abc:[0,1,7,14],configuration_model_abc:[0,4,9,10,11,14],configuration_variable_name_enum:[0,14],configurationabc:[1,2,7],configurationmodelabc:[2,4,9,10,11],configurationvariablenameenum:2,configure_configur:1,configure_servic:1,connect:[0,4,6,10,14],connection_str:[4,5,6],connectionstr:4,consol:[0,2,9,14],console_argu:[0,14],console_cal:[0,14],console_level:9,consoleargu:2,consolecal:3,consoleloglevel:9,contain:1,context:[0,4,7,14],convert:[2,4,9,10,11,12],convert_to_camel_cas:12,convert_to_snake_cas:12,creat:[1,7,9,10,12,13],credenti:[4,10,12],credential_manag:[0,14],credentialmanag:12,current:8,cursor:3,cursor_background_color:3,cursor_foreground_color:3,custom:[1,2,8],cyan:3,databas:[0,7,14],database_connect:[0,4,14],database_connection_abc:[0,4,14],database_context:[0,4,14],database_context_abc:[0,4,7,14],database_model:[0,14],database_set:[0,5,6,7,14],database_settings_name_enum:[0,14],databaseconnect:5,databaseconnectionabc:5,databasecontext:6,databasecontextabc:[6,7],databaseset:[4,5,6,7],databasesettingsnameenum:4,date_format:11,date_time_format:11,date_time_log_format:11,date_time_now:8,dateformat:11,datetimeformat:11,datetimelogformat:11,db_context:7,db_context_typ:7,db_set:7,debug:9,decod:12,decrypt:12,defin:2,dependency_inject:[0,1,14],desktop:13,detail:13,develop:[8,13],dict:[2,4,9,10,11],directori:8,disabl:3,echo:4,effici:13,email:[0,14],email_client_abc:[0,14],email_client_servic:[0,14],email_client_set:[0,14],email_client_settings_name_enum:[0,14],emailcli:10,emailclientabc:10,emailclientset:10,emailclientsettingsnameenum:10,enabl:3,encod:[4,12],encrypt:12,end:3,end_tim:8,engin:[5,6],enterpris:13,entri:[1,3],enumer:[2,3,4,7,8,9,10,11],env:9,environ:[0,2,9,10,14],environment_nam:8,environment_name_enum:[0,14],environmentnameenum:8,error:[2,3,9],everyth:13,except:9,execut:12,exit:[3,9],fatal:9,file:2,file_level:9,fileloglevel:9,filenam:9,first:[12,13],first_to_low:12,first_to_upp:12,foreground:3,foreground_color:3,foreground_color_enum:[0,14],foregroundcolorenum:3,from:[1,2,13],from_dict:[2,4,9,10,11],get:12,get_configur:2,get_cont:10,get_execut:12,get_outd:12,get_packag:12,get_servic:7,given:[2,3,7,12],great:13,green:3,grei:3,handl:[3,12],has:3,header:[3,9,10],header_background_color:3,header_foreground_color:3,header_list:10,help:13,host:10,host_nam:8,implement:7,info:9,inform:9,input:3,instal:12,instanc:[1,7],instance_typ:7,interact:3,intern:7,invalid:2,is_value_token_opt:2,json:2,key_typ:2,known:2,kwarg:3,learn:13,length:12,level:9,librari:13,lifetim:7,line:3,list:[2,3,7,10,12],load:1,local:12,log:[0,10,14],logfil:9,logger:[7,9,10],logger_abc:[0,10,14],logger_servic:[0,14],loggerabc:[9,10],logging_level_enum:[0,14],logging_set:[0,14],logging_settings_name_enum:[0,14],logginglevelenum:9,loggingset:9,loggingsettingsnameenum:9,login:10,lower:12,magenta:3,mail:[0,14],mail_set:10,main:1,meant:13,menu:3,messag:[3,9],msg_len:3,name:[2,8,9],next:3,none:[2,3,7,9,10,12],object:[1,2,3,7,10,12],off:9,on_blu:3,on_cyan:3,on_default:3,on_green:3,on_grei:3,on_magenta:3,on_r:3,on_whit:3,on_yellow:3,option:[2,3,7,9,10,12],option_background_color:3,option_foreground_color:3,outdat:12,output:[2,3],packag:[12,13],page:13,param:[2,3,4,5,6,7,8,9,10,11,12],path:[2,9],pip:[0,14],platform:13,point:[1,3],port:10,posit:3,prefix:2,prepar:1,print:3,product:8,properti:[2,3,4,5,6,7,8,9,10,11],provid:[1,7],python:13,random:12,random_str:12,read:[2,3],read_lin:3,receiv:10,receiver_list:10,red:3,reset:[3,12],reset_cursor_posit:3,reset_execut:12,run:[1,3],runtim:8,runtime_directori:8,save:[2,6],save_chang:6,scope:7,search_typ:2,select:3,send:10,send_mail:10,server:[10,13],servic:[1,7],service_collect:[0,14],service_collection_abc:[0,14],service_descriptor:[0,14],service_lifetime_enum:[0,14],service_provid:[0,14],service_provider_abc:[0,1,14],service_typ:7,servicecollect:7,servicecollectionabc:7,servicedescriptor:7,servicelifetimeenum:7,serviceprovid:7,serviceproviderabc:[1,7],session:[5,6],set:[1,2,3,4,8,9,10,11,12],set_background_color:3,set_cursor_posit:3,set_execut:12,set_foreground_color:3,set_hold_back:3,set_runtime_directori:8,set_working_directori:8,show:3,shown:2,simpl:13,singleton:7,snake:12,sourc:12,spinner:3,spinner_background_color:3,spinner_foreground_color:3,spinner_thread:[0,14],spinnerthread:3,stage:8,standard:12,start_tim:8,startup:1,startup_abc:[0,14],startupabc:1,stderr:12,stdout:12,stop:3,stop_spin:3,str:[2,3,5,6,8,9,10,12],string:[0,3,5,6,9,10,14],subject:10,submodul:[0,14],system:12,tabl:[3,12],test:8,text_background_color:3,text_foreground_color:3,thi:[1,13],thread:3,time:[0,9,14],time_format:[9,11],time_format_set:[0,9,14],time_format_settings_names_enum:[0,14],timeformat:11,timeformatset:[9,11],timeformatsettingsnamesenum:11,to_list:2,token:2,trace:9,traceback:3,transceiv:10,tree:9,type:[1,2,7],understand:13,uninstal:12,union:[2,3,7],upper:12,use:[1,13],use_startup:1,used:1,user_nam:10,usernam:10,util:[0,14],valid:10,valu:[2,3,4,7,8,9,10,11],value_token:2,variabl:2,warn:9,when:3,white:3,work:8,working_directori:8,write:[3,9],write_at:3,write_lin:3,write_line_at:3,yellow:3,you:13,your:13},titles:["CPL","cpl.application","cpl.configuration","cpl.console","cpl.database","cpl.database.connection","cpl.database.context","cpl.dependency_injection","cpl.environment","cpl.logging","cpl.mailing","cpl.time","cpl.utils","Introduction to the CPL Docs","cpl"],titleterms:{applic:1,application_abc:1,application_build:1,application_builder_abc:1,application_environ:8,application_environment_abc:8,background_color_enum:3,configur:2,configuration_abc:2,configuration_model_abc:2,configuration_variable_name_enum:2,connect:5,consol:3,console_argu:2,console_cal:3,context:6,cpl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],credential_manag:12,databas:[4,5,6],database_connect:5,database_connection_abc:5,database_context:6,database_context_abc:6,database_model:4,database_set:4,database_settings_name_enum:4,dependency_inject:7,doc:13,email:10,email_client_abc:10,email_client_servic:10,email_client_set:10,email_client_settings_name_enum:10,environ:8,environment_name_enum:8,foreground_color_enum:3,introduct:13,log:9,logger_abc:9,logger_servic:9,logging_level_enum:9,logging_set:9,logging_settings_name_enum:9,mail:10,manual:13,pip:12,service_collect:7,service_collection_abc:7,service_descriptor:7,service_lifetime_enum:7,service_provid:7,service_provider_abc:7,spinner_thread:3,startup_abc:1,string:12,submodul:4,time:11,time_format_set:11,time_format_settings_names_enum:11,util:12}}) \ No newline at end of file +Search.setIndex({docnames:["cpl","cpl.application","cpl.configuration","cpl.console","cpl.database","cpl.database.connection","cpl.database.context","cpl.dependency_injection","cpl.environment","cpl.logging","cpl.mailing","cpl.time","cpl.utils","index","modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["cpl.rst","cpl.application.rst","cpl.configuration.rst","cpl.console.rst","cpl.database.rst","cpl.database.connection.rst","cpl.database.context.rst","cpl.dependency_injection.rst","cpl.environment.rst","cpl.logging.rst","cpl.mailing.rst","cpl.time.rst","cpl.utils.rst","index.rst","modules.rst"],objects:{"cpl.application":{application_abc:[1,0,0,"-"],application_builder:[1,0,0,"-"],application_builder_abc:[1,0,0,"-"],startup_abc:[1,0,0,"-"]},"cpl.application.application_abc":{ApplicationABC:[1,1,1,""]},"cpl.application.application_abc.ApplicationABC":{configure:[1,2,1,""],main:[1,2,1,""],run:[1,2,1,""]},"cpl.application.application_builder":{ApplicationBuilder:[1,1,1,""]},"cpl.application.application_builder.ApplicationBuilder":{build:[1,2,1,""],use_startup:[1,2,1,""]},"cpl.application.application_builder_abc":{ApplicationBuilderABC:[1,1,1,""]},"cpl.application.application_builder_abc.ApplicationBuilderABC":{build:[1,2,1,""],use_startup:[1,2,1,""]},"cpl.application.startup_abc":{StartupABC:[1,1,1,""]},"cpl.application.startup_abc.StartupABC":{configure_configuration:[1,2,1,""],configure_services:[1,2,1,""]},"cpl.configuration":{configuration:[2,0,0,"-"],configuration_abc:[2,0,0,"-"],configuration_model_abc:[2,0,0,"-"],configuration_variable_name_enum:[2,0,0,"-"],console_argument:[2,0,0,"-"]},"cpl.configuration.configuration":{Configuration:[2,1,1,""]},"cpl.configuration.configuration.Configuration":{add_configuration:[2,2,1,""],add_console_argument:[2,2,1,""],add_console_arguments:[2,2,1,""],add_environment_variables:[2,2,1,""],add_json_file:[2,2,1,""],additional_arguments:[2,2,1,""],argument_error_function:[2,2,1,""],environment:[2,2,1,""],get_configuration:[2,2,1,""]},"cpl.configuration.configuration_abc":{ConfigurationABC:[2,1,1,""]},"cpl.configuration.configuration_abc.ConfigurationABC":{add_configuration:[2,2,1,""],add_console_argument:[2,2,1,""],add_console_arguments:[2,2,1,""],add_environment_variables:[2,2,1,""],add_json_file:[2,2,1,""],additional_arguments:[2,2,1,""],argument_error_function:[2,2,1,""],environment:[2,2,1,""],get_configuration:[2,2,1,""]},"cpl.configuration.configuration_model_abc":{ConfigurationModelABC:[2,1,1,""]},"cpl.configuration.configuration_model_abc.ConfigurationModelABC":{from_dict:[2,2,1,""]},"cpl.configuration.configuration_variable_name_enum":{ConfigurationVariableNameEnum:[2,1,1,""]},"cpl.configuration.configuration_variable_name_enum.ConfigurationVariableNameEnum":{customer:[2,3,1,""],environment:[2,3,1,""],name:[2,3,1,""],to_list:[2,2,1,""]},"cpl.configuration.console_argument":{ConsoleArgument:[2,1,1,""]},"cpl.configuration.console_argument.ConsoleArgument":{aliases:[2,2,1,""],console_arguments:[2,2,1,""],is_value_token_optional:[2,2,1,""],name:[2,2,1,""],token:[2,2,1,""],value_token:[2,2,1,""]},"cpl.console":{background_color_enum:[3,0,0,"-"],console:[3,0,0,"-"],console_call:[3,0,0,"-"],foreground_color_enum:[3,0,0,"-"],spinner_thread:[3,0,0,"-"]},"cpl.console.background_color_enum":{BackgroundColorEnum:[3,1,1,""]},"cpl.console.background_color_enum.BackgroundColorEnum":{"default":[3,3,1,""],blue:[3,3,1,""],cyan:[3,3,1,""],green:[3,3,1,""],grey:[3,3,1,""],magenta:[3,3,1,""],red:[3,3,1,""],white:[3,3,1,""],yellow:[3,3,1,""]},"cpl.console.console":{Console:[3,1,1,""]},"cpl.console.console.Console":{background_color:[3,3,1,""],banner:[3,2,1,""],clear:[3,2,1,""],close:[3,2,1,""],color_reset:[3,2,1,""],disable:[3,2,1,""],enable:[3,2,1,""],error:[3,2,1,""],foreground_color:[3,3,1,""],read:[3,2,1,""],read_line:[3,2,1,""],reset_cursor_position:[3,2,1,""],select:[3,2,1,""],set_background_color:[3,2,1,""],set_cursor_position:[3,2,1,""],set_foreground_color:[3,2,1,""],set_hold_back:[3,2,1,""],spinner:[3,2,1,""],table:[3,2,1,""],write:[3,2,1,""],write_at:[3,2,1,""],write_line:[3,2,1,""],write_line_at:[3,2,1,""]},"cpl.console.console_call":{ConsoleCall:[3,1,1,""]},"cpl.console.console_call.ConsoleCall":{"function":[3,2,1,""],args:[3,2,1,""]},"cpl.console.foreground_color_enum":{ForegroundColorEnum:[3,1,1,""]},"cpl.console.foreground_color_enum.ForegroundColorEnum":{"default":[3,3,1,""],blue:[3,3,1,""],cyan:[3,3,1,""],green:[3,3,1,""],grey:[3,3,1,""],magenta:[3,3,1,""],red:[3,3,1,""],white:[3,3,1,""],yellow:[3,3,1,""]},"cpl.console.spinner_thread":{SpinnerThread:[3,1,1,""]},"cpl.console.spinner_thread.SpinnerThread":{exit:[3,2,1,""],run:[3,2,1,""],stop_spinning:[3,2,1,""]},"cpl.database":{database_model:[4,0,0,"-"],database_settings:[4,0,0,"-"],database_settings_name_enum:[4,0,0,"-"]},"cpl.database.connection":{database_connection:[5,0,0,"-"],database_connection_abc:[5,0,0,"-"]},"cpl.database.connection.database_connection":{DatabaseConnection:[5,1,1,""]},"cpl.database.connection.database_connection.DatabaseConnection":{connect:[5,2,1,""],engine:[5,2,1,""],session:[5,2,1,""]},"cpl.database.connection.database_connection_abc":{DatabaseConnectionABC:[5,1,1,""]},"cpl.database.connection.database_connection_abc.DatabaseConnectionABC":{connect:[5,2,1,""],engine:[5,2,1,""],session:[5,2,1,""]},"cpl.database.context":{database_context:[6,0,0,"-"],database_context_abc:[6,0,0,"-"]},"cpl.database.context.database_context":{DatabaseContext:[6,1,1,""]},"cpl.database.context.database_context.DatabaseContext":{connect:[6,2,1,""],engine:[6,2,1,""],save_changes:[6,2,1,""],session:[6,2,1,""]},"cpl.database.context.database_context_abc":{DatabaseContextABC:[6,1,1,""]},"cpl.database.context.database_context_abc.DatabaseContextABC":{connect:[6,2,1,""],engine:[6,2,1,""],save_changes:[6,2,1,""],session:[6,2,1,""]},"cpl.database.database_settings":{DatabaseSettings:[4,1,1,""]},"cpl.database.database_settings.DatabaseSettings":{auth_plugin:[4,2,1,""],case_sensitive:[4,2,1,""],connection_string:[4,2,1,""],credentials:[4,2,1,""],echo:[4,2,1,""],encoding:[4,2,1,""],from_dict:[4,2,1,""]},"cpl.database.database_settings_name_enum":{DatabaseSettingsNameEnum:[4,1,1,""]},"cpl.database.database_settings_name_enum.DatabaseSettingsNameEnum":{auth_plugin:[4,3,1,""],case_sensitive:[4,3,1,""],connection_string:[4,3,1,""],credentials:[4,3,1,""],echo:[4,3,1,""],encoding:[4,3,1,""]},"cpl.dependency_injection":{service_collection:[7,0,0,"-"],service_collection_abc:[7,0,0,"-"],service_descriptor:[7,0,0,"-"],service_lifetime_enum:[7,0,0,"-"],service_provider:[7,0,0,"-"],service_provider_abc:[7,0,0,"-"]},"cpl.dependency_injection.service_collection":{ServiceCollection:[7,1,1,""]},"cpl.dependency_injection.service_collection.ServiceCollection":{add_db_context:[7,2,1,""],add_logging:[7,2,1,""],add_scoped:[7,2,1,""],add_singleton:[7,2,1,""],add_transient:[7,2,1,""],build_service_provider:[7,2,1,""]},"cpl.dependency_injection.service_collection_abc":{ServiceCollectionABC:[7,1,1,""]},"cpl.dependency_injection.service_collection_abc.ServiceCollectionABC":{add_db_context:[7,2,1,""],add_logging:[7,2,1,""],add_scoped:[7,2,1,""],add_singleton:[7,2,1,""],add_transient:[7,2,1,""],build_service_provider:[7,2,1,""]},"cpl.dependency_injection.service_descriptor":{ServiceDescriptor:[7,1,1,""]},"cpl.dependency_injection.service_descriptor.ServiceDescriptor":{implementation:[7,2,1,""],lifetime:[7,2,1,""],service_type:[7,2,1,""]},"cpl.dependency_injection.service_lifetime_enum":{ServiceLifetimeEnum:[7,1,1,""]},"cpl.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum":{"transient":[7,3,1,""],scoped:[7,3,1,""],singleton:[7,3,1,""]},"cpl.dependency_injection.service_provider":{ServiceProvider:[7,1,1,""]},"cpl.dependency_injection.service_provider.ServiceProvider":{build_service:[7,2,1,""],get_service:[7,2,1,""]},"cpl.dependency_injection.service_provider_abc":{ServiceProviderABC:[7,1,1,""]},"cpl.dependency_injection.service_provider_abc.ServiceProviderABC":{build_service:[7,2,1,""],get_service:[7,2,1,""]},"cpl.environment":{application_environment:[8,0,0,"-"],application_environment_abc:[8,0,0,"-"],environment_name_enum:[8,0,0,"-"]},"cpl.environment.application_environment":{ApplicationEnvironment:[8,1,1,""]},"cpl.environment.application_environment.ApplicationEnvironment":{application_name:[8,2,1,""],customer:[8,2,1,""],date_time_now:[8,2,1,""],end_time:[8,2,1,""],environment_name:[8,2,1,""],host_name:[8,2,1,""],runtime_directory:[8,2,1,""],set_runtime_directory:[8,2,1,""],set_working_directory:[8,2,1,""],start_time:[8,2,1,""],working_directory:[8,2,1,""]},"cpl.environment.application_environment_abc":{ApplicationEnvironmentABC:[8,1,1,""]},"cpl.environment.application_environment_abc.ApplicationEnvironmentABC":{application_name:[8,2,1,""],customer:[8,2,1,""],date_time_now:[8,2,1,""],end_time:[8,2,1,""],environment_name:[8,2,1,""],host_name:[8,2,1,""],runtime_directory:[8,2,1,""],set_runtime_directory:[8,2,1,""],set_working_directory:[8,2,1,""],start_time:[8,2,1,""],working_directory:[8,2,1,""]},"cpl.environment.environment_name_enum":{EnvironmentNameEnum:[8,1,1,""]},"cpl.environment.environment_name_enum.EnvironmentNameEnum":{development:[8,3,1,""],production:[8,3,1,""],staging:[8,3,1,""],testing:[8,3,1,""]},"cpl.logging":{logger_abc:[9,0,0,"-"],logger_service:[9,0,0,"-"],logging_level_enum:[9,0,0,"-"],logging_settings:[9,0,0,"-"],logging_settings_name_enum:[9,0,0,"-"]},"cpl.logging.logger_abc":{LoggerABC:[9,1,1,""]},"cpl.logging.logger_abc.LoggerABC":{debug:[9,2,1,""],error:[9,2,1,""],fatal:[9,2,1,""],header:[9,2,1,""],info:[9,2,1,""],trace:[9,2,1,""],warn:[9,2,1,""]},"cpl.logging.logger_service":{Logger:[9,1,1,""]},"cpl.logging.logger_service.Logger":{create:[9,2,1,""],debug:[9,2,1,""],error:[9,2,1,""],fatal:[9,2,1,""],header:[9,2,1,""],info:[9,2,1,""],trace:[9,2,1,""],warn:[9,2,1,""]},"cpl.logging.logging_level_enum":{LoggingLevelEnum:[9,1,1,""]},"cpl.logging.logging_level_enum.LoggingLevelEnum":{DEBUG:[9,3,1,""],ERROR:[9,3,1,""],FATAL:[9,3,1,""],INFO:[9,3,1,""],OFF:[9,3,1,""],TRACE:[9,3,1,""],WARN:[9,3,1,""]},"cpl.logging.logging_settings":{LoggingSettings:[9,1,1,""]},"cpl.logging.logging_settings.LoggingSettings":{console:[9,2,1,""],filename:[9,2,1,""],from_dict:[9,2,1,""],level:[9,2,1,""],path:[9,2,1,""]},"cpl.logging.logging_settings_name_enum":{LoggingSettingsNameEnum:[9,1,1,""]},"cpl.logging.logging_settings_name_enum.LoggingSettingsNameEnum":{console_level:[9,3,1,""],file_level:[9,3,1,""],filename:[9,3,1,""],path:[9,3,1,""]},"cpl.mailing":{email:[10,0,0,"-"],email_client_abc:[10,0,0,"-"],email_client_service:[10,0,0,"-"],email_client_settings:[10,0,0,"-"],email_client_settings_name_enum:[10,0,0,"-"]},"cpl.mailing.email":{EMail:[10,1,1,""]},"cpl.mailing.email.EMail":{add_header:[10,2,1,""],add_receiver:[10,2,1,""],body:[10,2,1,""],check_mail:[10,2,1,""],get_content:[10,2,1,""],header:[10,2,1,""],header_list:[10,2,1,""],receiver:[10,2,1,""],receiver_list:[10,2,1,""],subject:[10,2,1,""],transceiver:[10,2,1,""]},"cpl.mailing.email_client_abc":{EMailClientABC:[10,1,1,""]},"cpl.mailing.email_client_abc.EMailClientABC":{connect:[10,2,1,""],send_mail:[10,2,1,""]},"cpl.mailing.email_client_service":{EMailClient:[10,1,1,""]},"cpl.mailing.email_client_service.EMailClient":{connect:[10,2,1,""],create:[10,2,1,""],login:[10,2,1,""],send_mail:[10,2,1,""]},"cpl.mailing.email_client_settings":{EMailClientSettings:[10,1,1,""]},"cpl.mailing.email_client_settings.EMailClientSettings":{credentials:[10,2,1,""],from_dict:[10,2,1,""],host:[10,2,1,""],port:[10,2,1,""],user_name:[10,2,1,""]},"cpl.mailing.email_client_settings_name_enum":{EMailClientSettingsNameEnum:[10,1,1,""]},"cpl.mailing.email_client_settings_name_enum.EMailClientSettingsNameEnum":{credentials:[10,3,1,""],host:[10,3,1,""],port:[10,3,1,""],user_name:[10,3,1,""]},"cpl.time":{time_format_settings:[11,0,0,"-"],time_format_settings_names_enum:[11,0,0,"-"]},"cpl.time.time_format_settings":{TimeFormatSettings:[11,1,1,""]},"cpl.time.time_format_settings.TimeFormatSettings":{date_format:[11,2,1,""],date_time_format:[11,2,1,""],date_time_log_format:[11,2,1,""],from_dict:[11,2,1,""],time_format:[11,2,1,""]},"cpl.time.time_format_settings_names_enum":{TimeFormatSettingsNamesEnum:[11,1,1,""]},"cpl.time.time_format_settings_names_enum.TimeFormatSettingsNamesEnum":{date_format:[11,3,1,""],date_time_format:[11,3,1,""],date_time_log_format:[11,3,1,""],time_format:[11,3,1,""]},"cpl.utils":{credential_manager:[12,0,0,"-"],pip:[12,0,0,"-"],string:[12,0,0,"-"]},"cpl.utils.credential_manager":{CredentialManager:[12,1,1,""]},"cpl.utils.credential_manager.CredentialManager":{build_string:[12,2,1,""],decrypt:[12,2,1,""],encrypt:[12,2,1,""]},"cpl.utils.pip":{Pip:[12,1,1,""]},"cpl.utils.pip.Pip":{get_executable:[12,2,1,""],get_outdated:[12,2,1,""],get_package:[12,2,1,""],install:[12,2,1,""],reset_executable:[12,2,1,""],set_executable:[12,2,1,""],uninstall:[12,2,1,""]},"cpl.utils.string":{String:[12,1,1,""]},"cpl.utils.string.String":{convert_to_camel_case:[12,2,1,""],convert_to_snake_case:[12,2,1,""],first_to_lower:[12,2,1,""],first_to_upper:[12,2,1,""],random_string:[12,2,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute"},terms:{"abstract":[1,2,5,6,7,8,9,10],"byte":12,"case":12,"char":[3,12],"class":[1,2,3,4,5,6,7,8,9,10,11,12],"default":3,"enum":[2,3,4,7,8,9,10,11],"function":[3,12],"int":[3,12],"new":3,"return":[2,3,5,6,7,8,9,10,12],"static":[2,10,12],"transient":7,"true":2,The:13,These:13,Useful:[3,12],abc:[1,2,3,5,6,7,8,9,10],about:13,activ:3,add:[2,7,10],add_configur:2,add_console_argu:2,add_db_context:7,add_environment_vari:2,add_head:10,add_json_fil:2,add_log:7,add_receiv:10,add_scop:7,add_singleton:7,add_transi:7,additional_argu:2,address:10,alias:2,ani:3,app:[1,13],applic:[0,3,13,14],application_abc:[0,14],application_build:[0,14],application_builder_abc:[0,14],application_environ:[0,14],application_environment_abc:[0,9,10,14],application_nam:8,applicationabc:1,applicationbuild:1,applicationbuilderabc:1,applicationenviron:8,applicationenvironmentabc:[8,9,10],appset:1,arg:[1,3,6,12],argument:[2,3],argument_error_funct:2,attribut:[2,4,9,10,11],auth_plugin:4,authplugin:4,back:3,background:3,background_color:3,background_color_enum:[0,14],backgroundcolorenum:3,banner:3,base64:12,base:[1,2,3,4,5,6,7,8,9,10,11,12],befor:3,blue:3,bodi:10,bool:[2,3,10],build:[1,12],build_servic:7,build_service_provid:7,build_str:12,call:[1,3],callabl:[2,3,7],camel:12,can:13,case_sensit:4,casesensit:4,chang:6,charact:3,check:10,check_mail:10,classmethod:[3,12],clear:3,close:3,collect:[2,3,7],color:3,color_reset:3,command:12,common:13,complex:13,config:[1,7],configur:[0,1,4,7,9,10,11,14],configuration_abc:[0,1,7,14],configuration_model_abc:[0,4,9,10,11,14],configuration_variable_name_enum:[0,14],configurationabc:[1,2,7],configurationmodelabc:[2,4,9,10,11],configurationvariablenameenum:2,configure_configur:1,configure_servic:1,connect:[0,4,6,10,14],connection_str:[4,5,6],connectionstr:4,consol:[0,2,9,14],console_argu:[0,14],console_cal:[0,14],console_level:9,consoleargu:2,consolecal:3,consoleloglevel:9,contain:1,context:[0,4,7,14],convert:[2,4,9,10,11,12],convert_to_camel_cas:12,convert_to_snake_cas:12,coordin:3,creat:[1,7,9,10,12,13],credenti:[4,10,12],credential_manag:[0,14],credentialmanag:12,current:8,cursor:3,cursor_background_color:3,cursor_foreground_color:3,custom:[1,2,8],cyan:3,databas:[0,7,14],database_connect:[0,4,14],database_connection_abc:[0,4,14],database_context:[0,4,14],database_context_abc:[0,4,7,14],database_model:[0,14],database_set:[0,5,6,7,14],database_settings_name_enum:[0,14],databaseconnect:5,databaseconnectionabc:5,databasecontext:6,databasecontextabc:[6,7],databaseset:[4,5,6,7],databasesettingsnameenum:4,date_format:11,date_time_format:11,date_time_log_format:11,date_time_now:8,dateformat:11,datetimeformat:11,datetimelogformat:11,db_context:7,db_context_typ:7,db_set:7,debug:9,decod:12,decrypt:12,defin:2,dependency_inject:[0,1,14],desktop:13,detail:13,develop:[8,13],dict:[2,3,4,9,10,11],directori:8,disabl:3,echo:4,effici:13,element:3,email:[0,14],email_client_abc:[0,14],email_client_servic:[0,14],email_client_set:[0,14],email_client_settings_name_enum:[0,14],emailcli:10,emailclientabc:10,emailclientset:10,emailclientsettingsnameenum:10,enabl:3,encod:[4,12],encrypt:12,end:3,end_tim:8,engin:[5,6],enterpris:13,entri:[1,3],enumer:[2,3,4,7,8,9,10,11],env:9,environ:[0,2,9,10,14],environment_nam:8,environment_name_enum:[0,14],environmentnameenum:8,error:[2,3,9],everyth:13,except:9,execut:12,exit:[3,9],fatal:9,file:2,file_level:9,fileloglevel:9,filenam:9,first:[12,13],first_to_low:12,first_to_upp:12,foreground:3,foreground_color:3,foreground_color_enum:[0,14],foregroundcolorenum:3,found:2,from:[1,2,13],from_dict:[2,4,9,10,11],get:12,get_configur:2,get_cont:10,get_execut:12,get_outd:12,get_packag:12,get_servic:7,given:[2,3,7,12],great:13,green:3,grei:3,handl:[3,12],has:3,header:[3,9,10],header_background_color:3,header_foreground_color:3,header_list:10,help:13,hold:3,host:10,host_nam:8,implement:7,info:9,inform:9,input:3,instal:12,instanc:[1,7],instance_typ:7,interact:3,intern:7,invalid:2,is_value_token_opt:2,json:2,key_typ:2,keyword:3,known:2,kwarg:3,last:3,learn:13,length:[3,12],level:9,librari:13,lifetim:7,line:3,list:[2,3,7,10,12],load:1,local:12,log:[0,10,14],logfil:9,logger:[7,9,10],logger_abc:[0,10,14],logger_servic:[0,14],loggerabc:[9,10],logging_level_enum:[0,14],logging_set:[0,14],logging_settings_name_enum:[0,14],logginglevelenum:9,loggingset:9,loggingsettingsnameenum:9,login:10,lower:12,magenta:3,mail:[0,14],mail_set:10,main:1,meant:13,menu:3,messag:[3,9],msg_len:3,name:[2,8,9],next:3,none:[2,3,7,9,10,12],object:[1,2,3,7,10,12],occur:2,off:9,on_blu:3,on_cyan:3,on_default:3,on_green:3,on_grei:3,on_magenta:3,on_r:3,on_whit:3,on_yellow:3,option:[2,3,7,9,10,12],option_background_color:3,option_foreground_color:3,outdat:12,output:[2,3],packag:[12,13],page:13,param:[5,6,7,8,9,10,12],path:[2,9],pip:[0,14],place:2,platform:13,point:[1,3],port:10,posit:3,prefix:2,prepar:1,print:3,product:8,properti:[2,3,4,5,6,7,8,9,10,11],provid:[1,7],python:13,random:12,random_str:12,read:[2,3],read_lin:3,receiv:10,receiver_list:10,red:3,repres:3,reset:[3,12],reset_cursor_posit:3,reset_execut:12,run:[1,3],runtim:8,runtime_directori:8,save:[2,6],save_chang:6,scope:7,search:2,search_typ:2,select:3,send:10,send_mail:10,server:[10,13],servic:[1,7],service_collect:[0,14],service_collection_abc:[0,14],service_descriptor:[0,14],service_lifetime_enum:[0,14],service_provid:[0,14],service_provider_abc:[0,1,14],service_typ:7,servicecollect:7,servicecollectionabc:7,servicedescriptor:7,servicelifetimeenum:7,serviceprovid:7,serviceproviderabc:[1,7],session:[5,6],set:[1,2,3,4,8,9,10,11,12],set_background_color:3,set_cursor_posit:3,set_execut:12,set_foreground_color:3,set_hold_back:3,set_runtime_directori:8,set_working_directori:8,should:2,show:3,shown:2,simpl:13,singleton:7,snake:12,sourc:12,specifi:2,spinner:3,spinner_background_color:3,spinner_foreground_color:3,spinner_thread:[0,14],spinnerthread:3,stage:8,standard:12,start_tim:8,startup:1,startup_abc:[0,14],startupabc:1,stderr:12,stdout:12,stop:3,stop_spin:3,store:2,str:[2,3,5,6,8,9,10,12],string:[0,3,5,6,9,10,14],subject:10,submodul:[0,14],system:12,tabl:[3,12],take:2,termin:3,test:8,text:3,text_background_color:3,text_foreground_color:3,thi:[1,13],thread:3,time:[0,9,14],time_format:[9,11],time_format_set:[0,9,14],time_format_settings_names_enum:[0,14],timeformat:11,timeformatset:[9,11],timeformatsettingsnamesenum:11,to_list:2,token:2,trace:9,traceback:3,transceiv:10,tree:9,type:[1,2,7],understand:13,uninstal:12,union:[2,3,7],upper:12,use:[1,13],use_startup:1,used:1,user_nam:10,usernam:10,util:[0,14],valid:10,valu:[2,3,4,7,8,9,10,11],value_token:2,variabl:2,warn:9,when:3,whether:2,which:[2,3],white:3,work:8,working_directori:8,write:[3,9],write_at:3,write_lin:3,write_line_at:3,yellow:3,you:13,your:13},titles:["CPL","cpl.application","cpl.configuration","cpl.console","cpl.database","cpl.database.connection","cpl.database.context","cpl.dependency_injection","cpl.environment","cpl.logging","cpl.mailing","cpl.time","cpl.utils","Introduction to the CPL Docs","cpl"],titleterms:{applic:1,application_abc:1,application_build:1,application_builder_abc:1,application_environ:8,application_environment_abc:8,background_color_enum:3,configur:2,configuration_abc:2,configuration_model_abc:2,configuration_variable_name_enum:2,connect:5,consol:3,console_argu:2,console_cal:3,context:6,cpl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],credential_manag:12,databas:[4,5,6],database_connect:5,database_connection_abc:5,database_context:6,database_context_abc:6,database_model:4,database_set:4,database_settings_name_enum:4,dependency_inject:7,doc:13,email:10,email_client_abc:10,email_client_servic:10,email_client_set:10,email_client_settings_name_enum:10,environ:8,environment_name_enum:8,foreground_color_enum:3,introduct:13,log:9,logger_abc:9,logger_servic:9,logging_level_enum:9,logging_set:9,logging_settings_name_enum:9,mail:10,manual:13,pip:12,service_collect:7,service_collection_abc:7,service_descriptor:7,service_lifetime_enum:7,service_provid:7,service_provider_abc:7,spinner_thread:3,startup_abc:1,string:12,submodul:4,time:11,time_format_set:11,time_format_settings_names_enum:11,util:12}}) \ No newline at end of file diff --git a/src/cpl/configuration/configuration.py b/src/cpl/configuration/configuration.py index 0aaf67ca..68e671a6 100644 --- a/src/cpl/configuration/configuration.py +++ b/src/cpl/configuration/configuration.py @@ -54,7 +54,9 @@ class Configuration(ConfigurationABC): Parameter --------- name: :class:`str` + Info name message: :class:`str` + Info message """ Console.set_foreground_color(ForegroundColorEnum.green) Console.write_line(f'[{name}] {message}') @@ -67,7 +69,9 @@ class Configuration(ConfigurationABC): Parameter --------- name: :class:`str` + Warning name message: :class:`str` + Warning message """ Console.set_foreground_color(ForegroundColorEnum.yellow) Console.write_line(f'[{name}] {message}') @@ -80,7 +84,9 @@ class Configuration(ConfigurationABC): Parameter --------- name: :class:`str` + Error name message: :class:`str` + Error message """ Console.set_foreground_color(ForegroundColorEnum.red) Console.write_line(f'[{name}] {message}') @@ -92,7 +98,9 @@ class Configuration(ConfigurationABC): Parameter --------- name: :class:`str` + Name of the variable value: :class:`any` + Value of the variable """ if name == ConfigurationVariableNameEnum.environment.value: self._application_environment.environment_name = EnvironmentNameEnum(value) @@ -113,8 +121,11 @@ class Configuration(ConfigurationABC): Parameter --------- argument: :class:`str` + Command as string argument_type: :class:`cpl.configuration.console_argument.ConsoleArgument` + Command type as ConsoleArgument next_arguments: list[:class:`str`] + Following arguments of argument Returns ------- diff --git a/src/cpl/configuration/configuration_abc.py b/src/cpl/configuration/configuration_abc.py index 0aaf7f17..046eb055 100644 --- a/src/cpl/configuration/configuration_abc.py +++ b/src/cpl/configuration/configuration_abc.py @@ -37,6 +37,7 @@ class ConfigurationABC(ABC): Parameter --------- prefix: :class:`str` + Prefix of the variables """ pass @@ -47,6 +48,7 @@ class ConfigurationABC(ABC): Parameter --------- argument: :class:`cpl.configuration.console_argument.ConsoleArgument` + Specifies the console argument """ pass @@ -85,7 +87,9 @@ class ConfigurationABC(ABC): Parameter --------- key_type: Union[:class:`str`, :class:`type`] + Type of the value value: :class:`cpl.configuration.configuration_model_abc.ConfigurationModelABC` + Object of the value """ pass @@ -96,6 +100,7 @@ class ConfigurationABC(ABC): Parameter --------- search_type: Union[:class:`str`, Type[:class:`cpl.configuration.configuration_model_abc.ConfigurationModelABC`]] + Type to search for Returns ------- diff --git a/src/cpl/console/console.py b/src/cpl/console/console.py index c4336634..66140873 100644 --- a/src/cpl/console/console.py +++ b/src/cpl/console/console.py @@ -18,9 +18,7 @@ from cpl.console.spinner_thread import SpinnerThread class Console: - """ - Useful functions for handling with input and output - """ + r"""Useful functions for handling with input and output""" colorama.init() _is_first_write = True @@ -42,9 +40,7 @@ class Console: _selected_menu_cursor_foreground_color: ForegroundColorEnum = ForegroundColorEnum.default _selected_menu_cursor_background_color: BackgroundColorEnum = BackgroundColorEnum.default - """ - Properties - """ + """Properties""" @classmethod @property @@ -56,9 +52,7 @@ class Console: def foreground_color(cls) -> str: return str(cls._foreground_color.value) - """ - Settings - """ + """Settings""" @classmethod def set_hold_back(cls, value: bool): @@ -66,10 +60,12 @@ class Console: @classmethod def set_background_color(cls, color: Union[BackgroundColorEnum, str]): - """ - Sets the background color - :param color: - :return: + r"""Sets the background color + + Parameter + --------- + color: Union[:class:`cpl.console.background_color_enum.BackgroundColorEnum`, :class:`str`] + Background color of the console """ if type(color) is str: cls._background_color = BackgroundColorEnum[color] @@ -78,10 +74,12 @@ class Console: @classmethod def set_foreground_color(cls, color: Union[ForegroundColorEnum, str]): - """ - Sets the foreground color - :param color: - :return: + r"""Sets the foreground color + + Parameter + --------- + color: Union[:class:`cpl.console.background_color_enum.BackgroundColorEnum`, :class:`str`] + Foreground color of the console """ if type(color) is str: cls._foreground_color = ForegroundColorEnum[color] @@ -90,37 +88,40 @@ class Console: @classmethod def reset_cursor_position(cls): - """ - Resets cursor position - :return: - """ + r"""Resets cursor position""" cls._x = None cls._y = None @classmethod def set_cursor_position(cls, x: int, y: int): - """ - Sets cursor position - :param x: - :param y: - :return: + r"""Sets cursor position + + Parameter + --------- + x: :class:`int` + X coordinate + y: :class:`int` + Y coordinate """ cls._x = x cls._y = y - """ - Useful protected methods - """ + """Useful protected functions""" @classmethod def _output(cls, string: str, x: int = None, y: int = None, end: str = None): - """ - Prints given output with given format - :param string: - :param x: - :param y: - :param end: - :return: + r"""Prints given output with given format + + Parameter + --------- + string: :class:`str` + Message to print + x: :class:`int` + X coordinate + y: :class:`int` + Y coordinate + end: :class:`str` + End character of the message (could be \n) """ if cls._is_first_write: cls._is_first_write = False @@ -149,10 +150,7 @@ class Console: @classmethod def _show_select_menu(cls): - """ - Shows the select menu - :return: - """ + r"""Shows the select menu""" if not cls._is_first_select_menu_output: for _ in range(0, len(cls._select_menu_items) + 1): sys.stdout.write('\x1b[1A\x1b[2K') @@ -176,10 +174,12 @@ class Console: @classmethod def _select_menu_key_press(cls, key: Key): - """ - Event function when key press is detected - :param key: - :return: + r"""Event function when key press is detected + + Parameter + --------- + key: :class:`pynput.keyboard.Key` + Pressed key """ if key == Key.down: if cls._selected_menu_item_index == len(cls._select_menu_items) - 1: @@ -196,16 +196,16 @@ class Console: elif key == Key.enter: return False - """ - Useful public methods - """ + """ Useful public functions""" @classmethod def banner(cls, string: str): - """ - Prints the string as a banner - :param string: - :return: + r"""Prints the string as a banner + + Parameter + --------- + string: :class:`str` + Message to print as banner """ if cls._disabled: return @@ -219,19 +219,13 @@ class Console: @classmethod def color_reset(cls): - """ - Resets color - :return: - """ + r"""Resets the color settings""" cls._background_color = BackgroundColorEnum.default cls._foreground_color = ForegroundColorEnum.default @classmethod def clear(cls): - """ - Clears the console - :return: - """ + r"""Clears the console""" if cls._hold_back: cls._hold_back_calls.append(ConsoleCall(cls.clear)) return @@ -240,10 +234,7 @@ class Console: @classmethod def close(cls): - """ - Close the application - :return: - """ + r"""Closes the application""" if cls._disabled: return @@ -258,19 +249,19 @@ class Console: @classmethod def disable(cls): - """ - Disable console interaction - :return: - """ + r"""Disables console interaction""" cls._disabled = True @classmethod def error(cls, string: str, tb: str = None): - """ - Prints an error with traceback - :param string: - :param tb: - :return: + r"""Prints an error with traceback + + Parameter + --------- + string: :class:`str` + Error message + tb: :class:`str` + Error traceback """ if cls._disabled: return @@ -288,18 +279,21 @@ class Console: @classmethod def enable(cls): - """ - Enable console interaction - :return: - """ + r"""Enables console interaction""" cls._disabled = False @classmethod def read(cls, output: str = None) -> str: - """ - Read in line - :param output: - :return: + r"""Reads in line + + Parameter + --------- + output: :class:`str` + String to print before input + + Returns + ------- + input() """ if output is not None and not cls._hold_back: cls.write_line(output) @@ -308,10 +302,16 @@ class Console: @classmethod def read_line(cls, output: str = None) -> str: - """ - Reads in next line - :param output: - :return: + r"""Reads in next line + + Parameter + --------- + output: :class:`str` + String to print before input + + Returns + ------- + input() """ if cls._disabled and not cls._hold_back: return '' @@ -325,11 +325,14 @@ class Console: @classmethod def table(cls, header: list[str], values: list[list[str]]): - """ - Prints a table with header and values - :param header: - :param values: - :return: + r"""Prints a table with header and values + + Parameter + --------- + header: List[:class:`str`] + Header of the table + values: List[List[:class:`str`]] + Values of the table """ if cls._disabled: return @@ -352,18 +355,32 @@ class Console: cursor_foreground_color: Union[str, ForegroundColorEnum] = ForegroundColorEnum.default, cursor_background_color: Union[str, BackgroundColorEnum] = BackgroundColorEnum.default ) -> str: - """ - Prints select menu - :param char: - :param message: - :param options: - :param header_foreground_color: - :param header_background_color: - :param option_foreground_color: - :param option_background_color: - :param cursor_foreground_color: - :param cursor_background_color: - :return: Selected option as str + r"""Prints select menu + + Parameter + --------- + char: :class:`str` + Character to show which element is selected + message: :class:`str` + Message or header of the selection + options: List[:class:`str`] + Selectable options + header_foreground_color: Union[:class:`str`, :class:`cpl.console.foreground_color_enum.ForegroundColorEnum`] + Foreground color of the header + header_background_color: Union[:class:`str`, :class:`cpl.console.background_color_enum.BackgroundColorEnum`] + Background color of the header + option_foreground_color: Union[:class:`str`, :class:`cpl.console.foreground_color_enum.ForegroundColorEnum`] + Foreground color of the options + option_background_color: Union[:class:`str`, :class:`cpl.console.background_color_enum.BackgroundColorEnum`] + Background color of the options + cursor_foreground_color: Union[:class:`str`, :class:`cpl.console.foreground_color_enum.ForegroundColorEnum`] + Foreground color of the cursor + cursor_background_color: Union[:class:`str`, :class:`cpl.console.background_color_enum.BackgroundColorEnum`] + Background color of the cursor + + Returns + ------- + Selected option as :class:`str` """ cls._selected_menu_item_char = char cls.options = options @@ -396,18 +413,30 @@ class Console: spinner_foreground_color: Union[str, ForegroundColorEnum] = None, text_background_color: Union[str, BackgroundColorEnum] = None, spinner_background_color: Union[str, BackgroundColorEnum] = None, **kwargs) -> any: - """ - Shows spinner and calls given function - When function has ended the spinner stops - :param message: - :param call: - :param args: - :param text_foreground_color: - :param spinner_foreground_color: - :param text_background_color: - :param spinner_background_color: - :param kwargs: - :return: Return value of call + r"""Shows spinner and calls given function, when function has ended the spinner stops + + Parameter + --------- + message: :class:`str` + Message of the spinner + call: :class:`Callable` + Function to call + args: :class:`list` + Arguments of the function + text_foreground_color: Union[:class:`str`, :class:`cpl.console.foreground_color_enum.ForegroundColorEnum`] + Foreground color of the text + spinner_foreground_color: Union[:class:`str`, :class:`cpl.console.foreground_color_enum.ForegroundColorEnum`] + Foreground color of the spinner + text_background_color: Union[:class:`str`, :class:`cpl.console.background_color_enum.BackgroundColorEnum`] + Background color of the text + spinner_background_color: Union[:class:`str`, :class:`cpl.console.background_color_enum.BackgroundColorEnum`] + Background color of the spinner + kwargs: :class:`dict` + Keyword arguments of the call + + Returns + ------- + Return value of call """ if cls._hold_back: cls._hold_back_calls.append(ConsoleCall(cls.spinner, message, call, *args)) @@ -454,11 +483,14 @@ class Console: @classmethod def write(cls, *args, end=''): - """ - Prints in active line - :param args: - :param end: - :return: + r"""Prints in active line + + Parameter + --------- + args: :class:`list` + Elements to print + end: :class:`str` + Last character to print """ if cls._disabled: return @@ -472,12 +504,16 @@ class Console: @classmethod def write_at(cls, x: int, y: int, *args): - """ - Prints at given position - :param x: - :param y: - :param args: - :return: + r"""Prints at given position + + Parameter + --------- + x: :class:`int` + X coordinate + y: :class:`int` + Y coordinate + args: :class:`list` + Elements to print """ if cls._disabled: return @@ -491,10 +527,12 @@ class Console: @classmethod def write_line(cls, *args): - """ - Prints to new line - :param args: - :return: + r"""Prints to new line + + Parameter + --------- + args: :class:`list` + Elements to print """ if cls._disabled: return @@ -510,12 +548,16 @@ class Console: @classmethod def write_line_at(cls, x: int, y: int, *args): - """ - Prints new line at given position - :param x: - :param y: - :param args: - :return: + r"""Prints new line at given position + + Parameter + --------- + x: :class:`int` + X coordinate + y: :class:`int` + Y coordinate + args: :class:`list` + Elements to print """ if cls._disabled: return diff --git a/src/cpl/console/console_call.py b/src/cpl/console/console_call.py index 1a8c10f8..7680a880 100644 --- a/src/cpl/console/console_call.py +++ b/src/cpl/console/console_call.py @@ -2,13 +2,17 @@ from collections import Callable class ConsoleCall: + r"""Represents a console call, for hold back when spinner is active + + Parameter + --------- + function: :class:`Callable` + Function to call + args: :class:`list` + List of arguments + """ def __init__(self, function: Callable, *args): - """ - Represents a console call, for hold back when spinner is active - :param function: - :param args: - """ self._func = function self._args = args diff --git a/src/cpl/console/spinner_thread.py b/src/cpl/console/spinner_thread.py index 7b13d963..e20b431a 100644 --- a/src/cpl/console/spinner_thread.py +++ b/src/cpl/console/spinner_thread.py @@ -10,14 +10,19 @@ from cpl.console.foreground_color_enum import ForegroundColorEnum class SpinnerThread(threading.Thread): + r"""Thread to show spinner in terminal + + Parameter + --------- + msg_len: :class:`int` + Length of the message + foreground_color: :class:`cpl.console.foreground_color.ForegroundColorEnum` + Foreground color of the spinner + background_color: :class:`cpl.console.background_color.BackgroundColorEnum` + Background color of the spinner + """ def __init__(self, msg_len: int, foreground_color: ForegroundColorEnum, background_color: BackgroundColorEnum): - """ - Thread to show spinner in terminal - :param msg_len: - :param foreground_color: - :param background_color: - """ threading.Thread.__init__(self) self._msg_len = msg_len @@ -29,19 +34,13 @@ class SpinnerThread(threading.Thread): @staticmethod def _spinner(): - """ - Selects active spinner char - :return: - """ + r"""Selects active spinner char""" while True: for cursor in '|/-\\': yield cursor def _get_color_args(self) -> list[str]: - """ - Creates color arguments - :return: - """ + r"""Creates color arguments""" color_args = [] if self._foreground_color is not None: color_args.append(str(self._foreground_color.value)) @@ -52,10 +51,7 @@ class SpinnerThread(threading.Thread): return color_args def run(self) -> None: - """ - Entry point of thread, shows the spinner - :return: - """ + r"""Entry point of thread, shows the spinner""" columns = 0 if sys.platform == 'win32': columns = os.get_terminal_size().columns @@ -90,18 +86,12 @@ class SpinnerThread(threading.Thread): print(colored(end_msg, *self._get_color_args()), end='') def stop_spinning(self): - """ - Stops the spinner - :return: - """ + r"""Stops the spinner""" self._is_spinning = False time.sleep(0.1) def exit(self): - """ - Stops the spinner - :return: - """ + r"""Stops the spinner""" self._is_spinning = False self._exit = True time.sleep(0.1)