From e054ac364e873776e86b459397fb8423cfc98f23 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 4 Dec 2022 00:50:24 +0100 Subject: [PATCH 1/8] Updated docs --- cpl-workspace.json | 6 +- docs/build/doctrees/cli.generate.doctree | Bin 20024 -> 21443 bytes docs/build/doctrees/cli.new.doctree | Bin 18247 -> 19666 bytes docs/build/doctrees/cli.run.doctree | Bin 0 -> 7079 bytes docs/build/doctrees/cli.start.doctree | Bin 3944 -> 6133 bytes docs/build/doctrees/contributing.doctree | Bin 23989 -> 23971 bytes docs/build/doctrees/cpl_cli.doctree | Bin 2978 -> 2978 bytes .../doctrees/cpl_core.application.doctree | Bin 74914 -> 75853 bytes docs/build/doctrees/cpl_core.database.doctree | Bin 50089 -> 49411 bytes docs/build/doctrees/cpl_core.doctree | Bin 3493 -> 3493 bytes docs/build/doctrees/cpl_core.pipes.doctree | Bin 61778 -> 52248 bytes .../doctrees/cpl_discord.application.doctree | Bin 0 -> 9865 bytes .../doctrees/cpl_discord.command.doctree | Bin 0 -> 12501 bytes .../cpl_discord.configuration.doctree | Bin 0 -> 13139 bytes .../doctrees/cpl_discord.container.doctree | Bin 0 -> 161304 bytes docs/build/doctrees/cpl_discord.doctree | Bin 0 -> 2967 bytes .../build/doctrees/cpl_discord.events.doctree | Bin 0 -> 308142 bytes .../build/doctrees/cpl_discord.helper.doctree | Bin 0 -> 11418 bytes .../doctrees/cpl_discord.service.doctree | Bin 0 -> 342247 bytes docs/build/doctrees/cpl_query.base.doctree | Bin 0 -> 208470 bytes docs/build/doctrees/cpl_query.doctree | Bin 3271 -> 3323 bytes .../doctrees/cpl_query.enumerable.doctree | Bin 0 -> 21864 bytes .../doctrees/cpl_query.exceptions.doctree | Bin 23263 -> 0 bytes .../doctrees/cpl_query.extension.doctree | Bin 303500 -> 15861 bytes .../build/doctrees/cpl_query.iterable.doctree | Bin 0 -> 32376 bytes docs/build/doctrees/cpl_translation.doctree | Bin 0 -> 45878 bytes docs/build/doctrees/environment.pickle | Bin 290395 -> 543750 bytes docs/build/doctrees/index.doctree | Bin 27875 -> 27923 bytes docs/build/doctrees/modules.doctree | Bin 2775 -> 2817 bytes docs/build/doctrees/setup.doctree | Bin 20612 -> 20594 bytes docs/build/html/.buildinfo | 2 +- docs/build/html/_sources/cli.generate.md.txt | 9 +- docs/build/html/_sources/cli.new.md.txt | 9 +- docs/build/html/_sources/cli.run.md.txt | 12 + docs/build/html/_sources/cli.start.md.txt | 4 + docs/build/html/_sources/contributing.md.txt | 6 +- docs/build/html/_sources/cpl_cli.rst.txt | 2 +- .../html/_sources/cpl_core.database.rst.txt | 3 +- .../html/_sources/cpl_core.pipes.rst.txt | 27 +- docs/build/html/_sources/cpl_core.rst.txt | 2 +- .../_sources/cpl_discord.application.rst.txt | 12 + .../html/_sources/cpl_discord.command.rst.txt | 20 + .../cpl_discord.configuration.rst.txt | 12 + .../_sources/cpl_discord.container.rst.txt | 68 + .../html/_sources/cpl_discord.events.rst.txt | 412 ++++ .../html/_sources/cpl_discord.helper.rst.txt | 12 + docs/build/html/_sources/cpl_discord.rst.txt | 13 + .../html/_sources/cpl_discord.service.rst.txt | 60 + .../html/_sources/cpl_query.base.rst.txt | 52 + .../_sources/cpl_query.enumerable.rst.txt | 20 + .../_sources/cpl_query.exceptions.rst.txt | 10 - .../html/_sources/cpl_query.extension.rst.txt | 38 +- .../html/_sources/cpl_query.iterable.rst.txt | 20 + docs/build/html/_sources/cpl_query.rst.txt | 10 +- .../html/_sources/cpl_translation.rst.txt | 34 + docs/build/html/_sources/index.rst.txt | 2 + docs/build/html/_sources/modules.rst.txt | 2 +- docs/build/html/_sources/setup.md.txt | 6 +- docs/build/html/cli.add.html | 12 +- docs/build/html/cli.build.html | 12 +- docs/build/html/cli.generate.html | 16 +- docs/build/html/cli.help.html | 12 +- docs/build/html/cli.install.html | 12 +- docs/build/html/cli.new.html | 16 +- docs/build/html/cli.overview.html | 16 +- docs/build/html/cli.publish.html | 12 +- docs/build/html/cli.remove.html | 12 +- docs/build/html/cli.run.html | 128 ++ docs/build/html/cli.start.html | 26 +- docs/build/html/cli.uninstall.html | 12 +- docs/build/html/cli.update.html | 12 +- docs/build/html/cli.version.html | 16 +- docs/build/html/contributing.html | 20 +- docs/build/html/cpl_cli.html | 16 +- docs/build/html/cpl_core.application.html | 20 +- docs/build/html/cpl_core.configuration.html | 12 +- docs/build/html/cpl_core.console.html | 12 +- .../html/cpl_core.database.connection.html | 13 +- .../build/html/cpl_core.database.context.html | 13 +- docs/build/html/cpl_core.database.html | 16 +- .../html/cpl_core.dependency_injection.html | 12 +- docs/build/html/cpl_core.environment.html | 12 +- docs/build/html/cpl_core.html | 38 +- docs/build/html/cpl_core.logging.html | 12 +- docs/build/html/cpl_core.mailing.html | 12 +- docs/build/html/cpl_core.pipes.html | 93 +- docs/build/html/cpl_core.time.html | 12 +- docs/build/html/cpl_core.utils.html | 16 +- docs/build/html/cpl_discord.application.html | 138 ++ docs/build/html/cpl_discord.command.html | 143 ++ .../build/html/cpl_discord.configuration.html | 152 ++ docs/build/html/cpl_discord.container.html | 674 ++++++ docs/build/html/cpl_discord.events.html | 888 ++++++++ docs/build/html/cpl_discord.helper.html | 138 ++ docs/build/html/cpl_discord.html | 216 ++ docs/build/html/cpl_discord.service.html | 780 +++++++ docs/build/html/cpl_query.base.html | 725 +++++++ docs/build/html/cpl_query.enumerable.html | 161 ++ docs/build/html/cpl_query.exceptions.html | 178 -- docs/build/html/cpl_query.extension.html | 936 +------- docs/build/html/cpl_query.html | 55 +- docs/build/html/cpl_query.iterable.html | 206 ++ docs/build/html/cpl_translation.html | 225 ++ docs/build/html/genindex.html | 1895 +++++++++++++++-- docs/build/html/getting_started.html | 10 +- docs/build/html/index.html | 18 +- docs/build/html/introduction.html | 10 +- docs/build/html/modules.html | 163 +- docs/build/html/objects.inv | Bin 4219 -> 7181 bytes docs/build/html/py-modindex.html | 449 +++- docs/build/html/quickstart.html | 10 +- docs/build/html/search.html | 10 +- docs/build/html/searchindex.js | 2 +- docs/build/html/setup.html | 16 +- docs/build/html/tutorials.appsettings.html | 10 +- .../html/tutorials.console-arguments.html | 10 +- docs/build/html/tutorials.console.html | 10 +- docs/build/html/tutorials.create-startup.html | 10 +- .../html/tutorials.extend-application.html | 10 +- docs/build/html/tutorials.extend-startup.html | 10 +- docs/build/html/tutorials.html | 10 +- docs/build/html/tutorials.logging.html | 10 +- docs/build/html/tutorials.mail.html | 10 +- docs/source/cli.generate.md | 9 +- docs/source/cli.new.md | 9 +- docs/source/cli.run.md | 12 + docs/source/cli.start.md | 4 + docs/source/conf.py | 6 +- docs/source/cpl_cli.rst | 2 +- docs/source/cpl_core.database.rst | 3 +- docs/source/cpl_core.pipes.rst | 27 +- docs/source/cpl_core.rst | 2 +- docs/source/cpl_discord.application.rst | 12 + docs/source/cpl_discord.command.rst | 20 + docs/source/cpl_discord.configuration.rst | 12 + docs/source/cpl_discord.container.rst | 68 + docs/source/cpl_discord.events.rst | 412 ++++ docs/source/cpl_discord.helper.rst | 12 + docs/source/cpl_discord.rst | 13 + docs/source/cpl_discord.service.rst | 60 + docs/source/cpl_query.base.rst | 52 + docs/source/cpl_query.enumerable.rst | 20 + docs/source/cpl_query.exceptions.rst | 10 - docs/source/cpl_query.extension.rst | 38 +- docs/source/cpl_query.iterable.rst | 20 + docs/source/cpl_query.rst | 10 +- docs/source/cpl_translation.rst | 34 + docs/source/index.rst | 2 + docs/source/modules.rst | 2 +- 149 files changed, 8860 insertions(+), 1827 deletions(-) create mode 100644 docs/build/doctrees/cli.run.doctree create mode 100644 docs/build/doctrees/cpl_discord.application.doctree create mode 100644 docs/build/doctrees/cpl_discord.command.doctree create mode 100644 docs/build/doctrees/cpl_discord.configuration.doctree create mode 100644 docs/build/doctrees/cpl_discord.container.doctree create mode 100644 docs/build/doctrees/cpl_discord.doctree create mode 100644 docs/build/doctrees/cpl_discord.events.doctree create mode 100644 docs/build/doctrees/cpl_discord.helper.doctree create mode 100644 docs/build/doctrees/cpl_discord.service.doctree create mode 100644 docs/build/doctrees/cpl_query.base.doctree create mode 100644 docs/build/doctrees/cpl_query.enumerable.doctree delete mode 100644 docs/build/doctrees/cpl_query.exceptions.doctree create mode 100644 docs/build/doctrees/cpl_query.iterable.doctree create mode 100644 docs/build/doctrees/cpl_translation.doctree create mode 100644 docs/build/html/_sources/cli.run.md.txt create mode 100644 docs/build/html/_sources/cpl_discord.application.rst.txt create mode 100644 docs/build/html/_sources/cpl_discord.command.rst.txt create mode 100644 docs/build/html/_sources/cpl_discord.configuration.rst.txt create mode 100644 docs/build/html/_sources/cpl_discord.container.rst.txt create mode 100644 docs/build/html/_sources/cpl_discord.events.rst.txt create mode 100644 docs/build/html/_sources/cpl_discord.helper.rst.txt create mode 100644 docs/build/html/_sources/cpl_discord.rst.txt create mode 100644 docs/build/html/_sources/cpl_discord.service.rst.txt create mode 100644 docs/build/html/_sources/cpl_query.base.rst.txt create mode 100644 docs/build/html/_sources/cpl_query.enumerable.rst.txt delete mode 100644 docs/build/html/_sources/cpl_query.exceptions.rst.txt create mode 100644 docs/build/html/_sources/cpl_query.iterable.rst.txt create mode 100644 docs/build/html/_sources/cpl_translation.rst.txt create mode 100644 docs/build/html/cli.run.html create mode 100644 docs/build/html/cpl_discord.application.html create mode 100644 docs/build/html/cpl_discord.command.html create mode 100644 docs/build/html/cpl_discord.configuration.html create mode 100644 docs/build/html/cpl_discord.container.html create mode 100644 docs/build/html/cpl_discord.events.html create mode 100644 docs/build/html/cpl_discord.helper.html create mode 100644 docs/build/html/cpl_discord.html create mode 100644 docs/build/html/cpl_discord.service.html create mode 100644 docs/build/html/cpl_query.base.html create mode 100644 docs/build/html/cpl_query.enumerable.html delete mode 100644 docs/build/html/cpl_query.exceptions.html create mode 100644 docs/build/html/cpl_query.iterable.html create mode 100644 docs/build/html/cpl_translation.html create mode 100644 docs/source/cli.run.md create mode 100644 docs/source/cpl_discord.application.rst create mode 100644 docs/source/cpl_discord.command.rst create mode 100644 docs/source/cpl_discord.configuration.rst create mode 100644 docs/source/cpl_discord.container.rst create mode 100644 docs/source/cpl_discord.events.rst create mode 100644 docs/source/cpl_discord.helper.rst create mode 100644 docs/source/cpl_discord.rst create mode 100644 docs/source/cpl_discord.service.rst create mode 100644 docs/source/cpl_query.base.rst create mode 100644 docs/source/cpl_query.enumerable.rst delete mode 100644 docs/source/cpl_query.exceptions.rst create mode 100644 docs/source/cpl_query.iterable.rst create mode 100644 docs/source/cpl_translation.rst diff --git a/cpl-workspace.json b/cpl-workspace.json index 081ff298..6d34e2bd 100644 --- a/cpl-workspace.json +++ b/cpl-workspace.json @@ -25,7 +25,11 @@ "spu": "cpl set-pip-urls", "set-pip-urls": "cpl run set-pip-urls $ARGS; echo '';", - "docs-build": "echo 'Build Documentation'; cd docs/; sphinx-apidoc -o source/ ../src/cpl_core; sphinx-apidoc -o source/ ../src/cpl_query; make clean; make html; rm source/cpl_query.tests.rst;", + "docs-build": "echo 'Build Documentation'; cpl db-core; cpl db-discord; cpl db-query; cpl db-translation; cd docs/; make clean; make html; # rm source/cpl_query.tests.rst;", + "db-core": "cd docs/; sphinx-apidoc -o source/ ../src/cpl_core; cd ../", + "db-discord": "cd docs/; sphinx-apidoc -o source/ ../src/cpl_discord; cd ../", + "db-query": "cd docs/; sphinx-apidoc -o source/ ../src/cpl_query; cd ../", + "db-translation": "cd docs/; sphinx-apidoc -o source/ ../src/cpl_translation; cd ../", "db": "cpl docs-build", "docs-open": "xdg-open $PWD/docs/build/html/index.html &", diff --git a/docs/build/doctrees/cli.generate.doctree b/docs/build/doctrees/cli.generate.doctree index 8148d5007190513dac0e5643c97c7a5f5158c5e6..bd1c7d8ba4e8a16785ea9460071d10516ebb95e0 100644 GIT binary patch delta 2186 zcmbVNYiJx*6yAGxH~VO89-6dyZSI;To6SCwZQQL%8k?GzbmO8lzABY$k};F%CL8x* zT1nZoQvDMs-Mc=j7LpcPEGR9D5K)9!i{KAS)%*}G)f5y2Awd!GkDhz)%p_aZ^h%XKbADhl zkxUUOCQV7xDH4C4%tTW%nVpQq$f!ipNokx!lY}YzxMw<^BCcd&%;hHo@dS~MMyFt1lJkBfSf3ROs2?eJRKWn%HY&M zyv}AQboT!wyEgwOD6Y+)y(?j`kIiK6${Aq)mUXVMwP%e6gIp^c<+_OMh@?lAJT@5I zYV#LtdV$&l+F~grTGF0TMtepYb$S%)trp!`o2RV*1?~Ay8JT$}wQSV8f=sZI*HS6o znhHH$+GMIxUN_RHyHCuFf>t%CK3O;UWZ^G43?=BzhETSqoSt?$@|PVUgey#R!|o}O zOJqm5MxDlT6Rjml++?C>$nciGZs$CHjN`LyX8b5zIfM9siA^i5Dr?0Pnh%ZB5qH0E zwNigW3(n}SInA|E8N`E(!*A<@hXh*yf<3#k_&tX8W*aRu-fTth(iM*fUu3`_z97WT zH}1n<=!~CpM%8tzy&wNnK(NLL&}|I_vS^VaPcQw`^)M=m+RUO50xif&fel{v(3_px1}8od2{4 zRPBuaeI9mMgk93z8t))|+uw!0z#CwL@+tDEa1<+GE zi|S&MFBZfnczk>-a8qt57)DDR-qu-)&T;5lTj0>ue}$^ir{MC?o;^ow zyVQPs!b3jN+0`(X#_u}sItTr_6(mwP(Qy*jTeNx1?6cw;3!jmlV1$9Ju<&}n?)2fk z4CY~*(P80pqWVAyKV3jEEGQn=VVmXd=s zX=<&!K~*{wH1Q&=WToGBL0|NZ$`<-}?|ry|Ew;m@6qyW$sN4u&O&9#!hjVG!qf|4v zBV4B@2=ApseFLZ_ztoq++g`C63=7+(L?WJ`KMvfR-#xf$tnUbD?@|nxrwTs1*R2K` zHCE8Ba6P(4pA9?EXY{48%eboAKMXs;{#`f-Q&cvz6MaKlhFUUFkWrpv$87}1_v|Qw zyc8olN+4~em>thB$dhoS7i`nfDJgYqMoO}ezQPzHJUYT7BRnd?BO+B&f|-!G5C_H19)4Z5BGV<|D>7b>n(Uop=Em=*?0Tk7t!D3eHSeUt7Okdi%)sr zKhb++=%tE+xRFV-b)d<_CSd40)gM4L?cQ5Uez!H>l^(6qOoJ^REHfMUZnNNfYr@dQ zECG!0zT~HS1HMjpZChNwj5}(Ovys3-ZQgS*r5k9v){5^*@p&WrUCExUD~CnFUdV=} zdz^jC5cRo?`ph8Jxe@xxABL1}$S+C1`(M)Zhmrp~;|Gr7PL)#mHB?Zo!V@$T>_ooK z{u9PVk4mx9`btvaw*?8_kxpdHi`3ND^KsCod#NJpor%8)##@e3TdU)M_VnU(9ZNu`qym7_5~KP@L0Fe^>!=!8u?Z{GJqelct5R2{OGV` z&Xb*D5&7D@oxmmwKTbRY8!X}|1#|^I%;i4rjNdI{(6!;tVw=HOsN2Ry2w1=egwB$(2Ks0%<~j3|#bk>Az{}6T%8$I{vGL*xFYha? zT;SzfF1g3b=%j6E@Xh0iQ^UtcI5^G|qQV^&&Zuxjg(Etum2wRSXgfr@=9SS8IO#$G R&$e+C&t_No>d@gM@IL^^)Z737 diff --git a/docs/build/doctrees/cli.new.doctree b/docs/build/doctrees/cli.new.doctree index 9dbd6b989574c7389d40770078ef85493eda56a8..449ea977000f906d8c53b913daaa063093297031 100644 GIT binary patch delta 1750 zcmbVNTWlLe6!pyR+DT-!K|m=nw#T8wb{yMHoHcnkP-t8t8XN^RAW=owaTnGrCpPh# z@OC2cR0FDXT|`rf4^&?2BejAANIWWjDuLi55-1W4DuE9u5<>Yv;tOVGz23Uw2Y#-1 z=H7eGz31MMFTRG>PatVgI(~7yCOHZ8`1{(N>2x|Ap2?IHsL8whcH_IMI;N}Yu4VK1 zLUpP7Y&D=ts$F$yM+K<4V$PdYx7tIGF9|jq{3vvZF70^%t_#R$2|jm6D{mdh&6jkd z_SB8i` zTg;P3NtWnJNsk_)#@|56&MO(60qKNxLX)FBh<;aS45c#~A~~Hb6w3J{jF~#kAl_(z zcDnF?irrd#gEDR{p17u9dY>&;uBn-Z{ae-5W^Lc2Vyd^Og6dAGo>X~8JB4kwU|s#? z)<%Qogs!@220D-Ulq%+wOyKei?Y6_vW@{0c`c2~er+Or=qghM+)KrI{ebKxvtPWUp z5NN-t1;5Sq#RKU?m$5Uj=}F+9n-eZu>$TYk$4dhEWO?mxZxP`=B0T2X+vck8qfdm> zz7m#2Af1Ph4Cg`*z*n8Uc#4Jfz~zXD?uYh398ZXF!5x7O91*m<<;+p1m)A4_lffuV z$PP44@1iX-odsQZ87_qngZ;Kqydv_K;H@*iE*dXEaB099ju{LcU6c4ji{OI>!LbIx ztKjk<#g_~`Qpek{@V@1E>jvKAfe`-7!uzv3#5`*5GcW$di`q7s*Jzrxw9gDdmT2Lb`LY(BWgC7@z533T+H;)`DsCB?q(r(Qd3@T zoy*KB`jbVa#Qr}thLGafDV~|)St*{8Dyu#g!w6I-M_0oJ^bd?F*v_zhjEZ4vQE6>E HIfecKgh(I$ delta 1085 zcmaizT}V@57{~X%=WKI1(!!6JZBA^uPdB%n*>rwQr8#3HWuI!zGL9pisUy0OHliSq zU_FaSSac%%> zB6(bX+jn3=uGYh7sV?)#(1P%N4!TX&odu$fp}nW4~8iROrzjZLy5*D}kqNoM)YNuum6<5AETo6u*L?4uNT zodoVjzu2pvQrPwFuxmVw%?XSXwFg#xOw2xKYkg!mbbU|w|E{lcdpC+U zAF9Z-wGCnXU6GmV_`&I&&XlMmD=(SiYRU7pR3bH*GKz9hLC%O-DT9qY#qhSXTyIp8 z!$AI**ud1TOVP1&XQQ!^3ES|{NNi$oJQXoPQLvh;&j}6(E07UlK|xbZWd9U+;YHAV zWl15EMV{000g>{amT7VpBX?+dz>_jV%OY)gOiFA@H4+{koVYwnTuIUhC4`td#FQbX m3Nb|}CRWfMY9Oi^U9?H)Pt<9qkh0U%in1fKd}gw%2mJwdmq};< diff --git a/docs/build/doctrees/cli.run.doctree b/docs/build/doctrees/cli.run.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c1463960f06799092504121e126822edb4ef0ce2 GIT binary patch literal 7079 zcmcgxTW=&s74~gxkFVEAE(1E$q!zp+aMCQw zbr+IOJl0v^%)AnOpdM5Ii4CzJ3? z`!UOXp>1C90wM&2cy2@_ES?tqEE&9XhZpa{*a}6MVPRLx~CU&cNfm=?mDk_ z(uYf>p#J)3ch}gt!#35N?vdB+d2QGp05LCQ8b`fh6lQJ6Y%23ypW)lXGhFV`x8PBu z^vEa%_M2+@Dw}4J6T=40X?H91iK_$$e@ZYek1J_JFwXkH`PE;U+4c$9ycuj z`|moimzTv)FyLSH0qoO}l^B@3{7ovnlqY86FRiZ0YKHe4(^FH|vb{fJM^tf9H(xDF z?7}S%;Lv2ED{cyTYYXvoR9X^Nq;@?n}|ppHLJMnA3%Q<+iDgqRUn$@ zx_3{ltrK`R8iGG52Tu}$?^#995R@wmNdN0&YOj;`%fPhN^6Am}*fvaCg>Ly)$M<(u z|26PkDO3En*TDBTR?+$Ro|odk9vgE>iof=DtS`I{jt(|SyJ;Lc#dXjjk#CaO$b2rO zgR3LTKqtek+otbloTU!#->m%;fNN6ouXe=wC{2)>*8=Ucq~?FDtrK`xrDhd6AD4qC zNzIR}qGt%o|C5@Rj_E(tW{#b+FCK$CIu7>v{;WQs{}ChqaM@u(tyO1w(IT0Q#}8w_ z$L8BCZ`|dbW1!sdJ}rH_Cl&uNpn}LS6|sbAK*a#+EwC4cG`aX#V+kU5UwbhPE3;Hn zNv= zYuJ@|;(BqYDLaA5wh9RisFAqGT!L~c2`}g>2Ux*MN|QL1Za|M{knhi^B}M}K+E5$x zL~~e@$V^n78mi&bPS%6EwPTV-KnXokNv1OQvoy>sx!N9S8JVKLKQlF@){1!tHdLc; z*BeF#s~g$}0ieL=C4nJeRs$0CGSZ_!+y@~u0}@m{mr^fIeXx58A_HnT2*m?6@5NCU zZUPbRyI^j*{3Hj5xu&zi9f;HnM>wteS(vysn?T{eaVL-rIia+DzN)%11x@{ z?ed^tOE>islz@)Xmp-hpp3TRSFM}DguL#i%oll6IsE0rdc*te`=8c!sT0#>SpipF? zX8>E#k`96GIxWD>?Nm?#nE1z_S(6+rF$9!(9@MP#PUePkI|&{!pjeU z=UUqJMyA)2!SpXy(<4oZ4%tJR?r|!+Mh6nUt@$@7Yk~|x78#OaQEemNLf59Jb-*ns zx-)e{oJNwIxQzE$fS+da0?l5k6%pbH?*1r4UJC&AoOv%^-5~Zz3GKGWaQ64G@I}4> zWdk8bAA)*0Gn~62(#tw6PhkS1R6@xuP}=0sr6J*gi_ZgK9yMkDRBe<5KY}&r76t80trRnu=>hosEH6A&<e_#Ck@j;Yy+D7aZq_g;zE|jP8)F{yKY+S(?ftp7LoZCX8m{Jbbppum z;^T-G7SH_`(X;JLkbeuxR=P}qqBn`Wl#7e<7(ce6HQv(jn?-K@=T?!bE6yfr#k*)pY;P?$~F=^bbp zN0|We3LkI^Sa@BBBjg_fg7@=BC^ERDqg>$wl0aG&3T=I^iI=U|WWq9!ydd*+CiZj^ PEctp1DXVR9mf8CstaSdy literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cli.start.doctree b/docs/build/doctrees/cli.start.doctree index 85ccbbd03517abd583c6359268b2e1ed2dc5a02f..1bde7025eb2db9000fb996dc8847c113b6c27738 100644 GIT binary patch delta 1876 zcmcIl-)qxQ6kgM%Tb&&Yr`xPuQ|8tc?L?e{4~n9Qqd13bzDQ+hbGMt2CMCIX?qO^L z1t0Pt=KAXYFp3B=nD`I)Ck(+~o1jm=dv467O*4k`$3xrO^WEI@o$q|-=F9MpGvb=~ ze0N|&oK4)pNmnFtMMu=5g>||@$FYbLxT{P7NsvX$bm|dk9I&pcsoQl_jey?M&Y?-S z8{j2XA()nO4nBpqa2jvo6F81D_%t3abvPCLCY-bQ@vC=;Xzf_!Zi#G4T$c?Y7O zTB9J-F3%J6rJ1+qIn<##v^89JGI=Ox+%W z9+F}e3PTo^@hF7z@F|ojJK|tu58ah@2T5ePo=2Q)GlpoGYbM}&k8?f#&$%KnT&C{> zDE_`x1lEVu?LF+u%u_LyJ)H0{+@bOPS~fpFUo0x<0sQ__0Y*tzL0?&KTC5tSXXZLy-(Kh$*T~BzXa9lPZp?D-*mLe#+Dz9ut;9XQj5BeyquYG}^wWUm2QiZh0tCq#@T3Tw4IIP#>7K OaSoOYZXD^Ii~R(N-*5T= delta 183 zcmeyW|3Z$nfpuyu|3=mjw#|3>1Q|JcSX1*#iYljU{=o0S$dvJ5v#sEJW(7mjDH-gs zQ!>PQn1IaIDUDNVr)XrbX0T;QXUQ`%FiZ|$5}BMJD$gX#IJr?&mPw9r@&Zvc7JZo1 zJyAuF6r-4lv@~2LcgruzRw&6xRVdETO-(6EOe@h#N!3p-$WbUtEy&lK zlEEH3B}1$Shq}#dhWEJ`wI|EkC<+7hSmh=bm!uZKG=ar8JKB5|W?Vb@V?fm8i2@{#za?3BuRw&6xRVdETO-(6EOe@h#N!2gTh)*uaQ7B3+ z$k&^a!5%v$L#zk4(oKfoBe}AxB<$&J465g diff --git a/docs/build/doctrees/cpl_cli.doctree b/docs/build/doctrees/cpl_cli.doctree index 3aff0849113eef39f11024a3971739c073087628..46b5c41556ae3d30e0c65b873f41f0f7f746b6ec 100644 GIT binary patch delta 43 zcmZ1^zDRt+B!!~XwA7;1yyVm=8SJrBGB|r!LQ*SArc9pF!|UwhsZg|W(+4g9aWoMb delta 43 zcmZ1^zDRt+B!!^VwA7;1yyVm=8SJrBGB|r!LQ*SArc9pF!|UwhsSvbr(+4g9Y!ndL diff --git a/docs/build/doctrees/cpl_core.application.doctree b/docs/build/doctrees/cpl_core.application.doctree index 22d735eff07e0c4441f666d274b286a6b9059499..bdf49dbabee76c5e1ef182af756c16f4d7f092a3 100644 GIT binary patch delta 6569 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 TrimoA474%OGH?!gkPZJomci!f delta 6477 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 Hva$aMx0|=6 diff --git a/docs/build/doctrees/cpl_core.database.doctree b/docs/build/doctrees/cpl_core.database.doctree index a8966e311ffa6c676828951f71b0b8a2c69d9f2c..208ae505b64c0121ac393ecbb809825a035e8162 100644 GIT binary patch literal 49411 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 cx!0W*xq(eca5s9db-

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 diff --git a/docs/build/doctrees/cpl_discord.application.doctree b/docs/build/doctrees/cpl_discord.application.doctree new file mode 100644 index 0000000000000000000000000000000000000000..64d0f8cc1e41bc4466efa7fe985bc993ef409485 GIT binary patch literal 9865 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_discord.command.doctree b/docs/build/doctrees/cpl_discord.command.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d0fe4f61bd874010b5e8fe425d807ab2d4da6ac3 GIT binary patch literal 12501 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_discord.container.doctree b/docs/build/doctrees/cpl_discord.container.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a3f5ee12869218003c02a58452875d6f0e796b92 GIT binary patch literal 161304 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ℑN5|_KSnk8 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_discord.doctree b/docs/build/doctrees/cpl_discord.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a373b278156008c64d159d65d69deeaa714ff455 GIT binary patch literal 2967 zcmZuz&2Jk;6i<`bu@lFM6T*ku02L}tMPnnx0dYc5Aw<9jiZ~!uquJfDXO!8UWo9;U z4wc~0su6SR@c;6g-Sv7Mh-78wea-v$y*KaA&OdH%qx^FRCg&nsjA@c&Dq+UEUZUb6 zWtsJF{gc1^OMmA2nqC`K=$Lu80g0FknP`^z7v2qnxE0cjYyBO=Vk=bEsPhi*@|_p{ zjQ3r~3M*NQ-os_N#i`< za^2eJsoRz!V}4ph)a_DhwTKFfSVL@EA~7M3omf(1K*V<^qiOZkONxATh-iEXH-k*! zb}XF-mgfijJ|FN0e2bsD-zQw9Y+|lhHkrczSgIl+&%^O~%rz5{MZA167nT@)&Js;$ zmL$;NB+lgo{+mhV_XKB>RM{D8g8)Cg*eoJsrWdO;S4Ebz5?SS#Z@@1VTg}=@u6Z9J zUj7id{RF>9_&vt&34Zt8Uh6L80_oJE%)r^yz1QN6X`V|F)3U&?{nQ<|nQ$wm@G3Aq zSZ8E2F)#E=@8k~KQdCHnnn!IGL*}gcFP$@)*YayF7^bfTF!b6pHxOAYi-gUDtYYEc z@NfAu{yqPJ|Hyx0u9wn9!g9;~#Wnyy^D->JWiD0ZZ(Wy*BmvBC-F|JVA@s5$jeyt0 zUu?MD64gd!@&>ZI=$2Ii3;r4Zf}irIsNOb!G64vAyAtl8F4+0CMs^VtZ5Jo#pRWKG z>;T8CG2uovM9xI z(FRLO)o`w7n6)CCW3G&vK{3-RvkW+K-QTDzP@CnX;RjRKpEDqVTBU)aenQcxmZmul zd(|}rwl8tqt&fG4IPD{gBs6H?;<`>K!HsuEGo@^%ENd|@?z#OirBFk%m?@olP=*GW z&q=^=3Aw4eUs0H3C52oIizcnd1a7Pq8p1%cTxm-rKr8*lrrYIIHph+|u|?>5OKoA6 zLLJvhSX9gr!SI^u47q}YW;6w*Z#9is2+F^4Ly_f$C76&Zfs}Xs!p_dWIyVB}57wE4 zX{|KjXhsP@p>T*Tw%#46!meBClvcbuy~DX=upLOMi3a-du+Jny<8EvzCd zlG_wO)P7Q=IcZRbtd;};!0C+2VDO-%AhnqZwO^5P!-_a)!YMQYB91LN$%b7g-bBE!tg8N1Zf$P9o=iYCsAusV^MSH5|LM{^I+X^zUNSuv%+AU?(DM^+ zQ;Ey^mPTlyBuv|$I|U$9()4B%05N$$$gMjxH<_gi!o{3R`~cojdkS;>hsfLAJ7wPM&WEQ~DhuBE>*DUszx0XsrYxXf~wGG4lMmhX(bpE^G$L8hNiFmnGY) W_Xj{`9;&sQgjrXQh4B6s(fD7Xx1Nsx literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_discord.events.doctree b/docs/build/doctrees/cpl_discord.events.doctree new file mode 100644 index 0000000000000000000000000000000000000000..00bf809b93e88d36e385b81af1f5f4226e29f5e6 GIT binary patch literal 308142 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

    ?%TuGKVQbiJHr#WRm5+h;&n%$XMNy+1ei~)qbK> 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_discord.helper.doctree b/docs/build/doctrees/cpl_discord.helper.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e661717e72b5189b3d434d2b4920dc1b258ce375 GIT binary patch literal 11418 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 SyVOj(Xi|_!{i#ZKJO2a2LTAAM literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_discord.service.doctree b/docs/build/doctrees/cpl_discord.service.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8e13fbf26d7a8f52e16e67723ec4929a4781b0a2 GIT binary patch literal 342247 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 QmQ&L>EyHFoXy57ke*-J-S^xk5 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_query.base.doctree b/docs/build/doctrees/cpl_query.base.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3d440b8e8a88eb4f170b615dd1b45d34edd78476 GIT binary patch literal 208470 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_query.doctree b/docs/build/doctrees/cpl_query.doctree index a505b70115838edc2ba6fa36574483a651490302..3f98dae19defa8aa2106cd9149e5c16204f99101 100644 GIT binary patch delta 284 zcmX>u`CF2ufpzMKi7XQsizZH0U@Y3Wt&p*vFS#HmzOXd4s8TN}u{d=~+Z4YZ5rkN3 zUTJP>QDRaKL`E1%rlKS@uQ)S553EH9A(2@E*O1!7lbM&CQ<{>RmYI`UJSBFDMutO% zQ-({1TWSwSZem3WS872?#uTsrKrp$MX*H8K*Je%T0w%`R&9hiPFw4Ye#1!{%<|XE) zmQ)r14XB-x5${)=p$Md7HZS9x!pQh;vNg9B>zfSejF*$MxYZboCQsy629u(bPjT}x o{+ryuEIaudw-nDGkeUqH44u-X)X5(iB`2Hm7&AVfoXHah0Ov$-Pyhe` delta 209 zcmew@d0djEfpzMhi7XQsgC zaSvx+Vs2_lWkG83l-em7(SF4liahq{PV|86_uc@<{Xi04d3k&Cn@LN(BpM@)$Edo;;T)4gdpwPyPS^ diff --git a/docs/build/doctrees/cpl_query.enumerable.doctree b/docs/build/doctrees/cpl_query.enumerable.doctree new file mode 100644 index 0000000000000000000000000000000000000000..db8a26cb658f0aca56a6f09fbeff73f0aa1605c0 GIT binary patch literal 21864 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_query.exceptions.doctree b/docs/build/doctrees/cpl_query.exceptions.doctree deleted file mode 100644 index cc1ecc2ce04c3a03b87babb525649556e9ac6280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23263 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 diff --git a/docs/build/doctrees/cpl_query.extension.doctree b/docs/build/doctrees/cpl_query.extension.doctree index 64add856d99659f03621a02c9347b0361d5e6d47..6e010bdc8033a963f1d6c811077466fc0c026f22 100644 GIT binary patch literal 15861 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 PfZ{0`dJvDZe((PPAB925 literal 303500 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 W^O&5`Tdrhlh4Mh78z|R%=Keo3AO6t* diff --git a/docs/build/doctrees/cpl_query.iterable.doctree b/docs/build/doctrees/cpl_query.iterable.doctree new file mode 100644 index 0000000000000000000000000000000000000000..38b30928e5c908af0366cb8cbf775257e88fce5d GIT binary patch literal 32376 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 C9fP9) literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/cpl_translation.doctree b/docs/build/doctrees/cpl_translation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c70dfd3f21c0a91043d68d5acb5ddef94e0347ca GIT binary patch literal 45878 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�jO%3y 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�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%0Dk6whprL2NymtpVSm8HAi4ys; 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�R~adYnjVTc^F5Sl72TLK9%GW%|s_#pc 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 diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 0286932c2f9e58c20ef2322994486302651a7a45..60583e3cc601446aab58d974793a7da5f7627263 100644 GIT binary patch delta 206 zcmaESlX3DbM%D(_sT{c*Sq~-}a3>e!#HVByC+8QXOlh0q*TV@CC@f7asswZSLEMs} z#Ju91#FEVXyvY|5P1v)Za4;}rJ=@HfG>e&0ck`UoFU+CroIoKK5V05}xd24`2N8dO zL}?FaUSe))No7H5@s!#r8d)IKeqfb;U{!vl8ImAzkO3JwVBHz9S${S^%~WP$n!-8x ZpuQf9Sk^=!LsxEcRE_~-|K#qR2msBgMezUt delta 160 zcmbPyi}CSIM%D(_sW);qvK~z2;!G~ci7zZoEvlUSEzxANNz!y?M$OGu0-$AGbW^6s1n0PLF3#kFocO}h)S}AC*-Ubqdzplo8Cy3mVEw=>6Q2=N+{2ld dn44NsS&&*hrFKe2ykBvKB9M;RyoNKB5dg{S8t(uA diff --git a/docs/build/doctrees/setup.doctree b/docs/build/doctrees/setup.doctree index ae9229c28dabf9dd824557342e8dd68ef11134ee..68420c76ff639b5284e94de6aeb0b8ff0e1046a0 100644 GIT binary patch delta 145 zcmZo!$oOdiBTED8)bx!kxzfB21(^j3nR&$}i8(n6lN+UNFhooz*DLdF7La+y%xjOL nI8ebvB!fM6N`_buip1tXh1pEJjwovXDA{6&m~F0CX4M4%YU(oT delta 164 zcmeygfU#vEBTED8)XI%4xzYm81(^j3nR&$}i8(n6#ToIF>!fY437SsMRp#5wCG(6~ kzzJQ;UwLb6f+k=s?Fx}h0xsxU-YVH*6ExeLtIVnk01x6jcK`qY diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index c200e742..f883c950 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 9ea51a00cf3559575c97b7efd7a002e5 +config: 7051b788adc6d655ae340e56640c6925 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/_sources/cli.generate.md.txt b/docs/build/html/_sources/cli.generate.md.txt index 40d79fdf..95a1cb51 100644 --- a/docs/build/html/_sources/cli.generate.md.txt +++ b/docs/build/html/_sources/cli.generate.md.txt @@ -18,10 +18,11 @@ Generates files based on a schematic. ## Arguments -| Argument | Description | Value type | -| ----------------- |:---------------------------------:|:-------------:| -| `````` | The schematic to generate. | ```str``` | -| `````` | The name of the generated file. | ```str``` | +| Argument | Description | Value type | +|-------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------:| +| `````` | The schematic to generate. | ```str``` | +| `````` | The name of the generated file. | ```str``` | +| ```--base``` | First element of path will be used as base-path not 'src'. For example: 'cpl g c test/Test' will be created at ```src/test/``` with --base it would be ```test/``` | ```str``` | ## Schematics diff --git a/docs/build/html/_sources/cli.new.md.txt b/docs/build/html/_sources/cli.new.md.txt index 2ddcb9e7..f000dcd6 100644 --- a/docs/build/html/_sources/cli.new.md.txt +++ b/docs/build/html/_sources/cli.new.md.txt @@ -18,10 +18,11 @@ Generates a workspace and initial project or add a project to workspace. If the command is running in a CPL workspace, it will add the new project to the workspace. -| Argument | Description | Value type | -|--------------|:----------------------------------------------------:|:----------:| -| `````` | The type of the project, see [types](#project-types) | ```str``` | -| `````` | The name of the project | ```str``` | +| Argument | Description | Value type | +|--------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:----------:| +| `````` | The type of the project, see [types](#project-types) | ```str``` | +| `````` | The name of the project | ```str``` | +| ```--base``` | First element of path will be used as base-path not 'src'. For example: 'cpl g c test/Test' will be created at ```src/test/``` with --base it would be ```test/``` | ```str``` | ## Project types diff --git a/docs/build/html/_sources/cli.run.md.txt b/docs/build/html/_sources/cli.run.md.txt new file mode 100644 index 00000000..5782a7a4 --- /dev/null +++ b/docs/build/html/_sources/cli.run.md.txt @@ -0,0 +1,12 @@ +# cpl run + +Starts your application once. + +cpl **run**
    +cpl **r**
    +cpl **R** + +| Argument | Description | Value type | +|-----------------|:----------------------------------------------------------------------------------------------------:|:----------:| +| `````` | Optional parameter to specify which project to start, if not set default project will be started. | ```str``` | +| ```--dev``` | To run the project from source and not from dist after build. | ```str``` | \ No newline at end of file diff --git a/docs/build/html/_sources/cli.start.md.txt b/docs/build/html/_sources/cli.start.md.txt index 2b067bfb..961feef1 100644 --- a/docs/build/html/_sources/cli.start.md.txt +++ b/docs/build/html/_sources/cli.start.md.txt @@ -5,3 +5,7 @@ Starts your application, restarting on file changes. cpl **start**
    cpl **s**
    cpl **S** + +| Argument | Description | Value type | +|-----------------|:----------------------------------------------------------------------------------------------------:|:----------:| +| ```--dev``` | To run the project from source and not from dist after build. | ```str``` | \ No newline at end of file diff --git a/docs/build/html/_sources/contributing.md.txt b/docs/build/html/_sources/contributing.md.txt index 85456726..249c41d6 100644 --- a/docs/build/html/_sources/contributing.md.txt +++ b/docs/build/html/_sources/contributing.md.txt @@ -44,7 +44,7 @@ Before you submit your Pull Request (PR) consider the following guidelines: 2. Be sure that an issue describes the problem you're fixing, or documents the design for the feature you'd like to add. Discussing the design upfront helps to ensure that we're ready to accept your work. -3. Fork the sh-edraft.de/sh_cpl repo. +3. Fork the sh-edraft.de/cpl repo. 4. In your forked repository, make your changes in a new git branch: @@ -70,7 +70,7 @@ Before you submit your Pull Request (PR) consider the following guidelines: git push origin my-fix-branch ``` -8. In Gitea, send a pull request to sh_cpl:master +8. In Gitea, send a pull request to cpl:master ### Reviewing a Pull Request @@ -104,7 +104,7 @@ To ensure consistency throughout the source code, keep these rules in mind as yo ## License By contributing, you agree that your contributions will be licensed under its MIT License. -See [LICENSE](https://git.sh-edraft.de/sh-edraft.de/sh_cpl/src/branch/master/LICENSE) +See [LICENSE](https://git.sh-edraft.de/sh-edraft.de/cpl/src/branch/master/LICENSE) [gitea-repo]: https://git.sh-edraft.de/sh-edraft.de/sh_cpl/ diff --git a/docs/build/html/_sources/cpl_cli.rst.txt b/docs/build/html/_sources/cpl_cli.rst.txt index 338ba5c2..cec12291 100644 --- a/docs/build/html/_sources/cpl_cli.rst.txt +++ b/docs/build/html/_sources/cpl_cli.rst.txt @@ -1,4 +1,4 @@ -CLI Reference +CLI reference ============= .. toctree:: diff --git a/docs/build/html/_sources/cpl_core.database.rst.txt b/docs/build/html/_sources/cpl_core.database.rst.txt index fb55c962..cdcb0ce8 100644 --- a/docs/build/html/_sources/cpl_core.database.rst.txt +++ b/docs/build/html/_sources/cpl_core.database.rst.txt @@ -7,8 +7,7 @@ cpl_core.database cpl_core.database.connection cpl_core.database.context -Submodules ----------- + cpl_core.database.database\_model ----------------------------------- diff --git a/docs/build/html/_sources/cpl_core.pipes.rst.txt b/docs/build/html/_sources/cpl_core.pipes.rst.txt index 8af5814b..0a8bba4d 100644 --- a/docs/build/html/_sources/cpl_core.pipes.rst.txt +++ b/docs/build/html/_sources/cpl_core.pipes.rst.txt @@ -1,10 +1,9 @@ cpl\_core.pipes ======================= -Submodules ----------- -cpl\_core.pipes.bool\_pipe module + +cpl\_core.pipes.bool\_pipe --------------------------------- .. automodule:: cpl_core.pipes.bool_pipe @@ -12,7 +11,7 @@ cpl\_core.pipes.bool\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.first\_char\_to\_lower\_pipe module +cpl\_core.pipes.first\_char\_to\_lower\_pipe --------------------------------------------------- .. automodule:: cpl_core.pipes.first_char_to_lower_pipe @@ -20,7 +19,7 @@ cpl\_core.pipes.first\_char\_to\_lower\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.first\_to\_upper\_pipe module +cpl\_core.pipes.first\_to\_upper\_pipe --------------------------------------------- .. automodule:: cpl_core.pipes.first_to_upper_pipe @@ -28,7 +27,7 @@ cpl\_core.pipes.first\_to\_upper\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.ip\_address\_pipe module +cpl\_core.pipes.ip\_address\_pipe ---------------------------------------- .. automodule:: cpl_core.pipes.ip_address_pipe @@ -36,7 +35,7 @@ cpl\_core.pipes.ip\_address\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.pipe\_abc module +cpl\_core.pipes.pipe\_abc -------------------------------- .. automodule:: cpl_core.pipes.pipe_abc @@ -44,7 +43,7 @@ cpl\_core.pipes.pipe\_abc module :undoc-members: :show-inheritance: -cpl\_core.pipes.to\_camel\_case\_pipe module +cpl\_core.pipes.to\_camel\_case\_pipe -------------------------------------------- .. automodule:: cpl_core.pipes.to_camel_case_pipe @@ -52,7 +51,7 @@ cpl\_core.pipes.to\_camel\_case\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.to\_snake\_case\_pipe module +cpl\_core.pipes.to\_snake\_case\_pipe -------------------------------------------- .. automodule:: cpl_core.pipes.to_snake_case_pipe @@ -60,18 +59,10 @@ cpl\_core.pipes.to\_snake\_case\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.version\_pipe module +cpl\_core.pipes.version\_pipe ------------------------------------ .. automodule:: cpl_core.pipes.version_pipe :members: :undoc-members: :show-inheritance: - -Module contents ---------------- - -.. automodule:: cpl_core.pipes - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/build/html/_sources/cpl_core.rst.txt b/docs/build/html/_sources/cpl_core.rst.txt index a71547b3..e1e9b11a 100644 --- a/docs/build/html/_sources/cpl_core.rst.txt +++ b/docs/build/html/_sources/cpl_core.rst.txt @@ -1,4 +1,4 @@ -API Reference +API reference =========== .. toctree:: diff --git a/docs/build/html/_sources/cpl_discord.application.rst.txt b/docs/build/html/_sources/cpl_discord.application.rst.txt new file mode 100644 index 00000000..ef077d22 --- /dev/null +++ b/docs/build/html/_sources/cpl_discord.application.rst.txt @@ -0,0 +1,12 @@ +cpl\_discord.application +================================ + + + +cpl\_discord.application.discord\_bot\_application\_abc +-------------------------------------------------------------- + +.. automodule:: cpl_discord.application.discord_bot_application_abc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/cpl_discord.command.rst.txt b/docs/build/html/_sources/cpl_discord.command.rst.txt new file mode 100644 index 00000000..5f495733 --- /dev/null +++ b/docs/build/html/_sources/cpl_discord.command.rst.txt @@ -0,0 +1,20 @@ +cpl\_discord.command +============================ + + + +cpl\_discord.command.discord\_command\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.command.discord_command_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.command.discord\_commands\_meta +--------------------------------------------------- + +.. automodule:: cpl_discord.command.discord_commands_meta + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/cpl_discord.configuration.rst.txt b/docs/build/html/_sources/cpl_discord.configuration.rst.txt new file mode 100644 index 00000000..eb855d14 --- /dev/null +++ b/docs/build/html/_sources/cpl_discord.configuration.rst.txt @@ -0,0 +1,12 @@ +cpl\_discord.configuration +================================== + + + +cpl\_discord.configuration.discord\_bot\_settings +-------------------------------------------------------- + +.. automodule:: cpl_discord.configuration.discord_bot_settings + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/cpl_discord.container.rst.txt b/docs/build/html/_sources/cpl_discord.container.rst.txt new file mode 100644 index 00000000..a47f50b1 --- /dev/null +++ b/docs/build/html/_sources/cpl_discord.container.rst.txt @@ -0,0 +1,68 @@ +cpl\_discord.container +============================== + + + +cpl\_discord.container.category\_channel +----------------------------------------------- + +.. automodule:: cpl_discord.container.category_channel + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.container +--------------------------------------- + +.. automodule:: cpl_discord.container.container + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.guild +----------------------------------- + +.. automodule:: cpl_discord.container.guild + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.member +------------------------------------ + +.. automodule:: cpl_discord.container.member + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.role +---------------------------------- + +.. automodule:: cpl_discord.container.role + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.text\_channel +------------------------------------------- + +.. automodule:: cpl_discord.container.text_channel + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.thread +------------------------------------ + +.. automodule:: cpl_discord.container.thread + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.voice\_channel +-------------------------------------------- + +.. automodule:: cpl_discord.container.voice_channel + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/cpl_discord.events.rst.txt b/docs/build/html/_sources/cpl_discord.events.rst.txt new file mode 100644 index 00000000..d26aa744 --- /dev/null +++ b/docs/build/html/_sources/cpl_discord.events.rst.txt @@ -0,0 +1,412 @@ +cpl\_discord.events +=========================== + + + +cpl\_discord.events.on\_bulk\_message\_delete\_abc +--------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_bulk_message_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_command\_abc +------------------------------------------- + +.. automodule:: cpl_discord.events.on_command_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_command\_completion\_abc +------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_command_completion_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_command\_error\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_command_error_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_connect\_abc +------------------------------------------- + +.. automodule:: cpl_discord.events.on_connect_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_disconnect\_abc +---------------------------------------------- + +.. automodule:: cpl_discord.events.on_disconnect_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_error\_abc +----------------------------------------- + +.. automodule:: cpl_discord.events.on_error_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_group\_join\_abc +----------------------------------------------- + +.. automodule:: cpl_discord.events.on_group_join_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_group\_remove\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_group_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_available\_abc +---------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_available_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_channel\_create\_abc +---------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_channel_create_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_channel\_delete\_abc +---------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_channel_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_channel\_pins\_update\_abc +---------------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_channel_pins_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_channel\_update\_abc +---------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_channel_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_emojis\_update\_abc +--------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_emojis_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_integrations\_update\_abc +--------------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_integrations_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_join\_abc +----------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_join_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_remove\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_role\_create\_abc +------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_role_create_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_role\_delete\_abc +------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_role_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_role\_update\_abc +------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_role_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_unavailable\_abc +------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_guild_unavailable_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_update\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_invite\_create\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_invite_create_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_invite\_delete\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_invite_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_ban\_abc +----------------------------------------------- + +.. automodule:: cpl_discord.events.on_member_ban_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_join\_abc +------------------------------------------------ + +.. automodule:: cpl_discord.events.on_member_join_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_remove\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_member_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_unban\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_member_unban_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_update\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_member_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_message\_abc +------------------------------------------- + +.. automodule:: cpl_discord.events.on_message_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_message\_delete\_abc +--------------------------------------------------- + +.. automodule:: cpl_discord.events.on_message_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_message\_edit\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_message_edit_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_private\_channel\_create\_abc +------------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_private_channel_create_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_private\_channel\_delete\_abc +------------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_private_channel_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_private\_channel\_pins\_update\_abc +------------------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_private_channel_pins_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_private\_channel\_update\_abc +------------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_private_channel_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_raw\_reaction\_add\_abc +------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_raw_reaction_add_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_raw\_reaction\_clear\_abc +-------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_raw_reaction_clear_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_raw\_reaction\_clear\_emoji\_abc +--------------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_raw_reaction_clear_emoji_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_raw\_reaction\_remove\_abc +--------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_raw_reaction_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_reaction\_add\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_reaction_add_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_reaction\_clear\_abc +--------------------------------------------------- + +.. automodule:: cpl_discord.events.on_reaction_clear_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_reaction\_clear\_emoji\_abc +---------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_reaction_clear_emoji_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_reaction\_remove\_abc +---------------------------------------------------- + +.. automodule:: cpl_discord.events.on_reaction_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_ready\_abc +----------------------------------------- + +.. automodule:: cpl_discord.events.on_ready_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_resume\_abc +------------------------------------------ + +.. automodule:: cpl_discord.events.on_resume_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_typing\_abc +------------------------------------------ + +.. automodule:: cpl_discord.events.on_typing_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_user\_update\_abc +------------------------------------------------ + +.. automodule:: cpl_discord.events.on_user_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_voice\_state\_update\_abc +-------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_voice_state_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_webhooks\_update\_abc +---------------------------------------------------- + +.. automodule:: cpl_discord.events.on_webhooks_update_abc + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/build/html/_sources/cpl_discord.helper.rst.txt b/docs/build/html/_sources/cpl_discord.helper.rst.txt new file mode 100644 index 00000000..396b4c89 --- /dev/null +++ b/docs/build/html/_sources/cpl_discord.helper.rst.txt @@ -0,0 +1,12 @@ +cpl\_discord.helper +=========================== + + + +cpl\_discord.helper.to\_containers\_converter +---------------------------------------------------- + +.. automodule:: cpl_discord.helper.to_containers_converter + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/cpl_discord.rst.txt b/docs/build/html/_sources/cpl_discord.rst.txt new file mode 100644 index 00000000..5d10fb20 --- /dev/null +++ b/docs/build/html/_sources/cpl_discord.rst.txt @@ -0,0 +1,13 @@ +Discord reference +==================== + +.. toctree:: + :maxdepth: 4 + + cpl_discord.application + cpl_discord.command + cpl_discord.configuration + cpl_discord.container + cpl_discord.events + cpl_discord.helper + cpl_discord.service diff --git a/docs/build/html/_sources/cpl_discord.service.rst.txt b/docs/build/html/_sources/cpl_discord.service.rst.txt new file mode 100644 index 00000000..a6898292 --- /dev/null +++ b/docs/build/html/_sources/cpl_discord.service.rst.txt @@ -0,0 +1,60 @@ +cpl\_discord.service +============================ + + + +cpl\_discord.service.command\_error\_handler\_service +------------------------------------------------------------ + +.. automodule:: cpl_discord.service.command_error_handler_service + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_bot\_service +------------------------------------------------- + +.. automodule:: cpl_discord.service.discord_bot_service + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_bot\_service\_abc +------------------------------------------------------ + +.. automodule:: cpl_discord.service.discord_bot_service_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_collection +----------------------------------------------- + +.. automodule:: cpl_discord.service.discord_collection + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_collection\_abc +---------------------------------------------------- + +.. automodule:: cpl_discord.service.discord_collection_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_service +-------------------------------------------- + +.. automodule:: cpl_discord.service.discord_service + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_service\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.service.discord_service_abc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/cpl_query.base.rst.txt b/docs/build/html/_sources/cpl_query.base.rst.txt new file mode 100644 index 00000000..156985e5 --- /dev/null +++ b/docs/build/html/_sources/cpl_query.base.rst.txt @@ -0,0 +1,52 @@ +cpl\_query.base +======================= + + + +cpl\_query.base.default\_lambda +-------------------------------------- + +.. automodule:: cpl_query.base.default_lambda + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.ordered\_queryable +----------------------------------------- + +.. automodule:: cpl_query.base.ordered_queryable + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.ordered\_queryable\_abc +---------------------------------------------- + +.. automodule:: cpl_query.base.ordered_queryable_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.queryable\_abc +------------------------------------- + +.. automodule:: cpl_query.base.queryable_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.sequence\_abc +------------------------------------ + +.. automodule:: cpl_query.base.sequence_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.sequence\_values +--------------------------------------- + +.. automodule:: cpl_query.base.sequence_values + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/cpl_query.enumerable.rst.txt b/docs/build/html/_sources/cpl_query.enumerable.rst.txt new file mode 100644 index 00000000..37e58add --- /dev/null +++ b/docs/build/html/_sources/cpl_query.enumerable.rst.txt @@ -0,0 +1,20 @@ +cpl\_query.enumerable +============================= + + + +cpl\_query.enumerable.enumerable +--------------------------------------- + +.. automodule:: cpl_query.enumerable.enumerable + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.enumerable.enumerable\_abc +-------------------------------------------- + +.. automodule:: cpl_query.enumerable.enumerable_abc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/cpl_query.exceptions.rst.txt b/docs/build/html/_sources/cpl_query.exceptions.rst.txt deleted file mode 100644 index d492c637..00000000 --- a/docs/build/html/_sources/cpl_query.exceptions.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -cpl_query.exceptions -================================= - -cpl_query.exceptions ----------------------------------------------------- - -.. automodule:: cpl_query.exceptions - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/build/html/_sources/cpl_query.extension.rst.txt b/docs/build/html/_sources/cpl_query.extension.rst.txt index 9dfaa401..a0bba3e0 100644 --- a/docs/build/html/_sources/cpl_query.extension.rst.txt +++ b/docs/build/html/_sources/cpl_query.extension.rst.txt @@ -1,42 +1,12 @@ -cpl_query.extension -================================= +cpl\_query.extension +============================ -cpl_query.extension.iterable_abc ----------------------------------------------------- -.. automodule:: cpl_query.extension.iterable_abc - :members: - :undoc-members: - :show-inheritance: -cpl_query.extension.iterable ----------------------------------------------------- - -.. automodule:: cpl_query.extension.iterable - :members: - :undoc-members: - :show-inheritance: - -cpl_query.extension.list ----------------------------------------------------- +cpl\_query.extension.list +-------------------------------- .. automodule:: cpl_query.extension.list :members: :undoc-members: :show-inheritance: - -cpl_query.extension.ordered_iterable_abc ----------------------------------------------------- - -.. automodule:: cpl_query.extension.ordered_iterable_abc - :members: - :undoc-members: - :show-inheritance: - -cpl_query.extension.ordered_iterable ----------------------------------------------------- - -.. automodule:: cpl_query.extension.ordered_iterable - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/docs/build/html/_sources/cpl_query.iterable.rst.txt b/docs/build/html/_sources/cpl_query.iterable.rst.txt new file mode 100644 index 00000000..8a7bc919 --- /dev/null +++ b/docs/build/html/_sources/cpl_query.iterable.rst.txt @@ -0,0 +1,20 @@ +cpl\_query.iterable +=========================== + + + +cpl\_query.iterable.iterable +----------------------------------- + +.. automodule:: cpl_query.iterable.iterable + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.iterable.iterable\_abc +---------------------------------------- + +.. automodule:: cpl_query.iterable.iterable_abc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/cpl_query.rst.txt b/docs/build/html/_sources/cpl_query.rst.txt index 10d6f0d8..5a362b26 100644 --- a/docs/build/html/_sources/cpl_query.rst.txt +++ b/docs/build/html/_sources/cpl_query.rst.txt @@ -1,8 +1,10 @@ -Query Reference +Query reference =========== .. toctree:: :maxdepth: 4 - - cpl_query.extension - cpl_query.exceptions + + cpl_query.base + cpl_query.enumerable + cpl_query.extension + cpl_query.iterable diff --git a/docs/build/html/_sources/cpl_translation.rst.txt b/docs/build/html/_sources/cpl_translation.rst.txt new file mode 100644 index 00000000..365356e8 --- /dev/null +++ b/docs/build/html/_sources/cpl_translation.rst.txt @@ -0,0 +1,34 @@ +Translation reference +======================== + +cpl\_translation.translate\_pipe +--------------------------------------- + +.. automodule:: cpl_translation.translate_pipe + :members: + :undoc-members: + :show-inheritance: + +cpl\_translation.translation\_service +-------------------------------------------- + +.. automodule:: cpl_translation.translation_service + :members: + :undoc-members: + :show-inheritance: + +cpl\_translation.translation\_service\_abc +------------------------------------------------- + +.. automodule:: cpl_translation.translation_service_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_translation.translation\_settings +--------------------------------------------- + +.. automodule:: cpl_translation.translation_settings + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/build/html/_sources/index.rst.txt b/docs/build/html/_sources/index.rst.txt index 0d0ef798..921b7964 100644 --- a/docs/build/html/_sources/index.rst.txt +++ b/docs/build/html/_sources/index.rst.txt @@ -89,4 +89,6 @@ These pages go into great detail about everything the Library can do. contributing cpl_cli cpl_core + cpl_discord cpl_query + cpl_translation diff --git a/docs/build/html/_sources/modules.rst.txt b/docs/build/html/_sources/modules.rst.txt index d1ae65e0..5a411fa4 100644 --- a/docs/build/html/_sources/modules.rst.txt +++ b/docs/build/html/_sources/modules.rst.txt @@ -9,4 +9,4 @@ cpl cpl_core cpl_discord cpl_query - cpl_translate + cpl_translation diff --git a/docs/build/html/_sources/setup.md.txt b/docs/build/html/_sources/setup.md.txt index 6d0be37c..be16fa9b 100644 --- a/docs/build/html/_sources/setup.md.txt +++ b/docs/build/html/_sources/setup.md.txt @@ -27,7 +27,7 @@ Also you need to have the following installed. To install the package, open a terminal window and run the following command: ```sh -pip install sh_cpl-core --extra-index-url https://pip.sh-edraft.de +pip install cpl-core --extra-index-url https://pip.sh-edraft.de ``` ## Install the CLI @@ -37,7 +37,7 @@ You use the CPL CLI to create projects, generate application and library code. Y To install the CLI, open a terminal window and run the following command: ```sh -pip install sh_cpl-cli --extra-index-url https://pip.sh-edraft.de +pip install cpl-cli --extra-index-url https://pip.sh-edraft.de ``` ## Install the query @@ -45,7 +45,7 @@ pip install sh_cpl-cli --extra-index-url https://pip.sh-edraft.de To install the package, open a terminal window and run the following command: ```sh -pip install sh_cpl-query --extra-index-url https://pip.sh-edraft.de +pip install cpl-query --extra-index-url https://pip.sh-edraft.de ``` ## Create initial console app diff --git a/docs/build/html/cli.add.html b/docs/build/html/cli.add.html index 683a3330..54bff940 100644 --- a/docs/build/html/cli.add.html +++ b/docs/build/html/cli.add.html @@ -42,7 +42,7 @@
  1. Getting started
  2. Contributing to CPL
  3. -
  4. CLI Reference
  5. -
  6. CLI Reference
  7. -
  8. API Reference
  9. -
  10. Query Reference
  11. +
  12. CLI reference
  13. +
  14. API reference
  15. +
  16. Discord reference
  17. +
  18. Query reference
  19. +
  20. Translation reference
  21. @@ -123,7 +125,7 @@
    1. Search the repository for an open or closed PR that relates to your submission. You don’t want to duplicate existing efforts.

    2. Be sure that an issue describes the problem you’re fixing, or documents the design for the feature you’d like to add. Discussing the design upfront helps to ensure that we’re ready to accept your work.

    3. -
    4. Fork the sh-edraft.de/sh_cpl repo.

    5. +
    6. Fork the sh-edraft.de/cpl repo.

    7. In your forked repository, make your changes in a new git branch:

      git checkout -b my-fix-branch master
       
      @@ -144,7 +146,7 @@
    8. -
    9. In Gitea, send a pull request to sh_cpl:master

    10. +
    11. In Gitea, send a pull request to cpl:master

    @@ -178,7 +180,7 @@ git push

    License

    By contributing, you agree that your contributions will be licensed under its MIT License. -See LICENSE

    +See LICENSE

    @@ -188,13 +190,13 @@ See - +
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/cpl_cli.html b/docs/build/html/cpl_cli.html index 657a2b49..4ac7954e 100644 --- a/docs/build/html/cpl_cli.html +++ b/docs/build/html/cpl_cli.html @@ -4,7 +4,7 @@ - CLI Reference — Common Python Library documentation + CLI reference — Common Python Library documentation + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    cpl_discord.application

    +
    +

    cpl_discord.application.discord_bot_application_abc

    +
    +
    +class cpl_discord.application.discord_bot_application_abc.DiscordBotApplicationABC(config: ConfigurationABC, services: ServiceProviderABC)
    +

    Bases: ApplicationABC

    +
    +
    +abstract stop_async()
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_discord.command.html b/docs/build/html/cpl_discord.command.html new file mode 100644 index 00000000..6dba3ee5 --- /dev/null +++ b/docs/build/html/cpl_discord.command.html @@ -0,0 +1,143 @@ + + + + + + + cpl_discord.command — Common Python Library documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    cpl_discord.command

    +
    +

    cpl_discord.command.discord_command_abc

    +
    +
    +class cpl_discord.command.discord_command_abc.DiscordCommandABC(*args: Any, **kwargs: Any)
    +

    Bases: ABC, Cog

    +
    + +
    +
    +

    cpl_discord.command.discord_commands_meta

    +
    +
    +class cpl_discord.command.discord_commands_meta.DiscordCogMeta(name, bases, namespace, **kwargs)
    +

    Bases: ABCMeta, CogMeta

    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_discord.configuration.html b/docs/build/html/cpl_discord.configuration.html new file mode 100644 index 00000000..591e7eee --- /dev/null +++ b/docs/build/html/cpl_discord.configuration.html @@ -0,0 +1,152 @@ + + + + + + + cpl_discord.configuration — Common Python Library documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    cpl_discord.configuration

    +
    +

    cpl_discord.configuration.discord_bot_settings

    +
    +
    +class cpl_discord.configuration.discord_bot_settings.DiscordBotSettings
    +

    Bases: ConfigurationModelABC

    +
    +
    +from_dict(settings: dict)
    +

    Converts attributes to dict

    +
    +

    settings: dict

    +
    +
    + +
    +
    +property prefix: str
    +
    + +
    +
    +property token: str
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_discord.container.html b/docs/build/html/cpl_discord.container.html new file mode 100644 index 00000000..9490fdb6 --- /dev/null +++ b/docs/build/html/cpl_discord.container.html @@ -0,0 +1,674 @@ + + + + + + + cpl_discord.container — Common Python Library documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    cpl_discord.container

    +
    +

    cpl_discord.container.category_channel

    +
    +
    +class cpl_discord.container.category_channel.CategoryChannel(_t: CategoryChannel)
    +

    Bases: CategoryChannel, Container

    +
    +
    +category_id: Optional[int]
    +
    + +
    +
    +guild: Guild
    +
    + +
    +
    +id: int
    +
    + +
    +
    +name: str
    +
    + +
    +
    +nsfw
    +
    + +
    +
    +position: int
    +
    + +
    +
    +property text_channels: TextChannel
    +

    List[TextChannel]: Returns the text channels that are under this category.

    +
    + +
    +
    +property voice_channels: VoiceChannel
    +

    List[VoiceChannel]: Returns the voice channels that are under this category.

    +
    + +
    + +
    +
    +

    cpl_discord.container.container

    +
    +
    +class cpl_discord.container.container.Container(_o: object, _t: type)
    +

    Bases: object

    +
    + +
    +
    +

    cpl_discord.container.guild

    +
    +
    +class cpl_discord.container.guild.Guild(_t: Guild)
    +

    Bases: Container, Guild

    +
    +
    +afk_channel
    +
    + +
    +
    +afk_timeout
    +
    + +
    +
    +approximate_member_count
    +
    + +
    +
    +approximate_presence_count
    +
    + +
    +
    +property categories: CategoryChannel
    +

    List[CategoryChannel]: A list of categories that belongs to this guild.

    +

    This is sorted by the position and are in UI order from top to bottom.

    +
    + +
    +
    +default_notifications
    +
    + +
    +
    +description
    +
    + +
    +
    +emojis
    +
    + +
    +
    +explicit_content_filter
    +
    + +
    +
    +features
    +
    + +
    +
    +id: int
    +
    + +
    +
    +max_members
    +
    + +
    +
    +max_presences
    +
    + +
    +
    +max_video_channel_users
    +
    + +
    +
    +property members: Member
    +

    Sequence[Member]: A list of members that belong to this guild.

    +
    + +
    +
    +mfa_level
    +
    + +
    +
    +name
    +
    + +
    +
    +nsfw_level
    +
    + +
    +
    +owner_id
    +
    + +
    +
    +preferred_locale
    +
    + +
    +
    +premium_progress_bar_enabled
    +
    + +
    +
    +premium_subscription_count
    +
    + +
    +
    +premium_tier
    +
    + +
    +
    +property roles: Role
    +

    Sequence[Role]: Returns a sequence of the guild’s roles in hierarchy order.

    +

    The first element of this sequence will be the lowest role in the +hierarchy.

    +
    + +
    +
    +stickers
    +
    + +
    +
    +property text_channels: TextChannel
    +

    List[TextChannel]: A list of text channels that belongs to this guild.

    +

    This is sorted by the position and are in UI order from top to bottom.

    +
    + +
    +
    +property threads: TextChannel
    +

    Sequence[Thread]: A list of threads that you have permission to view.

    +
    +

    New in version 2.0.

    +
    +
    + +
    +
    +unavailable
    +
    + +
    +
    +vanity_url_code
    +
    + +
    +
    +verification_level
    +
    + +
    +
    +property voice_channels: VoiceChannel
    +

    List[VoiceChannel]: A list of voice channels that belongs to this guild.

    +

    This is sorted by the position and are in UI order from top to bottom.

    +
    + +
    +
    +widget_enabled
    +
    + +
    + +
    +
    +

    cpl_discord.container.member

    +
    +
    +class cpl_discord.container.member.Member(_t: Member)
    +

    Bases: Member, Container

    +
    +
    +activities: Tuple[ActivityTypes, ...]
    +
    + +
    +
    +guild: Guild
    +
    + +
    +
    +joined_at: Optional[datetime.datetime]
    +
    + +
    +
    +nick: Optional[str]
    +
    + +
    +
    +pending: bool
    +
    + +
    +
    +premium_since: Optional[datetime.datetime]
    +
    + +
    +
    +property roles: Role
    +

    List[Role]: A list of Role that the member belongs to. Note +that the first element of this list is always the default @everyone’ +role.

    +

    These roles are sorted by their position in the role hierarchy.

    +
    + +
    +
    +timed_out_until: Optional[datetime.datetime]
    +
    + +
    + +
    +
    +

    cpl_discord.container.role

    +
    +
    +class cpl_discord.container.role.Role(_t: Role)
    +

    Bases: Role, Container

    +
    +
    +guild: Guild
    +
    + +
    +
    +hoist
    +
    + +
    +
    +id: int
    +
    + +
    +
    +managed
    +
    + +
    +
    +property members: Member
    +

    List[Member]: Returns all the members with this role.

    +
    + +
    +
    +mentionable
    +
    + +
    +
    +name
    +
    + +
    +
    +position
    +
    + +
    +
    +tags
    +
    + +
    +
    +unicode_emoji
    +
    + +
    + +
    +
    +

    cpl_discord.container.text_channel

    +
    +
    +class cpl_discord.container.text_channel.TextChannel(_t: TextChannel)
    +

    Bases: TextChannel, Container

    +
    +
    +category_id: Optional[int]
    +
    + +
    +
    +default_auto_archive_duration
    +
    + +
    +
    +guild: Guild
    +
    + +
    +
    +id: int
    +
    + +
    +
    +last_message_id
    +
    + +
    +
    +property members: Member
    +

    List[Member]: Returns all members that can see this channel.

    +
    + +
    +
    +name: str
    +
    + +
    +
    +nsfw
    +
    + +
    +
    +position: int
    +
    + +
    +
    +slowmode_delay
    +
    + +
    +
    +property threads: Thread
    +

    List[Thread]: Returns all the threads that you can see.

    +
    +

    New in version 2.0.

    +
    +
    + +
    +
    +topic
    +
    + +
    + +
    +
    +

    cpl_discord.container.thread

    +
    +
    +class cpl_discord.container.thread.Thread(_t: Thread)
    +

    Bases: Thread, Container

    +
    +
    +archive_timestamp
    +
    + +
    +
    +archived
    +
    + +
    +
    +archiver_id
    +
    + +
    +
    +auto_archive_duration
    +
    + +
    +
    +guild: Guild
    +
    + +
    +
    +id: int
    +
    + +
    +
    +invitable
    +
    + +
    +
    +last_message_id
    +
    + +
    +
    +locked
    +
    + +
    +
    +me
    +
    + +
    +
    +member_count
    +
    + +
    +
    +property members: Member
    +

    List[ThreadMember]: A list of thread members in this thread.

    +

    This requires Intents.members to be properly filled. Most of the time however, +this data is not provided by the gateway and a call to fetch_members() is +needed.

    +
    + +
    +
    +message_count
    +
    + +
    +
    +name
    +
    + +
    +
    +owner_id
    +
    + +
    +
    +parent_id
    +
    + +
    +
    +slowmode_delay
    +
    + +
    + +
    +
    +

    cpl_discord.container.voice_channel

    +
    +
    +class cpl_discord.container.voice_channel.VoiceChannel(_t: VoiceChannel)
    +

    Bases: VoiceChannel, Container

    +
    +
    +property members: Member
    +

    List[Member]: Returns all members that are currently inside this voice channel.

    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_discord.events.html b/docs/build/html/cpl_discord.events.html new file mode 100644 index 00000000..7633c306 --- /dev/null +++ b/docs/build/html/cpl_discord.events.html @@ -0,0 +1,888 @@ + + + + + + + cpl_discord.events — Common Python Library documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    cpl_discord.events

    +
    +

    cpl_discord.events.on_bulk_message_delete_abc

    +
    +
    +class cpl_discord.events.on_bulk_message_delete_abc.OnBulkMessageDeleteABC
    +

    Bases: ABC

    +
    +
    +abstract async on_bulk_message_delete(messages: list[discord.message.Message])
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_command_abc

    +
    +
    +class cpl_discord.events.on_command_abc.OnCommandABC
    +

    Bases: ABC

    +
    +
    +abstract async on_command(ctx: Context)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_command_completion_abc

    +
    +
    +class cpl_discord.events.on_command_completion_abc.OnCommandCompletionABC
    +

    Bases: ABC

    +
    +
    +abstract async on_command_completion(ctx: Context)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_command_error_abc

    +
    +
    +class cpl_discord.events.on_command_error_abc.OnCommandErrorABC
    +

    Bases: ABC

    +
    +
    +abstract async on_command_error(ctx: Context, error: CommandError)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_connect_abc

    +
    +
    +class cpl_discord.events.on_connect_abc.OnConnectABC
    +

    Bases: ABC

    +
    +
    +abstract async on_connect()
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_disconnect_abc

    +
    +
    +class cpl_discord.events.on_disconnect_abc.OnDisconnectABC
    +

    Bases: ABC

    +
    +
    +abstract async on_disconnect()
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_error_abc

    +
    +
    +class cpl_discord.events.on_error_abc.OnErrorABC
    +

    Bases: ABC

    +
    +
    +abstract async on_error(event: str, *args, **kwargs)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_group_join_abc

    +
    +
    +class cpl_discord.events.on_group_join_abc.OnGroupJoinABC
    +

    Bases: ABC

    +
    +
    +abstract async on_group_join(chhanel: GroupChannel, user: User)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_group_remove_abc

    +
    +
    +class cpl_discord.events.on_group_remove_abc.OnGroupRemoveABC
    +

    Bases: ABC

    +
    +
    +abstract async on_group_remove(chhanel: GroupChannel, user: User)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_available_abc

    +
    +
    +class cpl_discord.events.on_guild_available_abc.OnGuildAvailableABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_available(guild: Guild)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_channel_create_abc

    +
    +
    +class cpl_discord.events.on_guild_channel_create_abc.OnGuildChannelCreateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_channel_create(channel: GuildChannel)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_channel_delete_abc

    +
    +
    +class cpl_discord.events.on_guild_channel_delete_abc.OnGuildChannelDeleteABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_channel_delete(channel: GuildChannel)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_channel_pins_update_abc

    +
    +
    +class cpl_discord.events.on_guild_channel_pins_update_abc.OnGuildChannelPinsUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_channel_pins_update(channel: GuildChannel, list_pin: Optional[datetime])
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_channel_update_abc

    +
    +
    +class cpl_discord.events.on_guild_channel_update_abc.OnGuildChannelUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_channel_update(before: GuildChannel, after: GuildChannel)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_emojis_update_abc

    +
    +
    +class cpl_discord.events.on_guild_emojis_update_abc.OnGuildEmojisUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_emojis_update(guild: Guild, before: Sequence[Emoji], after: Sequence[Emoji])
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_integrations_update_abc

    +
    +
    +class cpl_discord.events.on_guild_integrations_update_abc.OnGuildIntegrationsUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_integrations_update(guild: Guild)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_join_abc

    +
    +
    +class cpl_discord.events.on_guild_join_abc.OnGuildJoinABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_join(guild: Guild)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_remove_abc

    +
    +
    +class cpl_discord.events.on_guild_remove_abc.OnGuildRemoveABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_remove(guild: Guild)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_role_create_abc

    +
    +
    +class cpl_discord.events.on_guild_role_create_abc.OnGuildRoleCreateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_role_create(role: Role)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_role_delete_abc

    +
    +
    +class cpl_discord.events.on_guild_role_delete_abc.OnGuildRoleDeleteABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_role_delete(role: Role)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_role_update_abc

    +
    +
    +class cpl_discord.events.on_guild_role_update_abc.OnGuildRoleUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_role_update(before: Role, after: Role)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_unavailable_abc

    +
    +
    +class cpl_discord.events.on_guild_unavailable_abc.OnGuildUnavailableABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_unavailable(guild: Guild)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_guild_update_abc

    +
    +
    +class cpl_discord.events.on_guild_update_abc.OnGuildUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_guild_update(before: Guild, after: Guild)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_invite_create_abc

    +
    +
    +class cpl_discord.events.on_invite_create_abc.OnInviteCreateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_invite_create(invite: Invite)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_invite_delete_abc

    +
    +
    +class cpl_discord.events.on_invite_delete_abc.OnInviteDeleteABC
    +

    Bases: ABC

    +
    +
    +abstract async on_invite_delete(invite: Invite)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_member_ban_abc

    +
    +
    +class cpl_discord.events.on_member_ban_abc.OnMemberBanABC
    +

    Bases: ABC

    +
    +
    +abstract async on_member_ban(guild: Guild, user: User)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_member_join_abc

    +
    +
    +class cpl_discord.events.on_member_join_abc.OnMemberJoinABC
    +

    Bases: ABC

    +
    +
    +abstract async on_member_join(member: Member)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_member_remove_abc

    +
    +
    +class cpl_discord.events.on_member_remove_abc.OnMemberRemoveABC
    +

    Bases: ABC

    +
    +
    +abstract async on_member_remove(member: Member)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_member_unban_abc

    +
    +
    +class cpl_discord.events.on_member_unban_abc.OnMemberUnbanABC
    +

    Bases: ABC

    +
    +
    +abstract async on_member_unban(guild: Guild, user: User)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_member_update_abc

    +
    +
    +class cpl_discord.events.on_member_update_abc.OnMemberUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_member_update(before: Member, after: Member)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_message_abc

    +
    +
    +class cpl_discord.events.on_message_abc.OnMessageABC
    +

    Bases: ABC

    +
    +
    +abstract async on_message(message: Message)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_message_delete_abc

    +
    +
    +class cpl_discord.events.on_message_delete_abc.OnMessageDeleteABC
    +

    Bases: ABC

    +
    +
    +abstract async on_message_delete(message: Message)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_message_edit_abc

    +
    +
    +class cpl_discord.events.on_message_edit_abc.OnMessageEditABC
    +

    Bases: ABC

    +
    +
    +abstract async on_message_edit(before: Message, after: Message)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_private_channel_create_abc

    +
    +
    +class cpl_discord.events.on_private_channel_create_abc.OnPrivateChannelCreateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_private_channel_create(channel: PrivateChannel)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_private_channel_delete_abc

    +
    +
    +class cpl_discord.events.on_private_channel_delete_abc.OnPrivateChannelDeleteABC
    +

    Bases: ABC

    +
    +
    +abstract async on_private_channel_delete(channel: PrivateChannel)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_private_channel_pins_update_abc

    +
    +
    +class cpl_discord.events.on_private_channel_pins_update_abc.OnPrivateChannelPinsUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_private_channel_pins_update(channel: PrivateChannel, list_pin: Optional[datetime])
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_private_channel_update_abc

    +
    +
    +class cpl_discord.events.on_private_channel_update_abc.OnPrivateChannelUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_private_channel_update(before: GroupChannel, after: GroupChannel)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_raw_reaction_add_abc

    +
    +
    +class cpl_discord.events.on_raw_reaction_add_abc.OnRawReactionAddABC
    +

    Bases: ABC

    +
    +
    +abstract async on_raw_reaction_add(payload: RawReactionActionEvent)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_raw_reaction_clear_abc

    +
    +
    +class cpl_discord.events.on_raw_reaction_clear_abc.OnRawReactionClearABC
    +

    Bases: ABC

    +
    +
    +abstract async on_raw_reaction_clear(payload: RawReactionActionEvent)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_raw_reaction_clear_emoji_abc

    +
    +
    +class cpl_discord.events.on_raw_reaction_clear_emoji_abc.OnRawReactionClearEmojiABC
    +

    Bases: ABC

    +
    +
    +abstract async on_raw_reaction_clear_emoji(payload: RawReactionActionEvent)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_raw_reaction_remove_abc

    +
    +
    +class cpl_discord.events.on_raw_reaction_remove_abc.OnRawReactionRemoveABC
    +

    Bases: ABC

    +
    +
    +abstract async on_raw_reaction_remove(payload: RawReactionActionEvent)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_reaction_add_abc

    +
    +
    +class cpl_discord.events.on_reaction_add_abc.OnReactionAddABC
    +

    Bases: ABC

    +
    +
    +abstract async on_reaction_add(reaction: Reaction, user: User)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_reaction_clear_abc

    +
    +
    +class cpl_discord.events.on_reaction_clear_abc.OnReactionClearABC
    +

    Bases: ABC

    +
    +
    +abstract async on_reaction_clear(message: Message, reactions: list[discord.reaction.Reaction])
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_reaction_clear_emoji_abc

    +
    +
    +class cpl_discord.events.on_reaction_clear_emoji_abc.OnReactionClearEmojiABC
    +

    Bases: ABC

    +
    +
    +abstract async on_reaction_clear_emoji(reaction: Reaction)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_reaction_remove_abc

    +
    +
    +class cpl_discord.events.on_reaction_remove_abc.OnReactionRemoveABC
    +

    Bases: ABC

    +
    +
    +abstract async on_reaction_remove(reaction: Reaction, user: User)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_ready_abc

    +
    +
    +class cpl_discord.events.on_ready_abc.OnReadyABC
    +

    Bases: ABC

    +
    +
    +abstract async on_ready()
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_resume_abc

    +
    +
    +class cpl_discord.events.on_resume_abc.OnResumeABC
    +

    Bases: ABC

    +
    +
    +abstract async on_resume()
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_typing_abc

    +
    +
    +class cpl_discord.events.on_typing_abc.OnTypingABC
    +

    Bases: ABC

    +
    +
    +abstract async on_typing(channel: Messageable, user: Union[User, Member], when: datetime)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_user_update_abc

    +
    +
    +class cpl_discord.events.on_user_update_abc.OnUserUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_user_update(before: User, after: User)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_voice_state_update_abc

    +
    +
    +class cpl_discord.events.on_voice_state_update_abc.OnVoiceStateUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_voice_state_update(member: Member, before: VoiceState, after: VoiceState)
    +
    + +
    + +
    +
    +

    cpl_discord.events.on_webhooks_update_abc

    +
    +
    +class cpl_discord.events.on_webhooks_update_abc.OnWebhooksUpdateABC
    +

    Bases: ABC

    +
    +
    +abstract async on_webhooks_update(channel: GuildChannel)
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_discord.helper.html b/docs/build/html/cpl_discord.helper.html new file mode 100644 index 00000000..7f128e82 --- /dev/null +++ b/docs/build/html/cpl_discord.helper.html @@ -0,0 +1,138 @@ + + + + + + + cpl_discord.helper — Common Python Library documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    cpl_discord.helper

    +
    +

    cpl_discord.helper.to_containers_converter

    +
    +
    +class cpl_discord.helper.to_containers_converter.ToContainersConverter
    +

    Bases: object

    +
    +
    +static convert(_l: Union[list[object], Sequence[object]], _t: type) list[cpl_discord.container.container.Container]
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_discord.html b/docs/build/html/cpl_discord.html new file mode 100644 index 00000000..c32b0593 --- /dev/null +++ b/docs/build/html/cpl_discord.html @@ -0,0 +1,216 @@ + + + + + + + Discord reference — Common Python Library documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    Discord reference

    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_discord.service.html b/docs/build/html/cpl_discord.service.html new file mode 100644 index 00000000..b40cbeb9 --- /dev/null +++ b/docs/build/html/cpl_discord.service.html @@ -0,0 +1,780 @@ + + + + + + + cpl_discord.service — Common Python Library documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    cpl_discord.service

    +
    +

    cpl_discord.service.command_error_handler_service

    +
    +
    +class cpl_discord.service.command_error_handler_service.CommandErrorHandlerService(logger: LoggerABC)
    +

    Bases: OnCommandErrorABC

    +
    +
    +async on_command_error(ctx: Context, error: CommandError)
    +
    + +
    + +
    +
    +

    cpl_discord.service.discord_bot_service

    +
    +
    +class cpl_discord.service.discord_bot_service.DiscordBotService(config: ConfigurationABC, logger: LoggerABC, discord_bot_settings: DiscordBotSettings, env: ApplicationEnvironmentABC, logging_st: LoggingSettings, discord_service: DiscordServiceABC)
    +

    Bases: DiscordBotServiceABC

    +
    +
    +property guilds: Guild
    +

    Sequence[Guild]: The guilds that the connected client is a member of.

    +
    + +
    +
    +async on_ready()
    +
    + +
    +
    +async start_async()
    +
    + +
    +
    +async stop_async()
    +
    + +
    + +
    +
    +

    cpl_discord.service.discord_bot_service_abc

    +
    +
    +class cpl_discord.service.discord_bot_service_abc.DiscordBotServiceABC(**kwargs)
    +

    Bases: Bot

    +
    +
    +abstract property guilds: Guild
    +

    Sequence[Guild]: The guilds that the connected client is a member of.

    +
    + +
    +
    +abstract async on_ready()
    +
    + +
    +
    +abstract async start_async()
    +
    + +
    +
    +abstract async stop_async()
    +
    + +
    + +
    +
    +

    cpl_discord.service.discord_collection

    +
    +
    +class cpl_discord.service.discord_collection.DiscordCollection(service_collection: ServiceCollectionABC)
    +

    Bases: DiscordCollectionABC

    +
    +
    +add_command(_t: Type[DiscordCommandABC])
    +
    + +
    +
    +add_event(_t_event: Type, _t: Type)
    +
    + +
    +
    +get_commands() DiscordCommandABC
    +
    + +
    +
    +get_events_by_base(_t_event: Type) Optional[List]
    +
    + +
    + +
    +
    +

    cpl_discord.service.discord_collection_abc

    +
    +
    +class cpl_discord.service.discord_collection_abc.DiscordCollectionABC
    +

    Bases: ABC

    +
    +
    +abstract add_command(_t: Type[DiscordCommandABC])
    +
    + +
    +
    +abstract add_event(_t_event: Type, _t: Type)
    +
    + +
    +
    +abstract get_commands() DiscordCommandABC
    +
    + +
    +
    +abstract get_events_by_base(_t_event: Type)
    +
    + +
    + +
    +
    +

    cpl_discord.service.discord_service

    +
    +
    +class cpl_discord.service.discord_service.DiscordService(*args: Any, **kwargs: Any)
    +

    Bases: DiscordServiceABC, Cog

    +
    +
    +async init(bot: Bot)
    +
    + +
    +
    +async on_bulk_message_delete(messages: list[discord.message.Message])
    +
    + +
    +
    +async on_command(ctx: Context)
    +
    + +
    +
    +async on_command_completion(ctx: Context)
    +
    + +
    +
    +async on_command_error(ctx: Context, error: CommandError)
    +
    + +
    +
    +async on_connect()
    +
    + +
    +
    +async on_disconnect()
    +
    + +
    +
    +async on_error(event: str, *args, **kwargs)
    +
    + +
    +
    +async on_group_join(channel: GroupChannel, user: User)
    +
    + +
    +
    +async on_group_remove(channel: GroupChannel, user: User)
    +
    + +
    +
    +async on_guild_available(guild: Guild)
    +
    + +
    +
    +async on_guild_channel_create(channel: GuildChannel)
    +
    + +
    +
    +async on_guild_channel_delete(channel: GuildChannel)
    +
    + +
    +
    +async on_guild_channel_pins_update(channel: GuildChannel, list_pin: Optional[datetime])
    +
    + +
    +
    +async on_guild_channel_update(before: GuildChannel, after: GuildChannel)
    +
    + +
    +
    +async on_guild_emojis_update(guild: Guild, before: Sequence[Emoji], after: Sequence[Emoji])
    +
    + +
    +
    +async on_guild_integrations_update(guild: Guild)
    +
    + +
    +
    +async on_guild_join(guild: Guild)
    +
    + +
    +
    +async on_guild_remove(guild: Guild)
    +
    + +
    +
    +async on_guild_role_create(role: Role)
    +
    + +
    +
    +async on_guild_role_delete(role: Role)
    +
    + +
    +
    +async on_guild_role_update(before: Role, after: Role)
    +
    + +
    +
    +async on_guild_unavailable(guild: Guild)
    +
    + +
    +
    +async on_guild_update(before: Guild, after: Guild)
    +
    + +
    +
    +async on_invite_create(invite: Invite)
    +
    + +
    +
    +async on_invite_delete(invite: Invite)
    +
    + +
    +
    +async on_member_ban(guild: Guild, user: User)
    +
    + +
    +
    +async on_member_join(member: Member)
    +
    + +
    +
    +async on_member_remove(member: Member)
    +
    + +
    +
    +async on_member_unban(guild: Guild, user: User)
    +
    + +
    +
    +async on_member_update(before: Member, after: Member)
    +
    + +
    +
    +async on_message(message: Message)
    +
    + +
    +
    +async on_message_delete(message: Message)
    +
    + +
    +
    +async on_message_edit(before: Message, after: Message)
    +
    + +
    +
    +async on_private_channel_create(channel: PrivateChannel)
    +
    + +
    +
    +async on_private_channel_delete(channel: PrivateChannel)
    +
    + +
    +
    +async on_private_channel_pins_update(channel: PrivateChannel, list_pin: Optional[datetime])
    +
    + +
    +
    +async on_private_channel_update(before: GroupChannel, after: GroupChannel)
    +
    + +
    +
    +async on_raw_reaction_add(payload: RawReactionActionEvent)
    +
    + +
    +
    +async on_raw_reaction_clear(payload: RawReactionActionEvent)
    +
    + +
    +
    +async on_raw_reaction_clear_emoji(payload: RawReactionActionEvent)
    +
    + +
    +
    +async on_raw_reaction_remove(payload: RawReactionActionEvent)
    +
    + +
    +
    +async on_reaction_add(reaction: Reaction, user: User)
    +
    + +
    +
    +async on_reaction_clear(message: Message, reactions: list[discord.reaction.Reaction])
    +
    + +
    +
    +async on_reaction_clear_emoji(reaction: Reaction)
    +
    + +
    +
    +async on_reaction_remove(reaction: Reaction, user: User)
    +
    + +
    +
    +async on_ready()
    +
    + +
    +
    +async on_resume()
    +
    + +
    +
    +async on_typing(channel: Messageable, user: Union[User, Member], when: datetime)
    +
    + +
    +
    +async on_user_update(before: User, after: User)
    +
    + +
    +
    +async on_voice_state_update(member: Member, before: VoiceState, after: VoiceState)
    +
    + +
    +
    +async on_webhooks_update(channel: GuildChannel)
    +
    + +
    + +
    +
    +

    cpl_discord.service.discord_service_abc

    +
    +
    +class cpl_discord.service.discord_service_abc.DiscordServiceABC
    +

    Bases: ABC

    +
    +
    +abstract init(bot: Bot)
    +
    + +
    +
    +abstract async on_bulk_message_delete(messages: list[discord.message.Message])
    +
    + +
    +
    +abstract async on_command()
    +
    + +
    +
    +abstract async on_command_completion()
    +
    + +
    +
    +abstract async on_command_error()
    +
    + +
    +
    +abstract async on_connect()
    +
    + +
    +
    +abstract async on_disconnect()
    +
    + +
    +
    +abstract async on_error(event: str, *args, **kwargs)
    +
    + +
    +
    +abstract async on_group_join(chhanel: GroupChannel, user: User)
    +
    + +
    +
    +abstract async on_group_remove(chhanel: GroupChannel, user: User)
    +
    + +
    +
    +abstract async on_guild_available(guild: Guild)
    +
    + +
    +
    +abstract async on_guild_channel_create(channel: GuildChannel)
    +
    + +
    +
    +abstract async on_guild_channel_delete(channel: GuildChannel)
    +
    + +
    +
    +abstract async on_guild_channel_pins_update(channel: GuildChannel, list_pin: Optional[datetime])
    +
    + +
    +
    +abstract async on_guild_channel_update(before: GuildChannel, after: GuildChannel)
    +
    + +
    +
    +abstract async on_guild_emojis_update(guild: Guild, before: Sequence[Emoji], after: Sequence[Emoji])
    +
    + +
    +
    +abstract async on_guild_integrations_update(guild: Guild)
    +
    + +
    +
    +abstract async on_guild_join(guild: Guild)
    +
    + +
    +
    +abstract async on_guild_remove(guild: Guild)
    +
    + +
    +
    +abstract async on_guild_role_create(role: Role)
    +
    + +
    +
    +abstract async on_guild_role_delete(role: Role)
    +
    + +
    +
    +abstract async on_guild_role_update(before: Role, after: Role)
    +
    + +
    +
    +abstract async on_guild_unavailable(guild: Guild)
    +
    + +
    +
    +abstract async on_guild_update(before: Guild, after: Guild)
    +
    + +
    +
    +abstract async on_invite_create(invite: Invite)
    +
    + +
    +
    +abstract async on_invite_delete(invite: Invite)
    +
    + +
    +
    +abstract async on_member_ban(guild: Guild, user: User)
    +
    + +
    +
    +abstract async on_member_join(member: Member)
    +
    + +
    +
    +abstract async on_member_remove(member: Member)
    +
    + +
    +
    +abstract async on_member_unban(guild: Guild, user: User)
    +
    + +
    +
    +abstract async on_member_update(before: Member, after: Member)
    +
    + +
    +
    +abstract async on_message(message: Message)
    +
    + +
    +
    +abstract async on_message_delete(message: Message)
    +
    + +
    +
    +abstract async on_message_edit(before: Message, after: Message)
    +
    + +
    +
    +abstract async on_private_channel_create(channel: PrivateChannel)
    +
    + +
    +
    +abstract async on_private_channel_delete(channel: PrivateChannel)
    +
    + +
    +
    +abstract async on_private_channel_pins_update(channel: PrivateChannel, list_pin: Optional[datetime])
    +
    + +
    +
    +abstract async on_private_channel_update(before: GroupChannel, after: GroupChannel)
    +
    + +
    +
    +abstract async on_reaction_add(reaction: Reaction, user: User)
    +
    + +
    +
    +abstract async on_reaction_clear(message: Message, reactions: list[discord.reaction.Reaction])
    +
    + +
    +
    +abstract async on_reaction_clear_emoji(reaction: Reaction)
    +
    + +
    +
    +abstract async on_reaction_remove(reaction: Reaction, user: User)
    +
    + +
    +
    +abstract async on_ready()
    +
    + +
    +
    +abstract async on_resume()
    +
    + +
    +
    +abstract async on_typing(channel: Messageable, user: Union[User, Member], when: datetime)
    +
    + +
    +
    +abstract async on_user_update(before: User, after: User)
    +
    + +
    +
    +abstract async on_voice_state_update(member: Member, before: VoiceState, after: VoiceState)
    +
    + +
    +
    +abstract async on_webhooks_update(channel: GuildChannel)
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_query.base.html b/docs/build/html/cpl_query.base.html new file mode 100644 index 00000000..2e00c6d8 --- /dev/null +++ b/docs/build/html/cpl_query.base.html @@ -0,0 +1,725 @@ + + + + + + + cpl_query.base — Common Python Library documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    cpl_query.base

    +
    +

    cpl_query.base.default_lambda

    +
    +
    +cpl_query.base.default_lambda.default_lambda(x: object)
    +
    + +
    +
    +

    cpl_query.base.ordered_queryable

    +
    +
    +class cpl_query.base.ordered_queryable.OrderedQueryable(_t: type, _values: Optional[Iterable] = None, _func: Optional[Callable] = None)
    +

    Bases: OrderedQueryableABC

    +

    Implementation of :class: cpl_query.extension.Iterable cpl_query.extension.OrderedIterableABC

    +
    +
    +then_by(_func: Callable) OrderedQueryableABC
    +

    Sorts OrderedList in ascending order by function

    +
    +

    func: Callable

    +
    +
    +

    list of cpl_query.iterable.ordered_iterable_abc.OrderedIterableABC

    +
    +
    + +
    +
    +then_by_descending(_func: Callable) OrderedQueryableABC
    +

    Sorts OrderedList in descending order by function

    +
    +

    func: Callable

    +
    +
    +

    list of cpl_query.iterable.ordered_iterable_abc.OrderedIterableABC

    +
    +
    + +
    + +
    +
    +

    cpl_query.base.ordered_queryable_abc

    +
    +
    +class cpl_query.base.ordered_queryable_abc.OrderedQueryableABC(_t: type, _values: Optional[Iterable] = None, _func: Optional[Callable] = None)
    +

    Bases: QueryableABC

    +
    +
    +abstract then_by(func: Callable) OrderedQueryableABC
    +

    Sorts OrderedList in ascending order by function

    +
    +

    func: Callable

    +
    +
    +

    list of cpl_query.iterable.ordered_iterable_abc.OrderedIterableABC

    +
    +
    + +
    +
    +abstract then_by_descending(func: Callable) OrderedQueryableABC
    +

    Sorts OrderedList in descending order by function

    +
    +

    func: Callable

    +
    +
    +

    list of cpl_query.iterable.ordered_iterable_abc.OrderedIterableABC

    +
    +
    + +
    + +
    +
    +

    cpl_query.base.queryable_abc

    +
    +
    +class cpl_query.base.queryable_abc.QueryableABC(t: Optional[type] = None, values: Optional[list] = None)
    +

    Bases: SequenceABC

    +
    +
    +all(_func: Optional[Callable] = None) bool
    +

    Checks if every element of list equals result found by function

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +

    bool

    +
    +
    + +
    +
    +any(_func: Optional[Callable] = None) bool
    +

    Checks if list contains result found by function

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +

    bool

    +
    +
    + +
    +
    +average(_func: Optional[Callable] = None) Union[int, float, complex]
    +

    Returns average value of list

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +

    Union[int, float, complex]

    +
    +
    + +
    +
    +contains(_value: object) bool
    +

    Checks if list contains value given by function

    +
    +
    +
    value: object

    value

    +
    +
    +
    +
    +

    bool

    +
    +
    + +
    +
    +count(_func: Optional[Callable] = None) int
    +

    Returns length of list or count of found elements

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +

    int

    +
    +
    + +
    +
    +distinct(_func: Optional[Callable] = None) QueryableABC
    +

    Returns list without redundancies

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +element_at(_index: int) any
    +

    Returns element at given index

    +
    +
    +
    _index: int

    index

    +
    +
    +
    +
    +

    Value at _index: any

    +
    +
    + +
    +
    +element_at_or_default(_index: int) Optional[any]
    +

    Returns element at given index or None

    +
    +
    +
    _index: int

    index

    +
    +
    +
    +
    +

    Value at _index: Optional[any]

    +
    +
    + +
    +
    +first() any
    +

    Returns first element

    +
    +

    First element of list: any

    +
    +
    + +
    +
    +first_or_default() any
    +

    Returns first element or None

    +
    +

    First element of list: Optional[any]

    +
    +
    + +
    +
    +for_each(_func: Optional[Callable] = None)
    +

    Runs given function for each element of list

    +
    +
    +
    func: :class: Callable

    function to call

    +
    +
    +
    +
    + +
    +
    +group_by(_func: Optional[Callable] = None) QueryableABC
    +

    Groups by func

    +
    +

    Grouped list[list[any]]: any

    +
    +
    + +
    +
    +last() any
    +

    Returns last element

    +
    +

    Last element of list: any

    +
    +
    + +
    +
    +last_or_default() any
    +

    Returns last element or None

    +
    +

    Last element of list: Optional[any]

    +
    +
    + +
    +
    +max(_func: Optional[Callable] = None) Union[int, float, complex]
    +

    Returns the highest value

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +

    Union[int, float, complex]

    +
    +
    + +
    +
    +median(_func=None) Union[int, float]
    +

    Return the median value of data elements

    +
    +

    Union[int, float]

    +
    +
    + +
    +
    +min(_func: Optional[Callable] = None) Union[int, float, complex]
    +

    Returns the lowest value

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +

    Union[int, float, complex]

    +
    +
    + +
    +
    +order_by(_func: Optional[Callable] = None) QueryableABC
    +

    Sorts elements by function in ascending order

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +order_by_descending(_func: Optional[Callable] = None) QueryableABC
    +

    Sorts elements by function in descending order

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +reverse() QueryableABC
    +

    Reverses list

    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +select(_func: Callable) QueryableABC
    +

    Formats each element of list to a given format

    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +select_many(_func: Callable) QueryableABC
    +

    Flattens resulting lists to one

    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +single() any
    +

    Returns one single element of list

    +
    +

    Found value: any

    +
    +
    +

    ArgumentNoneException: when argument is None +Exception: when argument is None or found more than one element

    +
    +
    + +
    +
    +single_or_default() Optional[any]
    +

    Returns one single element of list

    +
    +

    Found value: Optional[any]

    +
    +
    + +
    +
    +skip(_index: int) QueryableABC
    +

    Skips all elements from index

    +
    +
    +
    _index: int

    index

    +
    +
    +
    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +skip_last(_index: int) QueryableABC
    +

    Skips all elements after index

    +
    +
    +
    _index: int

    index

    +
    +
    +
    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +sum(_func: Optional[Callable] = None) Union[int, float, complex]
    +

    Sum of all values

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +

    Union[int, float, complex]

    +
    +
    + +
    +
    +take(_index: int) QueryableABC
    +

    Takes all elements from index

    +
    +
    +
    _index: int

    index

    +
    +
    +
    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +take_last(_index: int) QueryableABC
    +

    Takes all elements after index

    +
    +
    +
    _index: int

    index

    +
    +
    +
    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    +
    +where(_func: Optional[Callable] = None) QueryableABC
    +

    Select element by function

    +
    +
    +
    func: Callable

    selected value

    +
    +
    +
    +
    +
    +
    class
    +

    cpl_query.base.queryable_abc.QueryableABC

    +
    +
    +
    +
    + +
    + +
    +
    +

    cpl_query.base.sequence_abc

    +
    +
    +class cpl_query.base.sequence_abc.SequenceABC(t: Optional[type] = None, values: Optional[list] = None)
    +

    Bases: ABC

    +
    +
    +copy() SequenceABC
    +

    Creates a copy of sequence

    +
    +

    SequenceABC

    +
    +
    + +
    +
    +classmethod empty() SequenceABC
    +

    Returns an empty sequence

    +
    +

    Sequence object that contains no elements

    +
    +
    + +
    +
    +index(_object: object) int
    +

    Returns the index of given element

    +
    +

    Index of object

    +
    +
    +

    IndexError if object not in sequence

    +
    +
    + +
    +
    +next()
    +
    + +
    +
    +classmethod range(start: int, length: int) SequenceABC
    +
    + +
    +
    +to_list() list
    +

    Converts :class: cpl_query.base.sequence_abc.SequenceABC to :class: list

    +
    +
    +
    class
    +

    list

    +
    +
    +
    +
    + +
    +
    +property type: type
    +
    + +
    + +
    +
    +

    cpl_query.base.sequence_values

    +
    +
    +class cpl_query.base.sequence_values.SequenceValues(data: list, _t: type)
    +

    Bases: object

    +
    +
    +next()
    +
    + +
    +
    +reset()
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_query.enumerable.html b/docs/build/html/cpl_query.enumerable.html new file mode 100644 index 00000000..36b65ec3 --- /dev/null +++ b/docs/build/html/cpl_query.enumerable.html @@ -0,0 +1,161 @@ + + + + + + + cpl_query.enumerable — Common Python Library documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    cpl_query.enumerable

    +
    +

    cpl_query.enumerable.enumerable

    +
    +
    +class cpl_query.enumerable.enumerable.Enumerable(t: Optional[type] = None, values: Optional[list] = None)
    +

    Bases: EnumerableABC

    +

    Implementation of :class: cpl_query.enumerable.enumerable_abc.EnumerableABC

    +
    + +
    +
    +

    cpl_query.enumerable.enumerable_abc

    +
    +
    +class cpl_query.enumerable.enumerable_abc.EnumerableABC(t: Optional[type] = None, values: Optional[list] = None)
    +

    Bases: QueryableABC

    +

    ABC to define functions on list

    +
    +
    +set_remove_error_check(_value: bool)
    +

    Set flag to check if element exists before removing

    +
    + +
    +
    +to_iterable() IterableABC
    +

    Converts :class: cpl_query.enumerable.enumerable_abc.EnumerableABC to :class: cpl_query.iterable.iterable_abc.IterableABC

    +
    +
    +
    class
    +

    cpl_query.iterable.iterable_abc.IterableABC

    +
    +
    +
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/docs/build/html/cpl_query.exceptions.html b/docs/build/html/cpl_query.exceptions.html deleted file mode 100644 index 67a3674a..00000000 --- a/docs/build/html/cpl_query.exceptions.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - cpl_query.exceptions — Common Python Library documentation - - - - - - - - - - - - - - - - -
    - - -
    - -
    -
    -
    - -
    -
    -
    -
    - -
    -

    cpl_query.exceptions

    -
    -

    cpl_query.exceptions

    -
    -
    -exception cpl_query.exceptions.ArgumentNoneException(arg: ExceptionArgument)
    -

    Bases: Exception

    -

    Exception when argument is None

    -
    - -
    -
    -class cpl_query.exceptions.ExceptionArgument(value)
    -

    Bases: Enum

    -

    An enumeration.

    -
    -
    -func = 'func'
    -
    - -
    -
    -index = 'index'
    -
    - -
    -
    -list = 'list'
    -
    - -
    -
    -type = 'type'
    -
    - -
    -
    -value = 'value'
    -
    - -
    - -
    -
    -exception cpl_query.exceptions.IndexOutOfRangeException
    -

    Bases: Exception

    -

    Exception when index is out of range

    -
    - -
    -
    -exception cpl_query.exceptions.InvalidTypeException
    -

    Bases: Exception

    -

    Exception when type is invalid

    -
    - -
    -
    -exception cpl_query.exceptions.WrongTypeException
    -

    Bases: Exception

    -

    Exception when type is unexpected

    -
    - -
    -
    - - -
    -
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/docs/build/html/cpl_query.extension.html b/docs/build/html/cpl_query.extension.html index d374cce7..0056ee6e 100644 --- a/docs/build/html/cpl_query.extension.html +++ b/docs/build/html/cpl_query.extension.html @@ -19,8 +19,8 @@ - - + + @@ -42,20 +42,20 @@
  22. Introduction to the CPL Docs
  23. Getting started
  24. Contributing to CPL
  25. -
  26. CLI Reference
  27. -
  28. API Reference
  29. -
  30. Query Reference @@ -72,7 +72,7 @@
    • »
    • -
    • Query Reference »
    • +
    • Query reference »
    • cpl_query.extension
    • View page source @@ -85,908 +85,36 @@

      cpl_query.extension

      -
      -

      cpl_query.extension.iterable_abc

      -
      -
      -class cpl_query.extension.iterable_abc.IterableABC(t: Optional[type] = None, values: Optional[list] = None)
      -

      Bases: ABC, list

      -

      ABC to define functions on list

      -
      -
      -abstract all(func: Callable) bool
      -

      Checks if every element of list equals result found by function

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      bool

      -
      -
      - -
      -
      -abstract any(func: Callable) bool
      -

      Checks if list contains result found by function

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      bool

      -
      -
      - -
      -
      -append(_IterableABC__object: object) None
      -

      Adds element to list

      -
      -
      -
      __object: object

      value

      -
      -
      -
      -
      - -
      -
      -abstract average(func: Optional[Callable] = None) Union[int, float, complex]
      -

      Returns average value of list

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      Union[int, float, complex]

      -
      -
      - -
      -
      -abstract contains(value: object) bool
      -

      Checks if list contains value given by function

      -
      -
      -
      value: object

      value

      -
      -
      -
      -
      -

      bool

      -
      -
      - -
      -
      -abstract count(func: Optional[Callable] = None) int
      -

      Returns length of list or count of found elements

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      int

      -
      -
      - -
      -
      -abstract distinct(func: Optional[Callable] = None) IterableABC
      -

      Returns list without redundancies

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -abstract element_at(index: int) any
      -

      Returns element at given index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -

      Value at index: any

      -
      -
      - -
      -
      -abstract element_at_or_default(index: int) Optional[any]
      -

      Returns element at given index or None

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -

      Value at index: Optional[any]

      -
      -
      - -
      -
      -extend(_IterableABC__iterable: Iterable) None
      -

      Adds elements of given list to list

      -
      -
      -
      __iterable: :class: cpl_query.extension.iterable.Iterable

      index

      -
      -
      -
      -
      - -
      -
      -abstract first() any
      -

      Returns first element

      -
      -

      First element of list: any

      -
      -
      - -
      -
      -abstract first_or_default() any
      -

      Returns first element or None

      -
      -

      First element of list: Optional[any]

      -
      -
      - -
      -
      -abstract for_each(func: Callable)
      -

      Runs given function for each element of list

      -
      -
      -
      func: :class: Callable

      function to call

      -
      -
      -
      -
      - -
      -
      -abstract last() any
      -

      Returns last element

      -
      -

      Last element of list: any

      -
      -
      - -
      -
      -abstract last_or_default() any
      -

      Returns last element or None

      -
      -

      Last element of list: Optional[any]

      -
      -
      - -
      -
      -abstract max(func: Optional[Callable] = None) Union[int, float, complex]
      -

      Returns highest value

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      Union[int, float, complex]

      -
      -
      - -
      -
      -abstract min(func: Optional[Callable] = None) Union[int, float, complex]
      -

      Returns highest value

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      Union[int, float, complex]

      -
      -
      - -
      -
      -abstract order_by(func: Callable) IterableABC
      -

      Sorts elements by function in ascending order

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -abstract order_by_descending(func: Callable) IterableABC
      -

      Sorts elements by function in descending order

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -abstract reverse() IterableABC
      -

      Reverses list

      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -abstract single() any
      -

      Returns one single element of list

      -
      -

      Found value: any

      -
      -
      -

      ArgumentNoneException: when argument is None -Exception: when argument is None or found more than one element

      -
      -
      - -
      -
      -abstract single_or_default() Optional[any]
      -

      Returns one single element of list

      -
      -

      Found value: Optional[any]

      -
      -
      - -
      -
      -abstract skip(index: int) IterableABC
      -

      Skips all elements from index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -abstract skip_last(index: int) IterableABC
      -

      Skips all elements after index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -abstract sum(func: Optional[Callable] = None) Union[int, float, complex]
      -

      Sum of all values

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      Union[int, float, complex]

      -
      -
      - -
      -
      -abstract take(index: int) IterableABC
      -

      Takes all elements from index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -abstract take_last(index: int) IterableABC
      -

      Takes all elements after index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -to_list() list
      -

      Converts :class: cpl_query.extension.iterable_abc.IterableABC to :class: list

      -
      -
      -
      class
      -

      list

      -
      -
      -
      -
      - -
      -
      -property type: type
      -
      - -
      -
      -abstract where(func: Callable) IterableABC
      -

      Select element by function

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      - -
      -
      -

      cpl_query.extension.iterable

      -
      -
      -class cpl_query.extension.iterable.Iterable(t: Optional[type] = None, values: Optional[list] = None)
      -

      Bases: IterableABC

      -
      -
      -all(func: Callable) bool
      -

      Checks if every element of list equals result found by function

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      bool

      -
      -
      - -
      -
      -any(func: Callable) bool
      -

      Checks if list contains result found by function

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      bool

      -
      -
      - -
      -
      -average(func: Optional[Callable] = None) Union[int, float, complex]
      -

      Returns average value of list

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      Union[int, float, complex]

      -
      -
      - -
      -
      -contains(value: object) bool
      -

      Checks if list contains value given by function

      -
      -
      -
      value: object

      value

      -
      -
      -
      -
      -

      bool

      -
      -
      - -
      -
      -count(func: Optional[Callable] = None) int
      -

      Returns length of list or count of found elements

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      int

      -
      -
      - -
      -
      -distinct(func: Optional[Callable] = None) IterableABC
      -

      Returns list without redundancies

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -element_at(index: int) any
      -

      Returns element at given index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -

      Value at index: any

      -
      -
      - -
      -
      -element_at_or_default(index: int) Optional[any]
      -

      Returns element at given index or None

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -

      Value at index: Optional[any]

      -
      -
      - -
      -
      -first() any
      -

      Returns first element

      -
      -

      First element of list: any

      -
      -
      - -
      -
      -first_or_default() Optional[any]
      -

      Returns first element or None

      -
      -

      First element of list: Optional[any]

      -
      -
      - -
      -
      -for_each(func: Callable)
      -

      Runs given function for each element of list

      -
      -
      -
      func: :class: Callable

      function to call

      -
      -
      -
      -
      - -
      -
      -last() any
      -

      Returns last element

      -
      -

      Last element of list: any

      -
      -
      - -
      -
      -last_or_default() Optional[any]
      -

      Returns last element or None

      -
      -

      Last element of list: Optional[any]

      -
      -
      - -
      -
      -max(func: Optional[Callable] = None) Union[int, float, complex]
      -

      Returns highest value

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      Union[int, float, complex]

      -
      -
      - -
      -
      -min(func: Optional[Callable] = None) Union[int, float, complex]
      -

      Returns highest value

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      Union[int, float, complex]

      -
      -
      - -
      -
      -order_by(func: Callable) OrderedIterableABC
      -

      Sorts elements by function in ascending order

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -order_by_descending(func: Callable) OrderedIterableABC
      -

      Sorts elements by function in descending order

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -reverse() IterableABC
      -

      Reverses list

      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -single() any
      -

      Returns one single element of list

      -
      -

      Found value: any

      -
      -
      -

      ArgumentNoneException: when argument is None -Exception: when argument is None or found more than one element

      -
      -
      - -
      -
      -single_or_default() Optional[any]
      -

      Returns one single element of list

      -
      -

      Found value: Optional[any]

      -
      -
      - -
      -
      -skip(index: int) IterableABC
      -

      Skips all elements from index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -skip_last(index: int) IterableABC
      -

      Skips all elements after index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -sum(func: Optional[Callable] = None) Union[int, float, complex]
      -

      Sum of all values

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -

      Union[int, float, complex]

      -
      -
      - -
      -
      -take(index: int) IterableABC
      -

      Takes all elements from index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -take_last(index: int) IterableABC
      -

      Takes all elements after index

      -
      -
      -
      index: int

      index

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      -
      -where(func: Callable) IterableABC
      -

      Select element by function

      -
      -
      -
      func: Callable

      selected value

      -
      -
      -
      -
      -
      -
      class
      -

      cpl_query.extension.iterable_abc.IterableABC

      -
      -
      -
      -
      - -
      - -

      cpl_query.extension.list

      -class cpl_query.extension.list.List(t: Optional[type] = None, values: Optional[list] = None)
      -

      Bases: Iterable

      +class cpl_query.extension.list.List(t: Optional[type] = None, values: Optional[Iterable] = None) +

      Bases: Iterable

      Implementation of :class: cpl_query.extension.iterable.Iterable

      -
      - -
      -
      -

      cpl_query.extension.ordered_iterable_abc

      -
      -
      -class cpl_query.extension.ordered_iterable_abc.OrderedIterableABC(_t: type, _func: Optional[Callable] = None)
      -

      Bases: IterableABC

      -
      -abstract then_by(func: Callable) OrderedIterableABC
      -

      Sorts OrderedList in ascending order by function

      +
      +to_enumerable() EnumerableABC
      +

      Converts :class: cpl_query.iterable.iterable_abc.IterableABC to :class: cpl_query.enumerable.enumerable_abc.EnumerableABC

      -

      func: Callable

      -
      -
      -

      list of cpl_query.extension.OrderedIterableABC

      +
      +
      class
      +

      cpl_query.enumerable.enumerable_abc.EnumerableABC

      +
      +
      -
      -abstract then_by_descending(func: Callable) OrderedIterableABC
      -

      Sorts OrderedList in descending order by function

      +
      +to_iterable() IterableABC
      +

      Converts :class: cpl_query.enumerable.enumerable_abc.EnumerableABC to :class: cpl_query.iterable.iterable_abc.IterableABC

      -

      func: Callable

      -
      -
      -

      list of cpl_query.extension.OrderedIterableABC

      -
      -
      - -
      - -
      -
      -

      cpl_query.extension.ordered_iterable

      -
      -
      -class cpl_query.extension.ordered_iterable.OrderedIterable(_t: Optional[type] = None)
      -

      Bases: Iterable, OrderedIterableABC

      -

      Implementation of :class: cpl_query.extension.Iterable cpl_query.extension.OrderedIterableABC

      -
      -
      -then_by(_func: Callable) OrderedIterableABC
      -

      Sorts OrderedList in ascending order by function

      -
      -

      func: Callable

      -
      -
      -

      list of cpl_query.extension.OrderedIterableABC

      -
      -
      - -
      -
      -then_by_descending(_func: Callable) OrderedIterableABC
      -

      Sorts OrderedList in descending order by function

      -
      -

      func: Callable

      -
      -
      -

      list of cpl_query.extension.OrderedIterableABC

      +
      +
      class
      +

      cpl_query.iterable.iterable_abc.IterableABC

      +
      +
      @@ -999,14 +127,14 @@ Exception: when argument is None or found more than one element

  31. +
  32. features (cpl_discord.container.guild.Guild attribute) +
  33. file_level (cpl_core.logging.logging_settings_name_enum.LoggingSettingsNameEnum attribute)
  34. filename (cpl_core.logging.logging_settings.LoggingSettings property) @@ -989,34 +1602,22 @@
  35. (cpl_core.logging.logging_settings_name_enum.LoggingSettingsNameEnum attribute)
  36. -
  37. first() (cpl_query.extension.iterable.Iterable method) - -
  38. -
  39. first_or_default() (cpl_query.extension.iterable.Iterable method) - -
  40. first_to_lower() (cpl_core.utils.string.String static method)
  41. first_to_upper() (cpl_core.utils.string.String static method)
  42. FirstCharToLowerPipe (class in cpl_core.pipes.first_char_to_lower_pipe)
  43. - -
  44. function (cpl_core.console.console_call.ConsoleCall property)
  45. @@ -1049,6 +1652,12 @@

    G

    - + @@ -1099,6 +1736,10 @@
  46. header_list (cpl_core.mailing.email.EMail property)
  47. +
  48. hoist (cpl_discord.container.role.Role attribute) +
  49. + + -

    P

    - +
    +
    +

    Q

    + + +
    +

    R

    + -
    -
  50. reset_cursor_position() (cpl_core.console.console.Console class method) +
  51. remove() (cpl_query.iterable.iterable_abc.IterableABC method) +
  52. +
  53. reset() (cpl_query.base.sequence_values.SequenceValues method)
  54. +
  55. select_many() (cpl_query.base.queryable_abc.QueryableABC method) +
  56. send_mail() (cpl_core.mailing.email_client_abc.EMailClientABC method)
  57. +
  58. SequenceABC (class in cpl_query.base.sequence_abc) +
  59. +
  60. SequenceValues (class in cpl_query.base.sequence_values) +
  61. server (cpl_core.database.connection.database_connection.DatabaseConnection property)
  62. -
    @@ -1604,30 +3059,40 @@ +
  63. timed_out_until (cpl_discord.container.member.Member attribute) +
  64. TimeFormatSettings (class in cpl_core.time.time_format_settings)
  65. TimeFormatSettingsNamesEnum (class in cpl_core.time.time_format_settings_names_enum)
  66. +
  67. to_enumerable() (cpl_query.extension.list.List method) + +
  68. +
  69. to_iterable() (cpl_query.enumerable.enumerable_abc.EnumerableABC method) + +
  70. to_list() (cpl_core.configuration.configuration_variable_name_enum.ConfigurationVariableNameEnum static method)
  71. transient (cpl_core.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum attribute)
  72. -
  73. type (cpl_query.exceptions.ExceptionArgument attribute) +
  74. translate() (cpl_translation.translation_service.TranslationService method)
  75. +
  76. TranslatePipe (class in cpl_translation.translate_pipe) +
  77. +
  78. TranslationService (class in cpl_translation.translation_service) +
  79. +
  80. TranslationServiceABC (class in cpl_translation.translation_service_abc) +
  81. +
  82. TranslationSettings (class in cpl_translation.translation_settings) +
  83. +
  84. type (cpl_query.base.sequence_abc.SequenceABC property) + +
  85. @@ -1694,6 +3195,10 @@

    U

    + -
    +
    @@ -1806,7 +3315,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/getting_started.html b/docs/build/html/getting_started.html index 4a2ad194..30d07942 100644 --- a/docs/build/html/getting_started.html +++ b/docs/build/html/getting_started.html @@ -47,9 +47,11 @@
  86. Contributing to CPL
  87. -
  88. CLI Reference
  89. -
  90. API Reference
  91. -
  92. Query Reference
  93. +
  94. CLI reference
  95. +
  96. API reference
  97. +
  98. Discord reference
  99. +
  100. Query reference
  101. +
  102. Translation reference
  103. @@ -150,7 +152,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/index.html b/docs/build/html/index.html index 644661a1..0bf47481 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -41,9 +41,11 @@
  104. Introduction to the CPL Docs
  105. Getting started
  106. Contributing to CPL
  107. -
  108. CLI Reference
  109. -
  110. API Reference
  111. -
  112. Query Reference
  113. +
  114. CLI reference
  115. +
  116. API reference
  117. +
  118. Discord reference
  119. +
  120. Query reference
  121. +
  122. Translation reference
  123. @@ -234,9 +236,11 @@
  124. Introduction to the CPL Docs
  125. Getting started
  126. Contributing to CPL
  127. -
  128. CLI Reference
  129. -
  130. API Reference
  131. -
  132. Query Reference
  133. +
  134. CLI reference
  135. +
  136. API reference
  137. +
  138. Discord reference
  139. +
  140. Query reference
  141. +
  142. Translation reference
  143. @@ -252,7 +256,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/introduction.html b/docs/build/html/introduction.html index 9b2551b5..6db361f3 100644 --- a/docs/build/html/introduction.html +++ b/docs/build/html/introduction.html @@ -46,9 +46,11 @@
  144. Getting started
  145. Contributing to CPL
  146. -
  147. CLI Reference
  148. -
  149. API Reference
  150. -
  151. Query Reference
  152. +
  153. CLI reference
  154. +
  155. API reference
  156. +
  157. Discord reference
  158. +
  159. Query reference
  160. +
  161. Translation reference
  162. @@ -187,7 +189,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/modules.html b/docs/build/html/modules.html index fee698ea..f31637d2 100644 --- a/docs/build/html/modules.html +++ b/docs/build/html/modules.html @@ -40,9 +40,11 @@
  163. Introduction to the CPL Docs
  164. Getting started
  165. Contributing to CPL
  166. -
  167. CLI Reference
  168. -
  169. API Reference
  170. -
  171. Query Reference
  172. +
  173. CLI reference
  174. +
  175. API reference
  176. +
  177. Discord reference
  178. +
  179. Query reference
  180. +
  181. Translation reference
  182. @@ -131,7 +133,7 @@ -
  183. CLI Reference @@ -90,7 +92,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 72e5880f..a2b6df51 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["cli.add", "cli.build", "cli.generate", "cli.help", "cli.install", "cli.new", "cli.overview", "cli.publish", "cli.remove", "cli.start", "cli.uninstall", "cli.update", "cli.version", "contributing", "cpl_cli", "cpl_core", "cpl_core.application", "cpl_core.configuration", "cpl_core.console", "cpl_core.database", "cpl_core.database.connection", "cpl_core.database.context", "cpl_core.dependency_injection", "cpl_core.environment", "cpl_core.logging", "cpl_core.mailing", "cpl_core.pipes", "cpl_core.time", "cpl_core.utils", "cpl_query", "cpl_query.exceptions", "cpl_query.extension", "getting_started", "index", "introduction", "modules", "quickstart", "setup", "tutorials", "tutorials.appsettings", "tutorials.console", "tutorials.console-arguments", "tutorials.create-startup", "tutorials.extend-application", "tutorials.extend-startup", "tutorials.logging", "tutorials.mail"], "filenames": ["cli.add.md", "cli.build.md", "cli.generate.md", "cli.help.md", "cli.install.md", "cli.new.md", "cli.overview.md", "cli.publish.md", "cli.remove.md", "cli.start.md", "cli.uninstall.md", "cli.update.md", "cli.version.md", "contributing.md", "cpl_cli.rst", "cpl_core.rst", "cpl_core.application.rst", "cpl_core.configuration.rst", "cpl_core.console.rst", "cpl_core.database.rst", "cpl_core.database.connection.rst", "cpl_core.database.context.rst", "cpl_core.dependency_injection.rst", "cpl_core.environment.rst", "cpl_core.logging.rst", "cpl_core.mailing.rst", "cpl_core.pipes.rst", "cpl_core.time.rst", "cpl_core.utils.rst", "cpl_query.rst", "cpl_query.exceptions.rst", "cpl_query.extension.rst", "getting_started.rst", "index.rst", "introduction.md", "modules.rst", "quickstart.md", "setup.md", "tutorials.rst", "tutorials.appsettings.md", "tutorials.console.md", "tutorials.console-arguments.md", "tutorials.create-startup.md", "tutorials.extend-application.md", "tutorials.extend-startup.md", "tutorials.logging.md", "tutorials.mail.md"], "titles": ["cpl add", "cpl build", "cpl generate", "cpl help", "cpl install", "cpl new", "CLI Overview and Command Reference", "cpl publish", "cpl remove", "cpl start", "cpl uninstall", "cpl update", "cpl version", "Contributing to CPL", "CLI Reference", "API Reference", "cpl_core.application", "cpl_core.configuration", "cpl_core.console", "cpl_core.database", "cpl_core.database.connection", "cpl_core.database.context", "cpl_core.dependency_injection", "cpl_core.environment", "cpl_core.logging", "cpl_core.mailing", "cpl_core.pipes", "cpl_core.time", "cpl_core.utils", "Query Reference", "cpl_query.exceptions", "cpl_query.extension", "Getting started", "Introduction to the CPL Docs", "Introduction to the CPL Docs", "cpl", "Getting started with CPL", "Setting up the local environment and workspace", "Tutorials", "Using appsettings.json", "Use cpl_core.console.Console", "Handle console arguments", "Create startup class", "Extend application", "Extend startup", "Use builtin logger", "Send mails"], "terms": {"remov": [0, 6, 7, 14, 35], "project": [0, 1, 4, 6, 7, 8, 10, 11, 13, 14, 32, 35, 37], "from": [0, 6, 7, 8, 10, 12, 13, 16, 17, 18, 19, 31, 33, 34, 36], "workspac": [0, 1, 5, 6, 8, 32, 35], "sourc": [0, 1, 7, 13, 28, 36, 37], "target": [0, 1], "A": [0, 5, 13], "refer": [0, 8, 33, 34, 35], "given": [0, 1, 4, 6, 7, 10, 17, 18, 19, 22, 28, 31], "If": [0, 5, 8, 13, 18, 37], "you": [0, 1, 6, 8, 13, 33, 34, 36, 37], "call": [0, 8, 16, 17, 18, 31], "command": [0, 1, 3, 4, 5, 7, 8, 10, 11, 13, 14, 28, 33, 34, 35, 37], "can": [0, 1, 6, 7, 8, 13, 33, 37], "us": [0, 1, 5, 6, 7, 8, 13, 16, 18, 25, 28, 32, 33, 34, 35, 36, 37, 38], "name": [0, 1, 2, 5, 6, 7, 8, 17, 23, 24, 28, 37], "otherwis": [0, 8, 18], "path": [0, 1, 7, 8, 14, 17, 23, 24, 35, 37], "must": [0, 1, 6, 8, 13, 18], "specifi": [0, 4, 5, 6, 8, 10, 11, 17, 18], "valu": [0, 1, 2, 3, 4, 5, 7, 8, 10, 17, 18, 19, 22, 23, 24, 25, 26, 27, 30, 31], "type": [0, 1, 2, 3, 4, 7, 8, 10, 14, 16, 17, 22, 30, 31, 35], "which": [0, 6, 17, 18, 28, 37], "ha": [0, 18], "ad": [0, 13], "str": [0, 1, 2, 3, 4, 5, 7, 8, 10, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 36], "referenc": 0, "simul": [0, 4, 8, 10, 11], "whether": [0, 4, 5, 8, 10, 11, 17], "copi": 1, "an": [1, 6, 7, 16, 17, 18, 19, 22, 23, 24, 25, 27, 30, 36, 37], "python": [1, 13, 15, 28, 33, 34, 35, 36, 37], "app": [1, 6, 16, 32, 33, 34, 35, 36], "output": [1, 6, 7, 17, 18, 33, 34, 36, 37], "directori": [1, 6, 7, 23, 33, 34, 36], "execut": [1, 6, 7, 17, 28], "within": [1, 6, 13], "b": [1, 6, 13], "The": [1, 2, 4, 5, 6, 7, 8, 10, 13, 22, 25, 28, 33, 34, 36, 37], "consol": [1, 3, 5, 6, 7, 15, 17, 24, 32, 33, 34, 35, 36, 38], "librari": [1, 5, 6, 7, 15, 32, 33, 34, 35], "all": [1, 7, 12, 13, 17, 31], "includ": [1, 13, 37], "file": [1, 2, 6, 7, 8, 9, 13, 17, 33, 37], "run": [1, 5, 16, 17, 18, 21, 28, 31, 33, 34, 36, 37], "directli": [1, 13], "prepar": [1, 6, 7, 13, 16, 33], "publish": [1, 6, 14, 33, 35, 37], "them": 1, "argument": [1, 5, 6, 7, 11, 14, 17, 18, 28, 30, 31, 32, 33, 34, 35, 38], "base": [2, 5, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 36], "g": [2, 6], "abc": [2, 16, 17, 20, 21, 22, 23, 24, 25, 26, 31], "abstract": [2, 16, 17, 20, 21, 22, 23, 24, 25, 26, 31], "class": [2, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 38], "enum": [2, 17, 18, 19, 22, 23, 24, 25, 27, 30], "pipe": [2, 15, 22, 33, 34, 35], "servic": [2, 5, 16, 17, 22, 24, 25, 33, 34, 36], "set": [2, 16, 17, 18, 19, 21, 22, 23, 24, 25, 27, 28, 32, 35, 36], "configmodel": 2, "test": [2, 13, 23, 33, 34, 36], "thread": [2, 18], "valid": [2, 25, 36], "list": [3, 6, 12, 17, 18, 21, 22, 25, 26, 28, 29, 30, 33, 35], "avail": [3, 6, 13], "short": [3, 6], "h": [3, 6], "show": [3, 18], "messag": [3, 18, 24], "thi": [3, 13, 16, 33, 34, 36, 37], "packag": [4, 5, 6, 10, 12, 28, 32, 33, 34, 35, 36], "via": [4, 10, 13, 33, 34], "pip": [4, 10, 12, 15, 33, 34, 35, 36, 37], "i": [4, 6, 36], "without": [4, 6, 13, 31], "deped": 4, "your": [4, 6, 9, 13, 33, 34, 37], "dev": [4, 10], "develop": [4, 6, 10, 13, 23, 33, 34, 36, 37], "mode": [4, 10], "virtual": [4, 10], "gener": [5, 6, 7, 14, 33, 35, 36, 37], "initi": [5, 32, 35], "add": [5, 6, 13, 14, 17, 22, 25, 31, 35, 36], "n": [5, 6, 36, 37], "see": [5, 13, 20, 26, 36, 37], "simpl": [5, 33, 34, 37], "applic": [5, 9, 15, 18, 23, 24, 25, 32, 33, 34, 35, 36, 37, 38], "async": [5, 16], "startup": [5, 16, 32, 33, 34, 35, 38], "provid": [5, 13, 16, 22, 33, 34, 36, 37], "noth": 5, "venv": 5, "instal": [6, 12, 14, 28, 32, 35, 36], "cpl": [6, 14, 15, 22, 32, 37], "To": [6, 13, 36, 37], "creat": [6, 7, 13, 16, 17, 18, 22, 24, 25, 28, 32, 33, 34, 35, 38], "build": [6, 7, 14, 16, 28, 33, 35, 36, 37], "serv": 6, "new": [6, 13, 14, 18, 35, 36, 37], "server": [6, 20, 25, 33, 34, 37], "go": [6, 13, 33], "parent": 6, "follow": [6, 13, 36, 37], "my": [6, 13, 37], "first": [6, 13, 26, 28, 31, 33, 34], "cd": [6, 37], "start": [6, 14, 33, 34, 35], "In": [6, 13, 36], "termin": [6, 18, 36, 37], "commandnameoralia": 6, "requiredarg": 6, "optionalsarg": 6, "most": [6, 36, 37], "some": 6, "option": [6, 13, 17, 18, 19, 22, 24, 25, 28, 31, 33, 34, 36], "have": [6, 13, 36, 37], "alias": [6, 17], "ar": [6, 7, 13, 17], "shown": [6, 17, 37], "statement": [6, 21], "each": [6, 17, 31], "prefix": [6, 17], "absolut": 6, "current": [6, 23], "work": [6, 13, 23, 33, 34], "either": 6, "root": 6, "take": [6, 17, 31], "artifact": 6, "addit": [6, 13], "ani": [6, 18, 26, 31], "defin": [6, 17, 18, 31, 37], "its": [6, 13], "own": 6, "suppli": 6, "same": 6, "format": [6, 24, 27], "immedi": 6, "alia": [6, 26], "descript": [6, 11, 14, 35], "dist": [6, 7], "help": [6, 13, 14, 33, 34, 35], "With": 6, "depend": [6, 11, 33, 34, 36], "p": [6, 7], "setup": [6, 7, 34, 37], "py": [6, 7, 28, 33, 36], "r": [6, 8], "s": [6, 9, 13, 32, 35], "restart": [6, 9, 37], "chang": [6, 9, 13, 21, 36], "uninstal": [6, 14, 28, 35], "ui": [6, 10], "updat": [6, 13, 14, 35], "u": [6, 11], "version": [6, 14, 35], "v": [6, 12], "data": [7, 18], "cpl_core": [7, 15, 32, 35, 36, 37, 38], "json": [7, 17, 32, 33, 34, 35, 36, 37, 38], "delet": 8, "cli": [12, 32, 33, 34, 35, 36], "we": [13, 36], "would": 13, "love": 13, "make": [13, 37], "even": 13, "better": 13, "than": [13, 31], "todai": 13, "As": 13, "contributor": 13, "here": [13, 37], "like": [13, 33, 36], "issus": 13, "find": 13, "our": 13, "gitea": 13, "repositori": 13, "fix": 13, "implement": [13, 22, 31], "pleas": 13, "consid": 13, "size": 13, "order": [13, 31], "determin": 13, "right": 13, "step": 13, "proce": 13, "For": 13, "major": [13, 26], "open": [13, 36, 37], "outlin": 13, "propos": 13, "so": [13, 37], "discuss": 13, "process": 13, "allow": 13, "coordin": [13, 18], "effort": 13, "prevent": 13, "duplic": 13, "craft": 13, "successfulli": 13, "accept": 13, "note": 13, "topic": 13, "document": 13, "significantli": 13, "re": 13, "write": [13, 18, 24, 33, 34], "count": [13, 31], "small": 13, "befor": [13, 18], "search": [13, 17, 22], "tracker": 13, "mayb": 13, "problem": 13, "alreadi": [13, 36, 37], "exist": 13, "might": 13, "inform": [13, 24, 37], "workaround": 13, "readili": 13, "want": [13, 36], "soon": [13, 32, 35, 38], "possibl": [13, 17], "need": [13, 36, 37], "reproduc": 13, "confirm": 13, "requir": 13, "minim": 13, "reproduct": 13, "scenario": 13, "give": 13, "wealth": 13, "import": [13, 36], "back": [13, 18], "forth": 13, "question": 13, "quickli": 13, "point": [13, 16, 18], "out": [13, 30, 36, 37], "well": 13, "save": [13, 17, 21], "maintain": 13, "time": [13, 15, 24, 35], "ultim": 13, "abl": 13, "more": [13, 26, 31, 37], "often": 13, "themselv": 13, "while": 13, "understand": [13, 33, 34, 36, 37], "sometim": 13, "hard": 13, "extract": 13, "essenti": [13, 36], "bit": 13, "larger": 13, "codebas": 13, "realli": 13, "isol": 13, "unfortun": 13, "investig": 13, "don": [13, 36], "t": [13, 31, 36], "hear": 13, "close": [13, 18], "doesn": 13, "enough": 13, "info": [13, 24, 33, 34], "pr": 13, "relat": 13, "Be": 13, "sure": 13, "describ": 13, "design": 13, "d": 13, "upfront": 13, "ensur": 13, "readi": [13, 37], "fork": 13, "sh": [13, 15, 35, 37], "edraft": [13, 15, 35, 37], "de": [13, 26, 37], "sh_cpl": [13, 37], "repo": 13, "git": 13, "branch": 13, "checkout": 13, "master": 13, "patch": 13, "appropri": 13, "case": [13, 26, 28, 36], "commit": 13, "line": [13, 18, 36], "automat": 13, "rm": 13, "edit": 13, "push": 13, "origin": 13, "send": [13, 25, 32, 33, 34, 35, 38], "team": 13, "reserv": 13, "commun": 13, "member": 13, "who": 13, "haven": 13, "been": 13, "good": 13, "citizen": 13, "Such": 13, "behavior": 13, "appli": 13, "outsid": 13, "manag": [13, 33, 34], "channel": 13, "ask": 13, "fixup": 13, "head": 13, "That": 13, "thank": 13, "consist": 13, "throughout": 13, "keep": 13, "mind": 13, "one": [13, 31], "unit": 13, "public": 13, "api": [13, 33, 34, 35], "method": 13, "pep": 13, "8": 13, "style": 13, "guid": 13, "By": 13, "agre": 13, "under": 13, "mit": [13, 26], "overview": [14, 35, 37], "tabl": [14, 18, 28, 32, 33, 34, 35], "content": [14, 15, 32, 35], "basic": [14, 35, 36, 37], "workflow": [14, 35], "languag": [14, 35], "syntax": [14, 35], "rel": [14, 35], "schemat": [14, 35], "flag": [14, 35], "application_abc": [15, 35], "application_build": [15, 35], "application_builder_abc": [15, 35], "startup_abc": [15, 35], "configur": [15, 16, 22, 33, 34, 35], "configuration_abc": [15, 16, 22, 35], "configuration_model_abc": [15, 35], "configuration_variable_name_enum": [15, 35], "console_argu": [15, 35], "background_color_enum": [15, 35], "console_cal": [15, 35], "foreground_color_enum": [15, 35], "spinner_thread": [15, 35], "databas": [15, 22, 35], "connect": [15, 19, 21, 25, 35], "database_connect": [15, 19, 35], "database_connection_abc": [15, 19, 35], "context": [15, 19, 22, 35, 37], "database_context": [15, 19, 35], "database_context_abc": [15, 19, 22, 35], "submodul": [15, 35], "database_model": [15, 35], "database_set": [15, 20, 21, 35], "database_settings_name_enum": [15, 35], "dependency_inject": [15, 16, 35], "service_collect": [15, 35], "service_collection_abc": [15, 16, 35], "service_descriptor": [15, 35], "service_lifetime_enum": [15, 35], "service_provid": [15, 35], "service_provider_abc": [15, 16, 35], "environ": [15, 16, 17, 24, 25, 32, 33, 34, 35], "application_environ": [15, 35], "application_environment_abc": [15, 16, 24, 25, 35], "environment_name_enum": [15, 35], "log": [15, 25, 33, 34, 35], "logger_abc": [15, 25, 35], "logger_servic": [15, 35], "logging_level_enum": [15, 35], "logging_set": [15, 35], "logging_settings_name_enum": [15, 35], "mail": [15, 32, 33, 34, 35, 38], "email": [15, 35], "email_client_abc": [15, 35], "email_client_servic": [15, 35], "email_client_set": [15, 35], "email_client_settings_name_enum": [15, 35], "bool_pip": [15, 35], "modul": [15, 35], "first_char_to_lower_pip": [15, 35], "first_to_upper_pip": [15, 35], "ip_address_pip": [15, 35], "pipe_abc": [15, 35], "to_camel_case_pip": [15, 35], "to_snake_case_pip": [15, 35], "version_pip": [15, 35], "core": [15, 20, 33, 35, 37], "common": [15, 33, 34, 35], "time_format_set": [15, 24, 35], "time_format_settings_names_enum": [15, 35], "util": [15, 33, 34, 35], "credential_manag": [15, 35], "string": [15, 18, 20, 24, 25, 26, 33, 34, 35, 36], "applicationabc": 16, "config": [16, 22], "configurationabc": [16, 17, 22], "serviceproviderabc": [16, 17, 22], "contain": [16, 31], "object": [16, 17, 18, 22, 25, 28, 31, 33, 34], "load": 16, "appset": [16, 32, 35, 36, 38], "instanc": [16, 22], "main": [16, 36], "custom": [16, 17, 23, 33, 34], "entri": [16, 18], "run_async": 16, "applicationbuild": 16, "applicationbuilderabc": 16, "build_async": 16, "use_extens": 16, "extens": [16, 29, 33, 34, 35], "union": [16, 17, 18, 22, 31], "applicationextensionabc": 16, "startupextensionabc": 16, "use_startup": 16, "startupabc": 16, "arg": [16, 17, 18, 21, 26, 28, 30], "configure_configur": 16, "env": [16, 24], "applicationenvironmentabc": [16, 17, 23, 24, 25], "configure_servic": 16, "servicecollectionabc": [16, 22], "add_configur": 17, "key_typ": 17, "configurationmodelabc": [17, 19, 24, 25, 27], "add_console_argu": 17, "argumentabc": 17, "known": 17, "consoleargumentabc": 17, "add_environment_vari": 17, "read": [17, 18, 36], "variabl": [17, 28], "add_json_fil": 17, "bool": [17, 18, 19, 25, 26, 31], "none": [17, 18, 22, 24, 25, 28, 30, 31], "true": 17, "error": [17, 18, 24, 33, 34], "should": [17, 36, 37], "occur": 17, "wa": [17, 37], "found": [17, 31], "place": 17, "store": 17, "properti": [17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 31], "additional_argu": 17, "argument_error_funct": 17, "callabl": [17, 18, 22, 31], "argument_abc": 17, "create_console_argu": 17, "arg_typ": 17, "argumenttypeenum": 17, "token": 17, "kwarg": [17, 18], "begin": 17, "value_token": 17, "were": 17, "is_value_token_opt": 17, "runnabl": 17, "when": [17, 18, 30, 31], "for_each_argu": 17, "iter": [17, 29, 35], "through": [17, 36], "function": [17, 18, 28, 31, 33, 36], "get_configur": 17, "search_typ": 17, "return": [17, 18, 22, 25, 31, 36], "parse_console_argu": 17, "invalid": [17, 30], "from_dict": [17, 19, 24, 25, 27], "dict": [17, 18, 19, 24, 25, 26, 27], "convert": [17, 24, 25, 26, 27, 28, 31, 33, 34], "attribut": [17, 19, 24, 25, 27], "configurationvariablenameenum": 17, "enumer": [17, 18, 19, 22, 23, 24, 25, 27, 30], "static": [17, 25, 28], "to_list": [17, 31], "backgroundcolorenum": 18, "blue": 18, "on_blu": 18, "cyan": 18, "on_cyan": 18, "default": [18, 37], "on_default": 18, "green": 18, "on_green": 18, "grei": 18, "on_grei": 18, "magenta": 18, "on_magenta": 18, "red": 18, "on_r": 18, "white": 18, "on_whit": 18, "yellow": 18, "on_yellow": 18, "handl": [18, 28, 32, 33, 34, 35, 38], "input": [18, 33, 34, 36], "background_color": 18, "bytes_or_buff": 18, "encod": [18, 28], "expos": 18, "buffer": [18, 19], "decod": [18, 28], "handler": 18, "result": [18, 25, 28, 31], "__str__": 18, "repr": 18, "sy": 18, "getdefaultencod": 18, "strict": 18, "classmethod": [18, 28], "banner": [18, 33, 34], "print": [18, 36], "clear": 18, "color_reset": 18, "reset": [18, 28], "color": 18, "disabl": 18, "interact": 18, "enabl": [18, 36], "tb": 18, "traceback": 18, "foreground_color": 18, "read_lin": 18, "next": [18, 32, 35], "reset_cursor_posit": 18, "cursor": [18, 20, 21], "posit": 18, "select": [18, 21, 31, 36], "char": [18, 26, 28], "header_foreground_color": 18, "foregroundcolorenum": 18, "header_background_color": 18, "option_foreground_color": 18, "option_background_color": 18, "cursor_foreground_color": 18, "cursor_background_color": 18, "menu": [18, 32, 33, 34, 35], "charact": 18, "element": [18, 21, 31], "header": [18, 24, 25], "foreground": 18, "background": 18, "set_background_color": 18, "set_cursor_posit": 18, "x": 18, "int": [18, 19, 25, 26, 28, 31, 36], "y": [18, 36], "set_foreground_color": 18, "set_hold_back": 18, "spinner": [18, 33, 34], "text_foreground_color": 18, "spinner_foreground_color": 18, "text_background_color": 18, "spinner_background_color": 18, "end": [18, 24], "stop": 18, "text": 18, "keyword": 18, "activ": 18, "last": [18, 31], "write_at": [18, 33, 34], "write_lin": [18, 33, 34, 36], "write_line_at": [18, 33, 34], "consolecal": 18, "repres": [18, 19, 23, 25], "hold": 18, "spinnerthread": 18, "msg_len": 18, "length": [18, 28, 31, 36], "exit": [18, 36], "stop_spin": 18, "databaseset": [19, 20, 21, 22], "auth_plugin": 19, "charset": 19, "host": [19, 25], "password": [19, 36], "port": [19, 25], "use_unicod": 19, "user": [19, 36], "databasesettingsnameenum": 19, "authplugin": 19, "useunicod": 19, "databaseconnect": 20, "databaseconnectionabc": 20, "represent": [20, 21, 22, 24, 25, 27], "connection_str": 20, "http": [20, 37], "doc": 20, "sqlalchemi": 20, "org": 20, "en": 20, "14": 20, "engin": 20, "html": 20, "mysqlcursorbuff": [20, 21], "mysqlconnectionabstract": 20, "databasecontext": 21, "databasecontextabc": [21, 22], "save_chang": 21, "tupl": [21, 26], "sql": 21, "fetch": 21, "servicecollect": 22, "collect": 22, "add_db_context": 22, "db_context_typ": 22, "db_set": 22, "db_context": 22, "add_log": 22, "intern": 22, "logger": [22, 24, 25, 32, 33, 34, 35, 38], "add_pip": 22, "transient": [22, 33, 34], "add_scop": 22, "service_typ": 22, "scope": [22, 33, 34], "lifetim": [22, 33, 34], "self": 22, "add_singleton": 22, "singleton": [22, 33, 34], "add_transi": 22, "build_service_provid": 22, "add_discord": 22, "discord": [22, 33], "add_transl": 22, "translat": [22, 33], "servicedescriptor": 22, "servicelifetimeenum": 22, "base_typ": 22, "descriptor": 22, "1": [22, 24, 26, 36], "0": [22, 24, 26, 36], "2": [22, 24, 26, 36], "serviceprovid": 22, "build_servic": 22, "instance_typ": 22, "create_scop": 22, "scopeabc": 22, "get_servic": 22, "set_scop": 22, "applicationenviron": 23, "environmentnameenum": 23, "product": [23, 33, 34], "application_nam": 23, "date_time_now": 23, "datetim": 23, "end_tim": 23, "environment_nam": 23, "host_nam": 23, "runtime_directori": 23, "set_runtime_directori": 23, "runtim": [23, 33, 34], "set_working_directori": 23, "working_directori": 23, "start_tim": 23, "stage": [23, 33, 34], "loggerabc": [24, 25], "debug": [24, 33, 34], "ex": 24, "except": [24, 29, 31, 35], "thrown": 24, "fatal": [24, 33, 34], "program": 24, "trace": [24, 33, 34], "warn": [24, 33, 34], "loggingset": 24, "time_format": [24, 27], "timeformatset": [24, 27], "tree": 24, "logfil": 24, "logginglevelenum": 24, "5": [24, 36], "4": 24, "off": 24, "6": 24, "3": 24, "filenam": 24, "level": [24, 33, 34], "loggingsettingsnameenum": 24, "console_level": 24, "consoleloglevel": 24, "file_level": 24, "fileloglevel": 24, "subject": 25, "bodi": 25, "transceiv": 25, "receiv": 25, "e": 25, "add_head": 25, "add_receiv": 25, "check_mail": 25, "address": 25, "check": [25, 31], "get_cont": 25, "header_list": 25, "receiver_list": 25, "emailclientabc": 25, "emailcli": 25, "send_mail": 25, "mail_set": 25, "emailclientset": 25, "login": 25, "credenti": [25, 28, 33, 34], "user_nam": 25, "emailclientsettingsnameenum": 25, "usernam": 25, "boolpip": 26, "pipeabc": 26, "transform": 26, "firstchartolowerpip": 26, "lower": [26, 28, 36], "firsttoupperpip": 26, "upper": [26, 28, 36], "ipaddresspip": 26, "tocamelcasepip": 26, "camel": [26, 28], "camelcas": [26, 28], "tosnakecasepip": 26, "snake": [26, 28], "snake_cas": [26, 28], "versionpip": 26, "copyright": 26, "2020": 26, "2022": 26, "licens": [26, 36], "detail": [26, 33], "versioninfo": 26, "minor": 26, "micro": 26, "field": 26, "number": 26, "date_format": 27, "date_time_format": 27, "date_time_log_format": 27, "timeformatsettingsnamesenum": 27, "dateformat": 27, "datetimeformat": 27, "datetimelogformat": 27, "timeformat": 27, "credentialmanag": 28, "encrypt": [28, 33, 34], "decrypt": 28, "build_str": 28, "replac": 28, "base64": [28, 33, 34], "get_execut": 28, "get_outd": 28, "byte": 28, "get": [28, 33, 34, 35, 37], "outdat": 28, "get_packag": 28, "local": [28, 32, 35], "stdout": 28, "stderr": 28, "extra": [28, 37], "index": [28, 30, 31, 36, 37], "url": [28, 37], "subprocess": [28, 33, 34], "reset_execut": 28, "system": 28, "standard": [28, 33, 34], "set_execut": 28, "convert_to_camel_cas": 28, "convert_to_snake_cas": 28, "first_to_low": 28, "first_to_upp": 28, "random_str": 28, "random": [28, 36], "cpl_queri": [29, 35], "iterable_abc": [29, 35], "ordered_iterable_abc": [29, 35], "ordered_iter": [29, 35], "argumentnoneexcept": [30, 31], "exceptionargu": 30, "func": [30, 31], "indexoutofrangeexcept": 30, "rang": [30, 36], "invalidtypeexcept": 30, "wrongtypeexcept": 30, "unexpect": 30, "iterableabc": 31, "everi": 31, "equal": 31, "append": 31, "_iterableabc__object": 31, "__object": 31, "averag": 31, "float": 31, "complex": [31, 33, 34], "distinct": 31, "redund": 31, "element_at": 31, "element_at_or_default": 31, "extend": [31, 32, 35, 38], "_iterableabc__iter": 31, "__iter": 31, "first_or_default": 31, "for_each": 31, "last_or_default": 31, "max": 31, "highest": 31, "min": 31, "order_bi": 31, "sort": [31, 33], "ascend": 31, "order_by_descend": 31, "descend": 31, "revers": 31, "singl": 31, "single_or_default": 31, "skip": 31, "skip_last": 31, "after": 31, "sum": 31, "take_last": 31, "where": 31, "orderediterableabc": 31, "_t": 31, "_func": 31, "then_bi": 31, "orderedlist": 31, "then_by_descend": 31, "orderediter": 31, "prerequisit": [32, 35], "what": [32, 35], "up": [32, 35], "queri": [32, 33, 34, 35], "tutori": [32, 35, 36, 37], "com": [32, 35, 38], "builtin": [32, 35, 38], "platform": [33, 34], "meant": [33, 34], "effici": [33, 34], "desktop": [33, 34], "learn": [33, 34, 37], "enterpris": [33, 34], "expandl": [33, 34], "builder": [33, 34], "map": [33, 34], "inject": [33, 34, 36], "appnam": [33, 34], "hostnam": [33, 34], "wrapper": [33, 34], "differ": [33, 34], "variant": [33, 34], "to_lower_cas": [33, 34], "to_camel_cas": [33, 34], "code": [33, 36, 37], "connector": 33, "between": 33, "filter": 33, "linq": 33, "c": 33, "xd": 33, "kei": [33, 37], "dot": 33, "notat": 33, "These": 33, "page": 33, "great": 33, "about": [33, 37], "everyth": 33, "do": [33, 36], "contribut": 33, "welcom": 36, "introduc": 36, "walk": 36, "also": [36, 37], "sampl": 36, "ouput": 36, "look": 36, "done": 36, "readm": 36, "md": 36, "src": 36, "__init__": 36, "projectmain": 36, "id": 36, "vs": 36, "pycharm": 36, "folder": 36, "hello": [36, 37], "world": [36, 37], "emul": 36, "def": 36, "onli": 36, "__name__": 36, "__main__": 36, "generate_password": 36, "letter": 36, "join": 36, "choic": 36, "ascii_lowercas": 36, "elif": 36, "ascii_uppercas": 36, "ascii_lett": 36, "len": 36, "full": 36, "section": 36, "ve": 36, "continu": 36, "explor": 36, "window": 37, "prompt": 37, "featur": 37, "declin": 37, "enter": 37, "press": 37, "lib": 37, "live": 37, "navig": 37, "launch": 37, "watch": 37, "chnage": 37, "those": 37, "success": 37, "similar": 37, "fore": 37, "pyhton": 37}, "objects": {"cpl_core.application": [[16, 0, 0, "-", "application_abc"], [16, 0, 0, "-", "application_builder"], [16, 0, 0, "-", "application_builder_abc"], [16, 0, 0, "-", "startup_abc"]], "cpl_core.application.application_abc": [[16, 1, 1, "", "ApplicationABC"]], "cpl_core.application.application_abc.ApplicationABC": [[16, 2, 1, "", "configure"], [16, 2, 1, "", "main"], [16, 2, 1, "", "run"], [16, 2, 1, "", "run_async"]], "cpl_core.application.application_builder": [[16, 1, 1, "", "ApplicationBuilder"]], "cpl_core.application.application_builder.ApplicationBuilder": [[16, 2, 1, "", "build"], [16, 2, 1, "", "build_async"], [16, 2, 1, "", "use_extension"], [16, 2, 1, "", "use_startup"]], "cpl_core.application.application_builder_abc": [[16, 1, 1, "", "ApplicationBuilderABC"]], "cpl_core.application.application_builder_abc.ApplicationBuilderABC": [[16, 2, 1, "", "build"], [16, 2, 1, "", "build_async"], [16, 2, 1, "", "use_startup"]], "cpl_core.application.startup_abc": [[16, 1, 1, "", "StartupABC"]], "cpl_core.application.startup_abc.StartupABC": [[16, 2, 1, "", "configure_configuration"], [16, 2, 1, "", "configure_services"]], "cpl_core.configuration": [[17, 0, 0, "-", "configuration"], [17, 0, 0, "-", "configuration_abc"], [17, 0, 0, "-", "configuration_model_abc"], [17, 0, 0, "-", "configuration_variable_name_enum"]], "cpl_core.configuration.configuration": [[17, 1, 1, "", "Configuration"]], "cpl_core.configuration.configuration.Configuration": [[17, 2, 1, "", "add_configuration"], [17, 2, 1, "", "add_console_argument"], [17, 2, 1, "", "add_environment_variables"], [17, 2, 1, "", "add_json_file"], [17, 3, 1, "", "additional_arguments"], [17, 3, 1, "", "argument_error_function"], [17, 3, 1, "", "arguments"], [17, 2, 1, "", "create_console_argument"], [17, 3, 1, "", "environment"], [17, 2, 1, "", "for_each_argument"], [17, 2, 1, "", "get_configuration"], [17, 2, 1, "", "parse_console_arguments"]], "cpl_core.configuration.configuration_abc": [[17, 1, 1, "", "ConfigurationABC"]], "cpl_core.configuration.configuration_abc.ConfigurationABC": [[17, 2, 1, "", "add_configuration"], [17, 2, 1, "", "add_console_argument"], [17, 2, 1, "", "add_environment_variables"], [17, 2, 1, "", "add_json_file"], [17, 3, 1, "", "additional_arguments"], [17, 3, 1, "", "argument_error_function"], [17, 3, 1, "", "arguments"], [17, 2, 1, "", "create_console_argument"], [17, 3, 1, "", "environment"], [17, 2, 1, "", "for_each_argument"], [17, 2, 1, "", "get_configuration"], [17, 2, 1, "", "parse_console_arguments"]], "cpl_core.configuration.configuration_model_abc": [[17, 1, 1, "", "ConfigurationModelABC"]], "cpl_core.configuration.configuration_model_abc.ConfigurationModelABC": [[17, 2, 1, "", "from_dict"]], "cpl_core.configuration.configuration_variable_name_enum": [[17, 1, 1, "", "ConfigurationVariableNameEnum"]], "cpl_core.configuration.configuration_variable_name_enum.ConfigurationVariableNameEnum": [[17, 4, 1, "", "customer"], [17, 4, 1, "", "environment"], [17, 4, 1, "", "name"], [17, 2, 1, "", "to_list"]], "cpl_core.console": [[18, 0, 0, "-", "background_color_enum"], [18, 0, 0, "-", "console"], [18, 0, 0, "-", "console_call"], [18, 0, 0, "-", "foreground_color_enum"], [18, 0, 0, "-", "spinner_thread"]], "cpl_core.console.background_color_enum": [[18, 1, 1, "", "BackgroundColorEnum"]], "cpl_core.console.background_color_enum.BackgroundColorEnum": [[18, 4, 1, "", "blue"], [18, 4, 1, "", "cyan"], [18, 4, 1, "", "default"], [18, 4, 1, "", "green"], [18, 4, 1, "", "grey"], [18, 4, 1, "", "magenta"], [18, 4, 1, "", "red"], [18, 4, 1, "", "white"], [18, 4, 1, "", "yellow"]], "cpl_core.console.console": [[18, 1, 1, "", "Console"]], "cpl_core.console.console.Console": [[18, 3, 1, "", "background_color"], [18, 2, 1, "", "banner"], [18, 2, 1, "", "clear"], [18, 2, 1, "", "close"], [18, 2, 1, "", "color_reset"], [18, 2, 1, "", "disable"], [18, 2, 1, "", "enable"], [18, 2, 1, "", "error"], [18, 3, 1, "", "foreground_color"], [18, 2, 1, "", "read"], [18, 2, 1, "", "read_line"], [18, 2, 1, "", "reset_cursor_position"], [18, 2, 1, "", "select"], [18, 2, 1, "", "set_background_color"], [18, 2, 1, "", "set_cursor_position"], [18, 2, 1, "", "set_foreground_color"], [18, 2, 1, "", "set_hold_back"], [18, 2, 1, "", "spinner"], [18, 2, 1, "", "table"], [18, 2, 1, "", "write"], [18, 2, 1, "", "write_at"], [18, 2, 1, "", "write_line"], [18, 2, 1, "", "write_line_at"]], "cpl_core.console.console_call": [[18, 1, 1, "", "ConsoleCall"]], "cpl_core.console.console_call.ConsoleCall": [[18, 3, 1, "", "args"], [18, 3, 1, "", "function"]], "cpl_core.console.foreground_color_enum": [[18, 1, 1, "", "ForegroundColorEnum"]], "cpl_core.console.foreground_color_enum.ForegroundColorEnum": [[18, 4, 1, "", "blue"], [18, 4, 1, "", "cyan"], [18, 4, 1, "", "default"], [18, 4, 1, "", "green"], [18, 4, 1, "", "grey"], [18, 4, 1, "", "magenta"], [18, 4, 1, "", "red"], [18, 4, 1, "", "white"], [18, 4, 1, "", "yellow"]], "cpl_core.console.spinner_thread": [[18, 1, 1, "", "SpinnerThread"]], "cpl_core.console.spinner_thread.SpinnerThread": [[18, 2, 1, "", "exit"], [18, 2, 1, "", "run"], [18, 2, 1, "", "stop_spinning"]], "cpl_core.database.connection": [[20, 0, 0, "-", "database_connection"], [20, 0, 0, "-", "database_connection_abc"]], "cpl_core.database.connection.database_connection": [[20, 1, 1, "", "DatabaseConnection"]], "cpl_core.database.connection.database_connection.DatabaseConnection": [[20, 2, 1, "", "connect"], [20, 3, 1, "", "cursor"], [20, 3, 1, "", "server"]], "cpl_core.database.connection.database_connection_abc": [[20, 1, 1, "", "DatabaseConnectionABC"]], "cpl_core.database.connection.database_connection_abc.DatabaseConnectionABC": [[20, 2, 1, "", "connect"], [20, 3, 1, "", "cursor"], [20, 3, 1, "", "server"]], "cpl_core.database.context": [[21, 0, 0, "-", "database_context"], [21, 0, 0, "-", "database_context_abc"]], "cpl_core.database.context.database_context": [[21, 1, 1, "", "DatabaseContext"]], "cpl_core.database.context.database_context.DatabaseContext": [[21, 2, 1, "", "connect"], [21, 3, 1, "", "cursor"], [21, 2, 1, "", "save_changes"], [21, 2, 1, "", "select"]], "cpl_core.database.context.database_context_abc": [[21, 1, 1, "", "DatabaseContextABC"]], "cpl_core.database.context.database_context_abc.DatabaseContextABC": [[21, 2, 1, "", "connect"], [21, 3, 1, "", "cursor"], [21, 2, 1, "", "save_changes"], [21, 2, 1, "", "select"]], "cpl_core.database": [[19, 0, 0, "-", "database_settings"], [19, 0, 0, "-", "database_settings_name_enum"]], "cpl_core.database.database_settings": [[19, 1, 1, "", "DatabaseSettings"]], "cpl_core.database.database_settings.DatabaseSettings": [[19, 3, 1, "", "auth_plugin"], [19, 3, 1, "", "buffered"], [19, 3, 1, "", "charset"], [19, 3, 1, "", "database"], [19, 2, 1, "", "from_dict"], [19, 3, 1, "", "host"], [19, 3, 1, "", "password"], [19, 3, 1, "", "port"], [19, 3, 1, "", "use_unicode"], [19, 3, 1, "", "user"]], "cpl_core.database.database_settings_name_enum": [[19, 1, 1, "", "DatabaseSettingsNameEnum"]], "cpl_core.database.database_settings_name_enum.DatabaseSettingsNameEnum": [[19, 4, 1, "", "auth_plugin"], [19, 4, 1, "", "buffered"], [19, 4, 1, "", "charset"], [19, 4, 1, "", "database"], [19, 4, 1, "", "host"], [19, 4, 1, "", "password"], [19, 4, 1, "", "port"], [19, 4, 1, "", "use_unicode"], [19, 4, 1, "", "user"]], "cpl_core.dependency_injection": [[22, 0, 0, "-", "service_collection"], [22, 0, 0, "-", "service_collection_abc"], [22, 0, 0, "-", "service_descriptor"], [22, 0, 0, "-", "service_lifetime_enum"], [22, 0, 0, "-", "service_provider"], [22, 0, 0, "-", "service_provider_abc"]], "cpl_core.dependency_injection.service_collection": [[22, 1, 1, "", "ServiceCollection"]], "cpl_core.dependency_injection.service_collection.ServiceCollection": [[22, 2, 1, "", "add_db_context"], [22, 2, 1, "", "add_logging"], [22, 2, 1, "", "add_pipes"], [22, 2, 1, "", "add_scoped"], [22, 2, 1, "", "add_singleton"], [22, 2, 1, "", "add_transient"], [22, 2, 1, "", "build_service_provider"]], "cpl_core.dependency_injection.service_collection_abc": [[22, 1, 1, "", "ServiceCollectionABC"]], "cpl_core.dependency_injection.service_collection_abc.ServiceCollectionABC": [[22, 2, 1, "", "add_db_context"], [22, 2, 1, "", "add_discord"], [22, 2, 1, "", "add_logging"], [22, 2, 1, "", "add_pipes"], [22, 2, 1, "", "add_scoped"], [22, 2, 1, "", "add_singleton"], [22, 2, 1, "", "add_transient"], [22, 2, 1, "", "add_translation"], [22, 2, 1, "", "build_service_provider"]], "cpl_core.dependency_injection.service_descriptor": [[22, 1, 1, "", "ServiceDescriptor"]], "cpl_core.dependency_injection.service_descriptor.ServiceDescriptor": [[22, 3, 1, "", "base_type"], [22, 3, 1, "", "implementation"], [22, 3, 1, "", "lifetime"], [22, 3, 1, "", "service_type"]], "cpl_core.dependency_injection.service_lifetime_enum": [[22, 1, 1, "", "ServiceLifetimeEnum"]], "cpl_core.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum": [[22, 4, 1, "", "scoped"], [22, 4, 1, "", "singleton"], [22, 4, 1, "", "transient"]], "cpl_core.dependency_injection.service_provider": [[22, 1, 1, "", "ServiceProvider"]], "cpl_core.dependency_injection.service_provider.ServiceProvider": [[22, 2, 1, "", "build_service"], [22, 2, 1, "", "create_scope"], [22, 2, 1, "", "get_service"], [22, 2, 1, "", "set_scope"]], "cpl_core.dependency_injection.service_provider_abc": [[22, 1, 1, "", "ServiceProviderABC"]], "cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC": [[22, 2, 1, "", "build_service"], [22, 2, 1, "", "create_scope"], [22, 2, 1, "", "get_service"], [22, 2, 1, "", "set_scope"]], "cpl_core.environment": [[23, 0, 0, "-", "application_environment"], [23, 0, 0, "-", "application_environment_abc"], [23, 0, 0, "-", "environment_name_enum"]], "cpl_core.environment.application_environment": [[23, 1, 1, "", "ApplicationEnvironment"]], "cpl_core.environment.application_environment.ApplicationEnvironment": [[23, 3, 1, "", "application_name"], [23, 3, 1, "", "customer"], [23, 3, 1, "", "date_time_now"], [23, 3, 1, "", "end_time"], [23, 3, 1, "", "environment_name"], [23, 3, 1, "", "host_name"], [23, 3, 1, "", "runtime_directory"], [23, 2, 1, "", "set_runtime_directory"], [23, 2, 1, "", "set_working_directory"], [23, 3, 1, "", "start_time"], [23, 3, 1, "", "working_directory"]], "cpl_core.environment.application_environment_abc": [[23, 1, 1, "", "ApplicationEnvironmentABC"]], "cpl_core.environment.application_environment_abc.ApplicationEnvironmentABC": [[23, 3, 1, "", "application_name"], [23, 3, 1, "", "customer"], [23, 3, 1, "", "date_time_now"], [23, 3, 1, "", "end_time"], [23, 3, 1, "", "environment_name"], [23, 3, 1, "", "host_name"], [23, 3, 1, "", "runtime_directory"], [23, 2, 1, "", "set_runtime_directory"], [23, 2, 1, "", "set_working_directory"], [23, 3, 1, "", "start_time"], [23, 3, 1, "", "working_directory"]], "cpl_core.environment.environment_name_enum": [[23, 1, 1, "", "EnvironmentNameEnum"]], "cpl_core.environment.environment_name_enum.EnvironmentNameEnum": [[23, 4, 1, "", "development"], [23, 4, 1, "", "production"], [23, 4, 1, "", "staging"], [23, 4, 1, "", "testing"]], "cpl_core.logging": [[24, 0, 0, "-", "logger_abc"], [24, 0, 0, "-", "logger_service"], [24, 0, 0, "-", "logging_level_enum"], [24, 0, 0, "-", "logging_settings"], [24, 0, 0, "-", "logging_settings_name_enum"]], "cpl_core.logging.logger_abc": [[24, 1, 1, "", "LoggerABC"]], "cpl_core.logging.logger_abc.LoggerABC": [[24, 2, 1, "", "debug"], [24, 2, 1, "", "error"], [24, 2, 1, "", "fatal"], [24, 2, 1, "", "header"], [24, 2, 1, "", "info"], [24, 2, 1, "", "trace"], [24, 2, 1, "", "warn"]], "cpl_core.logging.logger_service": [[24, 1, 1, "", "Logger"]], "cpl_core.logging.logger_service.Logger": [[24, 2, 1, "", "create"], [24, 2, 1, "", "debug"], [24, 2, 1, "", "error"], [24, 2, 1, "", "fatal"], [24, 2, 1, "", "header"], [24, 2, 1, "", "info"], [24, 2, 1, "", "trace"], [24, 2, 1, "", "warn"]], "cpl_core.logging.logging_level_enum": [[24, 1, 1, "", "LoggingLevelEnum"]], "cpl_core.logging.logging_level_enum.LoggingLevelEnum": [[24, 4, 1, "", "DEBUG"], [24, 4, 1, "", "ERROR"], [24, 4, 1, "", "FATAL"], [24, 4, 1, "", "INFO"], [24, 4, 1, "", "OFF"], [24, 4, 1, "", "TRACE"], [24, 4, 1, "", "WARN"]], "cpl_core.logging.logging_settings": [[24, 1, 1, "", "LoggingSettings"]], "cpl_core.logging.logging_settings.LoggingSettings": [[24, 3, 1, "", "console"], [24, 3, 1, "", "filename"], [24, 2, 1, "", "from_dict"], [24, 3, 1, "", "level"], [24, 3, 1, "", "path"]], "cpl_core.logging.logging_settings_name_enum": [[24, 1, 1, "", "LoggingSettingsNameEnum"]], "cpl_core.logging.logging_settings_name_enum.LoggingSettingsNameEnum": [[24, 4, 1, "", "console_level"], [24, 4, 1, "", "file_level"], [24, 4, 1, "", "filename"], [24, 4, 1, "", "path"]], "cpl_core.mailing": [[25, 0, 0, "-", "email"], [25, 0, 0, "-", "email_client_abc"], [25, 0, 0, "-", "email_client_service"], [25, 0, 0, "-", "email_client_settings"], [25, 0, 0, "-", "email_client_settings_name_enum"]], "cpl_core.mailing.email": [[25, 1, 1, "", "EMail"]], "cpl_core.mailing.email.EMail": [[25, 2, 1, "", "add_header"], [25, 2, 1, "", "add_receiver"], [25, 3, 1, "", "body"], [25, 2, 1, "", "check_mail"], [25, 2, 1, "", "get_content"], [25, 3, 1, "", "header"], [25, 3, 1, "", "header_list"], [25, 3, 1, "", "receiver"], [25, 3, 1, "", "receiver_list"], [25, 3, 1, "", "subject"], [25, 3, 1, "", "transceiver"]], "cpl_core.mailing.email_client_abc": [[25, 1, 1, "", "EMailClientABC"]], "cpl_core.mailing.email_client_abc.EMailClientABC": [[25, 2, 1, "", "connect"], [25, 2, 1, "", "send_mail"]], "cpl_core.mailing.email_client_service": [[25, 1, 1, "", "EMailClient"]], "cpl_core.mailing.email_client_service.EMailClient": [[25, 2, 1, "", "connect"], [25, 2, 1, "", "create"], [25, 2, 1, "", "login"], [25, 2, 1, "", "send_mail"]], "cpl_core.mailing.email_client_settings": [[25, 1, 1, "", "EMailClientSettings"]], "cpl_core.mailing.email_client_settings.EMailClientSettings": [[25, 3, 1, "", "credentials"], [25, 2, 1, "", "from_dict"], [25, 3, 1, "", "host"], [25, 3, 1, "", "port"], [25, 3, 1, "", "user_name"]], "cpl_core.mailing.email_client_settings_name_enum": [[25, 1, 1, "", "EMailClientSettingsNameEnum"]], "cpl_core.mailing.email_client_settings_name_enum.EMailClientSettingsNameEnum": [[25, 4, 1, "", "credentials"], [25, 4, 1, "", "host"], [25, 4, 1, "", "port"], [25, 4, 1, "", "user_name"]], "cpl_core": [[26, 0, 0, "-", "pipes"]], "cpl_core.pipes": [[26, 1, 1, "", "VersionInfo"], [26, 0, 0, "-", "bool_pipe"], [26, 0, 0, "-", "first_char_to_lower_pipe"], [26, 0, 0, "-", "first_to_upper_pipe"], [26, 0, 0, "-", "ip_address_pipe"], [26, 0, 0, "-", "pipe_abc"], [26, 0, 0, "-", "to_camel_case_pipe"], [26, 0, 0, "-", "to_snake_case_pipe"], [26, 0, 0, "-", "version_pipe"]], "cpl_core.pipes.VersionInfo": [[26, 4, 1, "", "major"], [26, 4, 1, "", "micro"], [26, 4, 1, "", "minor"]], "cpl_core.pipes.bool_pipe": [[26, 1, 1, "", "BoolPipe"]], "cpl_core.pipes.bool_pipe.BoolPipe": [[26, 2, 1, "", "transform"]], "cpl_core.pipes.first_char_to_lower_pipe": [[26, 1, 1, "", "FirstCharToLowerPipe"]], "cpl_core.pipes.first_char_to_lower_pipe.FirstCharToLowerPipe": [[26, 2, 1, "", "transform"]], "cpl_core.pipes.first_to_upper_pipe": [[26, 1, 1, "", "FirstToUpperPipe"]], "cpl_core.pipes.first_to_upper_pipe.FirstToUpperPipe": [[26, 2, 1, "", "transform"]], "cpl_core.pipes.ip_address_pipe": [[26, 1, 1, "", "IPAddressPipe"]], "cpl_core.pipes.ip_address_pipe.IPAddressPipe": [[26, 2, 1, "", "transform"]], "cpl_core.pipes.pipe_abc": [[26, 1, 1, "", "PipeABC"]], "cpl_core.pipes.pipe_abc.PipeABC": [[26, 2, 1, "", "transform"]], "cpl_core.pipes.to_camel_case_pipe": [[26, 1, 1, "", "ToCamelCasePipe"]], "cpl_core.pipes.to_camel_case_pipe.ToCamelCasePipe": [[26, 2, 1, "", "transform"]], "cpl_core.pipes.to_snake_case_pipe": [[26, 1, 1, "", "ToSnakeCasePipe"]], "cpl_core.pipes.to_snake_case_pipe.ToSnakeCasePipe": [[26, 2, 1, "", "transform"]], "cpl_core.pipes.version_pipe": [[26, 1, 1, "", "VersionPipe"]], "cpl_core.pipes.version_pipe.VersionPipe": [[26, 2, 1, "", "transform"]], "cpl_core.time": [[27, 0, 0, "-", "time_format_settings"], [27, 0, 0, "-", "time_format_settings_names_enum"]], "cpl_core.time.time_format_settings": [[27, 1, 1, "", "TimeFormatSettings"]], "cpl_core.time.time_format_settings.TimeFormatSettings": [[27, 3, 1, "", "date_format"], [27, 3, 1, "", "date_time_format"], [27, 3, 1, "", "date_time_log_format"], [27, 2, 1, "", "from_dict"], [27, 3, 1, "", "time_format"]], "cpl_core.time.time_format_settings_names_enum": [[27, 1, 1, "", "TimeFormatSettingsNamesEnum"]], "cpl_core.time.time_format_settings_names_enum.TimeFormatSettingsNamesEnum": [[27, 4, 1, "", "date_format"], [27, 4, 1, "", "date_time_format"], [27, 4, 1, "", "date_time_log_format"], [27, 4, 1, "", "time_format"]], "cpl_core.utils": [[28, 0, 0, "-", "credential_manager"], [28, 0, 0, "-", "pip"], [28, 0, 0, "-", "string"]], "cpl_core.utils.credential_manager": [[28, 1, 1, "", "CredentialManager"]], "cpl_core.utils.credential_manager.CredentialManager": [[28, 2, 1, "", "build_string"], [28, 2, 1, "", "decrypt"], [28, 2, 1, "", "encrypt"]], "cpl_core.utils.pip": [[28, 1, 1, "", "Pip"]], "cpl_core.utils.pip.Pip": [[28, 2, 1, "", "get_executable"], [28, 2, 1, "", "get_outdated"], [28, 2, 1, "", "get_package"], [28, 2, 1, "", "install"], [28, 2, 1, "", "reset_executable"], [28, 2, 1, "", "set_executable"], [28, 2, 1, "", "uninstall"]], "cpl_core.utils.string": [[28, 1, 1, "", "String"]], "cpl_core.utils.string.String": [[28, 2, 1, "", "convert_to_camel_case"], [28, 2, 1, "", "convert_to_snake_case"], [28, 2, 1, "", "first_to_lower"], [28, 2, 1, "", "first_to_upper"], [28, 2, 1, "", "random_string"]], "cpl_query": [[30, 0, 0, "-", "exceptions"]], "cpl_query.exceptions": [[30, 5, 1, "", "ArgumentNoneException"], [30, 1, 1, "", "ExceptionArgument"], [30, 5, 1, "", "IndexOutOfRangeException"], [30, 5, 1, "", "InvalidTypeException"], [30, 5, 1, "", "WrongTypeException"]], "cpl_query.exceptions.ExceptionArgument": [[30, 4, 1, "", "func"], [30, 4, 1, "", "index"], [30, 4, 1, "", "list"], [30, 4, 1, "", "type"], [30, 4, 1, "", "value"]], "cpl_query.extension": [[31, 0, 0, "-", "iterable"], [31, 0, 0, "-", "iterable_abc"], [31, 0, 0, "-", "list"], [31, 0, 0, "-", "ordered_iterable"], [31, 0, 0, "-", "ordered_iterable_abc"]], "cpl_query.extension.iterable": [[31, 1, 1, "", "Iterable"]], "cpl_query.extension.iterable.Iterable": [[31, 2, 1, "", "all"], [31, 2, 1, "", "any"], [31, 2, 1, "", "average"], [31, 2, 1, "", "contains"], [31, 2, 1, "", "count"], [31, 2, 1, "", "distinct"], [31, 2, 1, "", "element_at"], [31, 2, 1, "", "element_at_or_default"], [31, 2, 1, "", "first"], [31, 2, 1, "", "first_or_default"], [31, 2, 1, "", "for_each"], [31, 2, 1, "", "last"], [31, 2, 1, "", "last_or_default"], [31, 2, 1, "", "max"], [31, 2, 1, "", "min"], [31, 2, 1, "", "order_by"], [31, 2, 1, "", "order_by_descending"], [31, 2, 1, "", "reverse"], [31, 2, 1, "", "single"], [31, 2, 1, "", "single_or_default"], [31, 2, 1, "", "skip"], [31, 2, 1, "", "skip_last"], [31, 2, 1, "", "sum"], [31, 2, 1, "", "take"], [31, 2, 1, "", "take_last"], [31, 2, 1, "", "where"]], "cpl_query.extension.iterable_abc": [[31, 1, 1, "", "IterableABC"]], "cpl_query.extension.iterable_abc.IterableABC": [[31, 2, 1, "", "all"], [31, 2, 1, "", "any"], [31, 2, 1, "", "append"], [31, 2, 1, "", "average"], [31, 2, 1, "", "contains"], [31, 2, 1, "", "count"], [31, 2, 1, "", "distinct"], [31, 2, 1, "", "element_at"], [31, 2, 1, "", "element_at_or_default"], [31, 2, 1, "", "extend"], [31, 2, 1, "", "first"], [31, 2, 1, "", "first_or_default"], [31, 2, 1, "", "for_each"], [31, 2, 1, "", "last"], [31, 2, 1, "", "last_or_default"], [31, 2, 1, "", "max"], [31, 2, 1, "", "min"], [31, 2, 1, "", "order_by"], [31, 2, 1, "", "order_by_descending"], [31, 2, 1, "", "reverse"], [31, 2, 1, "", "single"], [31, 2, 1, "", "single_or_default"], [31, 2, 1, "", "skip"], [31, 2, 1, "", "skip_last"], [31, 2, 1, "", "sum"], [31, 2, 1, "", "take"], [31, 2, 1, "", "take_last"], [31, 2, 1, "", "to_list"], [31, 3, 1, "", "type"], [31, 2, 1, "", "where"]], "cpl_query.extension.list": [[31, 1, 1, "", "List"]], "cpl_query.extension.ordered_iterable": [[31, 1, 1, "", "OrderedIterable"]], "cpl_query.extension.ordered_iterable.OrderedIterable": [[31, 2, 1, "", "then_by"], [31, 2, 1, "", "then_by_descending"]], "cpl_query.extension.ordered_iterable_abc": [[31, 1, 1, "", "OrderedIterableABC"]], "cpl_query.extension.ordered_iterable_abc.OrderedIterableABC": [[31, 2, 1, "", "then_by"], [31, 2, 1, "", "then_by_descending"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:property", "4": "py:attribute", "5": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "property", "Python property"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "exception", "Python exception"]}, "titleterms": {"cpl": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 26, 33, 34, 35, 36], "add": 0, "content": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 26, 36, 37], "descript": [0, 1, 2, 3, 4, 5, 7, 8, 10], "argument": [0, 2, 3, 4, 8, 10, 41], "flag": [0, 4, 5, 8, 10, 11], "build": 1, "gener": 2, "schemat": [2, 6], "help": 3, "instal": [4, 37], "new": 5, "project": [5, 36], "type": 5, "cli": [6, 14, 37], "overview": [6, 34], "command": 6, "refer": [6, 14, 15, 29], "tabl": [6, 36, 37], "basic": 6, "workflow": 6, "languag": 6, "syntax": 6, "rel": 6, "path": 6, "publish": 7, "remov": 8, "start": [9, 32, 36, 37], "uninstal": 10, "updat": 11, "version": 12, "contribut": 13, "found": 13, "bug": 13, "featur": [13, 33, 34], "request": 13, "submiss": 13, "guidelin": 13, "submit": 13, "an": 13, "issu": 13, "pull": 13, "review": 13, "address": 13, "feedback": 13, "code": 13, "rule": 13, "licens": 13, "api": 15, "cpl_core": [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 40], "applic": [16, 43], "application_abc": 16, "application_build": 16, "application_builder_abc": 16, "startup_abc": 16, "configur": 17, "configuration_abc": 17, "configuration_model_abc": 17, "configuration_variable_name_enum": 17, "console_argu": 17, "consol": [18, 37, 40, 41], "background_color_enum": 18, "console_cal": 18, "foreground_color_enum": 18, "spinner_thread": 18, "databas": [19, 20, 21], "submodul": [19, 26], "database_model": 19, "database_set": 19, "database_settings_name_enum": 19, "connect": 20, "database_connect": 20, "database_connection_abc": 20, "context": 21, "database_context": 21, "database_context_abc": 21, "dependency_inject": 22, "service_collect": 22, "service_collection_abc": 22, "service_descriptor": 22, "service_lifetime_enum": 22, "service_provid": 22, "service_provider_abc": 22, "environ": [23, 37], "application_environ": 23, "application_environment_abc": 23, "environment_name_enum": 23, "log": 24, "logger_abc": 24, "logger_servic": 24, "logging_level_enum": 24, "logging_set": 24, "logging_settings_name_enum": 24, "mail": [25, 46], "email": 25, "email_client_abc": 25, "email_client_servic": 25, "email_client_set": 25, "email_client_settings_name_enum": 25, "pipe": 26, "bool_pip": 26, "modul": 26, "first_char_to_lower_pip": 26, "first_to_upper_pip": 26, "ip_address_pip": 26, "pipe_abc": 26, "to_camel_case_pip": 26, "to_snake_case_pip": 26, "version_pip": 26, "core": 26, "sh": 26, "edraft": 26, "common": 26, "python": 26, "librari": [26, 37], "time": 27, "time_format_set": 27, "time_format_settings_names_enum": 27, "util": 28, "credential_manag": 28, "pip": 28, "string": 28, "queri": [29, 37], "cpl_queri": [30, 31], "except": 30, "extens": 31, "iterable_abc": 31, "iter": 31, "list": 31, "ordered_iterable_abc": 31, "ordered_iter": 31, "get": [32, 36], "introduct": [33, 34], "doc": [33, 34], "manual": 33, "explor": 34, "prerequisit": [36, 37], "creat": [36, 37, 42], "menu": 36, "what": [36, 37], "s": [36, 37], "next": [36, 37], "set": 37, "up": 37, "local": 37, "workspac": 37, "packag": 37, "initi": 37, "app": 37, "tutori": 38, "us": [39, 40, 45], "appset": 39, "json": 39, "com": [39, 40, 41, 42, 43, 44, 45, 46], "soon": [39, 40, 41, 42, 43, 44, 45, 46], "handl": 41, "startup": [42, 44], "class": 42, "extend": [43, 44], "builtin": 45, "logger": 45, "send": 46}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}}) \ No newline at end of file +Search.setIndex({"docnames": ["cli.add", "cli.build", "cli.generate", "cli.help", "cli.install", "cli.new", "cli.overview", "cli.publish", "cli.remove", "cli.run", "cli.start", "cli.uninstall", "cli.update", "cli.version", "contributing", "cpl_cli", "cpl_core", "cpl_core.application", "cpl_core.configuration", "cpl_core.console", "cpl_core.database", "cpl_core.database.connection", "cpl_core.database.context", "cpl_core.dependency_injection", "cpl_core.environment", "cpl_core.logging", "cpl_core.mailing", "cpl_core.pipes", "cpl_core.time", "cpl_core.utils", "cpl_discord", "cpl_discord.application", "cpl_discord.command", "cpl_discord.configuration", "cpl_discord.container", "cpl_discord.events", "cpl_discord.helper", "cpl_discord.service", "cpl_query", "cpl_query.base", "cpl_query.enumerable", "cpl_query.extension", "cpl_query.iterable", "cpl_translation", "getting_started", "index", "introduction", "modules", "quickstart", "setup", "tutorials", "tutorials.appsettings", "tutorials.console", "tutorials.console-arguments", "tutorials.create-startup", "tutorials.extend-application", "tutorials.extend-startup", "tutorials.logging", "tutorials.mail"], "filenames": ["cli.add.md", "cli.build.md", "cli.generate.md", "cli.help.md", "cli.install.md", "cli.new.md", "cli.overview.md", "cli.publish.md", "cli.remove.md", "cli.run.md", "cli.start.md", "cli.uninstall.md", "cli.update.md", "cli.version.md", "contributing.md", "cpl_cli.rst", "cpl_core.rst", "cpl_core.application.rst", "cpl_core.configuration.rst", "cpl_core.console.rst", "cpl_core.database.rst", "cpl_core.database.connection.rst", "cpl_core.database.context.rst", "cpl_core.dependency_injection.rst", "cpl_core.environment.rst", "cpl_core.logging.rst", "cpl_core.mailing.rst", "cpl_core.pipes.rst", "cpl_core.time.rst", "cpl_core.utils.rst", "cpl_discord.rst", "cpl_discord.application.rst", "cpl_discord.command.rst", "cpl_discord.configuration.rst", "cpl_discord.container.rst", "cpl_discord.events.rst", "cpl_discord.helper.rst", "cpl_discord.service.rst", "cpl_query.rst", "cpl_query.base.rst", "cpl_query.enumerable.rst", "cpl_query.extension.rst", "cpl_query.iterable.rst", "cpl_translation.rst", "getting_started.rst", "index.rst", "introduction.md", "modules.rst", "quickstart.md", "setup.md", "tutorials.rst", "tutorials.appsettings.md", "tutorials.console.md", "tutorials.console-arguments.md", "tutorials.create-startup.md", "tutorials.extend-application.md", "tutorials.extend-startup.md", "tutorials.logging.md", "tutorials.mail.md"], "titles": ["cpl add", "cpl build", "cpl generate", "cpl help", "cpl install", "cpl new", "CLI Overview and Command Reference", "cpl publish", "cpl remove", "cpl run", "cpl start", "cpl uninstall", "cpl update", "cpl version", "Contributing to CPL", "CLI reference", "API reference", "cpl_core.application", "cpl_core.configuration", "cpl_core.console", "cpl_core.database", "cpl_core.database.connection", "cpl_core.database.context", "cpl_core.dependency_injection", "cpl_core.environment", "cpl_core.logging", "cpl_core.mailing", "cpl_core.pipes", "cpl_core.time", "cpl_core.utils", "Discord reference", "cpl_discord.application", "cpl_discord.command", "cpl_discord.configuration", "cpl_discord.container", "cpl_discord.events", "cpl_discord.helper", "cpl_discord.service", "Query reference", "cpl_query.base", "cpl_query.enumerable", "cpl_query.extension", "cpl_query.iterable", "Translation reference", "Getting started", "Introduction to the CPL Docs", "Introduction to the CPL Docs", "cpl", "Getting started with CPL", "Setting up the local environment and workspace", "Tutorials", "Using appsettings.json", "Use cpl_core.console.Console", "Handle console arguments", "Create startup class", "Extend application", "Extend startup", "Use builtin logger", "Send mails"], "terms": {"remov": [0, 6, 7, 15, 40, 42, 47], "project": [0, 1, 4, 6, 7, 8, 9, 10, 11, 12, 14, 15, 44, 47, 49], "from": [0, 6, 7, 8, 9, 10, 11, 13, 14, 17, 18, 19, 20, 34, 39, 42, 45, 46, 48], "workspac": [0, 1, 5, 6, 8, 44, 47], "sourc": [0, 1, 7, 9, 10, 14, 29, 48, 49], "target": [0, 1], "A": [0, 5, 14, 34], "refer": [0, 8, 45, 46, 47], "given": [0, 1, 4, 6, 7, 11, 18, 19, 20, 23, 29, 39, 42], "If": [0, 5, 8, 14, 19, 49], "you": [0, 1, 6, 8, 14, 34, 45, 46, 48, 49], "call": [0, 8, 17, 18, 19, 34, 39], "command": [0, 1, 3, 4, 5, 7, 8, 11, 12, 14, 15, 29, 30, 45, 46, 47, 49], "can": [0, 1, 6, 7, 8, 14, 34, 45, 49], "us": [0, 1, 2, 5, 6, 7, 8, 14, 17, 19, 26, 29, 44, 45, 46, 47, 48, 49, 50], "name": [0, 1, 2, 5, 6, 7, 8, 18, 24, 25, 29, 32, 34, 49], "otherwis": [0, 8, 19], "path": [0, 1, 2, 5, 7, 8, 15, 18, 24, 25, 47, 49], "must": [0, 1, 6, 8, 14, 19], "specifi": [0, 4, 5, 6, 8, 9, 11, 12, 18, 19], "valu": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 18, 19, 20, 23, 24, 25, 26, 27, 28, 39, 40, 41, 42, 43], "type": [0, 1, 2, 3, 4, 7, 8, 9, 10, 11, 15, 17, 18, 23, 34, 36, 37, 39, 40, 41, 42, 47], "which": [0, 6, 9, 18, 19, 29, 49], "ha": [0, 19], "ad": [0, 14], "str": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 29, 33, 34, 35, 37, 43, 48], "referenc": 0, "simul": [0, 4, 8, 11, 12], "whether": [0, 4, 5, 8, 11, 12, 18], "copi": [1, 39], "an": [1, 6, 7, 17, 18, 19, 20, 23, 24, 25, 26, 28, 39, 48, 49], "python": [1, 14, 29, 45, 46, 48, 49], "app": [1, 6, 17, 44, 45, 46, 47, 48], "output": [1, 6, 7, 18, 19, 45, 46, 48, 49], "directori": [1, 6, 7, 24, 45, 46, 48], "execut": [1, 6, 7, 18, 29], "within": [1, 6, 14], "b": [1, 6, 14], "The": [1, 2, 4, 5, 6, 7, 8, 11, 14, 23, 26, 29, 34, 37, 45, 46, 48, 49], "consol": [1, 3, 5, 6, 7, 16, 18, 25, 44, 45, 46, 47, 48, 50], "librari": [1, 5, 6, 7, 44, 45, 46, 47], "all": [1, 7, 13, 14, 18, 34, 39], "includ": [1, 14, 49], "file": [1, 2, 6, 7, 8, 10, 14, 18, 45, 49], "run": [1, 5, 10, 17, 18, 19, 22, 29, 39, 45, 46, 48, 49], "directli": [1, 14], "prepar": [1, 6, 7, 14, 17, 45], "publish": [1, 6, 15, 45, 47, 49], "them": 1, "argument": [1, 5, 6, 7, 9, 10, 12, 15, 18, 19, 29, 39, 44, 45, 46, 47, 50], "base": [2, 5, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 40, 41, 42, 43, 45, 46, 47, 48], "g": [2, 5, 6], "first": [2, 5, 6, 14, 27, 29, 34, 39, 45, 46], "element": [2, 5, 19, 22, 34, 39, 40, 42], "src": [2, 5, 48], "For": [2, 5, 14], "exampl": [2, 5], "c": [2, 5, 45], "test": [2, 5, 14, 24, 45, 46, 48], "creat": [2, 5, 6, 7, 14, 17, 18, 19, 23, 25, 26, 29, 39, 44, 45, 46, 47, 50], "would": [2, 5, 14], "abc": [2, 17, 18, 21, 22, 23, 24, 25, 26, 27, 32, 35, 37, 39, 40, 42, 43], "abstract": [2, 17, 18, 21, 22, 23, 24, 25, 26, 27, 31, 35, 37, 39, 43], "class": [2, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50], "enum": [2, 18, 19, 20, 23, 24, 25, 26, 28], "pipe": [2, 16, 23, 45, 46, 47], "servic": [2, 5, 17, 18, 23, 25, 26, 30, 31, 45, 46, 47, 48], "set": [2, 9, 17, 18, 19, 20, 22, 23, 24, 25, 26, 28, 29, 33, 40, 43, 44, 47, 48], "configmodel": 2, "thread": [2, 19, 30, 47], "valid": [2, 26, 48], "list": [3, 6, 13, 18, 19, 22, 23, 26, 27, 29, 34, 35, 36, 37, 38, 39, 40, 42, 43, 45, 47], "avail": [3, 6, 14], "short": [3, 6], "h": [3, 6], "show": [3, 19], "messag": [3, 19, 25, 35, 37], "thi": [3, 14, 17, 34, 45, 46, 48, 49], "packag": [4, 5, 6, 11, 13, 29, 44, 45, 46, 47, 48], "via": [4, 11, 14, 45, 46], "pip": [4, 11, 13, 16, 45, 46, 47, 48, 49], "i": [4, 6, 48], "without": [4, 6, 14, 39], "deped": 4, "your": [4, 6, 9, 10, 14, 45, 46, 49], "dev": [4, 9, 10, 11], "develop": [4, 6, 11, 14, 24, 45, 46, 48, 49], "mode": [4, 11], "virtual": [4, 11], "gener": [5, 6, 7, 15, 45, 47, 48, 49], "initi": [5, 44, 47], "add": [5, 6, 14, 15, 18, 23, 26, 42, 47, 48], "n": [5, 6, 48, 49], "see": [5, 14, 21, 34, 48, 49], "simpl": [5, 45, 46, 49], "applic": [5, 9, 10, 16, 19, 24, 25, 26, 30, 44, 45, 46, 47, 48, 49, 50], "async": [5, 17, 35, 37], "startup": [5, 17, 44, 45, 46, 47, 50], "provid": [5, 14, 17, 23, 34, 45, 46, 48, 49], "noth": 5, "venv": 5, "instal": [6, 13, 15, 29, 44, 47, 48], "cpl": [6, 15, 23, 44, 49], "To": [6, 9, 10, 14, 48, 49], "build": [6, 7, 9, 10, 15, 17, 29, 45, 47, 48, 49], "serv": 6, "new": [6, 14, 15, 19, 34, 47, 48, 49], "server": [6, 21, 26, 45, 46, 49], "go": [6, 14, 45], "parent": 6, "follow": [6, 14, 48, 49], "my": [6, 14, 49], "cd": [6, 49], "start": [6, 9, 15, 39, 45, 46, 47], "In": [6, 14, 48], "termin": [6, 19, 48, 49], "commandnameoralia": 6, "requiredarg": 6, "optionalsarg": 6, "most": [6, 34, 48, 49], "some": 6, "option": [6, 9, 14, 18, 19, 20, 23, 25, 26, 29, 34, 35, 37, 39, 40, 41, 42, 45, 46, 48], "have": [6, 14, 34, 48, 49], "alias": [6, 18], "ar": [6, 7, 14, 18, 34], "shown": [6, 18, 49], "statement": [6, 22], "each": [6, 18, 39], "prefix": [6, 18, 33], "absolut": 6, "current": [6, 24, 34], "work": [6, 14, 24, 45, 46], "either": 6, "root": 6, "take": [6, 18, 39], "artifact": 6, "addit": [6, 14], "ani": [6, 19, 27, 32, 37, 39, 43], "defin": [6, 18, 19, 40, 42, 49], "its": [6, 14], "own": 6, "suppli": 6, "same": 6, "format": [6, 25, 28, 39], "immedi": 6, "alia": 6, "descript": [6, 9, 10, 12, 15, 34, 47], "dist": [6, 7, 9, 10], "help": [6, 14, 15, 45, 46, 47], "With": 6, "depend": [6, 12, 45, 46, 48], "p": [6, 7], "setup": [6, 7, 46, 49], "py": [6, 7, 29, 45, 48], "r": [6, 8, 9], "s": [6, 10, 14, 34, 44, 47], "restart": [6, 10, 49], "chang": [6, 10, 14, 22, 48], "uninstal": [6, 15, 29, 47], "ui": [6, 11, 34], "updat": [6, 14, 15, 47], "u": [6, 12], "version": [6, 15, 34, 47], "v": [6, 13], "data": [7, 19, 34, 39], "cpl_core": [7, 16, 44, 47, 48, 49, 50], "json": [7, 18, 44, 45, 46, 47, 48, 49, 50], "delet": 8, "onc": 9, "paramet": [9, 42], "default": [9, 19, 34, 49], "after": [9, 10, 35, 37, 39], "cli": [13, 44, 45, 46, 47, 48], "we": [14, 48], "love": 14, "make": [14, 49], "even": 14, "better": 14, "than": [14, 39], "todai": 14, "As": 14, "contributor": 14, "here": [14, 49], "like": [14, 45, 48], "issus": 14, "find": 14, "our": 14, "gitea": 14, "repositori": 14, "fix": 14, "implement": [14, 23, 39, 40, 41], "pleas": 14, "consid": 14, "size": 14, "order": [14, 34, 39], "determin": 14, "right": 14, "step": 14, "proce": 14, "major": 14, "open": [14, 48, 49], "outlin": 14, "propos": 14, "so": [14, 49], "discuss": 14, "process": 14, "allow": 14, "coordin": [14, 19], "effort": 14, "prevent": 14, "duplic": 14, "craft": 14, "successfulli": 14, "accept": 14, "note": [14, 34], "topic": [14, 34], "document": 14, "significantli": 14, "re": 14, "write": [14, 19, 25, 45, 46], "count": [14, 39], "small": 14, "befor": [14, 19, 35, 37, 40], "search": [14, 18, 23], "tracker": 14, "mayb": 14, "problem": 14, "alreadi": [14, 48, 49], "exist": [14, 40], "might": 14, "inform": [14, 25, 49], "workaround": 14, "readili": 14, "want": [14, 48], "soon": [14, 44, 47, 50], "possibl": [14, 18], "need": [14, 34, 48, 49], "reproduc": 14, "confirm": 14, "requir": [14, 34], "minim": 14, "reproduct": 14, "scenario": 14, "give": 14, "wealth": 14, "import": [14, 48], "back": [14, 19], "forth": 14, "question": 14, "quickli": 14, "point": [14, 17, 19], "out": [14, 48, 49], "well": 14, "save": [14, 18, 22], "maintain": 14, "time": [14, 16, 25, 34, 47], "ultim": 14, "abl": 14, "more": [14, 39, 49], "often": 14, "themselv": 14, "while": 14, "understand": [14, 45, 46, 48, 49], "sometim": 14, "hard": 14, "extract": 14, "essenti": [14, 48], "bit": 14, "larger": 14, "codebas": 14, "realli": 14, "isol": 14, "unfortun": 14, "investig": 14, "don": [14, 48], "t": [14, 39, 40, 41, 42, 48], "hear": 14, "close": [14, 19], "doesn": 14, "enough": 14, "info": [14, 25, 45, 46], "pr": 14, "relat": 14, "Be": 14, "sure": 14, "describ": 14, "design": 14, "d": 14, "upfront": 14, "ensur": 14, "readi": [14, 49], "fork": 14, "sh": [14, 49], "edraft": [14, 49], "de": [14, 49], "repo": 14, "git": 14, "branch": 14, "checkout": 14, "master": 14, "patch": 14, "appropri": 14, "case": [14, 27, 29, 48], "commit": 14, "line": [14, 19, 48], "automat": 14, "rm": 14, "edit": 14, "push": 14, "origin": 14, "send": [14, 26, 44, 45, 46, 47, 50], "team": 14, "reserv": 14, "commun": 14, "member": [14, 30, 35, 37, 47], "who": 14, "haven": 14, "been": 14, "good": 14, "citizen": 14, "Such": 14, "behavior": 14, "appli": 14, "outsid": 14, "manag": [14, 34, 45, 46], "channel": [14, 34, 35, 37], "ask": 14, "fixup": 14, "head": 14, "That": 14, "thank": 14, "consist": 14, "throughout": 14, "keep": 14, "mind": 14, "one": [14, 39], "unit": 14, "public": 14, "api": [14, 45, 46, 47], "method": 14, "pep": 14, "8": 14, "style": 14, "guid": 14, "By": 14, "agre": 14, "under": [14, 34], "mit": 14, "overview": [15, 47, 49], "tabl": [15, 19, 29, 44, 45, 46, 47], "content": [15, 44, 47], "basic": [15, 47, 48, 49], "workflow": [15, 47], "languag": [15, 43, 47], "syntax": [15, 47], "rel": [15, 47], "schemat": [15, 47], "flag": [15, 40, 47], "application_abc": [16, 47], "application_build": [16, 47], "application_builder_abc": [16, 47], "startup_abc": [16, 47], "configur": [16, 17, 23, 30, 45, 46, 47], "configuration_abc": [16, 17, 23, 47], "configuration_model_abc": [16, 47], "configuration_variable_name_enum": [16, 47], "console_argu": [16, 47], "background_color_enum": [16, 47], "console_cal": [16, 47], "foreground_color_enum": [16, 47], "spinner_thread": [16, 47], "databas": [16, 23, 47], "connect": [16, 20, 22, 26, 37, 47], "database_connect": [16, 20, 47], "database_connection_abc": [16, 20, 47], "context": [16, 20, 23, 35, 37, 47, 49], "database_context": [16, 20, 47], "database_context_abc": [16, 20, 23, 47], "database_model": [16, 47], "database_set": [16, 21, 22, 47], "database_settings_name_enum": [16, 47], "dependency_inject": [16, 17, 47], "service_collect": [16, 37, 47], "service_collection_abc": [16, 17, 47], "service_descriptor": [16, 47], "service_lifetime_enum": [16, 47], "service_provid": [16, 47], "service_provider_abc": [16, 17, 47], "environ": [16, 17, 18, 25, 26, 44, 45, 46, 47], "application_environ": [16, 47], "application_environment_abc": [16, 17, 25, 26, 47], "environment_name_enum": [16, 47], "log": [16, 26, 45, 46, 47], "logger_abc": [16, 26, 47], "logger_servic": [16, 47], "logging_level_enum": [16, 47], "logging_set": [16, 47], "logging_settings_name_enum": [16, 47], "mail": [16, 44, 45, 46, 47, 50], "email": [16, 47], "email_client_abc": [16, 47], "email_client_servic": [16, 47], "email_client_set": [16, 47], "email_client_settings_name_enum": [16, 47], "bool_pip": [16, 47], "first_char_to_lower_pip": [16, 47], "first_to_upper_pip": [16, 47], "ip_address_pip": [16, 47], "pipe_abc": [16, 47], "to_camel_case_pip": [16, 47], "to_snake_case_pip": [16, 47], "version_pip": [16, 47], "time_format_set": [16, 25, 47], "time_format_settings_names_enum": [16, 47], "util": [16, 45, 46, 47], "credential_manag": [16, 47], "string": [16, 19, 21, 25, 26, 27, 45, 46, 47, 48], "applicationabc": [17, 31], "config": [17, 23, 31, 37], "configurationabc": [17, 18, 23, 31, 37], "serviceproviderabc": [17, 18, 23, 31], "contain": [17, 30, 36, 39, 47], "object": [17, 18, 19, 23, 26, 29, 34, 36, 39, 42, 45, 46], "load": [17, 43], "appset": [17, 44, 47, 48, 50], "instanc": [17, 23], "main": [17, 48], "custom": [17, 18, 24, 45, 46], "entri": [17, 19], "run_async": 17, "applicationbuild": 17, "applicationbuilderabc": 17, "build_async": 17, "use_extens": 17, "extens": [17, 38, 39, 42, 45, 46, 47], "union": [17, 18, 19, 23, 35, 36, 37, 39], "applicationextensionabc": 17, "startupextensionabc": 17, "use_startup": 17, "startupabc": 17, "arg": [17, 18, 19, 22, 27, 29, 32, 35, 37, 43], "configure_configur": 17, "env": [17, 25, 37], "applicationenvironmentabc": [17, 18, 24, 25, 26, 37], "configure_servic": 17, "servicecollectionabc": [17, 23, 37], "add_configur": 18, "key_typ": 18, "configurationmodelabc": [18, 20, 25, 26, 28, 33, 43], "add_console_argu": 18, "argumentabc": 18, "known": 18, "consoleargumentabc": 18, "add_environment_vari": 18, "read": [18, 19, 48], "variabl": [18, 29], "add_json_fil": 18, "bool": [18, 19, 20, 26, 27, 34, 39, 40], "none": [18, 19, 23, 25, 26, 29, 39, 40, 41, 42], "true": 18, "error": [18, 19, 25, 35, 37, 45, 46], "should": [18, 48, 49], "occur": 18, "wa": [18, 49], "found": [18, 39], "place": 18, "store": 18, "properti": [18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 33, 34, 37, 39, 42, 43], "additional_argu": 18, "argument_error_funct": 18, "callabl": [18, 19, 23, 39], "argument_abc": 18, "create_console_argu": 18, "arg_typ": 18, "argumenttypeenum": 18, "token": [18, 33], "kwarg": [18, 19, 32, 35, 37], "begin": 18, "value_token": 18, "were": 18, "is_value_token_opt": 18, "runnabl": 18, "when": [18, 19, 35, 37, 39], "for_each_argu": 18, "iter": [18, 38, 39, 40, 41, 47], "through": [18, 48], "function": [18, 19, 29, 39, 40, 42, 45, 48], "get_configur": 18, "search_typ": 18, "return": [18, 19, 23, 26, 34, 39, 48], "parse_console_argu": 18, "invalid": 18, "from_dict": [18, 20, 25, 26, 28, 33, 43], "dict": [18, 19, 20, 25, 26, 27, 28, 33, 43], "convert": [18, 25, 26, 27, 28, 29, 33, 36, 39, 40, 41, 42, 43, 45, 46], "attribut": [18, 20, 25, 26, 28, 33, 43], "configurationvariablenameenum": 18, "enumer": [18, 19, 20, 23, 24, 25, 26, 28, 38, 41, 42, 47], "static": [18, 26, 29, 36], "to_list": [18, 39], "backgroundcolorenum": 19, "blue": 19, "on_blu": 19, "cyan": 19, "on_cyan": 19, "on_default": 19, "green": 19, "on_green": 19, "grei": 19, "on_grei": 19, "magenta": 19, "on_magenta": 19, "red": 19, "on_r": 19, "white": 19, "on_whit": 19, "yellow": 19, "on_yellow": 19, "handl": [19, 29, 44, 45, 46, 47, 50], "input": [19, 45, 46, 48], "background_color": 19, "bytes_or_buff": 19, "encod": [19, 29], "expos": 19, "buffer": [19, 20], "decod": [19, 29], "handler": 19, "result": [19, 26, 29, 39], "__str__": 19, "repr": 19, "sy": 19, "getdefaultencod": 19, "strict": 19, "classmethod": [19, 29, 39], "banner": [19, 45, 46], "print": [19, 48], "clear": 19, "color_reset": 19, "reset": [19, 29, 39], "color": 19, "disabl": 19, "interact": 19, "enabl": [19, 48], "tb": 19, "traceback": 19, "foreground_color": 19, "read_lin": 19, "next": [19, 39, 44, 47], "reset_cursor_posit": 19, "cursor": [19, 21, 22], "posit": [19, 34], "select": [19, 22, 39, 48], "char": [19, 27, 29], "header_foreground_color": 19, "foregroundcolorenum": 19, "header_background_color": 19, "option_foreground_color": 19, "option_background_color": 19, "cursor_foreground_color": 19, "cursor_background_color": 19, "menu": [19, 44, 45, 46, 47], "charact": 19, "header": [19, 25, 26], "foreground": 19, "background": 19, "set_background_color": 19, "set_cursor_posit": 19, "x": [19, 39], "int": [19, 20, 26, 27, 29, 34, 39, 48], "y": [19, 48], "set_foreground_color": 19, "set_hold_back": 19, "spinner": [19, 45, 46], "text_foreground_color": 19, "spinner_foreground_color": 19, "text_background_color": 19, "spinner_background_color": 19, "end": [19, 25], "stop": 19, "text": [19, 34], "keyword": 19, "activ": [19, 34], "last": [19, 39], "write_at": [19, 45, 46], "write_lin": [19, 45, 46, 48], "write_line_at": [19, 45, 46], "consolecal": 19, "repres": [19, 20, 24, 26], "hold": 19, "spinnerthread": 19, "msg_len": 19, "length": [19, 29, 39, 48], "exit": [19, 48], "stop_spin": 19, "databaseset": [20, 21, 22, 23], "auth_plugin": 20, "charset": 20, "host": [20, 26], "password": [20, 48], "port": [20, 26], "use_unicod": 20, "user": [20, 35, 37, 48], "databasesettingsnameenum": 20, "authplugin": 20, "useunicod": 20, "databaseconnect": 21, "databaseconnectionabc": 21, "represent": [21, 22, 23, 25, 26, 28], "connection_str": 21, "http": [21, 49], "doc": 21, "sqlalchemi": 21, "org": 21, "en": 21, "14": 21, "core": [21, 45, 49], "engin": 21, "html": 21, "mysqlcursorbuff": [21, 22], "mysqlconnectionabstract": 21, "databasecontext": 22, "databasecontextabc": [22, 23], "save_chang": 22, "tupl": [22, 34], "sql": 22, "fetch": 22, "servicecollect": 23, "collect": 23, "add_db_context": 23, "db_context_typ": 23, "db_set": 23, "db_context": 23, "add_log": 23, "intern": 23, "logger": [23, 25, 26, 37, 44, 45, 46, 47, 50], "add_pip": 23, "transient": [23, 45, 46], "add_scop": 23, "service_typ": 23, "scope": [23, 45, 46], "lifetim": [23, 45, 46], "self": 23, "add_singleton": 23, "singleton": [23, 45, 46], "add_transi": 23, "build_service_provid": 23, "add_discord": 23, "discord": [23, 35, 37, 45, 47], "add_transl": 23, "translat": [23, 45, 47], "servicedescriptor": 23, "servicelifetimeenum": 23, "base_typ": 23, "descriptor": 23, "1": [23, 25, 48], "0": [23, 25, 34, 48], "2": [23, 25, 34, 48], "serviceprovid": 23, "build_servic": 23, "instance_typ": 23, "create_scop": 23, "scopeabc": 23, "get_servic": 23, "set_scop": 23, "applicationenviron": 24, "environmentnameenum": 24, "product": [24, 45, 46], "application_nam": 24, "date_time_now": 24, "datetim": [24, 34, 35, 37], "end_tim": 24, "environment_nam": 24, "host_nam": 24, "runtime_directori": 24, "set_runtime_directori": 24, "runtim": [24, 45, 46], "set_working_directori": 24, "working_directori": 24, "start_tim": 24, "stage": [24, 45, 46], "loggerabc": [25, 26, 37], "debug": [25, 45, 46], "ex": 25, "except": [25, 39], "thrown": 25, "fatal": [25, 45, 46], "program": 25, "trace": [25, 45, 46], "warn": [25, 45, 46], "loggingset": [25, 37], "time_format": [25, 28], "timeformatset": [25, 28], "tree": 25, "logfil": 25, "logginglevelenum": 25, "5": [25, 48], "4": 25, "off": 25, "6": 25, "3": 25, "filenam": 25, "level": [25, 45, 46], "loggingsettingsnameenum": 25, "console_level": 25, "consoleloglevel": 25, "file_level": 25, "fileloglevel": 25, "subject": 26, "bodi": 26, "transceiv": 26, "receiv": 26, "e": 26, "add_head": 26, "add_receiv": 26, "check_mail": 26, "address": 26, "check": [26, 39, 40], "get_cont": 26, "header_list": 26, "receiver_list": 26, "emailclientabc": 26, "emailcli": 26, "send_mail": 26, "mail_set": 26, "emailclientset": 26, "login": 26, "credenti": [26, 29, 45, 46], "user_nam": 26, "emailclientsettingsnameenum": 26, "usernam": 26, "boolpip": 27, "pipeabc": [27, 43], "transform": [27, 43], "firstchartolowerpip": 27, "lower": [27, 29, 48], "firsttoupperpip": 27, "upper": [27, 29, 48], "ipaddresspip": 27, "tocamelcasepip": 27, "camel": [27, 29], "camelcas": [27, 29], "tosnakecasepip": 27, "snake": [27, 29], "snake_cas": [27, 29], "versionpip": 27, "date_format": 28, "date_time_format": 28, "date_time_log_format": 28, "timeformatsettingsnamesenum": 28, "dateformat": 28, "datetimeformat": 28, "datetimelogformat": 28, "timeformat": 28, "credentialmanag": 29, "encrypt": [29, 45, 46], "decrypt": 29, "build_str": 29, "replac": 29, "base64": [29, 45, 46], "get_execut": 29, "get_outd": 29, "byte": 29, "get": [29, 45, 46, 47, 49], "outdat": 29, "get_packag": 29, "local": [29, 44, 47], "stdout": 29, "stderr": 29, "extra": [29, 49], "index": [29, 39, 42, 48, 49], "url": [29, 49], "subprocess": [29, 45, 46], "reset_execut": 29, "system": 29, "standard": [29, 45, 46], "set_execut": 29, "convert_to_camel_cas": 29, "convert_to_snake_cas": 29, "first_to_low": 29, "first_to_upp": 29, "random_str": 29, "random": [29, 48], "cpl_discord": [30, 47], "discord_bot_application_abc": [30, 47], "discord_command_abc": [30, 47], "discord_commands_meta": [30, 47], "discord_bot_set": [30, 37, 47], "category_channel": [30, 47], "guild": [30, 35, 37, 47], "role": [30, 35, 37, 47], "text_channel": [30, 47], "voice_channel": [30, 47], "event": [30, 37, 47], "on_bulk_message_delete_abc": [30, 47], "on_command_abc": [30, 47], "on_command_completion_abc": [30, 47], "on_command_error_abc": [30, 47], "on_connect_abc": [30, 47], "on_disconnect_abc": [30, 47], "on_error_abc": [30, 47], "on_group_join_abc": [30, 47], "on_group_remove_abc": [30, 47], "on_guild_available_abc": [30, 47], "on_guild_channel_create_abc": [30, 47], "on_guild_channel_delete_abc": [30, 47], "on_guild_channel_pins_update_abc": [30, 47], "on_guild_channel_update_abc": [30, 47], "on_guild_emojis_update_abc": [30, 47], "on_guild_integrations_update_abc": [30, 47], "on_guild_join_abc": [30, 47], "on_guild_remove_abc": [30, 47], "on_guild_role_create_abc": [30, 47], "on_guild_role_delete_abc": [30, 47], "on_guild_role_update_abc": [30, 47], "on_guild_unavailable_abc": [30, 47], "on_guild_update_abc": [30, 47], "on_invite_create_abc": [30, 47], "on_invite_delete_abc": [30, 47], "on_member_ban_abc": [30, 47], "on_member_join_abc": [30, 47], "on_member_remove_abc": [30, 47], "on_member_unban_abc": [30, 47], "on_member_update_abc": [30, 47], "on_message_abc": [30, 47], "on_message_delete_abc": [30, 47], "on_message_edit_abc": [30, 47], "on_private_channel_create_abc": [30, 47], "on_private_channel_delete_abc": [30, 47], "on_private_channel_pins_update_abc": [30, 47], "on_private_channel_update_abc": [30, 47], "on_raw_reaction_add_abc": [30, 47], "on_raw_reaction_clear_abc": [30, 47], "on_raw_reaction_clear_emoji_abc": [30, 47], "on_raw_reaction_remove_abc": [30, 47], "on_reaction_add_abc": [30, 47], "on_reaction_clear_abc": [30, 47], "on_reaction_clear_emoji_abc": [30, 47], "on_reaction_remove_abc": [30, 47], "on_ready_abc": [30, 47], "on_resume_abc": [30, 47], "on_typing_abc": [30, 47], "on_user_update_abc": [30, 47], "on_voice_state_update_abc": [30, 47], "on_webhooks_update_abc": [30, 47], "helper": [30, 47], "to_containers_convert": [30, 47], "command_error_handler_servic": [30, 47], "discord_bot_servic": [30, 47], "discord_bot_service_abc": [30, 47], "discord_collect": [30, 47], "discord_collection_abc": [30, 47], "discord_servic": [30, 47], "discord_service_abc": [30, 47], "discordbotapplicationabc": 31, "stop_async": [31, 37], "discordcommandabc": [32, 37], "cog": [32, 37], "discordcogmeta": 32, "namespac": 32, "abcmeta": 32, "cogmeta": 32, "discordbotset": [33, 37], "categorychannel": 34, "_t": [34, 36, 37, 39], "category_id": 34, "id": [34, 48], "nsfw": 34, "textchannel": 34, "categori": 34, "voicechannel": 34, "voic": 34, "_o": 34, "afk_channel": 34, "afk_timeout": 34, "approximate_member_count": 34, "approximate_presence_count": 34, "belong": 34, "sort": [34, 39, 45], "top": 34, "bottom": 34, "default_notif": 34, "emoji": [34, 35, 37], "explicit_content_filt": 34, "featur": [34, 49], "max_memb": 34, "max_pres": 34, "max_video_channel_us": 34, "sequenc": [34, 35, 36, 37, 39], "mfa_level": 34, "nsfw_level": 34, "owner_id": 34, "preferred_local": 34, "premium_progress_bar_en": 34, "premium_subscription_count": 34, "premium_ti": 34, "hierarchi": 34, "lowest": [34, 39], "sticker": 34, "permiss": 34, "view": 34, "unavail": 34, "vanity_url_cod": 34, "verification_level": 34, "widget_en": 34, "activitytyp": 34, "joined_at": 34, "nick": 34, "pend": 34, "premium_sinc": 34, "alwai": 34, "everyon": 34, "These": [34, 45], "timed_out_until": 34, "hoist": 34, "mention": 34, "tag": 34, "unicode_emoji": 34, "default_auto_archive_dur": 34, "last_message_id": 34, "slowmode_delai": 34, "archive_timestamp": 34, "archiv": 34, "archiver_id": 34, "auto_archive_dur": 34, "invit": [34, 35, 37], "lock": 34, "me": 34, "member_count": 34, "threadmemb": 34, "intent": 34, "properli": 34, "fill": 34, "howev": 34, "gatewai": 34, "fetch_memb": 34, "message_count": 34, "parent_id": 34, "insid": 34, "onbulkmessagedeleteabc": 35, "on_bulk_message_delet": [35, 37], "oncommandabc": 35, "on_command": [35, 37], "ctx": [35, 37], "oncommandcompletionabc": 35, "on_command_complet": [35, 37], "oncommanderrorabc": [35, 37], "on_command_error": [35, 37], "commanderror": [35, 37], "onconnectabc": 35, "on_connect": [35, 37], "ondisconnectabc": 35, "on_disconnect": [35, 37], "onerrorabc": 35, "on_error": [35, 37], "ongroupjoinabc": 35, "on_group_join": [35, 37], "chhanel": [35, 37], "groupchannel": [35, 37], "ongroupremoveabc": 35, "on_group_remov": [35, 37], "onguildavailableabc": 35, "on_guild_avail": [35, 37], "onguildchannelcreateabc": 35, "on_guild_channel_cr": [35, 37], "guildchannel": [35, 37], "onguildchanneldeleteabc": 35, "on_guild_channel_delet": [35, 37], "onguildchannelpinsupdateabc": 35, "on_guild_channel_pins_upd": [35, 37], "list_pin": [35, 37], "onguildchannelupdateabc": 35, "on_guild_channel_upd": [35, 37], "onguildemojisupdateabc": 35, "on_guild_emojis_upd": [35, 37], "onguildintegrationsupdateabc": 35, "on_guild_integrations_upd": [35, 37], "onguildjoinabc": 35, "on_guild_join": [35, 37], "onguildremoveabc": 35, "on_guild_remov": [35, 37], "onguildrolecreateabc": 35, "on_guild_role_cr": [35, 37], "onguildroledeleteabc": 35, "on_guild_role_delet": [35, 37], "onguildroleupdateabc": 35, "on_guild_role_upd": [35, 37], "onguildunavailableabc": 35, "on_guild_unavail": [35, 37], "onguildupdateabc": 35, "on_guild_upd": [35, 37], "oninvitecreateabc": 35, "on_invite_cr": [35, 37], "oninvitedeleteabc": 35, "on_invite_delet": [35, 37], "onmemberbanabc": 35, "on_member_ban": [35, 37], "onmemberjoinabc": 35, "on_member_join": [35, 37], "onmemberremoveabc": 35, "on_member_remov": [35, 37], "onmemberunbanabc": 35, "on_member_unban": [35, 37], "onmemberupdateabc": 35, "on_member_upd": [35, 37], "onmessageabc": 35, "on_messag": [35, 37], "onmessagedeleteabc": 35, "on_message_delet": [35, 37], "onmessageeditabc": 35, "on_message_edit": [35, 37], "onprivatechannelcreateabc": 35, "on_private_channel_cr": [35, 37], "privatechannel": [35, 37], "onprivatechanneldeleteabc": 35, "on_private_channel_delet": [35, 37], "onprivatechannelpinsupdateabc": 35, "on_private_channel_pins_upd": [35, 37], "onprivatechannelupdateabc": 35, "on_private_channel_upd": [35, 37], "onrawreactionaddabc": 35, "on_raw_reaction_add": [35, 37], "payload": [35, 37], "rawreactionactionev": [35, 37], "onrawreactionclearabc": 35, "on_raw_reaction_clear": [35, 37], "onrawreactionclearemojiabc": 35, "on_raw_reaction_clear_emoji": [35, 37], "onrawreactionremoveabc": 35, "on_raw_reaction_remov": [35, 37], "onreactionaddabc": 35, "on_reaction_add": [35, 37], "reaction": [35, 37], "onreactionclearabc": 35, "on_reaction_clear": [35, 37], "onreactionclearemojiabc": 35, "on_reaction_clear_emoji": [35, 37], "onreactionremoveabc": 35, "on_reaction_remov": [35, 37], "onreadyabc": 35, "on_readi": [35, 37], "onresumeabc": 35, "on_resum": [35, 37], "ontypingabc": 35, "on_typ": [35, 37], "onuserupdateabc": 35, "on_user_upd": [35, 37], "onvoicestateupdateabc": 35, "on_voice_state_upd": [35, 37], "voicest": [35, 37], "onwebhooksupdateabc": 35, "on_webhooks_upd": [35, 37], "tocontainersconvert": 36, "_l": 36, "commanderrorhandlerservic": 37, "discordbotservic": 37, "logging_st": 37, "discordserviceabc": 37, "discordbotserviceabc": 37, "client": 37, "start_async": 37, "bot": 37, "discordcollect": 37, "discordcollectionabc": 37, "add_command": 37, "add_ev": 37, "_t_event": 37, "get_command": 37, "get_events_by_bas": 37, "discordservic": 37, "init": 37, "cpl_queri": [38, 47], "default_lambda": [38, 47], "ordered_query": [38, 47], "ordered_queryable_abc": [38, 47], "queryable_abc": [38, 47], "sequence_abc": [38, 47], "sequence_valu": [38, 47], "enumerable_abc": [38, 41, 42, 47], "iterable_abc": [38, 40, 41, 47], "orderedquery": 39, "_valu": [39, 40], "_func": 39, "orderedqueryableabc": 39, "orderediterableabc": 39, "then_bi": 39, "orderedlist": 39, "ascend": 39, "func": 39, "ordered_iterable_abc": 39, "then_by_descend": 39, "descend": 39, "queryableabc": [39, 40, 42], "sequenceabc": 39, "everi": 39, "equal": 39, "averag": 39, "float": 39, "complex": [39, 45, 46], "distinct": 39, "redund": 39, "element_at": 39, "_index": 39, "element_at_or_default": 39, "first_or_default": 39, "for_each": 39, "group_bi": 39, "group": 39, "last_or_default": 39, "max": 39, "highest": 39, "median": 39, "min": 39, "order_bi": 39, "order_by_descend": 39, "revers": 39, "select_mani": 39, "flatten": 39, "singl": 39, "argumentnoneexcept": 39, "single_or_default": 39, "skip": 39, "skip_last": 39, "sum": 39, "take_last": 39, "where": 39, "empti": 39, "_object": [39, 42], "indexerror": 39, "rang": [39, 48], "sequencevalu": 39, "enumerableabc": [40, 41, 42], "set_remove_error_check": 40, "to_iter": [40, 41], "iterableabc": [40, 41, 42], "to_enumer": [41, 42], "append": 42, "extend": [42, 44, 47, 50], "_iterableabc__iter": 42, "__iter": 42, "translatepip": 43, "translationserviceabc": 43, "translationservic": 43, "lang": 43, "load_by_set": 43, "translationset": 43, "set_default_lang": 43, "set_lang": 43, "kei": [43, 45, 49], "default_languag": 43, "prerequisit": [44, 47], "what": [44, 47], "up": [44, 47], "queri": [44, 45, 46, 47], "tutori": [44, 47, 48, 49], "com": [44, 47, 50], "builtin": [44, 47, 50], "common": [45, 46], "platform": [45, 46], "meant": [45, 46], "effici": [45, 46], "desktop": [45, 46], "learn": [45, 46, 49], "enterpris": [45, 46], "expandl": [45, 46], "builder": [45, 46], "map": [45, 46], "inject": [45, 46, 48], "appnam": [45, 46], "hostnam": [45, 46], "wrapper": [45, 46], "differ": [45, 46], "variant": [45, 46], "to_lower_cas": [45, 46], "to_camel_cas": [45, 46], "code": [45, 48, 49], "connector": 45, "between": 45, "filter": 45, "linq": 45, "xd": 45, "dot": 45, "notat": 45, "page": 45, "great": 45, "detail": 45, "about": [45, 49], "everyth": 45, "do": [45, 48], "contribut": 45, "cpl_translat": 47, "translate_pip": 47, "translation_servic": 47, "translation_service_abc": 47, "translation_set": 47, "welcom": 48, "introduc": 48, "walk": 48, "also": [48, 49], "sampl": 48, "ouput": 48, "look": 48, "licens": 48, "done": 48, "readm": 48, "md": 48, "__init__": 48, "projectmain": 48, "vs": 48, "pycharm": 48, "folder": 48, "hello": [48, 49], "world": [48, 49], "emul": 48, "def": 48, "onli": 48, "__name__": 48, "__main__": 48, "generate_password": 48, "letter": 48, "join": 48, "choic": 48, "ascii_lowercas": 48, "elif": 48, "ascii_uppercas": 48, "ascii_lett": 48, "len": 48, "full": 48, "section": 48, "ve": 48, "continu": 48, "explor": 48, "window": 49, "prompt": 49, "declin": 49, "enter": 49, "press": 49, "lib": 49, "live": 49, "navig": 49, "launch": 49, "watch": 49, "chnage": 49, "those": 49, "success": 49, "similar": 49, "fore": 49, "pyhton": 49}, "objects": {"cpl_core.application": [[17, 0, 0, "-", "application_abc"], [17, 0, 0, "-", "application_builder"], [17, 0, 0, "-", "application_builder_abc"], [17, 0, 0, "-", "startup_abc"]], "cpl_core.application.application_abc": [[17, 1, 1, "", "ApplicationABC"]], "cpl_core.application.application_abc.ApplicationABC": [[17, 2, 1, "", "configure"], [17, 2, 1, "", "main"], [17, 2, 1, "", "run"], [17, 2, 1, "", "run_async"]], "cpl_core.application.application_builder": [[17, 1, 1, "", "ApplicationBuilder"]], "cpl_core.application.application_builder.ApplicationBuilder": [[17, 2, 1, "", "build"], [17, 2, 1, "", "build_async"], [17, 2, 1, "", "use_extension"], [17, 2, 1, "", "use_startup"]], "cpl_core.application.application_builder_abc": [[17, 1, 1, "", "ApplicationBuilderABC"]], "cpl_core.application.application_builder_abc.ApplicationBuilderABC": [[17, 2, 1, "", "build"], [17, 2, 1, "", "build_async"], [17, 2, 1, "", "use_startup"]], "cpl_core.application.startup_abc": [[17, 1, 1, "", "StartupABC"]], "cpl_core.application.startup_abc.StartupABC": [[17, 2, 1, "", "configure_configuration"], [17, 2, 1, "", "configure_services"]], "cpl_core.configuration": [[18, 0, 0, "-", "configuration"], [18, 0, 0, "-", "configuration_abc"], [18, 0, 0, "-", "configuration_model_abc"], [18, 0, 0, "-", "configuration_variable_name_enum"]], "cpl_core.configuration.configuration": [[18, 1, 1, "", "Configuration"]], "cpl_core.configuration.configuration.Configuration": [[18, 2, 1, "", "add_configuration"], [18, 2, 1, "", "add_console_argument"], [18, 2, 1, "", "add_environment_variables"], [18, 2, 1, "", "add_json_file"], [18, 3, 1, "", "additional_arguments"], [18, 3, 1, "", "argument_error_function"], [18, 3, 1, "", "arguments"], [18, 2, 1, "", "create_console_argument"], [18, 3, 1, "", "environment"], [18, 2, 1, "", "for_each_argument"], [18, 2, 1, "", "get_configuration"], [18, 2, 1, "", "parse_console_arguments"]], "cpl_core.configuration.configuration_abc": [[18, 1, 1, "", "ConfigurationABC"]], "cpl_core.configuration.configuration_abc.ConfigurationABC": [[18, 2, 1, "", "add_configuration"], [18, 2, 1, "", "add_console_argument"], [18, 2, 1, "", "add_environment_variables"], [18, 2, 1, "", "add_json_file"], [18, 3, 1, "", "additional_arguments"], [18, 3, 1, "", "argument_error_function"], [18, 3, 1, "", "arguments"], [18, 2, 1, "", "create_console_argument"], [18, 3, 1, "", "environment"], [18, 2, 1, "", "for_each_argument"], [18, 2, 1, "", "get_configuration"], [18, 2, 1, "", "parse_console_arguments"]], "cpl_core.configuration.configuration_model_abc": [[18, 1, 1, "", "ConfigurationModelABC"]], "cpl_core.configuration.configuration_model_abc.ConfigurationModelABC": [[18, 2, 1, "", "from_dict"]], "cpl_core.configuration.configuration_variable_name_enum": [[18, 1, 1, "", "ConfigurationVariableNameEnum"]], "cpl_core.configuration.configuration_variable_name_enum.ConfigurationVariableNameEnum": [[18, 4, 1, "", "customer"], [18, 4, 1, "", "environment"], [18, 4, 1, "", "name"], [18, 2, 1, "", "to_list"]], "cpl_core.console": [[19, 0, 0, "-", "background_color_enum"], [19, 0, 0, "-", "console"], [19, 0, 0, "-", "console_call"], [19, 0, 0, "-", "foreground_color_enum"], [19, 0, 0, "-", "spinner_thread"]], "cpl_core.console.background_color_enum": [[19, 1, 1, "", "BackgroundColorEnum"]], "cpl_core.console.background_color_enum.BackgroundColorEnum": [[19, 4, 1, "", "blue"], [19, 4, 1, "", "cyan"], [19, 4, 1, "", "default"], [19, 4, 1, "", "green"], [19, 4, 1, "", "grey"], [19, 4, 1, "", "magenta"], [19, 4, 1, "", "red"], [19, 4, 1, "", "white"], [19, 4, 1, "", "yellow"]], "cpl_core.console.console": [[19, 1, 1, "", "Console"]], "cpl_core.console.console.Console": [[19, 3, 1, "", "background_color"], [19, 2, 1, "", "banner"], [19, 2, 1, "", "clear"], [19, 2, 1, "", "close"], [19, 2, 1, "", "color_reset"], [19, 2, 1, "", "disable"], [19, 2, 1, "", "enable"], [19, 2, 1, "", "error"], [19, 3, 1, "", "foreground_color"], [19, 2, 1, "", "read"], [19, 2, 1, "", "read_line"], [19, 2, 1, "", "reset_cursor_position"], [19, 2, 1, "", "select"], [19, 2, 1, "", "set_background_color"], [19, 2, 1, "", "set_cursor_position"], [19, 2, 1, "", "set_foreground_color"], [19, 2, 1, "", "set_hold_back"], [19, 2, 1, "", "spinner"], [19, 2, 1, "", "table"], [19, 2, 1, "", "write"], [19, 2, 1, "", "write_at"], [19, 2, 1, "", "write_line"], [19, 2, 1, "", "write_line_at"]], "cpl_core.console.console_call": [[19, 1, 1, "", "ConsoleCall"]], "cpl_core.console.console_call.ConsoleCall": [[19, 3, 1, "", "args"], [19, 3, 1, "", "function"]], "cpl_core.console.foreground_color_enum": [[19, 1, 1, "", "ForegroundColorEnum"]], "cpl_core.console.foreground_color_enum.ForegroundColorEnum": [[19, 4, 1, "", "blue"], [19, 4, 1, "", "cyan"], [19, 4, 1, "", "default"], [19, 4, 1, "", "green"], [19, 4, 1, "", "grey"], [19, 4, 1, "", "magenta"], [19, 4, 1, "", "red"], [19, 4, 1, "", "white"], [19, 4, 1, "", "yellow"]], "cpl_core.console.spinner_thread": [[19, 1, 1, "", "SpinnerThread"]], "cpl_core.console.spinner_thread.SpinnerThread": [[19, 2, 1, "", "exit"], [19, 2, 1, "", "run"], [19, 2, 1, "", "stop_spinning"]], "cpl_core.database.connection": [[21, 0, 0, "-", "database_connection"], [21, 0, 0, "-", "database_connection_abc"]], "cpl_core.database.connection.database_connection": [[21, 1, 1, "", "DatabaseConnection"]], "cpl_core.database.connection.database_connection.DatabaseConnection": [[21, 2, 1, "", "connect"], [21, 3, 1, "", "cursor"], [21, 3, 1, "", "server"]], "cpl_core.database.connection.database_connection_abc": [[21, 1, 1, "", "DatabaseConnectionABC"]], "cpl_core.database.connection.database_connection_abc.DatabaseConnectionABC": [[21, 2, 1, "", "connect"], [21, 3, 1, "", "cursor"], [21, 3, 1, "", "server"]], "cpl_core.database.context": [[22, 0, 0, "-", "database_context"], [22, 0, 0, "-", "database_context_abc"]], "cpl_core.database.context.database_context": [[22, 1, 1, "", "DatabaseContext"]], "cpl_core.database.context.database_context.DatabaseContext": [[22, 2, 1, "", "connect"], [22, 3, 1, "", "cursor"], [22, 2, 1, "", "save_changes"], [22, 2, 1, "", "select"]], "cpl_core.database.context.database_context_abc": [[22, 1, 1, "", "DatabaseContextABC"]], "cpl_core.database.context.database_context_abc.DatabaseContextABC": [[22, 2, 1, "", "connect"], [22, 3, 1, "", "cursor"], [22, 2, 1, "", "save_changes"], [22, 2, 1, "", "select"]], "cpl_core.database": [[20, 0, 0, "-", "database_settings"], [20, 0, 0, "-", "database_settings_name_enum"]], "cpl_core.database.database_settings": [[20, 1, 1, "", "DatabaseSettings"]], "cpl_core.database.database_settings.DatabaseSettings": [[20, 3, 1, "", "auth_plugin"], [20, 3, 1, "", "buffered"], [20, 3, 1, "", "charset"], [20, 3, 1, "", "database"], [20, 2, 1, "", "from_dict"], [20, 3, 1, "", "host"], [20, 3, 1, "", "password"], [20, 3, 1, "", "port"], [20, 3, 1, "", "use_unicode"], [20, 3, 1, "", "user"]], "cpl_core.database.database_settings_name_enum": [[20, 1, 1, "", "DatabaseSettingsNameEnum"]], "cpl_core.database.database_settings_name_enum.DatabaseSettingsNameEnum": [[20, 4, 1, "", "auth_plugin"], [20, 4, 1, "", "buffered"], [20, 4, 1, "", "charset"], [20, 4, 1, "", "database"], [20, 4, 1, "", "host"], [20, 4, 1, "", "password"], [20, 4, 1, "", "port"], [20, 4, 1, "", "use_unicode"], [20, 4, 1, "", "user"]], "cpl_core.dependency_injection": [[23, 0, 0, "-", "service_collection"], [23, 0, 0, "-", "service_collection_abc"], [23, 0, 0, "-", "service_descriptor"], [23, 0, 0, "-", "service_lifetime_enum"], [23, 0, 0, "-", "service_provider"], [23, 0, 0, "-", "service_provider_abc"]], "cpl_core.dependency_injection.service_collection": [[23, 1, 1, "", "ServiceCollection"]], "cpl_core.dependency_injection.service_collection.ServiceCollection": [[23, 2, 1, "", "add_db_context"], [23, 2, 1, "", "add_logging"], [23, 2, 1, "", "add_pipes"], [23, 2, 1, "", "add_scoped"], [23, 2, 1, "", "add_singleton"], [23, 2, 1, "", "add_transient"], [23, 2, 1, "", "build_service_provider"]], "cpl_core.dependency_injection.service_collection_abc": [[23, 1, 1, "", "ServiceCollectionABC"]], "cpl_core.dependency_injection.service_collection_abc.ServiceCollectionABC": [[23, 2, 1, "", "add_db_context"], [23, 2, 1, "", "add_discord"], [23, 2, 1, "", "add_logging"], [23, 2, 1, "", "add_pipes"], [23, 2, 1, "", "add_scoped"], [23, 2, 1, "", "add_singleton"], [23, 2, 1, "", "add_transient"], [23, 2, 1, "", "add_translation"], [23, 2, 1, "", "build_service_provider"]], "cpl_core.dependency_injection.service_descriptor": [[23, 1, 1, "", "ServiceDescriptor"]], "cpl_core.dependency_injection.service_descriptor.ServiceDescriptor": [[23, 3, 1, "", "base_type"], [23, 3, 1, "", "implementation"], [23, 3, 1, "", "lifetime"], [23, 3, 1, "", "service_type"]], "cpl_core.dependency_injection.service_lifetime_enum": [[23, 1, 1, "", "ServiceLifetimeEnum"]], "cpl_core.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum": [[23, 4, 1, "", "scoped"], [23, 4, 1, "", "singleton"], [23, 4, 1, "", "transient"]], "cpl_core.dependency_injection.service_provider": [[23, 1, 1, "", "ServiceProvider"]], "cpl_core.dependency_injection.service_provider.ServiceProvider": [[23, 2, 1, "", "build_service"], [23, 2, 1, "", "create_scope"], [23, 2, 1, "", "get_service"], [23, 2, 1, "", "set_scope"]], "cpl_core.dependency_injection.service_provider_abc": [[23, 1, 1, "", "ServiceProviderABC"]], "cpl_core.dependency_injection.service_provider_abc.ServiceProviderABC": [[23, 2, 1, "", "build_service"], [23, 2, 1, "", "create_scope"], [23, 2, 1, "", "get_service"], [23, 2, 1, "", "set_scope"]], "cpl_core.environment": [[24, 0, 0, "-", "application_environment"], [24, 0, 0, "-", "application_environment_abc"], [24, 0, 0, "-", "environment_name_enum"]], "cpl_core.environment.application_environment": [[24, 1, 1, "", "ApplicationEnvironment"]], "cpl_core.environment.application_environment.ApplicationEnvironment": [[24, 3, 1, "", "application_name"], [24, 3, 1, "", "customer"], [24, 3, 1, "", "date_time_now"], [24, 3, 1, "", "end_time"], [24, 3, 1, "", "environment_name"], [24, 3, 1, "", "host_name"], [24, 3, 1, "", "runtime_directory"], [24, 2, 1, "", "set_runtime_directory"], [24, 2, 1, "", "set_working_directory"], [24, 3, 1, "", "start_time"], [24, 3, 1, "", "working_directory"]], "cpl_core.environment.application_environment_abc": [[24, 1, 1, "", "ApplicationEnvironmentABC"]], "cpl_core.environment.application_environment_abc.ApplicationEnvironmentABC": [[24, 3, 1, "", "application_name"], [24, 3, 1, "", "customer"], [24, 3, 1, "", "date_time_now"], [24, 3, 1, "", "end_time"], [24, 3, 1, "", "environment_name"], [24, 3, 1, "", "host_name"], [24, 3, 1, "", "runtime_directory"], [24, 2, 1, "", "set_runtime_directory"], [24, 2, 1, "", "set_working_directory"], [24, 3, 1, "", "start_time"], [24, 3, 1, "", "working_directory"]], "cpl_core.environment.environment_name_enum": [[24, 1, 1, "", "EnvironmentNameEnum"]], "cpl_core.environment.environment_name_enum.EnvironmentNameEnum": [[24, 4, 1, "", "development"], [24, 4, 1, "", "production"], [24, 4, 1, "", "staging"], [24, 4, 1, "", "testing"]], "cpl_core.logging": [[25, 0, 0, "-", "logger_abc"], [25, 0, 0, "-", "logger_service"], [25, 0, 0, "-", "logging_level_enum"], [25, 0, 0, "-", "logging_settings"], [25, 0, 0, "-", "logging_settings_name_enum"]], "cpl_core.logging.logger_abc": [[25, 1, 1, "", "LoggerABC"]], "cpl_core.logging.logger_abc.LoggerABC": [[25, 2, 1, "", "debug"], [25, 2, 1, "", "error"], [25, 2, 1, "", "fatal"], [25, 2, 1, "", "header"], [25, 2, 1, "", "info"], [25, 2, 1, "", "trace"], [25, 2, 1, "", "warn"]], "cpl_core.logging.logger_service": [[25, 1, 1, "", "Logger"]], "cpl_core.logging.logger_service.Logger": [[25, 2, 1, "", "create"], [25, 2, 1, "", "debug"], [25, 2, 1, "", "error"], [25, 2, 1, "", "fatal"], [25, 2, 1, "", "header"], [25, 2, 1, "", "info"], [25, 2, 1, "", "trace"], [25, 2, 1, "", "warn"]], "cpl_core.logging.logging_level_enum": [[25, 1, 1, "", "LoggingLevelEnum"]], "cpl_core.logging.logging_level_enum.LoggingLevelEnum": [[25, 4, 1, "", "DEBUG"], [25, 4, 1, "", "ERROR"], [25, 4, 1, "", "FATAL"], [25, 4, 1, "", "INFO"], [25, 4, 1, "", "OFF"], [25, 4, 1, "", "TRACE"], [25, 4, 1, "", "WARN"]], "cpl_core.logging.logging_settings": [[25, 1, 1, "", "LoggingSettings"]], "cpl_core.logging.logging_settings.LoggingSettings": [[25, 3, 1, "", "console"], [25, 3, 1, "", "filename"], [25, 2, 1, "", "from_dict"], [25, 3, 1, "", "level"], [25, 3, 1, "", "path"]], "cpl_core.logging.logging_settings_name_enum": [[25, 1, 1, "", "LoggingSettingsNameEnum"]], "cpl_core.logging.logging_settings_name_enum.LoggingSettingsNameEnum": [[25, 4, 1, "", "console_level"], [25, 4, 1, "", "file_level"], [25, 4, 1, "", "filename"], [25, 4, 1, "", "path"]], "cpl_core.mailing": [[26, 0, 0, "-", "email"], [26, 0, 0, "-", "email_client_abc"], [26, 0, 0, "-", "email_client_service"], [26, 0, 0, "-", "email_client_settings"], [26, 0, 0, "-", "email_client_settings_name_enum"]], "cpl_core.mailing.email": [[26, 1, 1, "", "EMail"]], "cpl_core.mailing.email.EMail": [[26, 2, 1, "", "add_header"], [26, 2, 1, "", "add_receiver"], [26, 3, 1, "", "body"], [26, 2, 1, "", "check_mail"], [26, 2, 1, "", "get_content"], [26, 3, 1, "", "header"], [26, 3, 1, "", "header_list"], [26, 3, 1, "", "receiver"], [26, 3, 1, "", "receiver_list"], [26, 3, 1, "", "subject"], [26, 3, 1, "", "transceiver"]], "cpl_core.mailing.email_client_abc": [[26, 1, 1, "", "EMailClientABC"]], "cpl_core.mailing.email_client_abc.EMailClientABC": [[26, 2, 1, "", "connect"], [26, 2, 1, "", "send_mail"]], "cpl_core.mailing.email_client_service": [[26, 1, 1, "", "EMailClient"]], "cpl_core.mailing.email_client_service.EMailClient": [[26, 2, 1, "", "connect"], [26, 2, 1, "", "create"], [26, 2, 1, "", "login"], [26, 2, 1, "", "send_mail"]], "cpl_core.mailing.email_client_settings": [[26, 1, 1, "", "EMailClientSettings"]], "cpl_core.mailing.email_client_settings.EMailClientSettings": [[26, 3, 1, "", "credentials"], [26, 2, 1, "", "from_dict"], [26, 3, 1, "", "host"], [26, 3, 1, "", "port"], [26, 3, 1, "", "user_name"]], "cpl_core.mailing.email_client_settings_name_enum": [[26, 1, 1, "", "EMailClientSettingsNameEnum"]], "cpl_core.mailing.email_client_settings_name_enum.EMailClientSettingsNameEnum": [[26, 4, 1, "", "credentials"], [26, 4, 1, "", "host"], [26, 4, 1, "", "port"], [26, 4, 1, "", "user_name"]], "cpl_core.pipes": [[27, 0, 0, "-", "bool_pipe"], [27, 0, 0, "-", "first_char_to_lower_pipe"], [27, 0, 0, "-", "first_to_upper_pipe"], [27, 0, 0, "-", "ip_address_pipe"], [27, 0, 0, "-", "pipe_abc"], [27, 0, 0, "-", "to_camel_case_pipe"], [27, 0, 0, "-", "to_snake_case_pipe"], [27, 0, 0, "-", "version_pipe"]], "cpl_core.pipes.bool_pipe": [[27, 1, 1, "", "BoolPipe"]], "cpl_core.pipes.bool_pipe.BoolPipe": [[27, 2, 1, "", "transform"]], "cpl_core.pipes.first_char_to_lower_pipe": [[27, 1, 1, "", "FirstCharToLowerPipe"]], "cpl_core.pipes.first_char_to_lower_pipe.FirstCharToLowerPipe": [[27, 2, 1, "", "transform"]], "cpl_core.pipes.first_to_upper_pipe": [[27, 1, 1, "", "FirstToUpperPipe"]], "cpl_core.pipes.first_to_upper_pipe.FirstToUpperPipe": [[27, 2, 1, "", "transform"]], "cpl_core.pipes.ip_address_pipe": [[27, 1, 1, "", "IPAddressPipe"]], "cpl_core.pipes.ip_address_pipe.IPAddressPipe": [[27, 2, 1, "", "transform"]], "cpl_core.pipes.pipe_abc": [[27, 1, 1, "", "PipeABC"]], "cpl_core.pipes.pipe_abc.PipeABC": [[27, 2, 1, "", "transform"]], "cpl_core.pipes.to_camel_case_pipe": [[27, 1, 1, "", "ToCamelCasePipe"]], "cpl_core.pipes.to_camel_case_pipe.ToCamelCasePipe": [[27, 2, 1, "", "transform"]], "cpl_core.pipes.to_snake_case_pipe": [[27, 1, 1, "", "ToSnakeCasePipe"]], "cpl_core.pipes.to_snake_case_pipe.ToSnakeCasePipe": [[27, 2, 1, "", "transform"]], "cpl_core.pipes.version_pipe": [[27, 1, 1, "", "VersionPipe"]], "cpl_core.pipes.version_pipe.VersionPipe": [[27, 2, 1, "", "transform"]], "cpl_core.time": [[28, 0, 0, "-", "time_format_settings"], [28, 0, 0, "-", "time_format_settings_names_enum"]], "cpl_core.time.time_format_settings": [[28, 1, 1, "", "TimeFormatSettings"]], "cpl_core.time.time_format_settings.TimeFormatSettings": [[28, 3, 1, "", "date_format"], [28, 3, 1, "", "date_time_format"], [28, 3, 1, "", "date_time_log_format"], [28, 2, 1, "", "from_dict"], [28, 3, 1, "", "time_format"]], "cpl_core.time.time_format_settings_names_enum": [[28, 1, 1, "", "TimeFormatSettingsNamesEnum"]], "cpl_core.time.time_format_settings_names_enum.TimeFormatSettingsNamesEnum": [[28, 4, 1, "", "date_format"], [28, 4, 1, "", "date_time_format"], [28, 4, 1, "", "date_time_log_format"], [28, 4, 1, "", "time_format"]], "cpl_core.utils": [[29, 0, 0, "-", "credential_manager"], [29, 0, 0, "-", "pip"], [29, 0, 0, "-", "string"]], "cpl_core.utils.credential_manager": [[29, 1, 1, "", "CredentialManager"]], "cpl_core.utils.credential_manager.CredentialManager": [[29, 2, 1, "", "build_string"], [29, 2, 1, "", "decrypt"], [29, 2, 1, "", "encrypt"]], "cpl_core.utils.pip": [[29, 1, 1, "", "Pip"]], "cpl_core.utils.pip.Pip": [[29, 2, 1, "", "get_executable"], [29, 2, 1, "", "get_outdated"], [29, 2, 1, "", "get_package"], [29, 2, 1, "", "install"], [29, 2, 1, "", "reset_executable"], [29, 2, 1, "", "set_executable"], [29, 2, 1, "", "uninstall"]], "cpl_core.utils.string": [[29, 1, 1, "", "String"]], "cpl_core.utils.string.String": [[29, 2, 1, "", "convert_to_camel_case"], [29, 2, 1, "", "convert_to_snake_case"], [29, 2, 1, "", "first_to_lower"], [29, 2, 1, "", "first_to_upper"], [29, 2, 1, "", "random_string"]], "cpl_discord.application": [[31, 0, 0, "-", "discord_bot_application_abc"]], "cpl_discord.application.discord_bot_application_abc": [[31, 1, 1, "", "DiscordBotApplicationABC"]], "cpl_discord.application.discord_bot_application_abc.DiscordBotApplicationABC": [[31, 2, 1, "", "stop_async"]], "cpl_discord.command": [[32, 0, 0, "-", "discord_command_abc"], [32, 0, 0, "-", "discord_commands_meta"]], "cpl_discord.command.discord_command_abc": [[32, 1, 1, "", "DiscordCommandABC"]], "cpl_discord.command.discord_commands_meta": [[32, 1, 1, "", "DiscordCogMeta"]], "cpl_discord.configuration": [[33, 0, 0, "-", "discord_bot_settings"]], "cpl_discord.configuration.discord_bot_settings": [[33, 1, 1, "", "DiscordBotSettings"]], "cpl_discord.configuration.discord_bot_settings.DiscordBotSettings": [[33, 2, 1, "", "from_dict"], [33, 3, 1, "", "prefix"], [33, 3, 1, "", "token"]], "cpl_discord.container": [[34, 0, 0, "-", "category_channel"], [34, 0, 0, "-", "container"], [34, 0, 0, "-", "guild"], [34, 0, 0, "-", "member"], [34, 0, 0, "-", "role"], [34, 0, 0, "-", "text_channel"], [34, 0, 0, "-", "thread"], [34, 0, 0, "-", "voice_channel"]], "cpl_discord.container.category_channel": [[34, 1, 1, "", "CategoryChannel"]], "cpl_discord.container.category_channel.CategoryChannel": [[34, 4, 1, "", "category_id"], [34, 4, 1, "", "guild"], [34, 4, 1, "", "id"], [34, 4, 1, "", "name"], [34, 4, 1, "", "nsfw"], [34, 4, 1, "", "position"], [34, 3, 1, "", "text_channels"], [34, 3, 1, "", "voice_channels"]], "cpl_discord.container.container": [[34, 1, 1, "", "Container"]], "cpl_discord.container.guild": [[34, 1, 1, "", "Guild"]], "cpl_discord.container.guild.Guild": [[34, 4, 1, "", "afk_channel"], [34, 4, 1, "", "afk_timeout"], [34, 4, 1, "", "approximate_member_count"], [34, 4, 1, "", "approximate_presence_count"], [34, 3, 1, "", "categories"], [34, 4, 1, "", "default_notifications"], [34, 4, 1, "", "description"], [34, 4, 1, "", "emojis"], [34, 4, 1, "", "explicit_content_filter"], [34, 4, 1, "", "features"], [34, 4, 1, "", "id"], [34, 4, 1, "", "max_members"], [34, 4, 1, "", "max_presences"], [34, 4, 1, "", "max_video_channel_users"], [34, 3, 1, "", "members"], [34, 4, 1, "", "mfa_level"], [34, 4, 1, "", "name"], [34, 4, 1, "", "nsfw_level"], [34, 4, 1, "", "owner_id"], [34, 4, 1, "", "preferred_locale"], [34, 4, 1, "", "premium_progress_bar_enabled"], [34, 4, 1, "", "premium_subscription_count"], [34, 4, 1, "", "premium_tier"], [34, 3, 1, "", "roles"], [34, 4, 1, "", "stickers"], [34, 3, 1, "", "text_channels"], [34, 3, 1, "", "threads"], [34, 4, 1, "", "unavailable"], [34, 4, 1, "", "vanity_url_code"], [34, 4, 1, "", "verification_level"], [34, 3, 1, "", "voice_channels"], [34, 4, 1, "", "widget_enabled"]], "cpl_discord.container.member": [[34, 1, 1, "", "Member"]], "cpl_discord.container.member.Member": [[34, 4, 1, "", "activities"], [34, 4, 1, "", "guild"], [34, 4, 1, "", "joined_at"], [34, 4, 1, "", "nick"], [34, 4, 1, "", "pending"], [34, 4, 1, "", "premium_since"], [34, 3, 1, "", "roles"], [34, 4, 1, "", "timed_out_until"]], "cpl_discord.container.role": [[34, 1, 1, "", "Role"]], "cpl_discord.container.role.Role": [[34, 4, 1, "", "guild"], [34, 4, 1, "", "hoist"], [34, 4, 1, "", "id"], [34, 4, 1, "", "managed"], [34, 3, 1, "", "members"], [34, 4, 1, "", "mentionable"], [34, 4, 1, "", "name"], [34, 4, 1, "", "position"], [34, 4, 1, "", "tags"], [34, 4, 1, "", "unicode_emoji"]], "cpl_discord.container.text_channel": [[34, 1, 1, "", "TextChannel"]], "cpl_discord.container.text_channel.TextChannel": [[34, 4, 1, "", "category_id"], [34, 4, 1, "", "default_auto_archive_duration"], [34, 4, 1, "", "guild"], [34, 4, 1, "", "id"], [34, 4, 1, "", "last_message_id"], [34, 3, 1, "", "members"], [34, 4, 1, "", "name"], [34, 4, 1, "", "nsfw"], [34, 4, 1, "", "position"], [34, 4, 1, "", "slowmode_delay"], [34, 3, 1, "", "threads"], [34, 4, 1, "", "topic"]], "cpl_discord.container.thread": [[34, 1, 1, "", "Thread"]], "cpl_discord.container.thread.Thread": [[34, 4, 1, "", "archive_timestamp"], [34, 4, 1, "", "archived"], [34, 4, 1, "", "archiver_id"], [34, 4, 1, "", "auto_archive_duration"], [34, 4, 1, "", "guild"], [34, 4, 1, "", "id"], [34, 4, 1, "", "invitable"], [34, 4, 1, "", "last_message_id"], [34, 4, 1, "", "locked"], [34, 4, 1, "", "me"], [34, 4, 1, "", "member_count"], [34, 3, 1, "", "members"], [34, 4, 1, "", "message_count"], [34, 4, 1, "", "name"], [34, 4, 1, "", "owner_id"], [34, 4, 1, "", "parent_id"], [34, 4, 1, "", "slowmode_delay"]], "cpl_discord.container.voice_channel": [[34, 1, 1, "", "VoiceChannel"]], "cpl_discord.container.voice_channel.VoiceChannel": [[34, 3, 1, "", "members"]], "cpl_discord.events": [[35, 0, 0, "-", "on_bulk_message_delete_abc"], [35, 0, 0, "-", "on_command_abc"], [35, 0, 0, "-", "on_command_completion_abc"], [35, 0, 0, "-", "on_command_error_abc"], [35, 0, 0, "-", "on_connect_abc"], [35, 0, 0, "-", "on_disconnect_abc"], [35, 0, 0, "-", "on_error_abc"], [35, 0, 0, "-", "on_group_join_abc"], [35, 0, 0, "-", "on_group_remove_abc"], [35, 0, 0, "-", "on_guild_available_abc"], [35, 0, 0, "-", "on_guild_channel_create_abc"], [35, 0, 0, "-", "on_guild_channel_delete_abc"], [35, 0, 0, "-", "on_guild_channel_pins_update_abc"], [35, 0, 0, "-", "on_guild_channel_update_abc"], [35, 0, 0, "-", "on_guild_emojis_update_abc"], [35, 0, 0, "-", "on_guild_integrations_update_abc"], [35, 0, 0, "-", "on_guild_join_abc"], [35, 0, 0, "-", "on_guild_remove_abc"], [35, 0, 0, "-", "on_guild_role_create_abc"], [35, 0, 0, "-", "on_guild_role_delete_abc"], [35, 0, 0, "-", "on_guild_role_update_abc"], [35, 0, 0, "-", "on_guild_unavailable_abc"], [35, 0, 0, "-", "on_guild_update_abc"], [35, 0, 0, "-", "on_invite_create_abc"], [35, 0, 0, "-", "on_invite_delete_abc"], [35, 0, 0, "-", "on_member_ban_abc"], [35, 0, 0, "-", "on_member_join_abc"], [35, 0, 0, "-", "on_member_remove_abc"], [35, 0, 0, "-", "on_member_unban_abc"], [35, 0, 0, "-", "on_member_update_abc"], [35, 0, 0, "-", "on_message_abc"], [35, 0, 0, "-", "on_message_delete_abc"], [35, 0, 0, "-", "on_message_edit_abc"], [35, 0, 0, "-", "on_private_channel_create_abc"], [35, 0, 0, "-", "on_private_channel_delete_abc"], [35, 0, 0, "-", "on_private_channel_pins_update_abc"], [35, 0, 0, "-", "on_private_channel_update_abc"], [35, 0, 0, "-", "on_raw_reaction_add_abc"], [35, 0, 0, "-", "on_raw_reaction_clear_abc"], [35, 0, 0, "-", "on_raw_reaction_clear_emoji_abc"], [35, 0, 0, "-", "on_raw_reaction_remove_abc"], [35, 0, 0, "-", "on_reaction_add_abc"], [35, 0, 0, "-", "on_reaction_clear_abc"], [35, 0, 0, "-", "on_reaction_clear_emoji_abc"], [35, 0, 0, "-", "on_reaction_remove_abc"], [35, 0, 0, "-", "on_ready_abc"], [35, 0, 0, "-", "on_resume_abc"], [35, 0, 0, "-", "on_typing_abc"], [35, 0, 0, "-", "on_user_update_abc"], [35, 0, 0, "-", "on_voice_state_update_abc"], [35, 0, 0, "-", "on_webhooks_update_abc"]], "cpl_discord.events.on_bulk_message_delete_abc": [[35, 1, 1, "", "OnBulkMessageDeleteABC"]], "cpl_discord.events.on_bulk_message_delete_abc.OnBulkMessageDeleteABC": [[35, 2, 1, "", "on_bulk_message_delete"]], "cpl_discord.events.on_command_abc": [[35, 1, 1, "", "OnCommandABC"]], "cpl_discord.events.on_command_abc.OnCommandABC": [[35, 2, 1, "", "on_command"]], "cpl_discord.events.on_command_completion_abc": [[35, 1, 1, "", "OnCommandCompletionABC"]], "cpl_discord.events.on_command_completion_abc.OnCommandCompletionABC": [[35, 2, 1, "", "on_command_completion"]], "cpl_discord.events.on_command_error_abc": [[35, 1, 1, "", "OnCommandErrorABC"]], "cpl_discord.events.on_command_error_abc.OnCommandErrorABC": [[35, 2, 1, "", "on_command_error"]], "cpl_discord.events.on_connect_abc": [[35, 1, 1, "", "OnConnectABC"]], "cpl_discord.events.on_connect_abc.OnConnectABC": [[35, 2, 1, "", "on_connect"]], "cpl_discord.events.on_disconnect_abc": [[35, 1, 1, "", "OnDisconnectABC"]], "cpl_discord.events.on_disconnect_abc.OnDisconnectABC": [[35, 2, 1, "", "on_disconnect"]], "cpl_discord.events.on_error_abc": [[35, 1, 1, "", "OnErrorABC"]], "cpl_discord.events.on_error_abc.OnErrorABC": [[35, 2, 1, "", "on_error"]], "cpl_discord.events.on_group_join_abc": [[35, 1, 1, "", "OnGroupJoinABC"]], "cpl_discord.events.on_group_join_abc.OnGroupJoinABC": [[35, 2, 1, "", "on_group_join"]], "cpl_discord.events.on_group_remove_abc": [[35, 1, 1, "", "OnGroupRemoveABC"]], "cpl_discord.events.on_group_remove_abc.OnGroupRemoveABC": [[35, 2, 1, "", "on_group_remove"]], "cpl_discord.events.on_guild_available_abc": [[35, 1, 1, "", "OnGuildAvailableABC"]], "cpl_discord.events.on_guild_available_abc.OnGuildAvailableABC": [[35, 2, 1, "", "on_guild_available"]], "cpl_discord.events.on_guild_channel_create_abc": [[35, 1, 1, "", "OnGuildChannelCreateABC"]], "cpl_discord.events.on_guild_channel_create_abc.OnGuildChannelCreateABC": [[35, 2, 1, "", "on_guild_channel_create"]], "cpl_discord.events.on_guild_channel_delete_abc": [[35, 1, 1, "", "OnGuildChannelDeleteABC"]], "cpl_discord.events.on_guild_channel_delete_abc.OnGuildChannelDeleteABC": [[35, 2, 1, "", "on_guild_channel_delete"]], "cpl_discord.events.on_guild_channel_pins_update_abc": [[35, 1, 1, "", "OnGuildChannelPinsUpdateABC"]], "cpl_discord.events.on_guild_channel_pins_update_abc.OnGuildChannelPinsUpdateABC": [[35, 2, 1, "", "on_guild_channel_pins_update"]], "cpl_discord.events.on_guild_channel_update_abc": [[35, 1, 1, "", "OnGuildChannelUpdateABC"]], "cpl_discord.events.on_guild_channel_update_abc.OnGuildChannelUpdateABC": [[35, 2, 1, "", "on_guild_channel_update"]], "cpl_discord.events.on_guild_emojis_update_abc": [[35, 1, 1, "", "OnGuildEmojisUpdateABC"]], "cpl_discord.events.on_guild_emojis_update_abc.OnGuildEmojisUpdateABC": [[35, 2, 1, "", "on_guild_emojis_update"]], "cpl_discord.events.on_guild_integrations_update_abc": [[35, 1, 1, "", "OnGuildIntegrationsUpdateABC"]], "cpl_discord.events.on_guild_integrations_update_abc.OnGuildIntegrationsUpdateABC": [[35, 2, 1, "", "on_guild_integrations_update"]], "cpl_discord.events.on_guild_join_abc": [[35, 1, 1, "", "OnGuildJoinABC"]], "cpl_discord.events.on_guild_join_abc.OnGuildJoinABC": [[35, 2, 1, "", "on_guild_join"]], "cpl_discord.events.on_guild_remove_abc": [[35, 1, 1, "", "OnGuildRemoveABC"]], "cpl_discord.events.on_guild_remove_abc.OnGuildRemoveABC": [[35, 2, 1, "", "on_guild_remove"]], "cpl_discord.events.on_guild_role_create_abc": [[35, 1, 1, "", "OnGuildRoleCreateABC"]], "cpl_discord.events.on_guild_role_create_abc.OnGuildRoleCreateABC": [[35, 2, 1, "", "on_guild_role_create"]], "cpl_discord.events.on_guild_role_delete_abc": [[35, 1, 1, "", "OnGuildRoleDeleteABC"]], "cpl_discord.events.on_guild_role_delete_abc.OnGuildRoleDeleteABC": [[35, 2, 1, "", "on_guild_role_delete"]], "cpl_discord.events.on_guild_role_update_abc": [[35, 1, 1, "", "OnGuildRoleUpdateABC"]], "cpl_discord.events.on_guild_role_update_abc.OnGuildRoleUpdateABC": [[35, 2, 1, "", "on_guild_role_update"]], "cpl_discord.events.on_guild_unavailable_abc": [[35, 1, 1, "", "OnGuildUnavailableABC"]], "cpl_discord.events.on_guild_unavailable_abc.OnGuildUnavailableABC": [[35, 2, 1, "", "on_guild_unavailable"]], "cpl_discord.events.on_guild_update_abc": [[35, 1, 1, "", "OnGuildUpdateABC"]], "cpl_discord.events.on_guild_update_abc.OnGuildUpdateABC": [[35, 2, 1, "", "on_guild_update"]], "cpl_discord.events.on_invite_create_abc": [[35, 1, 1, "", "OnInviteCreateABC"]], "cpl_discord.events.on_invite_create_abc.OnInviteCreateABC": [[35, 2, 1, "", "on_invite_create"]], "cpl_discord.events.on_invite_delete_abc": [[35, 1, 1, "", "OnInviteDeleteABC"]], "cpl_discord.events.on_invite_delete_abc.OnInviteDeleteABC": [[35, 2, 1, "", "on_invite_delete"]], "cpl_discord.events.on_member_ban_abc": [[35, 1, 1, "", "OnMemberBanABC"]], "cpl_discord.events.on_member_ban_abc.OnMemberBanABC": [[35, 2, 1, "", "on_member_ban"]], "cpl_discord.events.on_member_join_abc": [[35, 1, 1, "", "OnMemberJoinABC"]], "cpl_discord.events.on_member_join_abc.OnMemberJoinABC": [[35, 2, 1, "", "on_member_join"]], "cpl_discord.events.on_member_remove_abc": [[35, 1, 1, "", "OnMemberRemoveABC"]], "cpl_discord.events.on_member_remove_abc.OnMemberRemoveABC": [[35, 2, 1, "", "on_member_remove"]], "cpl_discord.events.on_member_unban_abc": [[35, 1, 1, "", "OnMemberUnbanABC"]], "cpl_discord.events.on_member_unban_abc.OnMemberUnbanABC": [[35, 2, 1, "", "on_member_unban"]], "cpl_discord.events.on_member_update_abc": [[35, 1, 1, "", "OnMemberUpdateABC"]], "cpl_discord.events.on_member_update_abc.OnMemberUpdateABC": [[35, 2, 1, "", "on_member_update"]], "cpl_discord.events.on_message_abc": [[35, 1, 1, "", "OnMessageABC"]], "cpl_discord.events.on_message_abc.OnMessageABC": [[35, 2, 1, "", "on_message"]], "cpl_discord.events.on_message_delete_abc": [[35, 1, 1, "", "OnMessageDeleteABC"]], "cpl_discord.events.on_message_delete_abc.OnMessageDeleteABC": [[35, 2, 1, "", "on_message_delete"]], "cpl_discord.events.on_message_edit_abc": [[35, 1, 1, "", "OnMessageEditABC"]], "cpl_discord.events.on_message_edit_abc.OnMessageEditABC": [[35, 2, 1, "", "on_message_edit"]], "cpl_discord.events.on_private_channel_create_abc": [[35, 1, 1, "", "OnPrivateChannelCreateABC"]], "cpl_discord.events.on_private_channel_create_abc.OnPrivateChannelCreateABC": [[35, 2, 1, "", "on_private_channel_create"]], "cpl_discord.events.on_private_channel_delete_abc": [[35, 1, 1, "", "OnPrivateChannelDeleteABC"]], "cpl_discord.events.on_private_channel_delete_abc.OnPrivateChannelDeleteABC": [[35, 2, 1, "", "on_private_channel_delete"]], "cpl_discord.events.on_private_channel_pins_update_abc": [[35, 1, 1, "", "OnPrivateChannelPinsUpdateABC"]], "cpl_discord.events.on_private_channel_pins_update_abc.OnPrivateChannelPinsUpdateABC": [[35, 2, 1, "", "on_private_channel_pins_update"]], "cpl_discord.events.on_private_channel_update_abc": [[35, 1, 1, "", "OnPrivateChannelUpdateABC"]], "cpl_discord.events.on_private_channel_update_abc.OnPrivateChannelUpdateABC": [[35, 2, 1, "", "on_private_channel_update"]], "cpl_discord.events.on_raw_reaction_add_abc": [[35, 1, 1, "", "OnRawReactionAddABC"]], "cpl_discord.events.on_raw_reaction_add_abc.OnRawReactionAddABC": [[35, 2, 1, "", "on_raw_reaction_add"]], "cpl_discord.events.on_raw_reaction_clear_abc": [[35, 1, 1, "", "OnRawReactionClearABC"]], "cpl_discord.events.on_raw_reaction_clear_abc.OnRawReactionClearABC": [[35, 2, 1, "", "on_raw_reaction_clear"]], "cpl_discord.events.on_raw_reaction_clear_emoji_abc": [[35, 1, 1, "", "OnRawReactionClearEmojiABC"]], "cpl_discord.events.on_raw_reaction_clear_emoji_abc.OnRawReactionClearEmojiABC": [[35, 2, 1, "", "on_raw_reaction_clear_emoji"]], "cpl_discord.events.on_raw_reaction_remove_abc": [[35, 1, 1, "", "OnRawReactionRemoveABC"]], "cpl_discord.events.on_raw_reaction_remove_abc.OnRawReactionRemoveABC": [[35, 2, 1, "", "on_raw_reaction_remove"]], "cpl_discord.events.on_reaction_add_abc": [[35, 1, 1, "", "OnReactionAddABC"]], "cpl_discord.events.on_reaction_add_abc.OnReactionAddABC": [[35, 2, 1, "", "on_reaction_add"]], "cpl_discord.events.on_reaction_clear_abc": [[35, 1, 1, "", "OnReactionClearABC"]], "cpl_discord.events.on_reaction_clear_abc.OnReactionClearABC": [[35, 2, 1, "", "on_reaction_clear"]], "cpl_discord.events.on_reaction_clear_emoji_abc": [[35, 1, 1, "", "OnReactionClearEmojiABC"]], "cpl_discord.events.on_reaction_clear_emoji_abc.OnReactionClearEmojiABC": [[35, 2, 1, "", "on_reaction_clear_emoji"]], "cpl_discord.events.on_reaction_remove_abc": [[35, 1, 1, "", "OnReactionRemoveABC"]], "cpl_discord.events.on_reaction_remove_abc.OnReactionRemoveABC": [[35, 2, 1, "", "on_reaction_remove"]], "cpl_discord.events.on_ready_abc": [[35, 1, 1, "", "OnReadyABC"]], "cpl_discord.events.on_ready_abc.OnReadyABC": [[35, 2, 1, "", "on_ready"]], "cpl_discord.events.on_resume_abc": [[35, 1, 1, "", "OnResumeABC"]], "cpl_discord.events.on_resume_abc.OnResumeABC": [[35, 2, 1, "", "on_resume"]], "cpl_discord.events.on_typing_abc": [[35, 1, 1, "", "OnTypingABC"]], "cpl_discord.events.on_typing_abc.OnTypingABC": [[35, 2, 1, "", "on_typing"]], "cpl_discord.events.on_user_update_abc": [[35, 1, 1, "", "OnUserUpdateABC"]], "cpl_discord.events.on_user_update_abc.OnUserUpdateABC": [[35, 2, 1, "", "on_user_update"]], "cpl_discord.events.on_voice_state_update_abc": [[35, 1, 1, "", "OnVoiceStateUpdateABC"]], "cpl_discord.events.on_voice_state_update_abc.OnVoiceStateUpdateABC": [[35, 2, 1, "", "on_voice_state_update"]], "cpl_discord.events.on_webhooks_update_abc": [[35, 1, 1, "", "OnWebhooksUpdateABC"]], "cpl_discord.events.on_webhooks_update_abc.OnWebhooksUpdateABC": [[35, 2, 1, "", "on_webhooks_update"]], "cpl_discord.helper": [[36, 0, 0, "-", "to_containers_converter"]], "cpl_discord.helper.to_containers_converter": [[36, 1, 1, "", "ToContainersConverter"]], "cpl_discord.helper.to_containers_converter.ToContainersConverter": [[36, 2, 1, "", "convert"]], "cpl_discord.service": [[37, 0, 0, "-", "command_error_handler_service"], [37, 0, 0, "-", "discord_bot_service"], [37, 0, 0, "-", "discord_bot_service_abc"], [37, 0, 0, "-", "discord_collection"], [37, 0, 0, "-", "discord_collection_abc"], [37, 0, 0, "-", "discord_service"], [37, 0, 0, "-", "discord_service_abc"]], "cpl_discord.service.command_error_handler_service": [[37, 1, 1, "", "CommandErrorHandlerService"]], "cpl_discord.service.command_error_handler_service.CommandErrorHandlerService": [[37, 2, 1, "", "on_command_error"]], "cpl_discord.service.discord_bot_service": [[37, 1, 1, "", "DiscordBotService"]], "cpl_discord.service.discord_bot_service.DiscordBotService": [[37, 3, 1, "", "guilds"], [37, 2, 1, "", "on_ready"], [37, 2, 1, "", "start_async"], [37, 2, 1, "", "stop_async"]], "cpl_discord.service.discord_bot_service_abc": [[37, 1, 1, "", "DiscordBotServiceABC"]], "cpl_discord.service.discord_bot_service_abc.DiscordBotServiceABC": [[37, 3, 1, "", "guilds"], [37, 2, 1, "", "on_ready"], [37, 2, 1, "", "start_async"], [37, 2, 1, "", "stop_async"]], "cpl_discord.service.discord_collection": [[37, 1, 1, "", "DiscordCollection"]], "cpl_discord.service.discord_collection.DiscordCollection": [[37, 2, 1, "", "add_command"], [37, 2, 1, "", "add_event"], [37, 2, 1, "", "get_commands"], [37, 2, 1, "", "get_events_by_base"]], "cpl_discord.service.discord_collection_abc": [[37, 1, 1, "", "DiscordCollectionABC"]], "cpl_discord.service.discord_collection_abc.DiscordCollectionABC": [[37, 2, 1, "", "add_command"], [37, 2, 1, "", "add_event"], [37, 2, 1, "", "get_commands"], [37, 2, 1, "", "get_events_by_base"]], "cpl_discord.service.discord_service": [[37, 1, 1, "", "DiscordService"]], "cpl_discord.service.discord_service.DiscordService": [[37, 2, 1, "", "init"], [37, 2, 1, "", "on_bulk_message_delete"], [37, 2, 1, "", "on_command"], [37, 2, 1, "", "on_command_completion"], [37, 2, 1, "", "on_command_error"], [37, 2, 1, "", "on_connect"], [37, 2, 1, "", "on_disconnect"], [37, 2, 1, "", "on_error"], [37, 2, 1, "", "on_group_join"], [37, 2, 1, "", "on_group_remove"], [37, 2, 1, "", "on_guild_available"], [37, 2, 1, "", "on_guild_channel_create"], [37, 2, 1, "", "on_guild_channel_delete"], [37, 2, 1, "", "on_guild_channel_pins_update"], [37, 2, 1, "", "on_guild_channel_update"], [37, 2, 1, "", "on_guild_emojis_update"], [37, 2, 1, "", "on_guild_integrations_update"], [37, 2, 1, "", "on_guild_join"], [37, 2, 1, "", "on_guild_remove"], [37, 2, 1, "", "on_guild_role_create"], [37, 2, 1, "", "on_guild_role_delete"], [37, 2, 1, "", "on_guild_role_update"], [37, 2, 1, "", "on_guild_unavailable"], [37, 2, 1, "", "on_guild_update"], [37, 2, 1, "", "on_invite_create"], [37, 2, 1, "", "on_invite_delete"], [37, 2, 1, "", "on_member_ban"], [37, 2, 1, "", "on_member_join"], [37, 2, 1, "", "on_member_remove"], [37, 2, 1, "", "on_member_unban"], [37, 2, 1, "", "on_member_update"], [37, 2, 1, "", "on_message"], [37, 2, 1, "", "on_message_delete"], [37, 2, 1, "", "on_message_edit"], [37, 2, 1, "", "on_private_channel_create"], [37, 2, 1, "", "on_private_channel_delete"], [37, 2, 1, "", "on_private_channel_pins_update"], [37, 2, 1, "", "on_private_channel_update"], [37, 2, 1, "", "on_raw_reaction_add"], [37, 2, 1, "", "on_raw_reaction_clear"], [37, 2, 1, "", "on_raw_reaction_clear_emoji"], [37, 2, 1, "", "on_raw_reaction_remove"], [37, 2, 1, "", "on_reaction_add"], [37, 2, 1, "", "on_reaction_clear"], [37, 2, 1, "", "on_reaction_clear_emoji"], [37, 2, 1, "", "on_reaction_remove"], [37, 2, 1, "", "on_ready"], [37, 2, 1, "", "on_resume"], [37, 2, 1, "", "on_typing"], [37, 2, 1, "", "on_user_update"], [37, 2, 1, "", "on_voice_state_update"], [37, 2, 1, "", "on_webhooks_update"]], "cpl_discord.service.discord_service_abc": [[37, 1, 1, "", "DiscordServiceABC"]], "cpl_discord.service.discord_service_abc.DiscordServiceABC": [[37, 2, 1, "", "init"], [37, 2, 1, "", "on_bulk_message_delete"], [37, 2, 1, "", "on_command"], [37, 2, 1, "", "on_command_completion"], [37, 2, 1, "", "on_command_error"], [37, 2, 1, "", "on_connect"], [37, 2, 1, "", "on_disconnect"], [37, 2, 1, "", "on_error"], [37, 2, 1, "", "on_group_join"], [37, 2, 1, "", "on_group_remove"], [37, 2, 1, "", "on_guild_available"], [37, 2, 1, "", "on_guild_channel_create"], [37, 2, 1, "", "on_guild_channel_delete"], [37, 2, 1, "", "on_guild_channel_pins_update"], [37, 2, 1, "", "on_guild_channel_update"], [37, 2, 1, "", "on_guild_emojis_update"], [37, 2, 1, "", "on_guild_integrations_update"], [37, 2, 1, "", "on_guild_join"], [37, 2, 1, "", "on_guild_remove"], [37, 2, 1, "", "on_guild_role_create"], [37, 2, 1, "", "on_guild_role_delete"], [37, 2, 1, "", "on_guild_role_update"], [37, 2, 1, "", "on_guild_unavailable"], [37, 2, 1, "", "on_guild_update"], [37, 2, 1, "", "on_invite_create"], [37, 2, 1, "", "on_invite_delete"], [37, 2, 1, "", "on_member_ban"], [37, 2, 1, "", "on_member_join"], [37, 2, 1, "", "on_member_remove"], [37, 2, 1, "", "on_member_unban"], [37, 2, 1, "", "on_member_update"], [37, 2, 1, "", "on_message"], [37, 2, 1, "", "on_message_delete"], [37, 2, 1, "", "on_message_edit"], [37, 2, 1, "", "on_private_channel_create"], [37, 2, 1, "", "on_private_channel_delete"], [37, 2, 1, "", "on_private_channel_pins_update"], [37, 2, 1, "", "on_private_channel_update"], [37, 2, 1, "", "on_reaction_add"], [37, 2, 1, "", "on_reaction_clear"], [37, 2, 1, "", "on_reaction_clear_emoji"], [37, 2, 1, "", "on_reaction_remove"], [37, 2, 1, "", "on_ready"], [37, 2, 1, "", "on_resume"], [37, 2, 1, "", "on_typing"], [37, 2, 1, "", "on_user_update"], [37, 2, 1, "", "on_voice_state_update"], [37, 2, 1, "", "on_webhooks_update"]], "cpl_query.base": [[39, 0, 0, "-", "default_lambda"], [39, 0, 0, "-", "ordered_queryable"], [39, 0, 0, "-", "ordered_queryable_abc"], [39, 0, 0, "-", "queryable_abc"], [39, 0, 0, "-", "sequence_abc"], [39, 0, 0, "-", "sequence_values"]], "cpl_query.base.default_lambda": [[39, 5, 1, "", "default_lambda"]], "cpl_query.base.ordered_queryable": [[39, 1, 1, "", "OrderedQueryable"]], "cpl_query.base.ordered_queryable.OrderedQueryable": [[39, 2, 1, "", "then_by"], [39, 2, 1, "", "then_by_descending"]], "cpl_query.base.ordered_queryable_abc": [[39, 1, 1, "", "OrderedQueryableABC"]], "cpl_query.base.ordered_queryable_abc.OrderedQueryableABC": [[39, 2, 1, "", "then_by"], [39, 2, 1, "", "then_by_descending"]], "cpl_query.base.queryable_abc": [[39, 1, 1, "", "QueryableABC"]], "cpl_query.base.queryable_abc.QueryableABC": [[39, 2, 1, "", "all"], [39, 2, 1, "", "any"], [39, 2, 1, "", "average"], [39, 2, 1, "", "contains"], [39, 2, 1, "", "count"], [39, 2, 1, "", "distinct"], [39, 2, 1, "", "element_at"], [39, 2, 1, "", "element_at_or_default"], [39, 2, 1, "", "first"], [39, 2, 1, "", "first_or_default"], [39, 2, 1, "", "for_each"], [39, 2, 1, "", "group_by"], [39, 2, 1, "", "last"], [39, 2, 1, "", "last_or_default"], [39, 2, 1, "", "max"], [39, 2, 1, "", "median"], [39, 2, 1, "", "min"], [39, 2, 1, "", "order_by"], [39, 2, 1, "", "order_by_descending"], [39, 2, 1, "", "reverse"], [39, 2, 1, "", "select"], [39, 2, 1, "", "select_many"], [39, 2, 1, "", "single"], [39, 2, 1, "", "single_or_default"], [39, 2, 1, "", "skip"], [39, 2, 1, "", "skip_last"], [39, 2, 1, "", "sum"], [39, 2, 1, "", "take"], [39, 2, 1, "", "take_last"], [39, 2, 1, "", "where"]], "cpl_query.base.sequence_abc": [[39, 1, 1, "", "SequenceABC"]], "cpl_query.base.sequence_abc.SequenceABC": [[39, 2, 1, "", "copy"], [39, 2, 1, "", "empty"], [39, 2, 1, "", "index"], [39, 2, 1, "", "next"], [39, 2, 1, "", "range"], [39, 2, 1, "", "to_list"], [39, 3, 1, "", "type"]], "cpl_query.base.sequence_values": [[39, 1, 1, "", "SequenceValues"]], "cpl_query.base.sequence_values.SequenceValues": [[39, 2, 1, "", "next"], [39, 2, 1, "", "reset"]], "cpl_query.enumerable": [[40, 0, 0, "-", "enumerable"], [40, 0, 0, "-", "enumerable_abc"]], "cpl_query.enumerable.enumerable": [[40, 1, 1, "", "Enumerable"]], "cpl_query.enumerable.enumerable_abc": [[40, 1, 1, "", "EnumerableABC"]], "cpl_query.enumerable.enumerable_abc.EnumerableABC": [[40, 2, 1, "", "set_remove_error_check"], [40, 2, 1, "", "to_iterable"]], "cpl_query.extension": [[41, 0, 0, "-", "list"]], "cpl_query.extension.list": [[41, 1, 1, "", "List"]], "cpl_query.extension.list.List": [[41, 2, 1, "", "to_enumerable"], [41, 2, 1, "", "to_iterable"]], "cpl_query.iterable": [[42, 0, 0, "-", "iterable"], [42, 0, 0, "-", "iterable_abc"]], "cpl_query.iterable.iterable": [[42, 1, 1, "", "Iterable"]], "cpl_query.iterable.iterable_abc": [[42, 1, 1, "", "IterableABC"]], "cpl_query.iterable.iterable_abc.IterableABC": [[42, 2, 1, "", "add"], [42, 2, 1, "", "append"], [42, 2, 1, "", "extend"], [42, 2, 1, "", "remove"], [42, 2, 1, "", "to_enumerable"], [42, 3, 1, "", "type"]], "cpl_translation": [[43, 0, 0, "-", "translate_pipe"], [43, 0, 0, "-", "translation_service"], [43, 0, 0, "-", "translation_service_abc"], [43, 0, 0, "-", "translation_settings"]], "cpl_translation.translate_pipe": [[43, 1, 1, "", "TranslatePipe"]], "cpl_translation.translate_pipe.TranslatePipe": [[43, 2, 1, "", "transform"]], "cpl_translation.translation_service": [[43, 1, 1, "", "TranslationService"]], "cpl_translation.translation_service.TranslationService": [[43, 2, 1, "", "load"], [43, 2, 1, "", "load_by_settings"], [43, 2, 1, "", "set_default_lang"], [43, 2, 1, "", "set_lang"], [43, 2, 1, "", "translate"]], "cpl_translation.translation_service_abc": [[43, 1, 1, "", "TranslationServiceABC"]], "cpl_translation.translation_service_abc.TranslationServiceABC": [[43, 2, 1, "", "load"], [43, 2, 1, "", "load_by_settings"], [43, 2, 1, "", "set_default_lang"], [43, 2, 1, "", "set_lang"], [43, 2, 1, "", "translate"]], "cpl_translation.translation_settings": [[43, 1, 1, "", "TranslationSettings"]], "cpl_translation.translation_settings.TranslationSettings": [[43, 3, 1, "", "default_language"], [43, 2, 1, "", "from_dict"], [43, 3, 1, "", "languages"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:property", "4": "py:attribute", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "property", "Python property"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "function", "Python function"]}, "titleterms": {"cpl": [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 45, 46, 47, 48], "add": 0, "content": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 48, 49], "descript": [0, 1, 2, 3, 4, 5, 7, 8, 11], "argument": [0, 2, 3, 4, 8, 11, 53], "flag": [0, 4, 5, 8, 11, 12], "build": 1, "gener": 2, "schemat": [2, 6], "help": 3, "instal": [4, 49], "new": 5, "project": [5, 48], "type": 5, "cli": [6, 15, 49], "overview": [6, 46], "command": [6, 32], "refer": [6, 15, 16, 30, 38, 43], "tabl": [6, 48, 49], "basic": 6, "workflow": 6, "languag": 6, "syntax": 6, "rel": 6, "path": 6, "publish": 7, "remov": 8, "run": 9, "start": [10, 44, 48, 49], "uninstal": 11, "updat": 12, "version": 13, "contribut": 14, "found": 14, "bug": 14, "featur": [14, 45, 46], "request": 14, "submiss": 14, "guidelin": 14, "submit": 14, "an": 14, "issu": 14, "pull": 14, "review": 14, "address": 14, "feedback": 14, "code": 14, "rule": 14, "licens": 14, "api": 16, "cpl_core": [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 52], "applic": [17, 31, 55], "application_abc": 17, "application_build": 17, "application_builder_abc": 17, "startup_abc": 17, "configur": [18, 33], "configuration_abc": 18, "configuration_model_abc": 18, "configuration_variable_name_enum": 18, "console_argu": 18, "consol": [19, 49, 52, 53], "background_color_enum": 19, "console_cal": 19, "foreground_color_enum": 19, "spinner_thread": 19, "databas": [20, 21, 22], "database_model": 20, "database_set": 20, "database_settings_name_enum": 20, "connect": 21, "database_connect": 21, "database_connection_abc": 21, "context": 22, "database_context": 22, "database_context_abc": 22, "dependency_inject": 23, "service_collect": 23, "service_collection_abc": 23, "service_descriptor": 23, "service_lifetime_enum": 23, "service_provid": 23, "service_provider_abc": 23, "environ": [24, 49], "application_environ": 24, "application_environment_abc": 24, "environment_name_enum": 24, "log": 25, "logger_abc": 25, "logger_servic": 25, "logging_level_enum": 25, "logging_set": 25, "logging_settings_name_enum": 25, "mail": [26, 58], "email": 26, "email_client_abc": 26, "email_client_servic": 26, "email_client_set": 26, "email_client_settings_name_enum": 26, "pipe": 27, "bool_pip": 27, "first_char_to_lower_pip": 27, "first_to_upper_pip": 27, "ip_address_pip": 27, "pipe_abc": 27, "to_camel_case_pip": 27, "to_snake_case_pip": 27, "version_pip": 27, "time": 28, "time_format_set": 28, "time_format_settings_names_enum": 28, "util": 29, "credential_manag": 29, "pip": 29, "string": 29, "discord": 30, "cpl_discord": [31, 32, 33, 34, 35, 36, 37], "discord_bot_application_abc": 31, "discord_command_abc": 32, "discord_commands_meta": 32, "discord_bot_set": 33, "contain": 34, "category_channel": 34, "guild": 34, "member": 34, "role": 34, "text_channel": 34, "thread": 34, "voice_channel": 34, "event": 35, "on_bulk_message_delete_abc": 35, "on_command_abc": 35, "on_command_completion_abc": 35, "on_command_error_abc": 35, "on_connect_abc": 35, "on_disconnect_abc": 35, "on_error_abc": 35, "on_group_join_abc": 35, "on_group_remove_abc": 35, "on_guild_available_abc": 35, "on_guild_channel_create_abc": 35, "on_guild_channel_delete_abc": 35, "on_guild_channel_pins_update_abc": 35, "on_guild_channel_update_abc": 35, "on_guild_emojis_update_abc": 35, "on_guild_integrations_update_abc": 35, "on_guild_join_abc": 35, "on_guild_remove_abc": 35, "on_guild_role_create_abc": 35, "on_guild_role_delete_abc": 35, "on_guild_role_update_abc": 35, "on_guild_unavailable_abc": 35, "on_guild_update_abc": 35, "on_invite_create_abc": 35, "on_invite_delete_abc": 35, "on_member_ban_abc": 35, "on_member_join_abc": 35, "on_member_remove_abc": 35, "on_member_unban_abc": 35, "on_member_update_abc": 35, "on_message_abc": 35, "on_message_delete_abc": 35, "on_message_edit_abc": 35, "on_private_channel_create_abc": 35, "on_private_channel_delete_abc": 35, "on_private_channel_pins_update_abc": 35, "on_private_channel_update_abc": 35, "on_raw_reaction_add_abc": 35, "on_raw_reaction_clear_abc": 35, "on_raw_reaction_clear_emoji_abc": 35, "on_raw_reaction_remove_abc": 35, "on_reaction_add_abc": 35, "on_reaction_clear_abc": 35, "on_reaction_clear_emoji_abc": 35, "on_reaction_remove_abc": 35, "on_ready_abc": 35, "on_resume_abc": 35, "on_typing_abc": 35, "on_user_update_abc": 35, "on_voice_state_update_abc": 35, "on_webhooks_update_abc": 35, "helper": 36, "to_containers_convert": 36, "servic": 37, "command_error_handler_servic": 37, "discord_bot_servic": 37, "discord_bot_service_abc": 37, "discord_collect": 37, "discord_collection_abc": 37, "discord_servic": 37, "discord_service_abc": 37, "queri": [38, 49], "cpl_queri": [39, 40, 41, 42], "base": 39, "default_lambda": 39, "ordered_query": 39, "ordered_queryable_abc": 39, "queryable_abc": 39, "sequence_abc": 39, "sequence_valu": 39, "enumer": 40, "enumerable_abc": 40, "extens": 41, "list": 41, "iter": 42, "iterable_abc": 42, "translat": 43, "cpl_translat": 43, "translate_pip": 43, "translation_servic": 43, "translation_service_abc": 43, "translation_set": 43, "get": [44, 48], "introduct": [45, 46], "doc": [45, 46], "manual": 45, "explor": 46, "prerequisit": [48, 49], "creat": [48, 49, 54], "menu": 48, "what": [48, 49], "s": [48, 49], "next": [48, 49], "set": 49, "up": 49, "local": 49, "workspac": 49, "packag": 49, "initi": 49, "app": 49, "librari": 49, "tutori": 50, "us": [51, 52, 57], "appset": 51, "json": 51, "com": [51, 52, 53, 54, 55, 56, 57, 58], "soon": [51, 52, 53, 54, 55, 56, 57, 58], "handl": 53, "startup": [54, 56], "class": 54, "extend": [55, 56], "builtin": 57, "logger": 57, "send": 58}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}}) \ No newline at end of file diff --git a/docs/build/html/setup.html b/docs/build/html/setup.html index 4fd1c85a..330b7c84 100644 --- a/docs/build/html/setup.html +++ b/docs/build/html/setup.html @@ -58,9 +58,11 @@
  184. Contributing to CPL
  185. -
  186. CLI Reference
  187. -
  188. API Reference
  189. -
  190. Query Reference
  191. +
  192. CLI reference
  193. +
  194. API reference
  195. +
  196. Discord reference
  197. +
  198. Query reference
  199. +
  200. Translation reference
  201. @@ -118,7 +120,7 @@

    Install the package

    To install the package, open a terminal window and run the following command:

    -
    pip install sh_cpl-core --extra-index-url https://pip.sh-edraft.de
    +
    pip install cpl-core --extra-index-url https://pip.sh-edraft.de
     
    @@ -126,14 +128,14 @@

    Install the CLI

    You use the CPL CLI to create projects, generate application and library code. You also use the CLI to build and publish your python packages.

    To install the CLI, open a terminal window and run the following command:

    -
    pip install sh_cpl-cli --extra-index-url https://pip.sh-edraft.de
    +
    pip install cpl-cli --extra-index-url https://pip.sh-edraft.de
     

    Install the query

    To install the package, open a terminal window and run the following command:

    -
    pip install sh_cpl-query --extra-index-url https://pip.sh-edraft.de
    +
    pip install cpl-query --extra-index-url https://pip.sh-edraft.de
     
    @@ -206,7 +208,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/tutorials.appsettings.html b/docs/build/html/tutorials.appsettings.html index f3326ff6..0b42a876 100644 --- a/docs/build/html/tutorials.appsettings.html +++ b/docs/build/html/tutorials.appsettings.html @@ -60,9 +60,11 @@
  202. Contributing to CPL
  203. -
  204. CLI Reference
  205. -
  206. API Reference
  207. -
  208. Query Reference
  209. +
  210. CLI reference
  211. +
  212. API reference
  213. +
  214. Discord reference
  215. +
  216. Query reference
  217. +
  218. Translation reference
  219. @@ -109,7 +111,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/tutorials.console-arguments.html b/docs/build/html/tutorials.console-arguments.html index 435572ca..01cb18f3 100644 --- a/docs/build/html/tutorials.console-arguments.html +++ b/docs/build/html/tutorials.console-arguments.html @@ -60,9 +60,11 @@
  220. Contributing to CPL
  221. -
  222. CLI Reference
  223. -
  224. API Reference
  225. -
  226. Query Reference
  227. +
  228. CLI reference
  229. +
  230. API reference
  231. +
  232. Discord reference
  233. +
  234. Query reference
  235. +
  236. Translation reference
  237. @@ -109,7 +111,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/tutorials.console.html b/docs/build/html/tutorials.console.html index a3442f07..7b9ef50b 100644 --- a/docs/build/html/tutorials.console.html +++ b/docs/build/html/tutorials.console.html @@ -60,9 +60,11 @@
  238. Contributing to CPL
  239. -
  240. CLI Reference
  241. -
  242. API Reference
  243. -
  244. Query Reference
  245. +
  246. CLI reference
  247. +
  248. API reference
  249. +
  250. Discord reference
  251. +
  252. Query reference
  253. +
  254. Translation reference
  255. @@ -109,7 +111,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/tutorials.create-startup.html b/docs/build/html/tutorials.create-startup.html index 2feee349..98beb078 100644 --- a/docs/build/html/tutorials.create-startup.html +++ b/docs/build/html/tutorials.create-startup.html @@ -60,9 +60,11 @@
  256. Contributing to CPL
  257. -
  258. CLI Reference
  259. -
  260. API Reference
  261. -
  262. Query Reference
  263. +
  264. CLI reference
  265. +
  266. API reference
  267. +
  268. Discord reference
  269. +
  270. Query reference
  271. +
  272. Translation reference
  273. @@ -109,7 +111,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/tutorials.extend-application.html b/docs/build/html/tutorials.extend-application.html index ecdb0e88..40d36232 100644 --- a/docs/build/html/tutorials.extend-application.html +++ b/docs/build/html/tutorials.extend-application.html @@ -60,9 +60,11 @@
  274. Contributing to CPL
  275. -
  276. CLI Reference
  277. -
  278. API Reference
  279. -
  280. Query Reference
  281. +
  282. CLI reference
  283. +
  284. API reference
  285. +
  286. Discord reference
  287. +
  288. Query reference
  289. +
  290. Translation reference
  291. @@ -109,7 +111,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/tutorials.extend-startup.html b/docs/build/html/tutorials.extend-startup.html index 4a37bfaf..660a1afb 100644 --- a/docs/build/html/tutorials.extend-startup.html +++ b/docs/build/html/tutorials.extend-startup.html @@ -60,9 +60,11 @@
  292. Contributing to CPL
  293. -
  294. CLI Reference
  295. -
  296. API Reference
  297. -
  298. Query Reference
  299. +
  300. CLI reference
  301. +
  302. API reference
  303. +
  304. Discord reference
  305. +
  306. Query reference
  307. +
  308. Translation reference
  309. @@ -109,7 +111,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/tutorials.html b/docs/build/html/tutorials.html index 458940a3..141e20c5 100644 --- a/docs/build/html/tutorials.html +++ b/docs/build/html/tutorials.html @@ -57,9 +57,11 @@
  310. Contributing to CPL
  311. -
  312. CLI Reference
  313. -
  314. API Reference
  315. -
  316. Query Reference
  317. +
  318. CLI reference
  319. +
  320. API reference
  321. +
  322. Discord reference
  323. +
  324. Query reference
  325. +
  326. Translation reference
  327. @@ -138,7 +140,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/tutorials.logging.html b/docs/build/html/tutorials.logging.html index bb948b54..d88b255f 100644 --- a/docs/build/html/tutorials.logging.html +++ b/docs/build/html/tutorials.logging.html @@ -60,9 +60,11 @@
  328. Contributing to CPL
  329. -
  330. CLI Reference
  331. -
  332. API Reference
  333. -
  334. Query Reference
  335. +
  336. CLI reference
  337. +
  338. API reference
  339. +
  340. Discord reference
  341. +
  342. Query reference
  343. +
  344. Translation reference
  345. @@ -109,7 +111,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/build/html/tutorials.mail.html b/docs/build/html/tutorials.mail.html index 65cf0ca5..c1c39f37 100644 --- a/docs/build/html/tutorials.mail.html +++ b/docs/build/html/tutorials.mail.html @@ -60,9 +60,11 @@
  346. Contributing to CPL
  347. -
  348. CLI Reference
  349. -
  350. API Reference
  351. -
  352. Query Reference
  353. +
  354. CLI reference
  355. +
  356. API reference
  357. +
  358. Discord reference
  359. +
  360. Query reference
  361. +
  362. Translation reference
  363. @@ -109,7 +111,7 @@
    -

    © Copyright 2021, Sven Heidemann.

    +

    © Copyright 2021 - 2023, Sven Heidemann.

    Built with Sphinx using a diff --git a/docs/source/cli.generate.md b/docs/source/cli.generate.md index 40d79fdf..95a1cb51 100644 --- a/docs/source/cli.generate.md +++ b/docs/source/cli.generate.md @@ -18,10 +18,11 @@ Generates files based on a schematic. ## Arguments -| Argument | Description | Value type | -| ----------------- |:---------------------------------:|:-------------:| -| `````` | The schematic to generate. | ```str``` | -| `````` | The name of the generated file. | ```str``` | +| Argument | Description | Value type | +|-------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:-------------:| +| `````` | The schematic to generate. | ```str``` | +| `````` | The name of the generated file. | ```str``` | +| ```--base``` | First element of path will be used as base-path not 'src'. For example: 'cpl g c test/Test' will be created at ```src/test/``` with --base it would be ```test/``` | ```str``` | ## Schematics diff --git a/docs/source/cli.new.md b/docs/source/cli.new.md index 2ddcb9e7..f000dcd6 100644 --- a/docs/source/cli.new.md +++ b/docs/source/cli.new.md @@ -18,10 +18,11 @@ Generates a workspace and initial project or add a project to workspace. If the command is running in a CPL workspace, it will add the new project to the workspace. -| Argument | Description | Value type | -|--------------|:----------------------------------------------------:|:----------:| -| `````` | The type of the project, see [types](#project-types) | ```str``` | -| `````` | The name of the project | ```str``` | +| Argument | Description | Value type | +|--------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:----------:| +| `````` | The type of the project, see [types](#project-types) | ```str``` | +| `````` | The name of the project | ```str``` | +| ```--base``` | First element of path will be used as base-path not 'src'. For example: 'cpl g c test/Test' will be created at ```src/test/``` with --base it would be ```test/``` | ```str``` | ## Project types diff --git a/docs/source/cli.run.md b/docs/source/cli.run.md new file mode 100644 index 00000000..5782a7a4 --- /dev/null +++ b/docs/source/cli.run.md @@ -0,0 +1,12 @@ +# cpl run + +Starts your application once. + +cpl **run**
    +cpl **r**
    +cpl **R** + +| Argument | Description | Value type | +|-----------------|:----------------------------------------------------------------------------------------------------:|:----------:| +| `````` | Optional parameter to specify which project to start, if not set default project will be started. | ```str``` | +| ```--dev``` | To run the project from source and not from dist after build. | ```str``` | \ No newline at end of file diff --git a/docs/source/cli.start.md b/docs/source/cli.start.md index 2b067bfb..961feef1 100644 --- a/docs/source/cli.start.md +++ b/docs/source/cli.start.md @@ -5,3 +5,7 @@ Starts your application, restarting on file changes. cpl **start**
    cpl **s**
    cpl **S** + +| Argument | Description | Value type | +|-----------------|:----------------------------------------------------------------------------------------------------:|:----------:| +| ```--dev``` | To run the project from source and not from dist after build. | ```str``` | \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index 6954834c..00747705 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -15,16 +15,15 @@ # sys.path.insert(0, os.path.abspath('.')) import os import sys -sys.path.insert(0, os.path.abspath('../../src/')) +sys.path.insert(0, os.path.abspath('../../src/')) # -- Project information ----------------------------------------------------- project = 'Common Python Library' -copyright = '2021, Sven Heidemann' +copyright = '2021 - 2023, Sven Heidemann' author = 'Sven Heidemann' - # -- General configuration --------------------------------------------------- # Add any Sphinx extension names here, as strings. They can be @@ -56,7 +55,6 @@ exclude_patterns = [ 'tests/*' ] - # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for diff --git a/docs/source/cpl_cli.rst b/docs/source/cpl_cli.rst index 338ba5c2..cec12291 100644 --- a/docs/source/cpl_cli.rst +++ b/docs/source/cpl_cli.rst @@ -1,4 +1,4 @@ -CLI Reference +CLI reference ============= .. toctree:: diff --git a/docs/source/cpl_core.database.rst b/docs/source/cpl_core.database.rst index fb55c962..cdcb0ce8 100644 --- a/docs/source/cpl_core.database.rst +++ b/docs/source/cpl_core.database.rst @@ -7,8 +7,7 @@ cpl_core.database cpl_core.database.connection cpl_core.database.context -Submodules ----------- + cpl_core.database.database\_model ----------------------------------- diff --git a/docs/source/cpl_core.pipes.rst b/docs/source/cpl_core.pipes.rst index 8af5814b..0a8bba4d 100644 --- a/docs/source/cpl_core.pipes.rst +++ b/docs/source/cpl_core.pipes.rst @@ -1,10 +1,9 @@ cpl\_core.pipes ======================= -Submodules ----------- -cpl\_core.pipes.bool\_pipe module + +cpl\_core.pipes.bool\_pipe --------------------------------- .. automodule:: cpl_core.pipes.bool_pipe @@ -12,7 +11,7 @@ cpl\_core.pipes.bool\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.first\_char\_to\_lower\_pipe module +cpl\_core.pipes.first\_char\_to\_lower\_pipe --------------------------------------------------- .. automodule:: cpl_core.pipes.first_char_to_lower_pipe @@ -20,7 +19,7 @@ cpl\_core.pipes.first\_char\_to\_lower\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.first\_to\_upper\_pipe module +cpl\_core.pipes.first\_to\_upper\_pipe --------------------------------------------- .. automodule:: cpl_core.pipes.first_to_upper_pipe @@ -28,7 +27,7 @@ cpl\_core.pipes.first\_to\_upper\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.ip\_address\_pipe module +cpl\_core.pipes.ip\_address\_pipe ---------------------------------------- .. automodule:: cpl_core.pipes.ip_address_pipe @@ -36,7 +35,7 @@ cpl\_core.pipes.ip\_address\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.pipe\_abc module +cpl\_core.pipes.pipe\_abc -------------------------------- .. automodule:: cpl_core.pipes.pipe_abc @@ -44,7 +43,7 @@ cpl\_core.pipes.pipe\_abc module :undoc-members: :show-inheritance: -cpl\_core.pipes.to\_camel\_case\_pipe module +cpl\_core.pipes.to\_camel\_case\_pipe -------------------------------------------- .. automodule:: cpl_core.pipes.to_camel_case_pipe @@ -52,7 +51,7 @@ cpl\_core.pipes.to\_camel\_case\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.to\_snake\_case\_pipe module +cpl\_core.pipes.to\_snake\_case\_pipe -------------------------------------------- .. automodule:: cpl_core.pipes.to_snake_case_pipe @@ -60,18 +59,10 @@ cpl\_core.pipes.to\_snake\_case\_pipe module :undoc-members: :show-inheritance: -cpl\_core.pipes.version\_pipe module +cpl\_core.pipes.version\_pipe ------------------------------------ .. automodule:: cpl_core.pipes.version_pipe :members: :undoc-members: :show-inheritance: - -Module contents ---------------- - -.. automodule:: cpl_core.pipes - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/cpl_core.rst b/docs/source/cpl_core.rst index a71547b3..e1e9b11a 100644 --- a/docs/source/cpl_core.rst +++ b/docs/source/cpl_core.rst @@ -1,4 +1,4 @@ -API Reference +API reference =========== .. toctree:: diff --git a/docs/source/cpl_discord.application.rst b/docs/source/cpl_discord.application.rst new file mode 100644 index 00000000..ef077d22 --- /dev/null +++ b/docs/source/cpl_discord.application.rst @@ -0,0 +1,12 @@ +cpl\_discord.application +================================ + + + +cpl\_discord.application.discord\_bot\_application\_abc +-------------------------------------------------------------- + +.. automodule:: cpl_discord.application.discord_bot_application_abc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cpl_discord.command.rst b/docs/source/cpl_discord.command.rst new file mode 100644 index 00000000..5f495733 --- /dev/null +++ b/docs/source/cpl_discord.command.rst @@ -0,0 +1,20 @@ +cpl\_discord.command +============================ + + + +cpl\_discord.command.discord\_command\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.command.discord_command_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.command.discord\_commands\_meta +--------------------------------------------------- + +.. automodule:: cpl_discord.command.discord_commands_meta + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cpl_discord.configuration.rst b/docs/source/cpl_discord.configuration.rst new file mode 100644 index 00000000..eb855d14 --- /dev/null +++ b/docs/source/cpl_discord.configuration.rst @@ -0,0 +1,12 @@ +cpl\_discord.configuration +================================== + + + +cpl\_discord.configuration.discord\_bot\_settings +-------------------------------------------------------- + +.. automodule:: cpl_discord.configuration.discord_bot_settings + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cpl_discord.container.rst b/docs/source/cpl_discord.container.rst new file mode 100644 index 00000000..a47f50b1 --- /dev/null +++ b/docs/source/cpl_discord.container.rst @@ -0,0 +1,68 @@ +cpl\_discord.container +============================== + + + +cpl\_discord.container.category\_channel +----------------------------------------------- + +.. automodule:: cpl_discord.container.category_channel + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.container +--------------------------------------- + +.. automodule:: cpl_discord.container.container + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.guild +----------------------------------- + +.. automodule:: cpl_discord.container.guild + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.member +------------------------------------ + +.. automodule:: cpl_discord.container.member + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.role +---------------------------------- + +.. automodule:: cpl_discord.container.role + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.text\_channel +------------------------------------------- + +.. automodule:: cpl_discord.container.text_channel + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.thread +------------------------------------ + +.. automodule:: cpl_discord.container.thread + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.container.voice\_channel +-------------------------------------------- + +.. automodule:: cpl_discord.container.voice_channel + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cpl_discord.events.rst b/docs/source/cpl_discord.events.rst new file mode 100644 index 00000000..d26aa744 --- /dev/null +++ b/docs/source/cpl_discord.events.rst @@ -0,0 +1,412 @@ +cpl\_discord.events +=========================== + + + +cpl\_discord.events.on\_bulk\_message\_delete\_abc +--------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_bulk_message_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_command\_abc +------------------------------------------- + +.. automodule:: cpl_discord.events.on_command_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_command\_completion\_abc +------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_command_completion_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_command\_error\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_command_error_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_connect\_abc +------------------------------------------- + +.. automodule:: cpl_discord.events.on_connect_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_disconnect\_abc +---------------------------------------------- + +.. automodule:: cpl_discord.events.on_disconnect_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_error\_abc +----------------------------------------- + +.. automodule:: cpl_discord.events.on_error_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_group\_join\_abc +----------------------------------------------- + +.. automodule:: cpl_discord.events.on_group_join_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_group\_remove\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_group_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_available\_abc +---------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_available_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_channel\_create\_abc +---------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_channel_create_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_channel\_delete\_abc +---------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_channel_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_channel\_pins\_update\_abc +---------------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_channel_pins_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_channel\_update\_abc +---------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_channel_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_emojis\_update\_abc +--------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_emojis_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_integrations\_update\_abc +--------------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_integrations_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_join\_abc +----------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_join_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_remove\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_role\_create\_abc +------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_role_create_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_role\_delete\_abc +------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_role_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_role\_update\_abc +------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_role_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_unavailable\_abc +------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_guild_unavailable_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_guild\_update\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_guild_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_invite\_create\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_invite_create_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_invite\_delete\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_invite_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_ban\_abc +----------------------------------------------- + +.. automodule:: cpl_discord.events.on_member_ban_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_join\_abc +------------------------------------------------ + +.. automodule:: cpl_discord.events.on_member_join_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_remove\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_member_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_unban\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_member_unban_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_member\_update\_abc +-------------------------------------------------- + +.. automodule:: cpl_discord.events.on_member_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_message\_abc +------------------------------------------- + +.. automodule:: cpl_discord.events.on_message_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_message\_delete\_abc +--------------------------------------------------- + +.. automodule:: cpl_discord.events.on_message_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_message\_edit\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_message_edit_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_private\_channel\_create\_abc +------------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_private_channel_create_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_private\_channel\_delete\_abc +------------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_private_channel_delete_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_private\_channel\_pins\_update\_abc +------------------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_private_channel_pins_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_private\_channel\_update\_abc +------------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_private_channel_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_raw\_reaction\_add\_abc +------------------------------------------------------ + +.. automodule:: cpl_discord.events.on_raw_reaction_add_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_raw\_reaction\_clear\_abc +-------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_raw_reaction_clear_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_raw\_reaction\_clear\_emoji\_abc +--------------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_raw_reaction_clear_emoji_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_raw\_reaction\_remove\_abc +--------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_raw_reaction_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_reaction\_add\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.events.on_reaction_add_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_reaction\_clear\_abc +--------------------------------------------------- + +.. automodule:: cpl_discord.events.on_reaction_clear_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_reaction\_clear\_emoji\_abc +---------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_reaction_clear_emoji_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_reaction\_remove\_abc +---------------------------------------------------- + +.. automodule:: cpl_discord.events.on_reaction_remove_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_ready\_abc +----------------------------------------- + +.. automodule:: cpl_discord.events.on_ready_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_resume\_abc +------------------------------------------ + +.. automodule:: cpl_discord.events.on_resume_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_typing\_abc +------------------------------------------ + +.. automodule:: cpl_discord.events.on_typing_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_user\_update\_abc +------------------------------------------------ + +.. automodule:: cpl_discord.events.on_user_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_voice\_state\_update\_abc +-------------------------------------------------------- + +.. automodule:: cpl_discord.events.on_voice_state_update_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.events.on\_webhooks\_update\_abc +---------------------------------------------------- + +.. automodule:: cpl_discord.events.on_webhooks_update_abc + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/source/cpl_discord.helper.rst b/docs/source/cpl_discord.helper.rst new file mode 100644 index 00000000..396b4c89 --- /dev/null +++ b/docs/source/cpl_discord.helper.rst @@ -0,0 +1,12 @@ +cpl\_discord.helper +=========================== + + + +cpl\_discord.helper.to\_containers\_converter +---------------------------------------------------- + +.. automodule:: cpl_discord.helper.to_containers_converter + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cpl_discord.rst b/docs/source/cpl_discord.rst new file mode 100644 index 00000000..5d10fb20 --- /dev/null +++ b/docs/source/cpl_discord.rst @@ -0,0 +1,13 @@ +Discord reference +==================== + +.. toctree:: + :maxdepth: 4 + + cpl_discord.application + cpl_discord.command + cpl_discord.configuration + cpl_discord.container + cpl_discord.events + cpl_discord.helper + cpl_discord.service diff --git a/docs/source/cpl_discord.service.rst b/docs/source/cpl_discord.service.rst new file mode 100644 index 00000000..a6898292 --- /dev/null +++ b/docs/source/cpl_discord.service.rst @@ -0,0 +1,60 @@ +cpl\_discord.service +============================ + + + +cpl\_discord.service.command\_error\_handler\_service +------------------------------------------------------------ + +.. automodule:: cpl_discord.service.command_error_handler_service + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_bot\_service +------------------------------------------------- + +.. automodule:: cpl_discord.service.discord_bot_service + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_bot\_service\_abc +------------------------------------------------------ + +.. automodule:: cpl_discord.service.discord_bot_service_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_collection +----------------------------------------------- + +.. automodule:: cpl_discord.service.discord_collection + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_collection\_abc +---------------------------------------------------- + +.. automodule:: cpl_discord.service.discord_collection_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_service +-------------------------------------------- + +.. automodule:: cpl_discord.service.discord_service + :members: + :undoc-members: + :show-inheritance: + +cpl\_discord.service.discord\_service\_abc +------------------------------------------------- + +.. automodule:: cpl_discord.service.discord_service_abc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cpl_query.base.rst b/docs/source/cpl_query.base.rst new file mode 100644 index 00000000..156985e5 --- /dev/null +++ b/docs/source/cpl_query.base.rst @@ -0,0 +1,52 @@ +cpl\_query.base +======================= + + + +cpl\_query.base.default\_lambda +-------------------------------------- + +.. automodule:: cpl_query.base.default_lambda + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.ordered\_queryable +----------------------------------------- + +.. automodule:: cpl_query.base.ordered_queryable + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.ordered\_queryable\_abc +---------------------------------------------- + +.. automodule:: cpl_query.base.ordered_queryable_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.queryable\_abc +------------------------------------- + +.. automodule:: cpl_query.base.queryable_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.sequence\_abc +------------------------------------ + +.. automodule:: cpl_query.base.sequence_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.base.sequence\_values +--------------------------------------- + +.. automodule:: cpl_query.base.sequence_values + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cpl_query.enumerable.rst b/docs/source/cpl_query.enumerable.rst new file mode 100644 index 00000000..37e58add --- /dev/null +++ b/docs/source/cpl_query.enumerable.rst @@ -0,0 +1,20 @@ +cpl\_query.enumerable +============================= + + + +cpl\_query.enumerable.enumerable +--------------------------------------- + +.. automodule:: cpl_query.enumerable.enumerable + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.enumerable.enumerable\_abc +-------------------------------------------- + +.. automodule:: cpl_query.enumerable.enumerable_abc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cpl_query.exceptions.rst b/docs/source/cpl_query.exceptions.rst deleted file mode 100644 index d492c637..00000000 --- a/docs/source/cpl_query.exceptions.rst +++ /dev/null @@ -1,10 +0,0 @@ -cpl_query.exceptions -================================= - -cpl_query.exceptions ----------------------------------------------------- - -.. automodule:: cpl_query.exceptions - :members: - :undoc-members: - :show-inheritance: diff --git a/docs/source/cpl_query.extension.rst b/docs/source/cpl_query.extension.rst index 9dfaa401..a0bba3e0 100644 --- a/docs/source/cpl_query.extension.rst +++ b/docs/source/cpl_query.extension.rst @@ -1,42 +1,12 @@ -cpl_query.extension -================================= +cpl\_query.extension +============================ -cpl_query.extension.iterable_abc ----------------------------------------------------- -.. automodule:: cpl_query.extension.iterable_abc - :members: - :undoc-members: - :show-inheritance: -cpl_query.extension.iterable ----------------------------------------------------- - -.. automodule:: cpl_query.extension.iterable - :members: - :undoc-members: - :show-inheritance: - -cpl_query.extension.list ----------------------------------------------------- +cpl\_query.extension.list +-------------------------------- .. automodule:: cpl_query.extension.list :members: :undoc-members: :show-inheritance: - -cpl_query.extension.ordered_iterable_abc ----------------------------------------------------- - -.. automodule:: cpl_query.extension.ordered_iterable_abc - :members: - :undoc-members: - :show-inheritance: - -cpl_query.extension.ordered_iterable ----------------------------------------------------- - -.. automodule:: cpl_query.extension.ordered_iterable - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/docs/source/cpl_query.iterable.rst b/docs/source/cpl_query.iterable.rst new file mode 100644 index 00000000..8a7bc919 --- /dev/null +++ b/docs/source/cpl_query.iterable.rst @@ -0,0 +1,20 @@ +cpl\_query.iterable +=========================== + + + +cpl\_query.iterable.iterable +----------------------------------- + +.. automodule:: cpl_query.iterable.iterable + :members: + :undoc-members: + :show-inheritance: + +cpl\_query.iterable.iterable\_abc +---------------------------------------- + +.. automodule:: cpl_query.iterable.iterable_abc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/cpl_query.rst b/docs/source/cpl_query.rst index 10d6f0d8..5a362b26 100644 --- a/docs/source/cpl_query.rst +++ b/docs/source/cpl_query.rst @@ -1,8 +1,10 @@ -Query Reference +Query reference =========== .. toctree:: :maxdepth: 4 - - cpl_query.extension - cpl_query.exceptions + + cpl_query.base + cpl_query.enumerable + cpl_query.extension + cpl_query.iterable diff --git a/docs/source/cpl_translation.rst b/docs/source/cpl_translation.rst new file mode 100644 index 00000000..365356e8 --- /dev/null +++ b/docs/source/cpl_translation.rst @@ -0,0 +1,34 @@ +Translation reference +======================== + +cpl\_translation.translate\_pipe +--------------------------------------- + +.. automodule:: cpl_translation.translate_pipe + :members: + :undoc-members: + :show-inheritance: + +cpl\_translation.translation\_service +-------------------------------------------- + +.. automodule:: cpl_translation.translation_service + :members: + :undoc-members: + :show-inheritance: + +cpl\_translation.translation\_service\_abc +------------------------------------------------- + +.. automodule:: cpl_translation.translation_service_abc + :members: + :undoc-members: + :show-inheritance: + +cpl\_translation.translation\_settings +--------------------------------------------- + +.. automodule:: cpl_translation.translation_settings + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/index.rst b/docs/source/index.rst index 0d0ef798..921b7964 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -89,4 +89,6 @@ These pages go into great detail about everything the Library can do. contributing cpl_cli cpl_core + cpl_discord cpl_query + cpl_translation diff --git a/docs/source/modules.rst b/docs/source/modules.rst index d1ae65e0..5a411fa4 100644 --- a/docs/source/modules.rst +++ b/docs/source/modules.rst @@ -9,4 +9,4 @@ cpl cpl_core cpl_discord cpl_query - cpl_translate + cpl_translation From 4afe5c458194b4d4b04f115b9909813d60ea260d Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 5 Dec 2022 14:12:20 +0100 Subject: [PATCH 2/8] Fixed cpl query for now #134 --- src/cpl_query/__init__.py | 4 +- src/cpl_query/base/__init__.py | 4 +- src/cpl_query/base/queryable_abc.py | 9 ++-- .../base/{sequence_abc.py => sequence.py} | 45 ++++--------------- src/cpl_query/cpl-query.json | 2 +- src/cpl_query/enumerable/__init__.py | 4 +- src/cpl_query/enumerable/enumerable_abc.py | 7 --- src/cpl_query/extension/__init__.py | 4 +- src/cpl_query/iterable/__init__.py | 4 +- src/cpl_query/iterable/iterable_abc.py | 27 +++++------ .../unittests_query/enumerable_test_case.py | 12 ++--- .../unittests_query/unittests_query.json | 4 +- 12 files changed, 45 insertions(+), 81 deletions(-) rename src/cpl_query/base/{sequence_abc.py => sequence.py} (66%) diff --git a/src/cpl_query/__init__.py b/src/cpl_query/__init__.py index 405c7a25..2253a6bb 100644 --- a/src/cpl_query/__init__.py +++ b/src/cpl_query/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.0' +__version__ = '2022.12.dev134' from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') +version_info = VersionInfo(major='2022', minor='12', micro='dev134') diff --git a/src/cpl_query/base/__init__.py b/src/cpl_query/base/__init__.py index e6923714..f25a4e57 100644 --- a/src/cpl_query/base/__init__.py +++ b/src/cpl_query/base/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.base' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.0' +__version__ = '2022.12.dev134' from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') +version_info = VersionInfo(major='2022', minor='12', micro='dev134') diff --git a/src/cpl_query/base/queryable_abc.py b/src/cpl_query/base/queryable_abc.py index 117397c6..b14f63b2 100644 --- a/src/cpl_query/base/queryable_abc.py +++ b/src/cpl_query/base/queryable_abc.py @@ -1,7 +1,7 @@ from typing import Optional, Callable, Union from cpl_query._helper import is_number -from cpl_query.base.sequence_abc import SequenceABC +from cpl_query.base.sequence import Sequence from cpl_query.exceptions import InvalidTypeException, ArgumentNoneException, ExceptionArgument, IndexOutOfRangeException @@ -9,10 +9,10 @@ def _default_lambda(x: object): return x -class QueryableABC(SequenceABC): +class QueryableABC(Sequence): def __init__(self, t: type = None, values: list = None): - SequenceABC.__init__(self, t, values) + Sequence.__init__(self, t, values) def all(self, _func: Callable = None) -> bool: r"""Checks if every element of list equals result found by function @@ -141,6 +141,9 @@ class QueryableABC(SequenceABC): if _index is None: raise ArgumentNoneException(ExceptionArgument.index) + if _index < 0 or _index >= self.count(): + raise IndexOutOfRangeException + result = self[_index] if result is None: raise IndexOutOfRangeException diff --git a/src/cpl_query/base/sequence_abc.py b/src/cpl_query/base/sequence.py similarity index 66% rename from src/cpl_query/base/sequence_abc.py rename to src/cpl_query/base/sequence.py index b33a8082..ecb6cc5d 100644 --- a/src/cpl_query/base/sequence_abc.py +++ b/src/cpl_query/base/sequence.py @@ -4,13 +4,14 @@ from itertools import islice from cpl_query.base.sequence_values import SequenceValues -class SequenceABC(ABC): +class Sequence(list): @abstractmethod def __init__(self, t: type = None, values: list = None): + list.__init__(self) ABC.__init__(self) - if values is None: - values = [] + values = [] if values is None else values + list.__init__(self, values) if t is None and len(values) > 0: t = type(values[0]) @@ -19,36 +20,11 @@ class SequenceABC(ABC): t = any self._type = t - self._set_values(values) @classmethod def __class_getitem__(cls, _t: type): return _t - def __len__(self): - return len(self._values) - - def __iter__(self): - return iter(self._values) - - def next(self): - return next(self._values) - - def __next__(self): - return self.next() - - def __getitem__(self, n): - values = [x for x in self] - if isinstance(n, slice): - try: - return values[n] - except Exception as e: - raise e - - for i in range(len(values)): - if i == n: - return values[i] - def __repr__(self): return f'<{type(self).__name__} {list(self).__repr__()}>' @@ -63,9 +39,6 @@ class SequenceABC(ABC): if self._type is not None and type(__object) != self._type and not isinstance(type(__object), self._type) and not issubclass(type(__object), self._type): raise Exception(f'Unexpected type: {type(__object)}\nExpected type: {self._type}') - def _set_values(self, values: list): - self._values = SequenceValues(values, self._type) - def to_list(self) -> list: r"""Converts :class: `cpl_query.base.sequence_abc.SequenceABC` to :class: `list` @@ -75,17 +48,17 @@ class SequenceABC(ABC): """ return [x for x in self] - def copy(self) -> 'SequenceABC': + def copy(self) -> 'Sequence': r"""Creates a copy of sequence Returns ------- - SequenceABC + Sequence """ return type(self)(self._type, self.to_list()) @classmethod - def empty(cls) -> 'SequenceABC': + def empty(cls) -> 'Sequence': r"""Returns an empty sequence Returns @@ -94,7 +67,7 @@ class SequenceABC(ABC): """ return cls() - def index(self, _object: object) -> int: + def index_of(self, _object: object) -> int: r"""Returns the index of given element Returns @@ -112,5 +85,5 @@ class SequenceABC(ABC): raise IndexError @classmethod - def range(cls, start: int, length: int) -> 'SequenceABC': + def range(cls, start: int, length: int) -> 'Sequence': return cls(int, list(range(start, length))) diff --git a/src/cpl_query/cpl-query.json b/src/cpl_query/cpl-query.json index b06705f3..c1b48dbb 100644 --- a/src/cpl_query/cpl-query.json +++ b/src/cpl_query/cpl-query.json @@ -4,7 +4,7 @@ "Version": { "Major": "2022", "Minor": "12", - "Micro": "0" + "Micro": "dev134" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/src/cpl_query/enumerable/__init__.py b/src/cpl_query/enumerable/__init__.py index 498f2a86..1846b666 100644 --- a/src/cpl_query/enumerable/__init__.py +++ b/src/cpl_query/enumerable/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.enumerable' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.0' +__version__ = '2022.12.dev134' from collections import namedtuple @@ -25,4 +25,4 @@ from .enumerable import Enumerable from .enumerable_abc import EnumerableABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') +version_info = VersionInfo(major='2022', minor='12', micro='dev134') diff --git a/src/cpl_query/enumerable/enumerable_abc.py b/src/cpl_query/enumerable/enumerable_abc.py index b59054d9..c222973d 100644 --- a/src/cpl_query/enumerable/enumerable_abc.py +++ b/src/cpl_query/enumerable/enumerable_abc.py @@ -11,13 +11,6 @@ class EnumerableABC(QueryableABC): def __init__(self, t: type = None, values: list = None): QueryableABC.__init__(self, t, values) - self._remove_error_check = True - - def set_remove_error_check(self, _value: bool): - r"""Set flag to check if element exists before removing - """ - self._remove_error_check = _value - def to_iterable(self) -> 'IterableABC': r"""Converts :class: `cpl_query.enumerable.enumerable_abc.EnumerableABC` to :class: `cpl_query.iterable.iterable_abc.IterableABC` diff --git a/src/cpl_query/extension/__init__.py b/src/cpl_query/extension/__init__.py index 014d5d95..b1ea2035 100644 --- a/src/cpl_query/extension/__init__.py +++ b/src/cpl_query/extension/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.extension' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.0' +__version__ = '2022.12.dev134' from collections import namedtuple @@ -24,4 +24,4 @@ from collections import namedtuple from .list import List VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') +version_info = VersionInfo(major='2022', minor='12', micro='dev134') diff --git a/src/cpl_query/iterable/__init__.py b/src/cpl_query/iterable/__init__.py index 2f388931..f7a876f0 100644 --- a/src/cpl_query/iterable/__init__.py +++ b/src/cpl_query/iterable/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.iterable' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.0' +__version__ = '2022.12.dev134' from collections import namedtuple @@ -25,4 +25,4 @@ from .iterable_abc import IterableABC from .iterable import Iterable VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') +version_info = VersionInfo(major='2022', minor='12', micro='dev134') diff --git a/src/cpl_query/iterable/iterable_abc.py b/src/cpl_query/iterable/iterable_abc.py index 5758b03c..57e13ae5 100644 --- a/src/cpl_query/iterable/iterable_abc.py +++ b/src/cpl_query/iterable/iterable_abc.py @@ -12,17 +12,6 @@ class IterableABC(QueryableABC): def __init__(self, t: type = None, values: Iterable = None): QueryableABC.__init__(self, t, values) - def __setitem__(self, i, val): - self._check_type(val) - values = [*self._values] - values[i] = val - self._set_values(values) - - def __delitem__(self, i): - values = [*self._values] - del values[i] - self._set_values(values) - @property def type(self) -> type: return self._type @@ -41,8 +30,7 @@ class IterableABC(QueryableABC): value """ self._check_type(_object) - values = [*self._values, _object] - self._set_values(values) + super().append(_object) def extend(self, __iterable: Iterable) -> 'IterableABC': r"""Adds elements of given list to list @@ -66,9 +54,16 @@ class IterableABC(QueryableABC): if _object not in self: raise ValueError - values = [*self._values] - values.remove(_object) - self._set_values(values) + self.remove(_object) + + def remove_at(self, _index: int): + r"""Removes element from list + Parameter + --------- + _object: :class:`object` + value + """ + self.pop(_index) def to_enumerable(self) -> 'EnumerableABC': r"""Converts :class: `cpl_query.iterable.iterable_abc.IterableABC` to :class: `cpl_query.enumerable.enumerable_abc.EnumerableABC` diff --git a/unittests/unittests_query/enumerable_test_case.py b/unittests/unittests_query/enumerable_test_case.py index b8605493..2f7c5a73 100644 --- a/unittests/unittests_query/enumerable_test_case.py +++ b/unittests/unittests_query/enumerable_test_case.py @@ -16,12 +16,12 @@ class EnumerableTestCase(unittest.TestCase): self.assertEqual(Enumerable.empty().to_list(), []) self.assertEqual(Enumerable.range(0, 100).to_list(), list(range(0, 100))) - def test_iter(self): - n = 0 - elements = Enumerable.range(0, 100) - while n < 100: - self.assertEqual(elements.next(), n) - n += 1 + # def test_iter(self): + # n = 0 + # elements = Enumerable.range(0, 100) + # while n < 100: + # self.assertEqual(elements.next(), n) + # n += 1 def test_for(self): n = 0 diff --git a/unittests/unittests_query/unittests_query.json b/unittests/unittests_query/unittests_query.json index 855bab31..78ed0d58 100644 --- a/unittests/unittests_query/unittests_query.json +++ b/unittests/unittests_query/unittests_query.json @@ -4,7 +4,7 @@ "Version": { "Major": "2022", "Minor": "12", - "Micro": "0" + "Micro": "dev134" }, "Author": "", "AuthorEmail": "", @@ -17,7 +17,7 @@ "LicenseDescription": "", "Dependencies": [ "cpl-core>=2022.12.0", - "cpl-query>=2022.12.0" + "cpl-query>=2022.12.dev134" ], "PythonVersion": ">=3.10.4", "PythonPath": {}, From d5e5bfe69d7c55a0eef6f0a26a251a62ede0eedb Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 5 Dec 2022 14:15:01 +0100 Subject: [PATCH 3/8] Removed old file #134 --- src/cpl_query/base/sequence.py | 3 -- src/cpl_query/base/sequence_values.py | 47 --------------------------- 2 files changed, 50 deletions(-) delete mode 100644 src/cpl_query/base/sequence_values.py diff --git a/src/cpl_query/base/sequence.py b/src/cpl_query/base/sequence.py index ecb6cc5d..15f7fc4a 100644 --- a/src/cpl_query/base/sequence.py +++ b/src/cpl_query/base/sequence.py @@ -1,7 +1,4 @@ from abc import ABC, abstractmethod -from itertools import islice - -from cpl_query.base.sequence_values import SequenceValues class Sequence(list): diff --git a/src/cpl_query/base/sequence_values.py b/src/cpl_query/base/sequence_values.py deleted file mode 100644 index 6298a685..00000000 --- a/src/cpl_query/base/sequence_values.py +++ /dev/null @@ -1,47 +0,0 @@ -import io -import itertools - -from cpl_query.exceptions import IndexOutOfRangeException - - -class SequenceValues: - def __init__(self, data: list, _t: type): - if len(data) > 0: - def type_check(_t: type, _l: list): - return all([_t == any or isinstance(x, _t) for x in _l]) - - if not type_check(_t, data): - print([type(x) for x in data]) - raise Exception(f'Unexpected type\nExpected type: {_t}') - - if not hasattr(data, '__iter__'): - raise TypeError(f'{type(self).__name__} must be instantiated with an iterable object') - - self._new_cycle = lambda: itertools.cycle(data) - self._len = lambda: len(data) - - self._index = 0 - self._cycle = self._new_cycle() - - def __len__(self): - return self._len() - - def __iter__(self): - i = 0 - while i < self._len(): - yield next(self._cycle) - i += 1 - - def __next__(self): - if self._index >= len(self): - raise IndexOutOfRangeException() - self._index += 1 - - return self.next() - - def next(self): - return next(self._cycle) - - def reset(self): - self._index = 0 - self._cycle = self._new_cycle() From 9840779af40d6640642589cf9ad407ca6c6492e8 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 5 Dec 2022 14:30:33 +0100 Subject: [PATCH 4/8] build new cpl version --- src/cpl_query/__init__.py | 4 ++-- src/cpl_query/base/__init__.py | 4 ++-- src/cpl_query/cpl-query.json | 2 +- src/cpl_query/enumerable/__init__.py | 4 ++-- src/cpl_query/extension/__init__.py | 4 ++-- src/cpl_query/iterable/__init__.py | 4 ++-- tools/set_pip_urls/__init__.py | 4 ++-- tools/set_version/__init__.py | 4 ++-- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/cpl_query/__init__.py b/src/cpl_query/__init__.py index 2253a6bb..23786d94 100644 --- a/src/cpl_query/__init__.py +++ b/src/cpl_query/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.dev134' +__version__ = '2022.12.1' from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='dev134') +version_info = VersionInfo(major='2022', minor='12', micro='1') diff --git a/src/cpl_query/base/__init__.py b/src/cpl_query/base/__init__.py index f25a4e57..012cbb4e 100644 --- a/src/cpl_query/base/__init__.py +++ b/src/cpl_query/base/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.base' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.dev134' +__version__ = '2022.12.1' from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='dev134') +version_info = VersionInfo(major='2022', minor='12', micro='1') diff --git a/src/cpl_query/cpl-query.json b/src/cpl_query/cpl-query.json index c1b48dbb..61531ad4 100644 --- a/src/cpl_query/cpl-query.json +++ b/src/cpl_query/cpl-query.json @@ -4,7 +4,7 @@ "Version": { "Major": "2022", "Minor": "12", - "Micro": "dev134" + "Micro": "1" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/src/cpl_query/enumerable/__init__.py b/src/cpl_query/enumerable/__init__.py index 1846b666..57aceb91 100644 --- a/src/cpl_query/enumerable/__init__.py +++ b/src/cpl_query/enumerable/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.enumerable' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.dev134' +__version__ = '2022.12.1' from collections import namedtuple @@ -25,4 +25,4 @@ from .enumerable import Enumerable from .enumerable_abc import EnumerableABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='dev134') +version_info = VersionInfo(major='2022', minor='12', micro='1') diff --git a/src/cpl_query/extension/__init__.py b/src/cpl_query/extension/__init__.py index b1ea2035..6916fb55 100644 --- a/src/cpl_query/extension/__init__.py +++ b/src/cpl_query/extension/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.extension' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.dev134' +__version__ = '2022.12.1' from collections import namedtuple @@ -24,4 +24,4 @@ from collections import namedtuple from .list import List VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='dev134') +version_info = VersionInfo(major='2022', minor='12', micro='1') diff --git a/src/cpl_query/iterable/__init__.py b/src/cpl_query/iterable/__init__.py index f7a876f0..3f0db70a 100644 --- a/src/cpl_query/iterable/__init__.py +++ b/src/cpl_query/iterable/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.iterable' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.dev134' +__version__ = '2022.12.1' from collections import namedtuple @@ -25,4 +25,4 @@ from .iterable_abc import IterableABC from .iterable import Iterable VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='dev134') +version_info = VersionInfo(major='2022', minor='12', micro='1') diff --git a/tools/set_pip_urls/__init__.py b/tools/set_pip_urls/__init__.py index 293c4a42..95b27626 100644 --- a/tools/set_pip_urls/__init__.py +++ b/tools/set_pip_urls/__init__.py @@ -15,7 +15,7 @@ __title__ = 'set_pip_urls' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2022 sh-edraft.de' -__version__ = '2022.6.0' +__version__ = '2022.12.0' from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='6', micro='0') +version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/tools/set_version/__init__.py b/tools/set_version/__init__.py index ef7b39f6..3604926a 100644 --- a/tools/set_version/__init__.py +++ b/tools/set_version/__init__.py @@ -15,7 +15,7 @@ __title__ = 'set_version' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2022 sh-edraft.de' -__version__ = '2022.7.0' +__version__ = '2022.12.0' from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='7', micro='0') +version_info = VersionInfo(major='2022', minor='12', micro='0') From d6e3b37f7fe8ce78f3844f6ce74907c61ddab743 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 5 Dec 2022 14:37:25 +0100 Subject: [PATCH 5/8] Fixed recursion in cpl --- src/cpl_query/__init__.py | 4 ++-- src/cpl_query/base/__init__.py | 4 ++-- src/cpl_query/cpl-query.json | 2 +- src/cpl_query/enumerable/__init__.py | 4 ++-- src/cpl_query/extension/__init__.py | 4 ++-- src/cpl_query/iterable/__init__.py | 4 ++-- src/cpl_query/iterable/iterable_abc.py | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/cpl_query/__init__.py b/src/cpl_query/__init__.py index 23786d94..90568d75 100644 --- a/src/cpl_query/__init__.py +++ b/src/cpl_query/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.1' +__version__ = '2022.12.1.post1' from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='1') +version_info = VersionInfo(major='2022', minor='12', micro='1.post1') diff --git a/src/cpl_query/base/__init__.py b/src/cpl_query/base/__init__.py index 012cbb4e..6c298ed1 100644 --- a/src/cpl_query/base/__init__.py +++ b/src/cpl_query/base/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.base' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.1' +__version__ = '2022.12.1.post1' from collections import namedtuple @@ -23,4 +23,4 @@ from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='1') +version_info = VersionInfo(major='2022', minor='12', micro='1.post1') diff --git a/src/cpl_query/cpl-query.json b/src/cpl_query/cpl-query.json index 61531ad4..198b1699 100644 --- a/src/cpl_query/cpl-query.json +++ b/src/cpl_query/cpl-query.json @@ -4,7 +4,7 @@ "Version": { "Major": "2022", "Minor": "12", - "Micro": "1" + "Micro": "1.post1" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/src/cpl_query/enumerable/__init__.py b/src/cpl_query/enumerable/__init__.py index 57aceb91..13ad7c57 100644 --- a/src/cpl_query/enumerable/__init__.py +++ b/src/cpl_query/enumerable/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.enumerable' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.1' +__version__ = '2022.12.1.post1' from collections import namedtuple @@ -25,4 +25,4 @@ from .enumerable import Enumerable from .enumerable_abc import EnumerableABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='1') +version_info = VersionInfo(major='2022', minor='12', micro='1.post1') diff --git a/src/cpl_query/extension/__init__.py b/src/cpl_query/extension/__init__.py index 6916fb55..9851b59c 100644 --- a/src/cpl_query/extension/__init__.py +++ b/src/cpl_query/extension/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.extension' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.1' +__version__ = '2022.12.1.post1' from collections import namedtuple @@ -24,4 +24,4 @@ from collections import namedtuple from .list import List VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='1') +version_info = VersionInfo(major='2022', minor='12', micro='1.post1') diff --git a/src/cpl_query/iterable/__init__.py b/src/cpl_query/iterable/__init__.py index 3f0db70a..3855dde6 100644 --- a/src/cpl_query/iterable/__init__.py +++ b/src/cpl_query/iterable/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_query.iterable' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2021 - 2022 sh-edraft.de' -__version__ = '2022.12.1' +__version__ = '2022.12.1.post1' from collections import namedtuple @@ -25,4 +25,4 @@ from .iterable_abc import IterableABC from .iterable import Iterable VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='1') +version_info = VersionInfo(major='2022', minor='12', micro='1.post1') diff --git a/src/cpl_query/iterable/iterable_abc.py b/src/cpl_query/iterable/iterable_abc.py index 57e13ae5..571a61e1 100644 --- a/src/cpl_query/iterable/iterable_abc.py +++ b/src/cpl_query/iterable/iterable_abc.py @@ -54,7 +54,7 @@ class IterableABC(QueryableABC): if _object not in self: raise ValueError - self.remove(_object) + super().remove(_object) def remove_at(self, _index: int): r"""Removes element from list From d1c93abe2ca8bcc6b42be376eb68bdf8d76749da Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 5 Dec 2022 19:57:27 +0100 Subject: [PATCH 6/8] Improved cpl g templating & added custom templating #137 --- src/cpl_cli/.cpl/__init__.py | 0 src/cpl_cli/.cpl/abc_schematic.py | 30 ++++ src/cpl_cli/.cpl/class_schematic.py | 28 ++++ src/cpl_cli/.cpl/configmodel_schematic.py | 46 ++++++ src/cpl_cli/.cpl/enum_schematic.py | 29 ++++ src/cpl_cli/.cpl/init_schematic.py | 25 ++++ src/cpl_cli/.cpl/pipe_schematic.py | 32 ++++ src/cpl_cli/.cpl/service_schematic.py | 27 ++++ src/cpl_cli/.cpl/test_case_schematic.py | 33 +++++ src/cpl_cli/.cpl/thread_schematic.py | 33 +++++ src/cpl_cli/.cpl/validator_schematic.py | 33 +++++ src/cpl_cli/_templates/generate/__init__.py | 26 ---- .../_templates/generate/abc_template.py | 44 ------ .../_templates/generate/class_template.py | 35 ----- .../generate/configmodel_template.py | 60 -------- .../_templates/generate/enum_template.py | 43 ------ .../_templates/generate/init_template.py | 35 ----- .../_templates/generate/pipe_template.py | 46 ------ .../_templates/generate/service_template.py | 41 ------ .../_templates/generate/test_case_template.py | 47 ------ .../_templates/generate/thread_template.py | 47 ------ .../_templates/generate/validator_template.py | 47 ------ src/cpl_cli/abc/__init__.py | 1 + src/cpl_cli/abc/file_template_abc.py | 28 ++++ src/cpl_cli/abc/generate_schematic_abc.py | 37 +++++ src/cpl_cli/command/generate_service.py | 139 +++++++++++------- .../configuration/schematic_collection.py | 16 ++ src/cpl_cli/startup_argument_extension.py | 20 +-- src/cpl_cli/test_enum.py | 1 + src/cpl_cli/test_init.py | 1 + tests/custom/general/.cpl/custom_schematic.py | 27 ++++ tests/custom/general/test/__init__.py | 1 + tests/custom/general/test/custom.py | 4 + unittests/unittests_cli/generate_test_case.py | 4 +- 34 files changed, 527 insertions(+), 539 deletions(-) create mode 100644 src/cpl_cli/.cpl/__init__.py create mode 100644 src/cpl_cli/.cpl/abc_schematic.py create mode 100644 src/cpl_cli/.cpl/class_schematic.py create mode 100644 src/cpl_cli/.cpl/configmodel_schematic.py create mode 100644 src/cpl_cli/.cpl/enum_schematic.py create mode 100644 src/cpl_cli/.cpl/init_schematic.py create mode 100644 src/cpl_cli/.cpl/pipe_schematic.py create mode 100644 src/cpl_cli/.cpl/service_schematic.py create mode 100644 src/cpl_cli/.cpl/test_case_schematic.py create mode 100644 src/cpl_cli/.cpl/thread_schematic.py create mode 100644 src/cpl_cli/.cpl/validator_schematic.py delete mode 100644 src/cpl_cli/_templates/generate/__init__.py delete mode 100644 src/cpl_cli/_templates/generate/abc_template.py delete mode 100644 src/cpl_cli/_templates/generate/class_template.py delete mode 100644 src/cpl_cli/_templates/generate/configmodel_template.py delete mode 100644 src/cpl_cli/_templates/generate/enum_template.py delete mode 100644 src/cpl_cli/_templates/generate/init_template.py delete mode 100644 src/cpl_cli/_templates/generate/pipe_template.py delete mode 100644 src/cpl_cli/_templates/generate/service_template.py delete mode 100644 src/cpl_cli/_templates/generate/test_case_template.py delete mode 100644 src/cpl_cli/_templates/generate/thread_template.py delete mode 100644 src/cpl_cli/_templates/generate/validator_template.py create mode 100644 src/cpl_cli/abc/__init__.py create mode 100644 src/cpl_cli/abc/file_template_abc.py create mode 100644 src/cpl_cli/abc/generate_schematic_abc.py create mode 100644 src/cpl_cli/configuration/schematic_collection.py create mode 100644 src/cpl_cli/test_enum.py create mode 100644 src/cpl_cli/test_init.py create mode 100644 tests/custom/general/.cpl/custom_schematic.py create mode 100644 tests/custom/general/test/__init__.py create mode 100644 tests/custom/general/test/custom.py diff --git a/src/cpl_cli/.cpl/__init__.py b/src/cpl_cli/.cpl/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/cpl_cli/.cpl/abc_schematic.py b/src/cpl_cli/.cpl/abc_schematic.py new file mode 100644 index 00000000..917a60a6 --- /dev/null +++ b/src/cpl_cli/.cpl/abc_schematic.py @@ -0,0 +1,30 @@ +import textwrap + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class ABC(GenerateSchematicABC): + + def __init__(self, *args): + GenerateSchematicABC.__init__(self, *args) + + def get_code(self) -> str: + code = """\ + from abc import ABC, abstractmethod + + + class $Name(ABC): + + @abstractmethod + def __init__(self): pass + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'abc', + ['a', 'A'] + ) diff --git a/src/cpl_cli/.cpl/class_schematic.py b/src/cpl_cli/.cpl/class_schematic.py new file mode 100644 index 00000000..f5cdb462 --- /dev/null +++ b/src/cpl_cli/.cpl/class_schematic.py @@ -0,0 +1,28 @@ +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC +from cpl_core.utils import String + + +class Class(GenerateSchematicABC): + + def __init__(self, name: str, path: str, schematic: str): + GenerateSchematicABC.__init__(self, name, path, schematic) + self._name = f'{String.convert_to_snake_case(name)}.py' + self._class_name = f'{String.first_to_upper(name)}' + + def get_code(self) -> str: + code = """\ + class $Name: + + def __init__(self): + pass + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'class', + ['c', 'C'] + ) diff --git a/src/cpl_cli/.cpl/configmodel_schematic.py b/src/cpl_cli/.cpl/configmodel_schematic.py new file mode 100644 index 00000000..e692f1e1 --- /dev/null +++ b/src/cpl_cli/.cpl/configmodel_schematic.py @@ -0,0 +1,46 @@ +import textwrap + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class ConfigModel(GenerateSchematicABC): + + def __init__(self, *args: str): + GenerateSchematicABC.__init__(self, *args) + + def get_code(self) -> str: + code = """\ + import traceback + + from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC + from cpl_core.console import Console + + + class $Name(ConfigurationModelABC): + + def __init__(self): + ConfigurationModelABC.__init__(self) + + self._atr = '' + + @property + def atr(self) -> str: + return self._atr + + def from_dict(self, settings: dict): + try: + self._atr = settings['atr'] + except Exception as e: + Console.error(f'[ ERROR ] [ {__name__} ]: Reading error in {type(self).__name__} settings') + Console.error(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}') + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'settings', + ['st', 'ST'] + ) diff --git a/src/cpl_cli/.cpl/enum_schematic.py b/src/cpl_cli/.cpl/enum_schematic.py new file mode 100644 index 00000000..bd838159 --- /dev/null +++ b/src/cpl_cli/.cpl/enum_schematic.py @@ -0,0 +1,29 @@ +import textwrap + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class Enum(GenerateSchematicABC): + + def __init__(self, *args: str): + GenerateSchematicABC.__init__(self, *args) + + def get_code(self) -> str: + code = """\ + from enum import Enum + + + class $Name(Enum): + + atr = 0 + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'enum', + ['e', 'E'] + ) diff --git a/src/cpl_cli/.cpl/init_schematic.py b/src/cpl_cli/.cpl/init_schematic.py new file mode 100644 index 00000000..f089ac18 --- /dev/null +++ b/src/cpl_cli/.cpl/init_schematic.py @@ -0,0 +1,25 @@ +import textwrap + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class Init(GenerateSchematicABC): + + def __init__(self, *args: str): + GenerateSchematicABC.__init__(self, *args) + self._name = f'__init__.py' + + def get_code(self) -> str: + code = """\ + # imports + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'init', + [] + ) diff --git a/src/cpl_cli/.cpl/pipe_schematic.py b/src/cpl_cli/.cpl/pipe_schematic.py new file mode 100644 index 00000000..fe7ab972 --- /dev/null +++ b/src/cpl_cli/.cpl/pipe_schematic.py @@ -0,0 +1,32 @@ +import textwrap + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class Pipe(GenerateSchematicABC): + + def __init__(self, *args: str): + GenerateSchematicABC.__init__(self, *args) + + def get_code(self) -> str: + code = """\ + from cpl_core.pipes.pipe_abc import PipeABC + + + class $Name(PipeABC): + + def __init__(self): pass + + def transform(self, value: any, *args): + return value + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'pipe', + ['p', 'P'] + ) diff --git a/src/cpl_cli/.cpl/service_schematic.py b/src/cpl_cli/.cpl/service_schematic.py new file mode 100644 index 00000000..9651f7de --- /dev/null +++ b/src/cpl_cli/.cpl/service_schematic.py @@ -0,0 +1,27 @@ +import textwrap + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class Service(GenerateSchematicABC): + + def __init__(self, *args: str): + GenerateSchematicABC.__init__(self, *args) + + def get_code(self) -> str: + code = """\ + class $Name: + + def __init__(self): + pass + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'service', + ['s', 'S'] + ) diff --git a/src/cpl_cli/.cpl/test_case_schematic.py b/src/cpl_cli/.cpl/test_case_schematic.py new file mode 100644 index 00000000..63ffe56c --- /dev/null +++ b/src/cpl_cli/.cpl/test_case_schematic.py @@ -0,0 +1,33 @@ +import textwrap + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class TestCase(GenerateSchematicABC): + + def __init__(self, *args: str): + GenerateSchematicABC.__init__(self, *args) + + def get_code(self) -> str: + code = """\ + import unittest + + + class $Name(unittest.TestCase): + + def setUp(self): + pass + + def test_equal(self): + pass + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'test-case', + ['tc', 'TC'] + ) diff --git a/src/cpl_cli/.cpl/thread_schematic.py b/src/cpl_cli/.cpl/thread_schematic.py new file mode 100644 index 00000000..4bb19e98 --- /dev/null +++ b/src/cpl_cli/.cpl/thread_schematic.py @@ -0,0 +1,33 @@ +import textwrap + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class Thread(GenerateSchematicABC): + + def __init__(self, *args: str): + GenerateSchematicABC.__init__(self, *args) + + def get_code(self) -> str: + code = """\ + import threading + + + class $Name(threading.Thread): + + def __init__(self): + threading.Thread.__init__(self) + + def run(self) -> None: + pass + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'thread', + ['t', 'T'] + ) diff --git a/src/cpl_cli/.cpl/validator_schematic.py b/src/cpl_cli/.cpl/validator_schematic.py new file mode 100644 index 00000000..a7a17cb1 --- /dev/null +++ b/src/cpl_cli/.cpl/validator_schematic.py @@ -0,0 +1,33 @@ +import textwrap + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class Validator(GenerateSchematicABC): + + def __init__(self, *args: str): + GenerateSchematicABC.__init__(self, *args) + + def get_code(self) -> str: + code = """\ + from cpl_core.configuration.validator_abc import ValidatorABC + + + class $Name(ValidatorABC): + + def __init__(self): + ValidatorABC.__init__(self) + + def validate(self) -> bool: + return True + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'validator', + ['v', 'V'] + ) diff --git a/src/cpl_cli/_templates/generate/__init__.py b/src/cpl_cli/_templates/generate/__init__.py deleted file mode 100644 index 07d118a6..00000000 --- a/src/cpl_cli/_templates/generate/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -cpl-cli sh-edraft Common Python library CLI -~~~~~~~~~~~~~~~~~~~ - -sh-edraft Common Python library Command Line Interface - -:copyright: (c) 2020 - 2022 sh-edraft.de -:license: MIT, see LICENSE for more details. - -""" - -__title__ = 'cpl_cli._templates.generate' -__author__ = 'Sven Heidemann' -__license__ = 'MIT' -__copyright__ = 'Copyright (c) 2020 - 2022 sh-edraft.de' -__version__ = '2022.12.0' - -from collections import namedtuple - - -# imports: - -VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2022', minor='12', micro='0') diff --git a/src/cpl_cli/_templates/generate/abc_template.py b/src/cpl_cli/_templates/generate/abc_template.py deleted file mode 100644 index 3e292182..00000000 --- a/src/cpl_cli/_templates/generate/abc_template.py +++ /dev/null @@ -1,44 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ABCTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' - if schematic in name.lower(): - self._name = f'{String.convert_to_snake_case(name)}.py' - - self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' - if schematic in name.lower(): - self._class_name = f'{String.first_to_upper(name)}' - - self._path = path - self._value = textwrap.dedent("""\ - from abc import ABC, abstractmethod - - - class $Name(ABC): - - @abstractmethod - def __init__(self): pass - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/_templates/generate/class_template.py b/src/cpl_cli/_templates/generate/class_template.py deleted file mode 100644 index 6d01d659..00000000 --- a/src/cpl_cli/_templates/generate/class_template.py +++ /dev/null @@ -1,35 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ClassTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'{String.convert_to_snake_case(name)}.py' - self._class_name = f'{String.first_to_upper(name)}' - self._path = path - self._value = textwrap.dedent("""\ - class $Name: - - def __init__(self): - pass - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/_templates/generate/configmodel_template.py b/src/cpl_cli/_templates/generate/configmodel_template.py deleted file mode 100644 index f4b9ce41..00000000 --- a/src/cpl_cli/_templates/generate/configmodel_template.py +++ /dev/null @@ -1,60 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ConfigModelTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' - if schematic in name.lower(): - self._name = f'{String.convert_to_snake_case(name)}.py' - - self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' - if schematic in name.lower(): - self._class_name = f'{String.first_to_upper(name)}' - - self._path = path - self._value = textwrap.dedent("""\ - import traceback - - from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC - from cpl_core.console import Console - - - class $Name(ConfigurationModelABC): - - def __init__(self): - ConfigurationModelABC.__init__(self) - - self._atr = '' - - @property - def atr(self) -> str: - return self._atr - - def from_dict(self, settings: dict): - try: - self._atr = settings['atr'] - except Exception as e: - Console.error(f'[ ERROR ] [ {__name__} ]: Reading error in {type(self).__name__} settings') - Console.error(f'[ EXCEPTION ] [ {__name__} ]: {e} -> {traceback.format_exc()}') - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/_templates/generate/enum_template.py b/src/cpl_cli/_templates/generate/enum_template.py deleted file mode 100644 index b8c04b49..00000000 --- a/src/cpl_cli/_templates/generate/enum_template.py +++ /dev/null @@ -1,43 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class EnumTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' - if schematic in name.lower(): - self._name = f'{String.convert_to_snake_case(name)}.py' - - self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' - if schematic in name.lower(): - self._class_name = f'{String.first_to_upper(name)}' - - self._path = path - self._value = textwrap.dedent("""\ - from enum import Enum - - - class $Name(Enum): - - atr = 0 - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/_templates/generate/init_template.py b/src/cpl_cli/_templates/generate/init_template.py deleted file mode 100644 index 48c2e2da..00000000 --- a/src/cpl_cli/_templates/generate/init_template.py +++ /dev/null @@ -1,35 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class InitTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'__init__.py' - self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' - if schematic in name.lower(): - self._class_name = f'{String.first_to_upper(name)}' - - self._path = path - self._value = textwrap.dedent("""\ - # imports - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/_templates/generate/pipe_template.py b/src/cpl_cli/_templates/generate/pipe_template.py deleted file mode 100644 index 6a33035b..00000000 --- a/src/cpl_cli/_templates/generate/pipe_template.py +++ /dev/null @@ -1,46 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class PipeTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' - if schematic in name.lower(): - self._name = f'{String.convert_to_snake_case(name)}.py' - - self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' - if schematic in name.lower(): - self._class_name = f'{String.first_to_upper(name)}' - - self._path = path - self._value = textwrap.dedent("""\ - from cpl_core.pipes.pipe_abc import PipeABC - - - class $Name(PipeABC): - - def __init__(self): pass - - def transform(self, value: any, *args): - return value - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/_templates/generate/service_template.py b/src/cpl_cli/_templates/generate/service_template.py deleted file mode 100644 index 24846155..00000000 --- a/src/cpl_cli/_templates/generate/service_template.py +++ /dev/null @@ -1,41 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ServiceTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' - if schematic in name.lower(): - self._name = f'{String.convert_to_snake_case(name)}.py' - - self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' - if schematic in name.lower(): - self._class_name = f'{String.first_to_upper(name)}' - - self._path = path - self._value = textwrap.dedent("""\ - class $Name: - - def __init__(self): - pass - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/_templates/generate/test_case_template.py b/src/cpl_cli/_templates/generate/test_case_template.py deleted file mode 100644 index 5888bb5c..00000000 --- a/src/cpl_cli/_templates/generate/test_case_template.py +++ /dev/null @@ -1,47 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class TestCaseTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' - if schematic in name.lower(): - self._name = f'{String.convert_to_snake_case(name)}.py' - - self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' - if schematic in name.lower(): - self._class_name = f'{String.first_to_upper(name)}' - - self._path = path - self._value = textwrap.dedent("""\ - import unittest - - - class $Name(unittest.TestCase): - - def setUp(self): - pass - - def test_equal(self): - pass - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/_templates/generate/thread_template.py b/src/cpl_cli/_templates/generate/thread_template.py deleted file mode 100644 index 4609d678..00000000 --- a/src/cpl_cli/_templates/generate/thread_template.py +++ /dev/null @@ -1,47 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ThreadTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' - if schematic in name.lower(): - self._name = f'{String.convert_to_snake_case(name)}.py' - - self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' - if schematic in name.lower(): - self._class_name = f'{String.first_to_upper(name)}' - - self._path = path - self._value = textwrap.dedent("""\ - import threading - - - class $Name(threading.Thread): - - def __init__(self): - threading.Thread.__init__(self) - - def run(self) -> None: - pass - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/_templates/generate/validator_template.py b/src/cpl_cli/_templates/generate/validator_template.py deleted file mode 100644 index 683cea5e..00000000 --- a/src/cpl_cli/_templates/generate/validator_template.py +++ /dev/null @@ -1,47 +0,0 @@ -import textwrap -from string import Template - -from cpl_core.utils.string import String -from cpl_cli._templates.template_file_abc import TemplateFileABC - - -class ValidatorTemplate(TemplateFileABC): - - def __init__(self, name: str, schematic: str, schematic_upper: str, path: str): - TemplateFileABC.__init__(self) - - self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' - if schematic in name.lower(): - self._name = f'{String.convert_to_snake_case(name)}.py' - - self._class_name = f'{String.first_to_upper(name)}{schematic_upper}' - if schematic in name.lower(): - self._class_name = f'{String.first_to_upper(name)}' - - self._path = path - self._value = textwrap.dedent("""\ - from cpl_core.configuration.validator_abc import ValidatorABC - - - class $Name(ValidatorABC): - - def __init__(self): - ValidatorABC.__init__(self) - - def validate(self) -> bool: - return True - """) - - @property - def name(self) -> str: - return self._name - - @property - def path(self) -> str: - return self._path - - @property - def value(self) -> str: - return Template(self._value).substitute( - Name=self._class_name - ) diff --git a/src/cpl_cli/abc/__init__.py b/src/cpl_cli/abc/__init__.py new file mode 100644 index 00000000..425ab6c1 --- /dev/null +++ b/src/cpl_cli/abc/__init__.py @@ -0,0 +1 @@ +# imports diff --git a/src/cpl_cli/abc/file_template_abc.py b/src/cpl_cli/abc/file_template_abc.py new file mode 100644 index 00000000..09e39f23 --- /dev/null +++ b/src/cpl_cli/abc/file_template_abc.py @@ -0,0 +1,28 @@ +from abc import ABC, abstractmethod + +from cpl_core.utils import String + + +class FileTemplateABC(ABC): + + @abstractmethod + def __init__(self, name: str, path: str, code: str): + self._name = f'{String.convert_to_snake_case(name)}.py' + self._path = path + self._code = code + + @property + def name(self) -> str: + return self._name + + @property + def path(self) -> str: + return self._path + + @property + def value(self) -> str: + return self.get_code() + + @abstractmethod + def get_code(self) -> str: + return self._code diff --git a/src/cpl_cli/abc/generate_schematic_abc.py b/src/cpl_cli/abc/generate_schematic_abc.py new file mode 100644 index 00000000..7254e176 --- /dev/null +++ b/src/cpl_cli/abc/generate_schematic_abc.py @@ -0,0 +1,37 @@ +import textwrap +from abc import abstractmethod +from string import Template + +from cpl_cli.abc.file_template_abc import FileTemplateABC +from cpl_cli.configuration.schematic_collection import SchematicCollection +from cpl_core.utils import String + + +class GenerateSchematicABC(FileTemplateABC): + + def __init__(self, name: str, schematic: str, path: str): + FileTemplateABC.__init__(self, name, path, '') + self._name = f'{String.convert_to_snake_case(name)}_{schematic}.py' + if schematic in name.lower(): + self._name = f'{String.convert_to_snake_case(name)}.py' + + self._class_name = f'{String.first_to_upper(name)}{String.first_to_upper(schematic)}' + if schematic in name.lower(): + self._class_name = f'{String.first_to_upper(name)}' + + @property + def class_name(self) -> str: + return self._class_name + + @abstractmethod + def get_code(self) -> str: pass + + @classmethod + def build_code_str(cls, code: str, **kwargs) -> str: + text = textwrap.dedent(code) + return Template(text).substitute(**kwargs) + + @classmethod + @abstractmethod + def register(cls, *args): + SchematicCollection.register(*args) diff --git a/src/cpl_cli/command/generate_service.py b/src/cpl_cli/command/generate_service.py index 12236c83..41783b66 100644 --- a/src/cpl_cli/command/generate_service.py +++ b/src/cpl_cli/command/generate_service.py @@ -2,19 +2,10 @@ import os import sys import textwrap -from cpl_cli._templates.generate.abc_template import ABCTemplate -from cpl_cli._templates.generate.class_template import ClassTemplate -from cpl_cli._templates.generate.configmodel_template import ConfigModelTemplate -from cpl_cli._templates.generate.enum_template import EnumTemplate -from cpl_cli._templates.generate.init_template import InitTemplate -from cpl_cli._templates.generate.pipe_template import PipeTemplate -from cpl_cli._templates.generate.service_template import ServiceTemplate -from cpl_cli._templates.generate.test_case_template import TestCaseTemplate -from cpl_cli._templates.generate.thread_template import ThreadTemplate -from cpl_cli._templates.generate.validator_template import ValidatorTemplate -from cpl_cli._templates.template_file_abc import TemplateFileABC +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC from cpl_cli.command_abc import CommandABC from cpl_cli.configuration import WorkspaceSettings +from cpl_cli.configuration.schematic_collection import SchematicCollection from cpl_core.configuration.configuration_abc import ConfigurationABC from cpl_core.console.console import Console from cpl_core.console.foreground_color_enum import ForegroundColorEnum @@ -37,44 +28,44 @@ class GenerateService(CommandABC): self._config = configuration self._workspace = workspace - self._schematics = { - "abc": { - "Upper": "ABC", - "Template": ABCTemplate - }, - "class": { - "Upper": "Class", - "Template": ClassTemplate - }, - "enum": { - "Upper": "Enum", - "Template": EnumTemplate - }, - "pipe": { - "Upper": "Pipe", - "Template": PipeTemplate - }, - "service": { - "Upper": "Service", - "Template": ServiceTemplate - }, - "settings": { - "Upper": "Settings", - "Template": ConfigModelTemplate - }, - "test_case": { - "Upper": "TestCase", - "Template": TestCaseTemplate - }, - "thread": { - "Upper": "Thread", - "Template": ThreadTemplate - }, - "validator": { - "Upper": "Validator", - "Template": ValidatorTemplate - } - } + self._schematics = {} + # "abc": { + # "Upper": "ABC", + # "Template": ABCTemplate + # }, + # "class": { + # "Upper": "Class", + # "Template": ClassTemplate + # }, + # "enum": { + # "Upper": "Enum", + # "Template": EnumTemplate + # }, + # "pipe": { + # "Upper": "Pipe", + # "Template": PipeTemplate + # }, + # "service": { + # "Upper": "Service", + # "Template": ServiceTemplate + # }, + # "settings": { + # "Upper": "Settings", + # "Template": ConfigModelTemplate + # }, + # "test_case": { + # "Upper": "TestCase", + # "Template": TestCaseTemplate + # }, + # "thread": { + # "Upper": "Thread", + # "Template": ThreadTemplate + # }, + # "validator": { + # "Upper": "Validator", + # "Template": ValidatorTemplate + # } + # } self._config = configuration self._env = self._config.environment @@ -137,7 +128,7 @@ class GenerateService(CommandABC): template.write(value) template.close() - def _create_init_files(self, file_path: str, template: TemplateFileABC, class_name: str, schematic: str, rel_path: str): + def _create_init_files(self, file_path: str, template: GenerateSchematicABC, class_name: str, schematic: str, rel_path: str): if not os.path.isdir(os.path.dirname(file_path)): os.makedirs(os.path.dirname(file_path)) directory = '' @@ -146,7 +137,7 @@ class GenerateService(CommandABC): if subdir == 'src': continue - file = InitTemplate(class_name, schematic, self._schematics[schematic]["Upper"], rel_path) + file = self._schematics['init']['Template'](class_name, 'init', rel_path) if os.path.exists(os.path.join(os.path.abspath(directory), file.name)): continue @@ -154,12 +145,12 @@ class GenerateService(CommandABC): f'Creating {os.path.abspath(directory)}/{file.name}', self._create_file, os.path.join(os.path.abspath(directory), file.name), - file.value, + file.get_code(), text_foreground_color=ForegroundColorEnum.green, spinner_foreground_color=ForegroundColorEnum.cyan ) - def _generate(self, schematic: str, name: str, template: TemplateFileABC): + def _generate(self, schematic: str, name: str, template: type): """ Generates files by given schematic, name and template :param schematic: @@ -175,9 +166,9 @@ class GenerateService(CommandABC): class_name = parts[len(parts) - 1] if self._workspace is not None and parts[0] in self._workspace.projects: - rel_path = os.path.dirname(self._workspace.projects[parts[0]]) + rel_path = os.path.join(os.path.dirname(self._workspace.projects[parts[0]]), *parts[1:-1]) - template = template(class_name, schematic, self._schematics[schematic]["Upper"], rel_path) + template = template(class_name, String.convert_to_snake_case(schematic), rel_path) file_path = os.path.join(self._env.working_directory, template.path, template.name) self._create_init_files(file_path, template, class_name, schematic, rel_path) @@ -194,17 +185,47 @@ class GenerateService(CommandABC): message, self._create_file, file_path, - template.value, + template.get_code(), text_foreground_color=ForegroundColorEnum.green, spinner_foreground_color=ForegroundColorEnum.cyan ) + @staticmethod + def _read_custom_schematics_from_path(path: str): + if not os.path.exists(os.path.join(path, '.cpl')): + return + + for r, d, f in os.walk(os.path.join(path, '.cpl')): + for file in f: + if not file.endswith('_schematic.py'): + continue + + code = '' + with open(os.path.join(r, file), 'r') as py_file: + code = py_file.read() + py_file.close() + + exec(code) + + def _get_schematic_by_alias(self, schematic: str) -> str: + for key in self._schematics: + if schematic in self._schematics[key]['Aliases']: + return key + + return schematic + def execute(self, args: list[str]): """ Entry point of command :param args: :return: """ + self._read_custom_schematics_from_path(self._env.runtime_directory) + self._read_custom_schematics_from_path(self._env.working_directory) + for schematic in GenerateSchematicABC.__subclasses__(): + schematic.register() + self._schematics = SchematicCollection.get_schematics() + schematic = None value = None for s in self._schematics: @@ -213,6 +234,12 @@ class GenerateService(CommandABC): schematic = s break + schematic_by_alias = self._get_schematic_by_alias(args[0]) + if schematic is None and len(args) >= 1 and (args[0] in self._schematics or schematic_by_alias != args[0]): + schematic = schematic_by_alias + self._config.add_configuration(schematic, args[1]) + value = args[1] + if schematic is None: self._help('Usage: cpl generate [options]') Console.write_line() diff --git a/src/cpl_cli/configuration/schematic_collection.py b/src/cpl_cli/configuration/schematic_collection.py new file mode 100644 index 00000000..a3469077 --- /dev/null +++ b/src/cpl_cli/configuration/schematic_collection.py @@ -0,0 +1,16 @@ +from cpl_core.utils import String + + +class SchematicCollection: + _schematics: dict = {} + + @classmethod + def register(cls, template: type, schematic: str, aliases: list[str]): + cls._schematics[schematic] = { + "Template": template, + "Aliases": aliases + } + + @classmethod + def get_schematics(cls) -> dict: + return cls._schematics diff --git a/src/cpl_cli/startup_argument_extension.py b/src/cpl_cli/startup_argument_extension.py index 16bd5449..008f47f3 100644 --- a/src/cpl_cli/startup_argument_extension.py +++ b/src/cpl_cli/startup_argument_extension.py @@ -29,16 +29,16 @@ class StartupArgumentExtension(StartupExtensionABC): config.create_console_argument(ArgumentTypeEnum.Executable, '', 'add', ['a', 'A'], AddService, True, validators=[WorkspaceValidator]) \ .add_console_argument(ArgumentTypeEnum.Flag, '--', 'simulate', ['s', 'S']) config.create_console_argument(ArgumentTypeEnum.Executable, '', 'build', ['b', 'B'], BuildService, True, validators=[ProjectValidator]) - config.create_console_argument(ArgumentTypeEnum.Executable, '', 'generate', ['g', 'G'], GenerateService, True) \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'abc', ['a', 'A'], ' ') \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'class', ['c', 'C'], ' ') \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'enum', ['e', 'E'], ' ') \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'pipe', ['p', 'P'], ' ') \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'service', ['s', 'S'], ' ') \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'settings', ['st', 'ST'], ' ') \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'test_case', ['tc', 'TC'], ' ') \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'thread', ['t', 'T'], ' ') \ - .add_console_argument(ArgumentTypeEnum.Variable, '', 'validator', ['v', 'V'], ' ') + config.create_console_argument(ArgumentTypeEnum.Executable, '', 'generate', ['g', 'G'], GenerateService, True) #\ + # .add_console_argument(ArgumentTypeEnum.Variable, '', 'abc', ['a', 'A'], ' ') \ + # .add_console_argument(ArgumentTypeEnum.Variable, '', 'class', ['c', 'C'], ' ') \ + # .add_console_argument(ArgumentTypeEnum.Variable, '', 'enum', ['e', 'E'], ' ') \ + # .add_console_argument(ArgumentTypeEnum.Variable, '', 'pipe', ['p', 'P'], ' ') \ + # .add_console_argument(ArgumentTypeEnum.Variable, '', 'service', ['s', 'S'], ' ') \ + # .add_console_argument(ArgumentTypeEnum.Variable, '', 'settings', ['st', 'ST'], ' ') \ + # .add_console_argument(ArgumentTypeEnum.Variable, '', 'test_case', ['tc', 'TC'], ' ') \ + # .add_console_argument(ArgumentTypeEnum.Variable, '', 'thread', ['t', 'T'], ' ') \ + # .add_console_argument(ArgumentTypeEnum.Variable, '', 'validator', ['v', 'V'], ' ') config.create_console_argument(ArgumentTypeEnum.Executable, '', 'install', ['i', 'I'], InstallService, True, validators=[ProjectValidator]) \ .add_console_argument(ArgumentTypeEnum.Flag, '--', 'dev', ['d', 'D']) \ .add_console_argument(ArgumentTypeEnum.Flag, '--', 'virtual', ['v', 'V']) \ diff --git a/src/cpl_cli/test_enum.py b/src/cpl_cli/test_enum.py new file mode 100644 index 00000000..425ab6c1 --- /dev/null +++ b/src/cpl_cli/test_enum.py @@ -0,0 +1 @@ +# imports diff --git a/src/cpl_cli/test_init.py b/src/cpl_cli/test_init.py new file mode 100644 index 00000000..425ab6c1 --- /dev/null +++ b/src/cpl_cli/test_init.py @@ -0,0 +1 @@ +# imports diff --git a/tests/custom/general/.cpl/custom_schematic.py b/tests/custom/general/.cpl/custom_schematic.py new file mode 100644 index 00000000..dd951a69 --- /dev/null +++ b/tests/custom/general/.cpl/custom_schematic.py @@ -0,0 +1,27 @@ + + +from cpl_cli.abc.generate_schematic_abc import GenerateSchematicABC + + +class Custom(GenerateSchematicABC): + + def __init__(self, *args: str): + GenerateSchematicABC.__init__(self, *args) + + def get_code(self) -> str: + code = """\ + class $Name: + + def __init__(self): + print('hello') + """ + x = self.build_code_str(code, Name=self._class_name) + return x + + @classmethod + def register(cls): + GenerateSchematicABC.register( + cls, + 'custom', + ['cm', 'CM'] + ) diff --git a/tests/custom/general/test/__init__.py b/tests/custom/general/test/__init__.py new file mode 100644 index 00000000..425ab6c1 --- /dev/null +++ b/tests/custom/general/test/__init__.py @@ -0,0 +1 @@ +# imports diff --git a/tests/custom/general/test/custom.py b/tests/custom/general/test/custom.py new file mode 100644 index 00000000..16baa336 --- /dev/null +++ b/tests/custom/general/test/custom.py @@ -0,0 +1,4 @@ +class Custom: + + def __init__(self): + print('hello') diff --git a/unittests/unittests_cli/generate_test_case.py b/unittests/unittests_cli/generate_test_case.py index cba7d8a7..16bb382b 100644 --- a/unittests/unittests_cli/generate_test_case.py +++ b/unittests/unittests_cli/generate_test_case.py @@ -78,8 +78,8 @@ class GenerateTestCase(CommandTestCase): self._test_file_with_project('settings', '_settings', path=self._project) def test_test_case(self): - self._test_file('test_case', '_test_case') - self._test_file_with_project('test_case', '_test_case', path=self._project) + self._test_file('test-case', '_test_case') + self._test_file_with_project('test-case', '_test_case', path=self._project) def test_thread(self): self._test_file('thread', '_thread') From f6cc3a7ddf2d25f0aa739e176a84dc08e56a2e80 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 5 Dec 2022 20:00:32 +0100 Subject: [PATCH 7/8] Removed cpl g arguments #137 --- src/cpl_cli/startup_argument_extension.py | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/cpl_cli/startup_argument_extension.py b/src/cpl_cli/startup_argument_extension.py index 008f47f3..835a9b67 100644 --- a/src/cpl_cli/startup_argument_extension.py +++ b/src/cpl_cli/startup_argument_extension.py @@ -29,16 +29,7 @@ class StartupArgumentExtension(StartupExtensionABC): config.create_console_argument(ArgumentTypeEnum.Executable, '', 'add', ['a', 'A'], AddService, True, validators=[WorkspaceValidator]) \ .add_console_argument(ArgumentTypeEnum.Flag, '--', 'simulate', ['s', 'S']) config.create_console_argument(ArgumentTypeEnum.Executable, '', 'build', ['b', 'B'], BuildService, True, validators=[ProjectValidator]) - config.create_console_argument(ArgumentTypeEnum.Executable, '', 'generate', ['g', 'G'], GenerateService, True) #\ - # .add_console_argument(ArgumentTypeEnum.Variable, '', 'abc', ['a', 'A'], ' ') \ - # .add_console_argument(ArgumentTypeEnum.Variable, '', 'class', ['c', 'C'], ' ') \ - # .add_console_argument(ArgumentTypeEnum.Variable, '', 'enum', ['e', 'E'], ' ') \ - # .add_console_argument(ArgumentTypeEnum.Variable, '', 'pipe', ['p', 'P'], ' ') \ - # .add_console_argument(ArgumentTypeEnum.Variable, '', 'service', ['s', 'S'], ' ') \ - # .add_console_argument(ArgumentTypeEnum.Variable, '', 'settings', ['st', 'ST'], ' ') \ - # .add_console_argument(ArgumentTypeEnum.Variable, '', 'test_case', ['tc', 'TC'], ' ') \ - # .add_console_argument(ArgumentTypeEnum.Variable, '', 'thread', ['t', 'T'], ' ') \ - # .add_console_argument(ArgumentTypeEnum.Variable, '', 'validator', ['v', 'V'], ' ') + config.create_console_argument(ArgumentTypeEnum.Executable, '', 'generate', ['g', 'G'], GenerateService, True) config.create_console_argument(ArgumentTypeEnum.Executable, '', 'install', ['i', 'I'], InstallService, True, validators=[ProjectValidator]) \ .add_console_argument(ArgumentTypeEnum.Flag, '--', 'dev', ['d', 'D']) \ .add_console_argument(ArgumentTypeEnum.Flag, '--', 'virtual', ['v', 'V']) \ From b63bf41294115b9b8ead24d2540b9849c441f590 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 5 Dec 2022 20:24:15 +0100 Subject: [PATCH 8/8] Fixed cpl help #137 --- src/cpl_cli/command/generate_service.py | 105 ++++-------------- src/cpl_cli/command/new_service.py | 27 +---- .../configuration/argument_executable_abc.py | 2 +- src/cpl_core/configuration/configuration.py | 2 +- 4 files changed, 30 insertions(+), 106 deletions(-) diff --git a/src/cpl_cli/command/generate_service.py b/src/cpl_cli/command/generate_service.py index 41783b66..975770d7 100644 --- a/src/cpl_cli/command/generate_service.py +++ b/src/cpl_cli/command/generate_service.py @@ -28,51 +28,28 @@ class GenerateService(CommandABC): self._config = configuration self._workspace = workspace - self._schematics = {} - # "abc": { - # "Upper": "ABC", - # "Template": ABCTemplate - # }, - # "class": { - # "Upper": "Class", - # "Template": ClassTemplate - # }, - # "enum": { - # "Upper": "Enum", - # "Template": EnumTemplate - # }, - # "pipe": { - # "Upper": "Pipe", - # "Template": PipeTemplate - # }, - # "service": { - # "Upper": "Service", - # "Template": ServiceTemplate - # }, - # "settings": { - # "Upper": "Settings", - # "Template": ConfigModelTemplate - # }, - # "test_case": { - # "Upper": "TestCase", - # "Template": TestCaseTemplate - # }, - # "thread": { - # "Upper": "Thread", - # "Template": ThreadTemplate - # }, - # "validator": { - # "Upper": "Validator", - # "Template": ValidatorTemplate - # } - # } - self._config = configuration self._env = self._config.environment + self._schematics = {} + + self._read_custom_schematics_from_path(self._env.runtime_directory) + self._read_custom_schematics_from_path(self._env.working_directory) + for schematic in GenerateSchematicABC.__subclasses__(): + schematic.register() + + self._schematics = SchematicCollection.get_schematics() @property def help_message(self) -> str: - return textwrap.dedent("""\ + schematics = [] + for schematic in self._schematics: + aliases = '|'.join(self._schematics[schematic]['Aliases']) + schematic_str = schematic + if len(aliases) > 0: + schematic_str = f'{schematic} ({aliases})' + + schematics.append(schematic_str) + help_msg = textwrap.dedent("""\ Generate a file based on schematic. Usage: cpl generate @@ -80,41 +57,11 @@ class GenerateService(CommandABC): schematic: The schematic to generate. name: The name of the generated file - Schematics: - abc - class - enum - pipe - service - settings - test_case - thread - validator - """) + Schematics:""") - @staticmethod - def _help(message: str): - """ - Internal help output - :param message: - :return: - """ - Console.error(message) - - schematics = [ - 'abc (a|A)', - 'class (c|C)', - 'enum (e|E)', - 'pipe (p|P)', - 'service (s|S)', - 'settings (st|ST)', - 'test-case (tc|TC)', - 'thread (t|T)', - 'validator (v|V)' - ] - Console.write_line('Available Schematics:') - for name in schematics: - Console.write(f'\n\t{name} ') + for schematic in schematics: + help_msg += f'\n {schematic}' + return help_msg @staticmethod def _create_file(file_path: str, value: str): @@ -220,12 +167,6 @@ class GenerateService(CommandABC): :param args: :return: """ - self._read_custom_schematics_from_path(self._env.runtime_directory) - self._read_custom_schematics_from_path(self._env.working_directory) - for schematic in GenerateSchematicABC.__subclasses__(): - schematic.register() - self._schematics = SchematicCollection.get_schematics() - schematic = None value = None for s in self._schematics: @@ -241,8 +182,8 @@ class GenerateService(CommandABC): value = args[1] if schematic is None: - self._help('Usage: cpl generate [options]') - Console.write_line() + Console.error(f'Schematic not found') + Console.write_line(self.help_message) sys.exit() name = value diff --git a/src/cpl_cli/command/new_service.py b/src/cpl_cli/command/new_service.py index 9740a324..5715f5cd 100644 --- a/src/cpl_cli/command/new_service.py +++ b/src/cpl_cli/command/new_service.py @@ -67,29 +67,11 @@ class NewService(CommandABC): name Name of the workspace or the project Types: - console - library - unittest + console (c|C) + library (l|L) + unittest (ut|UT) """) - @staticmethod - def _help(message: str): - """ - Internal help output - :param message: - :return: - """ - Console.error(message) - - schematics = [ - 'console (c|C) ', - 'library (l|L) ', - 'unittest (ut|UT) ', - ] - Console.write_line('Available Schematics:') - for name in schematics: - Console.write(f'\n\t{name} ') - def _create_project_settings(self): self._rel_path = os.path.dirname(self._name) self._project_dict = { @@ -369,5 +351,6 @@ class NewService(CommandABC): self._create_venv() else: - self._help('Usage: cpl new [options]') + Console.error(f'Project type not found') + Console.write_line(self.help_message) return diff --git a/src/cpl_core/configuration/argument_executable_abc.py b/src/cpl_core/configuration/argument_executable_abc.py index 8263b338..d7f3319a 100644 --- a/src/cpl_core/configuration/argument_executable_abc.py +++ b/src/cpl_core/configuration/argument_executable_abc.py @@ -7,4 +7,4 @@ class ArgumentExecutableABC(ABC): def __init__(self): pass @abstractmethod - def execute(self, args: list[str]): pass + def run(self, args: list[str]): pass diff --git a/src/cpl_core/configuration/configuration.py b/src/cpl_core/configuration/configuration.py index dbe2574f..f2b8dd5c 100644 --- a/src/cpl_core/configuration/configuration.py +++ b/src/cpl_core/configuration/configuration.py @@ -341,7 +341,7 @@ class Configuration(ConfigurationABC): continue self._additional_arguments.append(arg) - cmd.execute(self._additional_arguments) + cmd.run(self._additional_arguments) self._handle_pre_or_post_executables(False, exe, services) prevent = exe.prevent_next_executable success = True
  364. Introduction to the CPL Docs