From 57870f967ead94f1dcacb5338a410afdefbe7034 Mon Sep 17 00:00:00 2001
From: Cedric-Magnan
-
-Here are some examples of Poetry [commands](https://python-poetry.org/docs/cli/#commands) :
+But you can deploy the application on many Serverless Container services on any cloud by making sure that :
+- The secrets defined in the `.env` file are available for the container at runtime as environment variables
+- The container can receive HTTP requests
+- The container can use a GCP service account to login with the [Python Google Auth client](https://google-auth.readthedocs.io/en/master/)
+- The service account is linked to a GCP Project which has the Google Drive API enabled
-- `poetry add numpy`
-- `poetry run pytest`
-- `poetry build`
-- etc
-
-Notes about Poetry commands
-1. Download Poetry
@@ -392,43 +251,13 @@ deactivate
-``` -@misc{github_tests_validator_app, - author = {artefactory}, - title = {`github_tests_validator_app` is a Python cli/package}, - year = {2022}, - publisher = {GitHub}, - journal = {GitHub repository}, - howpublished = {\url{https://github.com/artefactory/github_tests_validator_app}}} -} +```bash +make deploy_gcp ``` -## Credits - -This project was generated with [`ppt`](https://github.com/artefactory/ppt). +
+0 zH?F1`QhD39iaqF|=)}8?PXkIto*5I*e}1zFy9rci(6Tb1tX$-k*v!KiMu!(0 zs^r-Jc6(xT{>S0`D`aH|K=r=6XhHYx6su~jB)QZ9@%n}+u>IgHfx}F?e}32gnty{r zrik3jpZ (R%V7akz2?v*MbN6Uk+Hfp*MIjZc~pcu%XhNNPP{oK z(1}mcn*E-xCf$*SbKi2rQ(vD!-I&-%_@BD{P~ CmZ(KCxhts zxzS%B@PtJNcqAmy83jq_IBzWt>ma<$InTuq?mciT&brdYnbNYP*?r?o!>@%AtOI3x z 0p!Xf%f&H3Gkdln^EY6jGO- WN)ng4%+qy-(H!K-404i6Czz;8oHgp!5%LQ3qbA6m)|_843jwG z8oib+sqMu>Kv5VzU*h2P*jZl^%M*`UiTBYZ4d5@YMsG~YnQ5 FfB{yHK>OLlpg!r_SC5B z_*b|juUQK?zgBk(G@u+2)4tpF9JD57j~uWS5Z!P`QGV@ozRUF+f85<1vUqGB9<%r4 zWsT*1YlYMovjzTbt6U0x*>NFkGY45&x&(qs7U?$gxI!xzsr6G1kN^owx~M6XjveI= z0KKNdVFBvKC-yOaIDLY|Q12-0)O80}aHq>sJFOtsB?2R3d`n5FfeDbCPIp9x;%jv! zxr6{li$4)Z^7l2a1;QW%%N!rTeUT4Ew8mmEtM*oU!71Xp%Lz>#Y_=3{REkKt+)XDU zxe0=I55DOYrcvT3^w}G OGIiTVnCw**S)o`HiIw_WewecIhwUv*qzDP|RA;&?ih&av&TaWh8NZI{> zrntwXe0DJmdSX&~U}p3zEPW_<7sz?q#9xJwIYEvuN!6w6gH_nVijN7E*Ci^`wi$lo zXGyBg{fSP=JV?@vtaq+Bn<>j@9=d*-t+Vj{-)3q*o&l!I>#a!xbXidCPlwDK`(9o2 z_3sykK$rCaucXvhH+5ss(=acSOA^t4vLHGA6)_T`&4F JVp0ydTF)CZJ%s-)elT#wh?2I+^y0cXbD&>Uqt2h-KV5D* zaK2XlhXGD+6mvRH4kl}SurQ($TA!mS2Ja($O;{vT=^K% z7Z2@{hpMTw#@XMP!;BmzA(ywCAKuV7*nInJjm!d5B4^F<+x}0EPD0L?94?vd-fSB@ zSPFr-thczoI4G!l{>fDnctP>X@NGvtEuhR=lIzvJB0KX}YWDT~rW{is?q-aRWr%g{ z7xX=cpi2>b8y8 !|whl`V9*A84~Vx0tnsk^4ejv8Ni;OETUMF)JmdBS ZB>pK*;){nQl;TvMjnaV$JfnsC`Os+}Z(!@rNoS8h7pi6rJyNYFz9zJkpIrk0&Q5 z=so8KNfngSyukOg8QD&`_ytz*O#^P_UA3q0iF0)W0uRNJ%E^#Z#Tmj~Yawwe+f3D3 z0aJQ %6T-8V1Yy&=e+&{H^ZfQ0$xQ-anXji&4PnjWpH? z3kMHumz9=!#IFWw*+3kUXJlo|FB@|+I?`!%75UfOk?`i4Di$far&;c)$@Y<6|CfYG z@a%#5JT@6(5ew%F25qM-9IWP3_$y2el^W#HyNCn%S|MKt^phy=0p({x7P4yYf3=rr zOx-f}_cL*iJ^#&8zhF8QC@tsPjAvz~wk~|w-CoN~;Far4ip0x5xHcnu?AN;-c7zz? z`PAlAI6Z{1bWftI#1%7^qq8f7Ua<@|M%c+>(7#^mqBZnfFZN@}a=+An4W#n!B?L^n zo&1fjVUy$%|JR!l55g%Y#3I|1qs`P?f#h4Q&s$$`k4XSCvdl`&Y%KVJ}`ZK1Ww^ z9EZ)!4W*hm4r*#%V*>*}yXD-K0>(h-@6t|Y2#Gej(-YJ7H@%ynHw2vBXZAy}FXDLO z*y# )6pw n;sG?$n2NeKHX%8iFN){DHAEdv Ymw@O z*b6hVg Q@tLrpV7;i%u9* z;_;Cj@t6rkhgugY$y_7pTBqh<(}TyKIJ|H8$n)`HBI6Q<;(m_juEB4Kv~Nf2TS8kU z92@qq3&Y{I_pQTw38o)gcRa^xJgX+6em*V3*T0-58eAM!AA75xR#ol5LJxl!y1rdt zzZBnIO?coja=+zR@gOT=?(z6>;{=|D%knq+FqFmvJja18Z_=&jKUI`I|K=z5ORody z{Vx15cT*ReBJ#Go4Eq%8vmi77VVBsQquj6~`tmvggiQr$EEX?0vGU!x3nvd8k^00v zFe-f39Pc+#Km|yuDlHWNr7Br%-WtzWTx0c%Mom#$7s@a8=G9{BeVEHamjXY{t9O=y zsN>xw>G;zo@@W#h-ELfrZ0rILVRi4d7*572O2ZgqU)*1%hp@CSheito)eiQ!#_Z0| zOJH+Eh8~WmV%+LGZUIcyKF)Af1m9CtGNkB^aREXA88^a#7r0tlCqOTkM`gOzeUL5~ z0WNXWqT-m$8)fA&JBF7xec9V1YTb>5y+?c$2!2k5QFLK0z55&$`}AFTU-e)_rmwAV zM#1xsbF110o%9IlMecIUUWi58pIzA2-iFl=J4NVuquSE@uY _TB7a!L-ZVe!u40~=XG+%TZ*o_-&_dLpnRgg?#OG4b#*W%ropYV- z9SgFYY9^NjbTC=oCUG|vTL*R*oUuEM 6=$m*xBY2`rmnvyF>6&L)l#tJYqsfy4nbWw)*ke(B%jO~Wi7XYi}rkl z0W)9zxtv(Dl{i@wy`eK!|2^&7ncuo&kt -m=`oKYN2l=4% cGB(>X&6Oj#FU*)#Z zvp+ly=QI4A=^0;P^JS@x pO+e}~?1;bWU8n^%5^rV# zJQxst>BxwINVrfv>2J`su=_W7_9vj2-mzxc`nTh61W1S@cogVN;mH50(uG=qgjyOG z*jpOi$(y5P14{IP-hUh*spaXjUa0x{=E+3@s7z4V1qe!{%MuSqs96vXh|BwU6Cu`p ztr#n&*JA*UQ=6s$h4XZyH%`U;T|_Ml=9Bp>zgrH;o8$O&F%R|ObYbR{=az8qiz7fV zAh$MWTamasOZJ>2FjJ=mUq(@gJ|49mL@XJ*e-i?<+x+zQUH)$p- twpscL& zI)fk_mjgj*TWbSJQ$8{vfF)p&Xj_hu-<~XD2Flfhl8ROl-suQ3*1O9cKD}C-MDLR+ z9h+t$n@JdeGl*E*=&`T&4*9A7PVj5HPR*+d%}IHFAqfvd50nRe4i4?!5;Ci?e>0q1 zKp)>qjAW1@wxhPi>l(N}8lQAjn@fZKe3RO$1cZ7j+`~#Ax5$-I@(V8U`&ky22z~>s zXEgFjFIcDw4FpJ8o&UoH$PF|bNN43Fb3I& =&RPqhDrd6;oSVtO^%SZBm9V2sx$&QD{4qpKxAVFZfcks z*VL{=(*9D$k(d)FaVp(;gweMR@9{y6V;nI8iSPOeyD71YvT~1JOdJ2}c;qicZXPMc zPBIOEBxKF-YO2~$G`=hEOJ)8>1_h|<=4C)q0ZQ`or$C7j50LP@5ZN7Cdw{kM4&>k| z4L H{vuvaUq0EgvXDf}^rn_}cg<9#wO!1}g%@k6=u-88co$D|k#RFegC4 zZob==i$5XP6kMwz-KPL)h)FMx9^H;behy|ZFkl7 =>K zoCHfXCbIB+_n9#I tD$)ZrH< Cfos z-iJM({lZ9WbIzn>V$*Iy+TwcXZW;ZqFA8SpW55wn7yebuFU!(|;ygH3S5L%pelu;8 zREcosJRmxIhZ>9Nb|vv3|7FU}1iaA7mt0|a8iIXM7Z4gblX0W*KUA$*JCC38fhjro z^s3DWVMr;A@(XfAo&qZZF&Y&oM4*TRL$^OkovN}pp-v>_u^dhxueH^YbBwEHAxBtG zAwuksb<95u%l#ZIkPY8vd1U{K^gMKikT!z2w%&c8k)|PrsWJDX6P+wMnj1wm5NNx0 zCs`stR!TuiOJAfS%@l`Nq8{qNY5r2g+m^SAWR&N2I6QVRJqcpPQ_bjnoGafU5I3>L zg4uR`8Nu!AP)YmJQEE%GOkZdVIeUY@ +hDruXSmDz--Vx({tCZz2n5&L2==&8`VfkzK5GK~X^+4!<)yxOVf~b(= z4Kd%UV*pYFGQn=045;dz0=h6U06y8RKrWSHL`b1wBe!`4?^En*6r47tI#06eN5;Uz z4-sGuxhnHM&ibSlz5SwTSv_YY=c4!DsAhn0zWq%#0hj)h6sKn468sY@F2&ajQTJjL zrh*KbOg8@hPY#{(bj>1lIZ`gJz@UUlgF3s|o2#<{_eGx#MsT4)wiJ4iZsoVhVlCxv zT)o5}A;bef0O19+1L`ce*!I%Jjv<6D7)}_%(&|{7t6Yx-S0X_Ui>*G}A2p1mYKpbX zie02V?Zn}Qu(Xzt)&x&?GqWNf#U)sV5d9JExYr42SPm=oeVq1hY!vavGiWn!s^VSi z%NVds3i_!EOW69`ygga=&PaP`NMV;LUS XG#d4?6>4oT3_T-Wb>gUs)|!&i{YY~GpeiF$nBI?K}GkU zu&zblO7PGIe8cMmI%bB%%TI)%xqDyIKf!(miI>v0KICTTt;wH|;WMh!tn+I%8qO5A zohN|P7~+IqnMGpZc3A-10OL{qghtwzb{q9lU4HBNx-z8W4?<%GU>S@gZqH2<$A =2WsSrz =Zq$;D;rM0wruIb)7b#8u6^;C@1`_?i;U_xW{nn`?6voS9AT z2XG)^bMSvRjHJ&P`| piwCHU){U>2#R^`+yF2QX6mHLK>#Ba!yZF zp2Bh`XNI6eh{2PGRW%DvKk3vfjKxpDc(0X|!j)XI<0(Kwu6uK}S_^=D`9Uwf;q=?` zmQ($$v78XpK$6-GA=Bx4nuBNW6J+=HOhtvd!4LJIEAN`_hbK3&G&Mkl6FrX0s#9(V z9pI^dDuA_8_v!HC7sA%~Sn++}{8GXSLgUk7X6)lmiNyh}R(j8D&DNa8wEb-6SDznq zLgcenZ=2)`cZN# rdGcTO@LJ_jhti+ zb`MNeDrRKfho|gY_zy%nr(edM2C9>lRP4Y~07mnSK3*p^WZkTvWseidq%lw6n22oG zA|T%V9^StF%xzcKU|>||y$>rOR?ZAJI@DUq#EygBoXiXW>1HZO(oE;R&DD0}RuLiL zcd mpMSz4hMaW z0V=5eyPL(kqLJIH#k+@w 1`EM2Mf4t?Nu3o^Q-|Kgt%JU8BPK0 zIJX%i_o6QROVK9{gISV`@vh~{Nxb1pa_LCqg_NXT%ZKV2T4ATx6NE>ag{#hi|BY1z zcht$Ah~qD3V#4v~@835UdbVkXeN-<~7cSDTY-Un$^h*=-$&B ~l!CI_&C%7v{b0CFPFH~U?5k9|sv&I=-2 $9gHK;fM9TJ7rf*N{~N)VsN2! zq5@W
Ui*mGHx9guzE@>T zx*(eG<^E^^cr7Q>1{gBf0+>lcFfyOmLU@3$ 0`g$7k=jOM~$EeB3D6@3U&3Y UP;o#-FGoP$`XKcQk@llSpcZbqC_ zn?(c}WEu?;8jkpr8IGGUdai`ACt%~F@H}6sMPj1xrx|t2V4K-M`5ns&CYI!vS#N9W zv`trC(RRVaI;`KHd!8SS1>BRAV$zP~ag^U~oZ6f9SN|}zc@y^S%{L(DGRXNc#3EVx zIY UyJjf8$!`airP{}WOe5E4bD6FN WhY x3o-;WqNV6#`#JQFnD z3;b(S`iB5<{_feFC)y0AJ#umeM!a%2age+L{2a$Pd!n{lW^r*H^Y zGmyXZ9HRd%ZR$<6Fv7)SVL~iRJTkwjsS1>b0<(Vk%fIx|GmJM+NuHV6kziwWN<%Oh zUxfe3jS)2!J?KJ%D?U)4cre^u zJGc_Bls3E$T6FYeVZ2ntw~jl3C8 gfO+m?0;0k2(A5tIs8^zPCM#Jh5vJxD3LhQYD(6cn?? zq@}|Mj8_^G{XGH1`h3N>=A;7>Y*KWwTRo!LXl`itfKs3#_bUOz2numjQ4e!>)V= z!d%BlssnDq#iDjnM5#iy`MpB`p+ZYusClN@!`b|XpA2^s|6`ym?k2;bOooW7I^<*T zZm^fViCn-Mt~Q6W^cy0DCm+qdyOB~14S5}egxH@;KKuw)Qd`B&opUAr%)4@i)Ww#< zRU&xy(v0qTffkW(MDX;ZN^wAoNeLq<8MIb`6!ApdT`5UHb!R0p!tU>L e#YsO8GQ3Inoeu*p*k1fAEVb@)y_(|Z}Ghov@U0gJ3zGk zm5+Qgf_!k)a(ys`Qy!-=d(mPjO|jgzykUM>;9Wx}BkM81ukeYZA>q}nuY)WU_fj7R zWr9>2P3W>EyO!F82tO0~yzYWJU+xNXysIvnA#zETpKZ3^Q lM-1HPN>qX0cE# z*fQa)6MefoU&hc^OBBZ`Yns0M_aVlZcj21Ek#X1<^7WV@E;2^8of0@Q?I)xVEE!g? zgyK-5;mCTLC6e`pb !9x5U##y=WX4D-nDN z%Crv+o0nRHTN!DlX&TZ3MwbFrVeFfq+dgCf+i?`rM_N+Xo`e`vTsj%1L|x%*9IsKV zRhBOiME`vg)I?*rd@L?{yN?Jce?q(+R3k-kjNT#5016((J$WXf+xF~tC@hVYp)B#r zOLD6g=u`d|o1lFk8rbzlCOt^J$(5imO6y}l3fWJ^CirixXP~d8w4_+yE&!|(CEoq7 z6(ZH!++~5> agn$6?IdmzY<(J1>7i}_uNMoy~t%bBw;UwI2tHJKhoAsrda z4O{=Ydnmdl$l84ek_><0>^nTXb7rtA-q2(9WxAn*19}>@CKsHK!`MqK!T}b1RP*7v zOt +r;6^3V1rL3cKcdB;}DqyQ!~l9HA3gi#Tee{j6P=&Ndcg)8uul3y-#QF;Z9 zgr0;S#(4dTLQog}jJInH1i{t&O)`R+68e|l(gu^UQ}^^>v4UHw5Z9Japt~d7{7oJm zDb&;#&04o9_+H?+*lfrsL&SIB!u^ck@maYZH*3UWC+=BVQ5Tirk~LJc8g0F$+#MbZ zHIQ`sUvB)f7Pn^%wpak6Mde?C)~ePnm-cc`wox+a?v^JmR=93jsxcmgzV4|_>1{kV zX-A`Ug>_Tt=GPIIz$P7=#um#AmKXd`ISMCkaK9M%wr DSs60ghTs*cb@Q5&A>{>OMl4;Bw_p`hg{C zN=~*9?BKNegE)!|`qOb|g~bqag{% tRrQpvFb&8;S0aKTXU6s&0aN50m*^^)g&UQ^DCniPg@sm z@U3H1?Fj!!=!7%|8VOxPORd#dCmC+g$Z~NVz!;MAe~X(G0(eSDfRy9nokB8@&Gjp$ zTc^L?@)=?HgvR6@kGN&ycy2^#Jv&b0i-b4L|6Vuyt;?>2_j&c}DH5@IwBO{HbhOr_ zIF!oFqeyfXd-D0UEyEX6x+kwgMe*cg=*uv;UBlH1l -Game=1F%e^qlo;w>(bPgpu@6+Z|Ij~F z5B(-+HQN5yJpcn6)q1rbe-HGXnV5HE;Aq3s{%t|0*#cZ41cQWr4$omIlZL~A0{yI* zuWrWJOQmmXwz@zJ=o!?((=c&~K9y=JC>Fa;Of#6B-gDd<8;1G?FljS=FRiIwI%YSY zuS5t~3_dX@3={&2(OhmhFL5?x7+M4gWWUGD4VvR*CGb^B@U3N50MqElExd|k8dEQ> z*VVSwYsUabiQbXKS-m|);0FXF>4n*{l1k!$#C*QdV39KXja3Gm8<1l~QqWA+j~jI( zVaS&$oE0LWE%)X0WM1}5=U6nfK5Up&HUPx;(-BI_>#<_uH9U{N0b;_xwYd9JuGtXl zFe?N)Xx(YSX-C-FYeyKoo+u!TLLy8bhNM9*lWae=C(1X?HLwX9jRGW)gp(d!DQJJ< z4pZ9M3zS3^I yM(iUI6J8wHS5!zvm?|6FFwwI`a6>s1KR2~_#j0>H~Fs*NfYN;P>>#@{0W8ZnH7 zScA0W2clw4w%i)tqnjQ9IKY 7zkjmr?vKV%HBH)^jyQHbH07$5NNDQ*zVJ z1(F8Q4kbuE1e@h`v|R@`?#!I`?S+DQEnyz5$T1u>Y@|O|XG9kMq>dG%4zEU6L@YZw zt$7yO|14;2z1`ubIe@NaKA|*yZPD+nGEF=F{Vi(|tUkH8Ztdrfqgl0(W|zN2tB6PO z&RTFg=*Y - mL%oo}wY210Q zUwuR891i`PNydN2`QAb&mWIo#Y}?L061lZ6+fZ5!5*|O3Ojwv&DXl5>lQ86D%P@qc z0rq7c^b~)VvLg-wF6-IhANQYhI@tu;L@dcy3y8nMKzsd+;O}SLMAJ6HRf#ISj&+}7 zg@W+$t!RM{Mh5^ke)-kdfKISuIv1VzPiiRO7GmNwc4ATlFyT_k8R0$sHki+bP&j5k zthV_3h2m-6^Mh}Dque~It7)ar0CbY;5iT8oqm}i-5?e#%wx>#xbhu;SSATxwu{anX z4D5C`hH`(-61xZ^=kc^vSg@fIvW>=5Bmyj9MX>-EH7+j#Zt#y{SC}@d4QK3uUz1!W zQo^9hqJMX*bALsZB)*^+$zeY+uPV_X!?yRneC|T|j6hweY1tHNn)!{YH_FJ
r_;&f2RrY+Vjp?i |{i>E_;ufmfHM?MKlo1U;D z6<|{y4WroYjjBN5@Ow7v6@O` 5Uj5uf_jNa>v@}16U<2{SDE+Q zc|0zNt?@?^l#d(lKh;wXIPMQv6R^IkB8ayBZN{pC(L02czgg=M>u&CiBKsJ0>SzgY z%_?e(Y6(RVdZ&j4 *vMT_caQ-OAZ1*!=R&rgzJ#*`6G~xzs2qOs}%HsAK z3f-PeviT*io-^^v8K^@-t@d(s?*s6wfQZD{Pk_S~QPoTz+AebZ4 oNcIANrRG>so`aAZP34 zt|OwY<;*;<_4vEz)A>fbR?VjdBGlXLW?2eho-1AKN4?C$7?c_QB+()Ixq+GDO}S?M z39|wk)W<6lP*n(1WlU!!Q6#g=N5mKaC|6}$%?R%CTBttr_q3fZea9~hLR;4yov(K| zV`2X8tnx}y-d*szY-gpGp9(D$6EC>!GlobQ+VRe>${cEZjN2#_&OUU#-On^KM$3-m z5e=wMYPs`^`Bbr%@dNB^8t=B)Y!Lj>!-iO%C{$0M;;_h95I}34#rViR@dg5?UEqA> zHYkM1OVKaL7cO2KiB-nADa)u)9jQ6p?$C;ZKH~`s*ID >Q%RiQzJ4ZNx$8Vk3ffux KZM19mH zE_|~Vn@pt~pcZ|+wfOM(Dn!InJyG9V{kpsBL_)elqAq~_RZ_$8PNRG%mTQQ|-Zb1h zHS^&d=kwI5CvyvLU;nlmR2Eycmjkv28th@zTz}tz-?0f V(Hc2~p_|FOHm ztN8EjuFMzzbCFs6pADsj@y-BF^TsHtYStfbP(6*fL!?J3+~AJQ)pUZ{%{T}mz#tXz zsUS}EN|P*GbYL=XjV<{>1oZwwy*#28mz3`rp8}XdzybenY{6^Yn%`KjCZAb3U(QJx zonT<_hH*75uYdT=mr7iVd`(3OtvP)sI3xYY!IEeJ9bgqXqdhA5{MjFXF~h9BtXX{S z;MuE}9O efzu-sPQ_RMKKQ; z{h4+-9C8! 2zseZKH$D?eSi-)HQ>gG&opRZ_n%HvSR5c*`=)nAG! zmS&&%;6cnf06#i?ztCmn1h9Bn?9<%snxa<&Q8?XiAipK6 $PmbvfuDxYREWrfC8EJwIZm0C>LN%}LVrpC815 zy6u3S+W^1?D#9aF|GUwjs0`g0=INCv;!~Bsp%ZoM1w5H27c79o%#5h~ t?o_%(PtvKtB`j zI}#Oue98C%m;@!C@jo`kfJ5gR;E^0BWUGBbJWU0Aa{cN>A7C ~(1xOskw`R)$|+P9z@iAq(c z3-y6<-SVgZ+RaCqJ68M5aWt7?%Tn!x%FlVg%gI#zf=r`keQl^EzTdOs-i)XOq;B^V zmJB4a3+J*uaVQ-5lJ$P5pcmiUvjKjARyYL@r(TuWJHMc=>&u;rBY+m5yw;zXc$MNS z`I{RIvW=kRgRgW)C<9$i=BgAXc}OPh-*3$#rmZvCflewD7)#$?nC)We)th_C`j2OT zp3gOW#l&!vo7i(_c*%V-?|L}y(f-3|Ek)XgNhI2Allxy#c7N1AP T35HG623>~|?pXXJHTLUy~qhsyp=r=1|DXls?0Lg77I643gBA+y7 zHBu}guvumSZ;WK=oH=B?bdtH}V)@-&EsA#mu)ew@@MRD4!_i9cp%vl+=w_pU*(E)E z%&D;2(?NxeVU$P83@(|5Bs4KlE#)zAGdSA`d|oytW`BSS_pZ^-f0IS&7Kf?+yy4(S z;N2?@$D*LMK3({mEbgf7>4$RM^ZFoI=zWLZ{##DVeODFrU%RRXLEn*)f(>~-(2w=a z4Sr!}@Hcgp&oAR`tKT! zZ|`Xyc;s^(HlN*Qt1ZuFiE{C8I?9LyMv3hIj3lF>3%tXnl=VC8ri89Wft3KUi&)h= zhQ@6SagfeV(1Bhgy6YceKT#fFW!@HkieiJVBR%*QPX7Uj@{ESfxJB?E@%G3XDj)3A z`NYvRc$CdwBm8%lbc}N5lQf=1o{TyG_BIJSdOt*jFdMTc$|Xx8p5PlMskL6($vxw& zio(P~p0iH=QsKVuiJCV*c{zUdlwvv{Xl;a3F%%%S#yO5Ni=j+<39It9l4%NeuKBfI zj~Y_t#@AWQRM&Vx*h&UoX&t_@lS*`~S8eDeR3HTYr~)jHT*u|kXp1og2n4Z4!J+#- z+xucI=^u6$uVF*B!b3bIpr17*=?!7SF8n*d*H##5>vguDcyH`}LWtq?gAn`_AK$RI zv=@t86=0p!{zJhb`i3ckdBdeuoI7U={mc(pXw))ypP+cUnU8NcISL#p>;phSx4npP z-q2k9#88#33}kGvat~Gi@TUlm|M;S{{D1nQVTVdF#nJ5NY#sox6&jeS ?RkUOZ7zRSvGMgs}=6I zkKEro?dEC}NoiPco&rtxaVpeiZ!B~FHgrM-T;%t3l(3Oj+*7kfe!3oL7XM~`R3RM> zV}$_BN$Bn`eh#hTgb>&VZopSE4Z6@&)T5%_qVM`snf)7TJ fEC@jOBgwq;pls3UwSNzuuVA5 z6M&7>cF#uo1+!bB1gH%cUqT;$L<{I)5TkPhWKD>RzZDVC+ZBdr`M~NImeVCHUT{Im zl10874nM=jr3U+QJ00ceLA`R|yw;D9R!ZXnQ3XaE_Z_kzl6T((OLYDA_N$D D#B%=ol2X^3=&k!>UVoR zUS+P_7r&uI@!lKf5rzyDSamL=F?I#wUc$M6&FjUxn=B>)k<5p(HfQ?_{YseQx%k`? zg_z1Dq4fKEMOr2B0<}o&%a639Kdnv<>(Q8$AlZWxBPt0xzti{fC|7g=cl(b;B`HhC z|9q)ro36=pYIK{3z|UlJ T=_NC`Up20kV=v@=C< zv@w{HQ~FH71??yZ EH0AX^;K8riZ@c+X^{Kxb zNI%Q_C~UIKK&M!zB9pN)uubUWiAPu85MYa?P?VNtIoeJ6)jxu|^jQFmm`h-p9P~bn zD82vLbTza7qEDqZ)HuWG9nJ*qyqPR07HGeYC0<0|FV}Jy*}bRQziY=;;$WN)2!srT zf?<{kQ^HTV%B+7^M+lZy5H&ka#2ueBae%0F=9w@9M0e>&(fkH;!F^ThUba93mkWuK zC%&C5(&!(@sDIWqv=qRQ NJRXyO76Y^g#`%J*mNIF3F{RNj zber7DpmZgA)%kf`v@X)S_$aXTxNO+X;ZKIOz4}FM?KBD={in7u2#_zXHY2Rc@Ahw2 zbT1)ihrK=UDF&sV>pZE-w>w9o(6PU@pO{pEo%A11L1n)Gy{Dj?9pV1&wv*-GCNFNz zbcqJxWDBY}P#79=Z14dQTco!V{jN(Amk;1*jS=?dpXRKXKG2*EE>L|*0<>oT#oYpI znj@#lbs?Gjx)9)QnnB;#uH_*Bh@?+v^8!!li!=bb>uvr5q3ha^!4)TEts_MwW#zN) zA3-DxXY<+q>Fu=y+SKICh>k0ORQ!k35 +u%Dqyf}tDk8nyq3`u>;>WG21}6P=Z5#gDFB90I>Zbg zvu`YAkR${{CP2#1xlXXzLGCSJV=`B+S1qq+9_haEi>G!xPgxoGl*wZc84*hsvUXcP zj(o-ghP(5Sf=o#$z?rS8XLQ4b)0X0P9k)ZV1L1t{Tm9W+CwqtBd~V8ruju=;ODmG8 zt54XnV{vq638Bw{Z-XV44H*LFu5hGgp1MDErROs|77-wR0FwfOhXuGwh2>uUh1K7; z@VXFX(N{l@>f3uReug|}dV&o_#dc`TEAKqAb|+}{bj*8$Y#V%zp5&8@+ndHyFlc|C zoG_#z$g|!f1-Xu;UXT{-CA l;;bw(LHJL7^-Sl=atRgwtx-Z6tW zk(@$R`pqLmNmujreg49w{3i#y)JJqLRHO6$SLa9_Z_ vqv*w556@_=fB6LE1fjxFrkaW(v^$qDdbP=q~MD(1GPRL*QU54p7D20Ug* zU-(5E>Qv?B#nTjY;rPf#AhR7Big*AXK4}<$#}-FgeTC7Guyu9$7lQQAstSc&FGRf0 zzxP{d0}RbXIl``=)=o;0$fMh~mgfQUHg6d2gscvMZ`H&KQgvqEC8WTr5?Qb9Ol4_; ztUj12Q{`$-GZnw9V+kj<;3kdhPwh=L$Kxp+4Nthu+DZO9?2&n v#ujXqLUmsBK36b|FDS&vOKSth#k#)TmLiON^6|b|BbSXXO z0>61SfradkYMClEKGB~}Ny|yA M3TiBSykqBd=>jRI}U5xkwao%_a51C`Os@;Ow zXcg~@{RB?%MVGv(;WN|J>$;Sy2g~LdZ|gV%1p5djUoYQcfxyd0s>%+%D*6I+2TpG1 zGa$Y5jLe8$F@|_?PA|DU-;;+3XjXh#Nj832>XW=GJ=AVePe1 F3XJ;dq9KpfzB3?cQ zwi^9%Qs<54sXRypc!#m|h~;`g=xP$^#F^B@fch^J5tfM9i? =kasF` z;NP#@ZVqOXp8Y&8slL9vyE7J3lXzd>S^LXMS_5jzkUo=0c9RtzQ9fGuWb+FK0Dn6? zoj98){I#hRp%nTa@h*0>nwyjMa?{K1*f1(QynJ^vLQIS0xKufUf~RzTZ1=TJT&CB) z@XpnxxcF{`!P;?K$YqtvO=D)tm=@hee{}Seaez8U)yS%qxX}asMwcRP Ku+ z6#de2yYXrgmA3^O_R->}zs~KHtG^n7*Hx)rczO>Dzu%qPFih-()3k`0wEuZ0>|ni` zu9EDRXny**tL?LhLF8qKzHfAAitW2B+~v2~Nlzb{80eE%$CV~)LMU!^AnD9pHJmv* z98JP}u?N?YKi+Zcap;x{6b?e$>~2|^NgIzeckf?%uv~??HpkndvAZps5Z}TXExJVf zh2VT}-d^+H;Y7aWV=l0W@t(%j49(~ raH6CiGF3~m!^!%WBH2W zX#q~ARGpSvy`8O!OM2Rt{#oA|m6l$qtH~ozUwH wald(&m$HIx+<{u*9;hE*< zo1F0)HQ{SKkGQ~YupkF&F6N(VgH+Y6x*9r8+mp8^ Wl>YvMntIf_^4a6?1efI} zrz;U$WllK~kS_TjFId5x=#2tj>jR6PZXReEYC38@J!X5}!urO%9bx|l`<2eyn#}TO zs}#fWLawKcD_^;|^i{ufTv)y5B$|sh?kFwcor{Lgw4P`SCc<{hK627=%2EeqE{;9t zr;h)P%D>tCg2~A^J0n-JwD~aF_*L1B%{=D|PTtEFht`XpN9<8QDO%;DsP(wCsUwo` z30%@+<7f!2kS!YK?cZaC{m75GqaLcZI=>uN`p_E%d9~v+3u{iIiG1=Y;8^@-vi%k# zo6!MlypCr`F(ixG!MWSk8r8$a-`~X8UMC1nc&Y)xknWA5{5p2nNJ>$^h76BVMD!)T zdW;J$F<2Y+bGwuNNhj+S8&C7)baGG_+K-@I8+t!O78ARJbHdjUZmJG(sg
ua4?T9K5z+r;0Hs za$ awS+P+ujd**WmghO9iJbMATKffy^?Xui$A zzG*ZtyA@?1$11ag9* ;$|9^^L|zF>=bp4M59|?Y%$JW*YIy?MMAl5iORGZWc;zKG&9TmGZjSv~$&2 z-QK9EvmQSr^DFtN2=cvwkpouD%S@`GWW04hU>3#I0a?s +!Dvv^V6L*; z7^yrYIgE;rNj NKOm2bHgD@$KqHw=e4BwfCXAZQ7g V8R^H%clWo^W#UaRyPViKUgaaM4qp{-a}&jg7*xDVg_I`G`*2Hf6-8q{Woeh zVp2D5<>T7ZrizaT>&r3$F9&;z`Fm6$yNu1POGZ?Fi?0Mu-cP(@^;6$ag{q##o3~Au z$?PQ!H }= z_dH^xtU#YiOd~Vc<#VS+j)?gEAY;I&Or)VXtY55%vsRPfy30J2`JFa(o&RdF#M!PO zXsv6QF3;%)j&E9yuL2f~<}CX{7&@Y)%mn`Z>D?S1I;w|`T`4iC-Fl)TsUWE}&yN&N z9!gXBbkea%W>wo}x3%QPLiu6`64F<@r}`SA)bDb^*=-C--#qqQ*Q*$ePg>Lk{ay5U z|J&$1tW>Xlm~0_c$fno0=}uMuprv4UF+b5&QR;{Nj+aeP=NJeGS?~~$U-aBA@Ux`$ zEM`=G4MMK0^L||k!Y~6uB+_|q)}xc6+Ag}a8hp)r_F1@#Dz9vHTk0Zh-OF7r?Saq0 z bgLv%DTEqi*_Uy?x-l` z#$b%fzoeKlyGnIk>&-9Ad%trRA8sQg7V_rH5wJ)4voM*S$@<${2e*%NTSAgC(=F z0`zVnS(BmQlcTZz?xTy;wW`A;m0(YfmRa@Y!jC1?Rmv@F<5kicvqxZqgx|tK14?KJ z4lZ92up%0QUlF`uUk#1lzfPm}`6s?5_Y>{OpkX*M`XjqoHM+J^(4ebSRF4fGNkI$) zza_I{^hU88k_V$ vk2+~_E_$|9btc34_f0Vo#zI}cB+wfS2Tf2m&JJi-Dd zj2ixR;JdsF3Bi8v_M$vUrUpqU=f{&VfnS00LWQp+8`dgvS5DO0xdctCG?_VgC-J zSLK~7xj!1#BULnn;-|m~F|oS5JmD*gpV7$VwY2H!SvY)p@Hqre3Zwx1E= R*^kG3Jt@Y3D|NE#1>N7{gKI*>C^PEv>J=wyAAiT-I@-A zL;)9=2c3uN+SAxH&3y3$X=d i3E_`UZOU z51t#~GCS-ig!X)h$~&Dl&^J%=sh8gOJERf5zMD#FaW7AFj~?{(OKiT_YK&||JQOtr zjDdpFXPvxs{tnw;xtSh#x2k4(?1&1N{cs!4^>x+p!Fq>>co4{BZ$<_buFe=3B>w(> z7>Upv0cg7^Ztrc>SrSKxN)b8v&0O!z>wd*HagLn&m;F(GhRgMTw!sxlVAhXnRmj3f zr08E;Yuy6 QcVISW7OJL1Q!bBMkuZrLWy`+>9ISNsBT}fs1Wmt z+H1R@i$hC~5OJssyF}n&RgMq#6FTDqFI_Z13DH-3`OWco=fLl*l~t^6baSR6)jhFW zRmbg^qXt_2x<$P7F{4q~TSaL3Hn(y8FMULjMp?Aj$(qKvU7E$wxD%h2Ufy?|Pw8u# zjl=1#`K5E;`@?@2e;7~RJKxr>;8Jt Q(dHU*T>t1VmrA>?E$a(ctp7`n9l#PMU zF|w?{@cA9}#m7BLtyas5a^b6kJE-4S@>yY9NUud~gn^MEN8a3BACGD|Q<35=x TD^=*^pad3Vclw^Vk@^v%wwY$hccYH@LiC%U6cQ^ zQgZM@K`x4?IP?pT-j3g;T(SKHjc~a=X61a1PKrofv1M(U!1J@9sVb)liz1E6#9f5O zm*%@QPg`>ZhNv9vA)eyWYpWK$gYr1ZnqTr1ym}-3Dsg@=4Z#;EHn~2FLSPf{W5AKW z7*>cKJU``uP}`N0_SW4fc}e6v!+9;S&+ZhnD3Jk1df?&O93Ky<=USQ$sxyhN^vG+W zXU&e!08(SWpaeGUBT$aBd(aQ3Nd$?~TY6E)8>zAKEWXsN+c*4F@Hh)Dy3)st8V=e| zxT%}xGu_FAPyB>e7|xH^_}MdyLT*x>2~;_>QpDB}8fM!cG&E{!d5WN>4i`3a*`8|@ zHHMNEc@SkTHt-1V`R_OuucoxqjFvraue7wDs{Nnuxvf2Rs%zoNg~x^5vu!hbj;H-m zK$+hk!=rm~i(_VxT6y 8n3)A#a?3}4mNOIa$zKDJ~)qQnR|o0Ova!dS_b$-n+zDX{*|5`w{%#j zuHO Dg@f8@2jPhqoAIQ9bqEVeTM5eIxED19+0lu9)!ZmCwzh&eq*FxV$d+&D!2q zHHKoQ$gs2_VI1=NyH#3LryGj_B%R?}i@sI&HvX|q(A*Sv*eA#Rqh?FUZX)f*uPPnA zqcUW3jic+Djfw=qv0tT*TX?PX-Ga@E-3Xk !zOM%48Q^GP}?1-E3V zj)1ma@NeXlsB%&cpYJ+}O&&7t3`RO@4RRRjtLi{qY%_Rb=jvLbMm)ay`-)!?B#7tl z-U_+h{MNEBuUb)>hYN~ID#FtYxxmBExxS!!4(bH21TetRoQ=R^Z`faMSW9s(bhSBK zYIP>@t9Yum?)*+8U5(LN9xmb*Lmm=$p2gaO3IS4I2)*n5_(`66uJ?RKZsK0XXNl__ z2em;8pyi*;Dn@_7svWcj*un0;pDcSWvShfxdA%yFG)q;hZnwgV{VJ!^qN3A>dp|c4 z(mry5XX}Tpy&`6K;b(1rlCB2hF27k^4N{|d7E@@*pg9 ayNd`U8jQzrgTFwO=Nm8Ka`kx#Jwzq(QHjD9qu*6zWO?Z?N{r2ikrKYc zNK|~9+~T$FajGRC`SHWDVids&)U~!)V-vYxd4wmGErwOx+%@4bE&r 6y5a|#WT}pQdlF}itkVQ!<2BLz}9U>*t?ILB EC k*^u)NkCLi4o77~pPzZK)_s<+sC?9Fyno7PKx3n `( zH9Rx0Qavq)FWWWr5zVPeyfHGsaad(nyil~?U*xlX>Uc5J-msWKXREucA^U1H(~frA z6LKT2V+T?8EcA%U-R*bN-ymwK<4>0bfA5R;p+$9v1dsm*&t17W!5<~HjMvVge!6pM zaNWVx{CJ09khI(20;oUd8GX7_aKkSM5FYVe5 U5=~2OYf!%` zp(YOVG`+%mH9`SG3g*YDmm$=;1R;*OR;v_>R0 +tr2{cz^z5?8K1;)&@%<^!+ z@13;X0b*2mO~P|t^9dHBwzU%{2$&LaP~mGtnGbwgR9}WWJ(y_;Hv4qlG0D;Hx~f<` z#JRZ4u%wsaP4DE6GKSYLh)Xrw?|c3*qltJfT7B`_r?QeCL9AFx@jz)|FT)R}cg rYbbgK0haT5K*}^XdBGMR!_+Rc2$^P2o_kzV@x0&Y( zY&vj}fQ6Z!o*qG{XxR`zdKAf$Dzklu_%Q_-BO|Z&+ze#lFNVY#zmWK~NwFXR2bgJO zU?b33xI4{8sPX4bq*j7Y{Y`l!(MdJCRfuHmeozU5us|%zqLFapq5!V+p7MJa6`%LP z1_ABl#H(+`FtepXC(6<(Y;F+(r6HhXIgMCP1xk|mK{!Ak*}291x`wQfb%=`r(2* znQy+GJ*r36Uw|y~!jNluds&I=baMAi9Nan*Ddgkt3hbmzk1)4*t`iaxq7@Yw7zKll z(%Tnzv Czv$uX|te9Xu>CazVOP55VSLi*I%chMTP&E zpr#Q)SzNlW6mMf_phVtP0Mac5`sn{7t?)f5!H>H#i55R@I`;7yB|V5aJ^5WNzY&xo zSBOywD7CTxCDGa}+N-GWo$ID}peK0j!Kb7^lyDeS;etZAph3hJ?`|O0$kJxOyJoax zR2oC_A$k}@1B->C0y&Yq!3#Rz;$uZc1%(z>88WIuv!k$5wINJN2=rhE81p5x*X$1b z7AR!q(@wDX3KLs2w5VQ+m^}$WfC$_@OQp8F6%v2p+W7A;q15${w1>q;dbHvm1e^ou zhAfTn!nI)8;6LdGIiwp=-&Y#y#aM|wyg1dsHZ)RcLLjXm2$Y7lRrhB?;``K3Fya8d z^p4#P91tZO5<9pcPyjCIpJm*V!6w&xJfPdWvVx o=V*6B9#CM+#G28BWiBS&u*IN}@ zpwa_(D|X#~+58-nCbS*!{59s%sf3;>knWxaeg_a14Or4!Av=zHNBQ7%%$5dqDN*z_ znki||kG=NJpcL$#fn-3b2q?97I?c%gCBHM5PCUX~s#8im0iuNaNP!$K$bkzA)oAM| z8K43<_53;{rPqsQk (toWmvQoEya` z^1?K-^PmUVJ#d|Hy>t CRiF<5n`?r zO+4Qs1iQ*gB3P2lK)U_GnBq1nT4*woV1uaUhUdfYtv-q^^ANYyCz`y1T*ts!E&@wQ z6)3s;X-kSsu&ir;BEW% eCz|eRe*51?LNU-Lxhd<%RGCktDTFv(qMnu4g%o0zK?i 4?}ZnMXVxP2&b80r~#yXX$H zJh%Xk)^2MLNHy%d9#8m;Zf-uUa|0 vj z)V(VCrp&GFdS(lJwlv2YFkuqxf}(Q4jG}(r`yGj*dI9IJ8VE~pyQLaMIofG #ihDfYpTMmX8hZkVx3|FpbkToox;F8ysl9cxitX zMyBLkLRKv|1uab~-Pic*?c& ?lIfb zxZ?+1P<*-)3AiaM-+W3&PZEoL+3A6{xisjpzO8%PVfM@IWcr%{3UI2zHt7JE9NmW% zA5z~`GlV+{C|P{n=@fEpv<7g1?)Z+IacTFm=*ay%G2z-@M)*asFgT+YHE9jgiBSNN z!YksNvN >w7OgVGJjRwNW=RIr7aCZBuj^@G$-dprK6s_}I_86CI#m$oY;&sTdn z=3)HOi@srKGJFyZ8`e%%bDrP%K5nvH!2Ah)CUw0esI4)E*W!c2d>iwLihF5qw9Cf4 z<~i-X6a3U0<@F+5-L4s4T8O-si4oiS_9XI0n0>Zkp`*>l=53^_gS!z-oGvU4?ixed zGz-A+d#W3@Au}J|D1~yW!RL|7{l+UjoIK~UGTE3l^t{^zl062$n+i|G#Mb!T*GDfu zd(#Fwjte48sK9U&%oy6tI);IysV$h_J@OG2?v>XtbCK8kYZF(djn)G3f SDS;u<^-3qj z<>|TSE *ShBh(-zD@Y*wIT6K)K ;Vw*3e3MwbZ z{&qVqSny-NYJ0F;oG+)##zvM8P@^48WJj=(HF90}B2k=wx3lJqL3z_G96AnC63vw5 z!>k &m*HE`^iw+ml5~CDzt*#XSx<0#PkZZ^|LzRM3b0>*P}<2 z;2 eLB>k8r_9JlVo6QqxHmKjBx(;M0xxB5Q;~Aq-0(1+Nebp{n(* zcZ7JpEKi9`V|$-D+PyefHoMOYcQ)|YJtg|5cZUE(kWqS7fZFkXE`VqX)6z{r1mFZl z06eB2IOeU%pg?0d6^T>Uka$UtkocxafqM#M^3>ZNCU6VvV9;}VWD88-pG<5cb-_ZW zJEva6`{O~ 5*0jz1Q(pu-9GzBL67mS_szt zfA>!04v%484~ysidad$E*+83#_r9t_%~F-itE!D*tCeO+6UN;I7tMl1xdH(u#A8Kz z5JFV_EpYBV*f?UBNa6R^P}D^q)WZYMV3mYHsj@+H_90aJneExkNUhYSvLff7#6_N~ za >9B?-03CYPn65KJ;7p5NPlG_Kp5_n`c?~KnIU5i(q*lcosHNW8&ME+ z+{r3>!dad}FYd*m-uNN-{ADyRf4S{f$rHNBJ^nO&ke)G+o(I!!X3m1c{j5qnJ*PUX z>li}qvidS=9|Y<@UG<9Oo6HG*?FO`0c-d|0iKfp9@4g BZQZ3klpovuO|ExN&<>-pfpMc8vgsO4>lpJ^8j)OJ45k*ie;dK|46Ar-zRnB~ zDho40GRX%o^f?e~O{&t}#~yD^poQ~Wa`dKJ69%TdvyIZ$Oe&YyPA?tG&-R%;6rOk_ zi9hTveEBA_O*&Cx6nKWwct-?LoF%+wSaJK{)3f+z)E@^^BidrTGg_YR9$vr8p?|S0 z$WEg+$@Orx5H&_+oUZv~CuNPw^;(PSms@t+tZ=IalO1GTf$R`b=EX81^ Vvv=) zept+bekHP+J&NUwasLtrdIH0rW>A`|a>FS{b)xB#!R3u3gC8;n99n>PDO9IF*&+{{ zgKphheL;m ymfw0+kQy@q2owX1&3*}xO=vix}LAZ-6EBmJ5_xK zC%kr_ys_+@cWV3a)&Av13VsvOVWq3&>>WL;R1E_33z>_7^pqg?o{&2KQ|@D1Z^xqN zG7483ii^)!8&6J_kiU+y5TRjWL-^4sqfFwtHzik|GK)P+QoDLSBqe$+T-;-%Q9U}P zPZlXtr*e%M_^9+q4l9nD@aDJD!|R0LRSr{A48NQ*_EsK)QDJJ1!aD`$`DUt$eb1`a zsJY78d=@8e*?%LUe_z&S@X_jIRjqsQnx!0)Au&nkG^8ma`$Ui%l8{aW*oE8yZ_^U3 zTpRW(07KVn)7ctp6B#EVt`;gGUKw~G5hP#!AvjS;wrNaMAb-MDqNF AcyI~V4J<93^k zl2^?ip;S(bzv{L5_NB@O6>x4VK4Ej9w~f?bOd=GH)t;DM!P<|LAbsv2Lc=yvkDHVG z9qqiz ZQtUXbQQDmdc>TU23s6%vI|bT z#t(Ok?@U~{a#en}%<-jw+1_qTuycc}1_PYN-MX*y1dbPPK8lQQNDG64ltMTLgxF>x zpVEZXyRh(di2D7tsxP0P{|b{kSH?O2R36#(GPx6L2V-ddVIgQAUWT*zZ$H&1--fG2 z(>~m}&KU1(SlF8MavLvm)$FQe+aPtDh)ZaE(T_}*V`EImjWy_@wzzg7@u?L_>@L&Q z`pj=!Xc8~P=h|+wm`T)8`DoIj3-q?RE T6tSQSbSYN@=^C&tRbp zvz6WMIcXQXX%Bc4R!E*{88MXa#_l=g|H0gb ipxL&R;BuBj`%%XFI8hrKtAU)^3`-{+3@ zW8PHtHgXl1dd1wHQ+6uJql{?5L$}UdFW1Ck^lipSUqaUx<*xAB#Gwv7m2@3Bq*97p zA`e*o;~H2Su!z;>`JfLe9Da!*b}59v=hWW*{&ORtqkGi5ePLiqFKhfjJ(qJx=(l>V zZ(&znju!u3KVej#r6ls1O5@b0pOt!9hX-d5!!lGapT6u=*c1|P{&dR^4bPZlP_Kn; z(1AZSTk)JP(TDV%#eaP`zrC`D(c_On552b5d*55+C_OgZ|8}*rtn5{F@ox*y=_hYE zsCLYkwX(-X&PwL_5C@xdRjs~O&B;gDS3FrLZq6&({8g#{IBjISNhN`S5t*n_Q2UkE z`Ze=iGjZ>5P6hFUy@#lgg7)Cg$v(jhh?E~0{KTMA#09Kal?nr9x0LX)#!Hb+TK@vG zsyW)(p-_b6^xj0v=Wtp#(onq4*rn0UiFsc#gT69KraPCq{4wirBF#BZ_f<)5^?A`0 zrT8w%2hj^7bDQY_vuK*5qkkD}!3Qr631NQ=I4*|x%ebq`bXg-koi!6|u{-&*R1Yu- zhK1}i^aq`z-n)&|w!Y=4)Wp{x7hkinOB<^T88jJtTfOC_xJQI0JST9~6T;vJcyi8Q zf1P2M8qy<94B>^bBF6n{mEy|9#TZ*nbRA2~F_SFga~;$99U(hz^G{b!!Xh5WswrWS zBRIiq!2Wl@{ufHuo;Z^!yu)Ce59?9izYf?iRe<>jtQlxpOhpy+(u!7a(kKa+Q_>IC zO^A5&uY6FR%;{A-!)yZIq515pg$s57&sGP@TVxR6D(Z+(sq{>;49Mb|G)hs;=2{F5 zutnQ%%nT)YBtPua-b5qSM8PSyT6m1lWhH8zWkjThr6$>dy|??T1WMAku!YQZBGP1T zT*V3v)AeDuo|29fDlv>nYQj0*@!MZ&Or!6h`*;`JW|kwD+6pTVeyrQ1C%sapP$DWV zx_kufR6Q#F{D;6@nIVJ;?YTFkk1`ln<`;T^J{Zb-aLB0Mf{s3S{Y7S$(tz>UU9ZiV zA6eT*lxI~gi_5$gWzfbE7nm#JLH#7V(D--l4l1RAK%OCr ?@aWb&&buqhm0EdEwrc23-x->3Bp5C=3Ho-Sv@CZs zl#2L*pP4NQJtIO|BkdeHNHDpM9XZ$}am# DOkgwlYv_R zeIcJ*Ac=RvRYYri`?~F @a*|(JA`nOBUhgy_vP?wC3?s zRz6+x&$n2O4->cxO~yU>r%Si{@d-Pp^Wp>AlHUkpHZj-xq%NWOVbm~{i0gZmBr$#L zhqCO%45oY4B_rAMTJ})`w0>LC*sm1==(v115k~I>!HgFu-q`Ey+ZySacv@Kv!4P3} z?B^9b-C<6%$Lv6UG7*i~Ae+a*_H_G9cWOEeeeF-iR_Nxv%SYV}$Ch(p#(L4YN|PF# zNIjU&Yy};ik-i@ p_3S{v?+&Mg$FZhH*+U62a6<*Ahikvl)avBzRPJ zh-*5dF@1JJf)}$^QHnBLX!P>SSLu4?;lZy3=1{3CDQ^hT-DS}n`dZg-veB^#4(nCI z3enkBgEHg+m_Z9<_q%5l>IP6p&yBUg0CE6Z7UE)xl1iAEinURTkbOmy^|{e~WbxW_ z+Jgceodr|h#VJvi)<^^f>UACc+)*6lzOk9BR6b_3=-&xRa?@^uD1P4^SL}Fw4ucYf zqscUUmVwOVWp`!<*06Jc*XR9D)7;sfhB^yWCleUXUgRjK$;jromh`~9Gcw+;H$xFd zZRVh+6I|3Hzb5!(b5>}jy&3&=_h5z6^LO3pqe|)U>}X}Vk=JaxryddtLwC?hw>332 zsp6}5ihI>WThAddbh!qlZD_tY1cl_^Sb)?kT(x^B^zXmUTERpmK8HabdjSPK7uVY# z)DlH>eZ5uY2lC5xpPm< r%2wIaRMmm8vS2Ck$By5Yuu! zId!gWFe<}}yJpMW-l!u^Ao~K*^u3_sH%5ko*viv~1a^d4T~YJH22%Mu7Vv?eiZiLa zwmt^B%-r5*6Pwb1WLml5Pk*^dTsk*1aC=Q>$DkbP7@Xz1y8%rr@&;DLBa7XsDShuX zJ5;?G46TQXDAN?fpQNkCXEVT54JZJS@EoDqqRZNqK1IbBog$T*F1@$Ns;oyGnt~Yr zrHni;R#REEUnhU!mSrAcz76t5m;-v&ZSEIpu8{LHzCH`OP_l0%`+S+vP|sW1Z;qs` zV^JCGT<*fgSuM Q#AN%u-L5ptA8?aPN|+jD_AeGuK~FyM@e;&lui8wEyCsbs#$lt}|Lg z>a?Nlq;*@ZN#xnQivDO!!*`hz`AfebiPc-#z4^NR8=rdvMbBb`1#Yb5_T}pXWjFRo zmLjNkL#nG~%<`WGT@~#=V=VbCduC>Hk%G+lMB6n)#bt~9nwcoR-FG LRmX08*Yi%~k`%9mL ztFLxQxU5dNa4SViL~n(~A4h?=cvT~LJ$*gY^UmVapjR&nFMQe$dd<& *mx| zTW$daLrAqRl~j$R-Hz{W)yo5kf$w_@XYor8jTXH^si$>C9o6+>n}Vnqy{0k-%Swz8 z^+SaS7~Q#YO29ii(Zw)s>|*BP^vEx3SF&y)JUXanT!Km;_Ebod?(J#&@dp+KYjcsF zuN&1JG9>ygR&qMl?b0gkl6zS`J@_<8Juy=+@{y)<|BV>^w25GY+cxULUUR8lo82|b znw%1iE9i--^=p|*?Z$D`=f?ZQ?w?w$Ix}3Ofvu+=e9Ft_*cmkJU05_9q9n3KV~dtH zC>@-l{KrX>5B(;s@V3h`>?AuEZFg)ca}LI8%!e {%AAOd^ID(Nr@X*4D{~^1Jh_P;Ua pR6uWjbefhz+~em)>pEE%#ZqVJ+}F=E zXNYeiF??^0{BXC&C?b}2?%ly23_OzB11GfHMbFrBlTHowljQ}c=oQBH8WR)!zWIw> zxtAuD@vD-`yO%AUO6|LIvZ@4rnjwUIBc+i(-_Pdqp~x@a6L}2CPZBB!@h!Ea>7>aO z;xGyKr?yux33}|ji^a`IzUgkoqykw_`?vv4JCWZD%4Dy9JqQuwnetLsQMw*< l 4*xp928zb0+G(G3~ zvpCf;qPjZwtHjV; &k*0#y62shywA2vtd-^U4nPN~yGJkyrCoJ-Oas9>~c-x$KC`tPp!> z@boGQ6ELYFBg{rD)FO!`4ob)}^SpevcZ!+6bC!RzU0@T0$l-n3)~3kXgKp|?3)95j zi}b}bHJNE;Rk||BDza3uqjgEqT>*9rCCsK1VZ-F;^VHW5KYH9d)uC0EF?4R`VyS<< zd@Ce0&*SK;sT>>L9we2&8 *l?M=W@*#g*_!*X} MWT8Ai+1hwO7HO3Fj_!D|I vD_vo0c6F>r||N$8NWO z50}4~eZ{+Oq&%Kve5UO+ay4#$j{03uYBpo1 `!{7 z*a39BJ(F9Vo4Fxujt;?WmP+>LfuDq+b}wWu!g|f0sjWlyCNhLD{4myEV7w8xVl-#d z>LwertP_(rsz*pKTX?t*YE4HqCkUMj{gyVaPbLZ=M`)Z!uJZlpC!}iJP4fGIZ9Exa z@rk~P^kGbc$|-hFACW?kkA-vK<0@jJGK?spyJPo?y9`Bx3vFeW0duRLj?(L2-OUxa z2DJH)!}s5*Akdua)dG#f2VlEVpPWZO1or<$NgI9jGJ;K4ykLnD;h&O5e=IP6qh=xq zm~JB@mL~^-qYRhg68sIj3L*YA>bziiRxLTncw$&O*2V*M`|~;%Rk^TWp;!2PPKWID zT0}P2!cV~*sWy6qziArjG0|@zg`YxuOmzsD^pQ1ptL5VM3oR)6o;{T*e?Q9>wEr>m zjS=5>!P;kBBKJoEij5??cjj{SwF=!jwBk6>=TX{xB5X%i0|ze%v C{!?(tEgd z@A}sdecj4 }tM}TOPZ=>1EBCN|r)4F-hicG <(3C?RO5v{3Q z@)-OWO9_X8 N1wEttc}6|EL ;$uUmgh%)jv^Jxu@ZskB{x z?0>q+i2L-xrkJX`Kh|!wg3t3J*Wc)MXlAL=^H7S6_c2f9<%;1|^&4?$F38aA1pE-T zGIh)<6Wo?_;f#fNKsK)7U%iSx73d9pJ!joqeRel{Cktb~x9W*ej=mjlU;<~z;Gc~1 zhsIrAd`+q&nD>#+;NU$5lZw|Bagp&B-7Mu9%hVd==R`h-wXFmyR`*4hJSDUCU=tc1 z)2;Uj *N^z{2g;u glD`sg(m3YSYzd;f!Z076oqM8Qai^51KCDm7e| zF5JuaYb=Y;bg(5Mwx{?8o6vUWcOmv?^oWXcxnM9>OprY0-|%}j*R&Z0=CM5mPfW4P zftQMetz)@qP6(Z0H?q__5*RZRyfw%6+{KqKp`jl8I9rHiQclm_^=zEUy^tkO(}i=W zHM6S>2>Cy?*kdYyHwkzFWn#N%YSo2zjmncwdO;zv+|^P1U0(5VHNT6Uy10ayoAWUo zNt;HI?zitjImp~my4T~^gqKK(BV#$yRo2RdDs86eYbf&85|RslEFmOB=b55$P^+~V zY#-Q=RE<2deAmzSGuR|vx6pZ0E%Zda+;$vYr!vu6g 6WzR!`HAY-KJoQb@41b_}e&m7Q zdfdCk(&6HCBmQqb!nU=(PiFdUsat|It8Sb>VjKx8WYbuS(&P`n0?LSkpEOi__l(kd zJhr#1Ev3f!87Z_=Ohe)a(_TtpgC8k6D=-BS%wnqb0Af6Fcv$lwt5kKd2KV`PeGI$t zYf&YxdGDx_LA2eaQT+bXM*-`xBmWn43d)b#V$}KE5A>SGH$znR2iAT(JIUevkM1j6 z2Z5@LBa1_R>`jhOf|~$A`BTCeTa(HV-_F_dZaVAfr0X(n@GES`B+)|jD#tbVU#!8@ zg1<+M^ye87R*mY@f7IK*3M(V>*mE}cv}C?b(t4Yi=XNkY-(lkB V0F#+9T zxpPDIo8yY})teFfBPBgti|YebpUrp?Qv~4%A2MNdvBhPc3AcE*P K&EJwWDtacYKzZ@&;ubMqy=X#}EHzYogC7|F) z@aWcoqkZcBmM4#(m#E Mq(;VaFLEvi9bve0b+ zFB-xI3;ocOm{$j9a%~ nmh{BY4{vWuzrL*d!4H2%orZCHs; zx~T7yNg4nD0JuDg4?N(Z9@c$ 93XBv#QSNd5AM&T2$Rf45rhcWv4gO2aB&yioCyqA4)B`_WtZ273Tr)0B>_tRJ#gL z4YyyHb)NrE4JSn@|A&T?jA7l{(EOSaItqcZ_Y4$embr(slv!nyP7@!?&NU!=O{|La z40Kec{0a;Nk;5ErY-M5M9v?zBYmJ<8iDpxs`#zv$>mrk7v~2F3VF1u(57)62(t_=$ zmAoe(Bc(OjG`8}!M0&lA(-z&MF;`Y%4ry84!lKjgbBUpm&Z2U(9okLuz+AE2FgZ68 zI#-I) ^1Iq7MXPx^??B)-IK<7>_f5b zwBPRZXyFlJgP4DGRYdxqD$Uj>TmFWb^z6b6vI}=cSmhT@7^0n#C$tM6Oyw?3l$;;2 zav*g1cXI`mVVeWGJ2IuoEt?_&5j>hZgD)-+8vpi156z$V`xk2X9Uh?e0a27-qkE<` zc-+x$!wL^MA=iaJyG=K(Pv?DGak9x%+TU066OAf+&Z67s`Qf~ko+k^}tzW4YI@+^j zu%Ij+vpF8ee0zTm_n!rlDa@7KXiS6x03ob%x5v>EYF|Fjx2tn7mhHj&Hkk=l>b$!N z9eJu{Ton}-=3Wd~a5~E|^Cf}#k~a+kS^b&XRZ~WK%JOQgx*hG1x<~*iQCt_Fa7qsC z=0|Ki!;wxvw_ZcMs@dk9jw(kv%DSkzOt8F@Tzd-e6Oh|1>}jaq874}pu*s&*xYe9s zKhAM)q>jc~LU24(8cb{R`o%Wpl(s#4t%t03bFH@L&h?AlF9JMM*XH0-d*RPE$mn+y z#X6yzw>7wIwralvIYJfhvJtSIM?JxUe(1!*ceH_l2+-lNZN?p3ydDTZ9<9KM9~RGf zWCn0>8^QQA5-jiEAy@eE47X5CLFTbM;AIs8;G7!P`2qlmOkC+iM7}<%FUo!5`a%ZDeHVZF>umX1&-SoNko+@ly}rsRvt{ zqJM#G5nQ`Al|ql;Rj2z7a3e_TvCig&D(A_Y&=dLxvHZUYe*zBWnOkDgyyu9~FYJC0 z0MrxAA(=WHdicET6_=V|8Qn$*cmaG{fB4uTY{83Qdz}feFxIEx y%BGo{Cq4zgDkL5MMyMeEC%h=~-3XPt;g#`S+cB(w! zW3h)MN5)qYjIX3$-)kNK&&mo3^Aev!zwpE*r2X@fZ~(68aF6N|s{YFVF!g_!s%`l{ zlKTI&`eU;Vig7<~THhiC-CP64ui1Lxa_7n;qbdcXFMrM6?d+fGh_~vdRGw^SZns<< zrnQWBEQ?BXcVOsddA75JS4LG;*z4?{p_Dd&-kdxDqqr*Kb9v$g*W$Sx_S8aVK zu>CIp=ERzhf0VmRS~{jW818c4r6*r{sAF9#c2`FxK|OJJq=jnqb@ch&C3g6x^zVcZ zP`GW)Oy-U 2%-+Wr2+EdA82 zGq3XoRX%Rgd;08fAXE*lUW>1g2xm7d=IP$|+grXyB{X4ePn{T_Y27i$SMZQ~Xp^|s zLmP94>IgZ89T@ blZ~`?Ywf#L zkZ5;PMYkvKpJMQ&Lj{k^33U*uJ+@JLMan?phTi^NUuo5!Q)^A)!Y)khcc8Dfuz~1e zr**e!ruB_U7+vl1EEcf;C5AqT5>@V;dUUok;{54_`0|4-ZyGXVPqs--^n;0-Zmry5 z-E^Hz rVe*rG40KY!Zr`whF5`TX{%>JZYT==`pP z?Z*l3!=~elLO(rMJM1T-?+WTl>*kv%Z@1sQI3>Hi=#ibaD;ymeRPnQJSNTvve5L;( zs>y+h|NBAM$kM?44dD-;+P<{#l24-b^CK_^zCZILch={kjK 3Gf~tP }xV`WyOl~Y+Pfz&6 zPk+z(xptBDPY<)Y2IKQsADGpx*-W?OGAE&j+@h^fs{}BMKaTqEqlqv$*;Bk{O%+Xw zE8VX8^(=nXXxv7AruEAt y5Dlw7sk#DS3SMT1;bxcB-#`u)kzKG7qE&7F2He> a58Xn|I}s|B9aFx29x| zTK4tr>i8I+7vVS`JzW)iihM%s_l*Z YbX z9s+QK)~^cgqv>cP(T}x#IhxhB+gS5>b@M>`KwNy4EI@|hjrbhciCx8_ueyd89S`9P zAYuMDoub}InCO(`Tzs!zTtT!juDr2dzhoSVxXn7_Y09SdcNCfiDjZ%G#BXvJ@7+$y z#x~{MLX#=9S4TzF&)z|gU1Jw2S50oakB;I4S6sb^7d<3dz2J)?6jzK3XMG-=7M@-U zKU-79U-^@Qy*B(iA~+gMif7%To7+7whM9-5=j{%!4HU++UHa;2datVFIFk*8Di8}- zEJLRPN#M%!;rv>CdUDzaDkeU&!E9j~<(+~kxpMOKeZSmv>yFDw`g1V!isyd2Bui`N ztBZPB`8Ez*LgkeU7zcShc0o9zIn%iiJ>6~$U-6#%YR_Mj` @Y6pgvf&xdL(TWOI5;Oa6mLoEpva?DNNt!18ouAmO{(v{9kQgC8#VX! zL#uo6Wrg ? zme{il^(o#n?2eA;&o*p+={vIXOE2zaFn!=svl$H@ui7xSNCIZM0c$zSgGin934f=Q zAjaF$m_MQW_!S>9S%Oi(ACLNX3ni`K35mV{Rk65z zUgCGLl<$tqbAW(8LGXa?({lsj0y3ir&ya5ud^e8B{;N~503Isn@S}U-jVDP*6$! RKQ>$~=Ui}b zX$XF&^q FQdoY>$#P5_?G2uy{-}@^3dC2OCm{XjkdtJn7l~FbMSJ$|KMhpZDuH>~*rS zrwP@#ZUWpCKy-gMHWSC=(B7+Oq3Jk?Io u$5nkOT|buaN`k9r|^!24wn@2;9DH@ z*#7uqXMtsE1Wb6k9!y<&EMb2*`7d 3jN)4^ADo%XFBQD;ls2^ VwrO3F&p7a(qO97jJQ>r+{|k4kJcR%N literal 0 HcmV?d00001 diff --git a/examples/cloud_run/deploy.sh b/examples/cloud_run/deploy.sh new file mode 100644 index 0000000..b422644 --- /dev/null +++ b/examples/cloud_run/deploy.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +echo "Please specify GCP project ID : " +read PROJECT_ID +source .env +gcloud config set project $PROJECT_ID +gcloud auth application-default logins +export TF_project_id=$PROJECT_ID +terraform -chdir=examples/cloud_run apply -input=true +set +o history +gcloud secrets versions add GH_APP_ID $GH_APP_ID +gcloud secrets versions add GH_APP_KEY $GH_APP_KEY +gcloud secrets versions add GH_PAT $GH_PAT +gcloud secrets versions add GH_TESTS_REPO_NAME $GH_TESTS_REPO_NAME +gcloud secrets versions add GDRIVE_MAIN_DIRECTORY_NAME $GDRIVE_MAIN_DIRECTORY_NAME +gcloud secrets versions add USER_SHARE $USER_SHARE +gcloud secrets versions add LOGGING $LOGGING +set -o history diff --git a/examples/cloud_run/main.tf b/examples/cloud_run/main.tf new file mode 100644 index 0000000..a422437 --- /dev/null +++ b/examples/cloud_run/main.tf @@ -0,0 +1,206 @@ +variable "project_id" { + type = string + description = "GCP Project ID" +} + +variable "region" { + type = string + description = "GCP region where resources will be deployed" +} + +terraform { + required_providers { + google = { + source = "hashicorp/google" + version = "~> 4.39.0" + } + } +} + +provider "google" { + project = "${var.project_id}" + region = "${var.region}" +} + +resource "google_project_service" "drive_api_service" { + project = "${var.project_id}" + service = "drive.googleapis.com" + disable_dependent_services = true +} + +resource "google_cloud_run_service" "github_test_validator_app" { + name = "github-test-validator-app" + location = "${var.region}" + template { + spec { + timeout_seconds = 300 + service_account_name = "github_tests_validator_app@${var.project_id}.iam.gserviceaccount.com" + containers { + image = "ghcr.io/artefactory/github_tests_validator_app:latest" + env { + name = "GH_APP_ID" + value_from { + secret_key_ref { + name = "GH_APP_ID" + key = "latest" + } + } + } + env { + name = "GH_APP_KEY" + value_from { + secret_key_ref { + name = "GH_APP_KEY" + key = "latest" + } + } + } + env { + name = "GH_PAT" + value_from { + secret_key_ref { + name = "GH_PAT" + key = "latest" + } + } + } + env { + name = "GH_TESTS_REPO_NAME" + value_from { + secret_key_ref { + name = "GH_TESTS_REPO_NAME" + key = "latest" + } + } + } + env { + name = "GDRIVE_MAIN_DIRECTORY_NAME" + value_from { + secret_key_ref { + name = "GDRIVE_MAIN_DIRECTORY_NAME" + key = "latest" + } + } + } + env { + name = "USER_SHARE" + value_from { + secret_key_ref { + name = "USER_SHARE" + key = "latest" + } + } + } + env { + name = "LOGGING" + value_from { + secret_key_ref { + name = "LOGGING" + key = "latest" + } + } + } + } + } + } + traffic { + percent = 100 + latest_revision = true + } +} + +data "google_iam_policy" "noauth" { + binding { + role = "roles/run.invoker" + members = [ + "allUsers", + ] + } +} + +resource "google_cloud_run_service_iam_policy" "noauth" { + location = google_cloud_run_service.github_test_validator_app.location + project = google_cloud_run_service.github_test_validator_app.project + service = google_cloud_run_service.github_test_validator_app.name + + policy_data = data.google_iam_policy.noauth.policy_data +} + +resource "google_secret_manager_secret" "GH_APP_ID" { + secret_id = "GH_APP_ID" + + replication { + user_managed { + replicas { + location = "${var.region}" + } + } + } +} +resource "google_secret_manager_secret" "GH_APP_KEY" { + secret_id = "GH_APP_KEY" + + replication { + user_managed { + replicas { + location = "${var.region}" + } + } + } +} +resource "google_secret_manager_secret" "GH_PAT" { + secret_id = "GH_PAT" + + replication { + user_managed { + replicas { + location = "${var.region}" + } + } + } +} +resource "google_secret_manager_secret" "GH_TESTS_REPO_NAME" { + secret_id = "GH_TESTS_REPO_NAME" + + replication { + user_managed { + replicas { + location = "${var.region}" + } + } + } +} +resource "google_secret_manager_secret" "GDRIVE_MAIN_DIRECTORY_NAME" { + secret_id = "GDRIVE_MAIN_DIRECTORY_NAME" + + replication { + user_managed { + replicas { + location = "${var.region}" + } + } + } +} +resource "google_secret_manager_secret" "USER_SHARE" { + secret_id = "USER_SHARE" + + replication { + user_managed { + replicas { + location = "${var.region}" + } + } + } +} + +resource "google_secret_manager_secret" "LOGGING" { + secret_id = "LOGGING" + + replication { + user_managed { + replicas { + location = "${var.region}" + } + } + } +} diff --git a/github_tests_validator_app/bin/__init__.py b/github_tests_validator_app/bin/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/github_tests_validator_app/bin/server.py b/github_tests_validator_app/bin/github_app_backend.py similarity index 69% rename from github_tests_validator_app/bin/server.py rename to github_tests_validator_app/bin/github_app_backend.py index 9a22bb1..4ba3225 100644 --- a/github_tests_validator_app/bin/server.py +++ b/github_tests_validator_app/bin/github_app_backend.py @@ -1,3 +1,5 @@ +from typing import cast + import logging import os import traceback @@ -6,13 +8,11 @@ from fastapi import FastAPI, Request from github_tests_validator_app.bin.github_event_process import run - app = FastAPI() @app.post("/") -async def main(request: Request): - +async def main(request: Request) -> None: try: payload = await request.json() run(payload) @@ -20,10 +20,11 @@ async def main(request: Request): formatted_exception = traceback.format_exc() logging.error(formatted_exception) + def launch_app(): uvicorn.run( - "github_tests_validator_app.bin.server:app", - host="0.0.0.0", - port=os.environ.get("PORT", 8080), - log_level="info" + app, + host="127.0.0.1", + port=cast(int, os.environ.get("PORT", 8080)), + log_level="info", ) diff --git a/github_tests_validator_app/bin/github_event_process.py b/github_tests_validator_app/bin/github_event_process.py index 655e282..a8ee22d 100644 --- a/github_tests_validator_app/bin/github_event_process.py +++ b/github_tests_validator_app/bin/github_event_process.py @@ -5,12 +5,12 @@ from github_tests_validator_app.bin.github_repo_validation import ( get_event, get_student_github_connector, - github_repo_validation, + validate_github_repo, ) from github_tests_validator_app.bin.student_challenge_results_validation import ( send_student_challenge_results, ) -from github_tests_validator_app.config.config import ( +from github_tests_validator_app.config import ( GDRIVE_MAIN_DIRECTORY_NAME, GDRIVE_SUMMARY_SPREADSHEET, GSHEET_DETAILS_SPREADSHEET, @@ -23,15 +23,15 @@ from github_tests_validator_app.lib.utils import init_github_user_from_github_event process = { - "pull_request": github_repo_validation, - "pusher": github_repo_validation, + "pull_request": validate_github_repo, + "pusher": validate_github_repo, "workflow_job": send_student_challenge_results, } def handle_process(payload: Dict[str, Any]) -> str: # Get event - event = get_event(payload) + event: str = get_event(payload) if ( not event or (event == "pull_request" and payload["action"] not in ["reopened", "opened"]) @@ -80,12 +80,12 @@ def init_gsheet_detail_file( ) -def run(payload: Dict[str, Any]) -> Any: +def run(payload: Dict[str, Any]) -> None: """ Validator function Args: - payload Dict[str, Any]: information of new event + payload (Dict[str, Any]): information of new event Returns: None: Return nothing diff --git a/github_tests_validator_app/bin/github_repo_validation.py b/github_tests_validator_app/bin/github_repo_validation.py index 10cd6af..307cce3 100644 --- a/github_tests_validator_app/bin/github_repo_validation.py +++ b/github_tests_validator_app/bin/github_repo_validation.py @@ -3,16 +3,14 @@ import logging from github import ContentFile -from github_tests_validator_app.config.config import ( - GCP_PROJECT_ID, - GH_ACCESS_TOKEN_NAME, - GH_SOLUTION_OWNER, - GH_SOLUTION_REPO_NAME, +from github_tests_validator_app.config import ( + GH_PAT, GH_TESTS_FOLDER_NAME, + GH_TESTS_REPO_NAME, + GH_WORKFLOWS_FOLDER_NAME, default_message, ) from github_tests_validator_app.lib.connectors.github_connector import GitHubConnector -from github_tests_validator_app.lib.connectors.google_secret_manager import GSecretManager from github_tests_validator_app.lib.connectors.google_sheet import GSheetConnector from github_tests_validator_app.lib.models.users import GitHubUser @@ -70,66 +68,99 @@ def get_student_github_connector( return GitHubConnector(student, payload["repository"]["name"], github_student_branch) -def compare_tests_folder(student_github: GitHubConnector, solution_repo: GitHubConnector) -> Any: +def compare_folder( + student_github: GitHubConnector, solution_repo: GitHubConnector, folder: str +) -> Any: - student_contents = student_github.repo.get_contents( - GH_TESTS_FOLDER_NAME, ref=student_github.BRANCH_NAME - ) + student_contents = student_github.repo.get_contents(folder, ref=student_github.BRANCH_NAME) if ( isinstance(student_contents, ContentFile.ContentFile) and student_contents.type == "submodule" ): solution_last_commit = solution_repo.get_last_hash_commit() - student_tests_commit = student_contents.sha - return solution_last_commit == student_tests_commit + student_commit = student_contents.sha + return solution_last_commit == student_commit - student_hash_tests = student_github.get_tests_hash(GH_TESTS_FOLDER_NAME) - solution_hash_tests = solution_repo.get_tests_hash(GH_TESTS_FOLDER_NAME) - return student_hash_tests == solution_hash_tests + student_hash = student_github.get_hash(folder) + solution_hash = solution_repo.get_hash(folder) + return student_hash == solution_hash -def github_repo_validation( +def validate_github_repo( student_github_connector: GitHubConnector, gsheet: GSheetConnector, payload: Dict[str, Any] ) -> None: - solution_user = GitHubUser(LOGIN=GH_SOLUTION_OWNER) - gsecret_manager = GSecretManager(GCP_PROJECT_ID) - acces_token = gsecret_manager.get_access_secret_version(GH_ACCESS_TOKEN_NAME) - - solution_github_connector = GitHubConnector( - user=solution_user, - repo_name=GH_SOLUTION_REPO_NAME, + tests_github_connector = GitHubConnector( + user=student_github_connector.user, + repo_name=GH_TESTS_REPO_NAME + if GH_TESTS_REPO_NAME + else student_github_connector.repo.parent.full_name, branch_name="main", - access_token=acces_token, + access_token=GH_PAT, ) - if not solution_github_connector: + original_github_connector = GitHubConnector( + user=student_github_connector.user, + repo_name=student_github_connector.repo.parent.full_name, + branch_name="main", + access_token=GH_PAT, + ) + if not tests_github_connector: gsheet.add_new_repo_valid_result( - solution_user, + student_github_connector.user, False, - "[ERROR]: cannot get the solution github repository.", + "[ERROR]: cannot get the tests github repository.", ) - logging.error("[ERROR]: cannot get the solution github repository.") + logging.error("[ERROR]: cannot get the tests github repository.") + return + if not original_github_connector: + gsheet.add_new_repo_valid_result( + student_github_connector.user, + False, + "[ERROR]: cannot get the original github repository.", + ) + logging.error("[ERROR]: cannot get the original github repository.") return - tests_havent_changed = compare_tests_folder(student_github_connector, solution_github_connector) + workflows_havent_changed = compare_folder( + student_github_connector, original_github_connector, GH_WORKFLOWS_FOLDER_NAME + ) + tests_havent_changed = compare_folder( + student_github_connector, tests_github_connector, GH_TESTS_FOLDER_NAME + ) # Add valid repo result on Google Sheet + gsheet.add_new_repo_valid_result( + student_github_connector.user, + workflows_havent_changed, + default_message["valid_repository"]["workflows"][str(workflows_havent_changed)], + ) gsheet.add_new_repo_valid_result( student_github_connector.user, tests_havent_changed, - default_message["valid_repository"][str(tests_havent_changed)], + default_message["valid_repository"]["tests"][str(tests_havent_changed)], ) # Update Pull Request if "pull_request" in payload: issue = student_github_connector.repo.get_issue(number=payload["pull_request"]["number"]) - message = default_message["valid_repository"][str(tests_havent_changed)] - issue.create_comment(message) - conclusion = "success" if tests_havent_changed else "failure" + tests_conclusion = "success" if tests_havent_changed else "failure" + tests_message = default_message["valid_repository"]["tests"][str(tests_havent_changed)] + issue.create_comment(tests_message) + student_github_connector.repo.create_check_run( + name=tests_message, + head_sha=payload["pull_request"]["head"]["sha"], + status="completed", + conclusion=tests_conclusion, + ) + workflows_conclusion = "success" if workflows_havent_changed else "failure" + workflows_message = default_message["valid_repository"]["workflows"][ + str(workflows_havent_changed) + ] student_github_connector.repo.create_check_run( - name=message, + name=workflows_message, head_sha=payload["pull_request"]["head"]["sha"], status="completed", - conclusion=conclusion, + conclusion=workflows_conclusion, ) + issue.create_comment(workflows_message) diff --git a/github_tests_validator_app/bin/student_challenge_results_validation.py b/github_tests_validator_app/bin/student_challenge_results_validation.py index 7962e83..49ad7e6 100644 --- a/github_tests_validator_app/bin/student_challenge_results_validation.py +++ b/github_tests_validator_app/bin/student_challenge_results_validation.py @@ -2,7 +2,7 @@ import logging -from github_tests_validator_app.config.config import CHALLENGE_DIR +from github_tests_validator_app.config import CHALLENGE_DIR from github_tests_validator_app.lib.connectors.github_connector import GitHubConnector from github_tests_validator_app.lib.connectors.google_sheet import GSheetConnector from github_tests_validator_app.lib.models.pytest_result import PytestResult diff --git a/github_tests_validator_app/config.py b/github_tests_validator_app/config.py new file mode 100644 index 0000000..f14b31c --- /dev/null +++ b/github_tests_validator_app/config.py @@ -0,0 +1,63 @@ +from typing import Dict, cast + +import logging +import os + +import google.cloud.logging +import yaml + +if os.getenv("LOGGING", "") == "GCP": + logging_client = google.cloud.logging.Client() + logging_client.get_default_handler() + logging_client.setup_logging() +else: + FORMAT = "%(asctime)s - %(levelname)s: %(message)s" + DATEFMT = "%H:%M:%S" + logging.basicConfig( + format=FORMAT, + level=logging.INFO, + datefmt=DATEFMT, + ) + + if logging.getLogger("uvicorn") and logging.getLogger("uvicorn").handlers: + logging.getLogger("uvicorn").removeHandler(logging.getLogger("uvicorn").handlers[0]) + +# GitHub +GH_APP_ID = cast(str, os.getenv("GH_APP_ID", None)) +GH_APP_KEY = cast(str, os.getenv("GH_APP_KEY", None)) +GH_PAT = cast(str, os.getenv("GH_PAT", None)) +GH_TESTS_REPO_NAME = cast(str, os.getenv("GH_TESTS_REPO_NAME", None)) +GH_TESTS_FOLDER_NAME = "tests" +GH_WORKFLOWS_FOLDER_NAME = ".github/workflows" +GH_API = "https://api.github.com/repos" +GH_ALL_ARTIFACT_ENDPOINT = "actions/artifacts" + +# Google Drive +GDRIVE_MAIN_DIRECTORY_NAME = cast(str, os.getenv("GDRIVE_MAIN_DIRECTORY_NAME", None)) + +# Google Sheet +GDRIVE_HIERARCHY_PATH = "github_tests_validator_app/config/data/gdrive_hierarchy.yml" +with open(GDRIVE_HIERARCHY_PATH) as file: + data = yaml.safe_load(file) + +GDRIVE_SUMMARY_SPREADSHEET = data["gdrive_summary_spreadsheet"] +GSHEET_DETAILS_SPREADSHEET = data["gsheet_details_spreadsheet"] + +# Log message +default_message: Dict[str, Dict[str, Dict[str, str]]] = { + "valid_repository": { + "tests": { + "True": "Your folder `Test` is valid", + "False": "Your folder `Test` has been modified and is no longer valid.", + }, + "workflows": { + "True": "Your folder `.github/workflows` is valid", + "False": "Your folder `.github/workflows` has been modified and is no longer valid.", + }, + }, +} + +# Common +CHALLENGE_DIR = "tests/tests/" +DATE_FORMAT = "%d/%m/%Y %H:%M:%S" +USER_SHARE = os.getenv("USER_SHARE", "").split(",") diff --git a/github_tests_validator_app/config/__init__.py b/github_tests_validator_app/config/__init__.py deleted file mode 100644 index 7b49f67..0000000 --- a/github_tests_validator_app/config/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -import logging -import os - -import google.cloud.logging - -if os.getenv("ENV", "") == "PROD": - logging_client = google.cloud.logging.Client() - logging_client.get_default_handler() - logging_client.setup_logging() -else: - FORMAT = "%(asctime)s - %(levelname)s: %(message)s" - DATEFMT = "%H:%M:%S" - logging.basicConfig( - format=FORMAT, - level=logging.INFO, - datefmt=DATEFMT, - ) - - if logging.getLogger("uvicorn") and logging.getLogger("uvicorn").handlers: - logging.getLogger("uvicorn").removeHandler(logging.getLogger("uvicorn").handlers[0]) diff --git a/github_tests_validator_app/config/config.py b/github_tests_validator_app/config/config.py deleted file mode 100644 index 7f034df..0000000 --- a/github_tests_validator_app/config/config.py +++ /dev/null @@ -1,44 +0,0 @@ -from typing import Dict, cast - -import os - -import yaml - -# GitHub -GH_APP_ID = cast(str, os.getenv("GH_APP_ID", None)) -GH_SOLUTION_OWNER = cast(str, os.getenv("GH_SOLUTION_OWNER", None)) -GH_SOLUTION_REPO_NAME = cast(str, os.getenv("GH_SOLUTION_REPO_NAME", None)) -GH_TESTS_FOLDER_NAME = "tests" -GH_API = "https://api.github.com/repos" -GH_ALL_ARTIFACT_ENDPOINT = "actions/artifacts" - -# GCP -GCP_PROJECT_ID = cast(str, os.getenv("GCP_PROJECT_ID", None)) - -# Google Secrets -GH_APP_KEY_NAME = "github_test_validator_app_key" -GH_ACCESS_TOKEN_NAME = "github_personal_access_token" - -# Google Drive -GDRIVE_MAIN_DIRECTORY_NAME = cast(str, os.getenv("GDRIVE_MAIN_DIRECTORY_NAME", None)) - -# Google Sheet -GDRIVE_HIERARCHY_PATH = "github_tests_validator_app/config/data/gdrive_hierarchy.yml" -with open(GDRIVE_HIERARCHY_PATH) as file: - data = yaml.safe_load(file) - -GDRIVE_SUMMARY_SPREADSHEET = data["gdrive_summary_spreadsheet"] -GSHEET_DETAILS_SPREADSHEET = data["gsheet_details_spreadsheet"] - -# Log message -default_message: Dict[str, Dict[str, str]] = { - "valid_repository": { - "True": "Your folder `Test` is valid", - "False": "Your folder `Test` has been modified and is no longer valid.", - }, -} - -# Common -CHALLENGE_DIR = "tests/tests/" -DATE_FORMAT = "%d/%m/%Y %H:%M:%S" -USER_SHARE = os.getenv("USER_SHARE", "").split(",") diff --git a/github_tests_validator_app/config/data/gdrive_hierarchy.yml b/github_tests_validator_app/data/gdrive_hierarchy.yml similarity index 100% rename from github_tests_validator_app/config/data/gdrive_hierarchy.yml rename to github_tests_validator_app/data/gdrive_hierarchy.yml diff --git a/github_tests_validator_app/lib/__init__.py b/github_tests_validator_app/lib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/github_tests_validator_app/lib/connectors/github_connector.py b/github_tests_validator_app/lib/connectors/github_connector.py index f7342d0..726d744 100644 --- a/github_tests_validator_app/lib/connectors/github_connector.py +++ b/github_tests_validator_app/lib/connectors/github_connector.py @@ -7,14 +7,12 @@ import requests from github import ContentFile, Github, GithubIntegration, Repository -from github_tests_validator_app.config.config import ( - GCP_PROJECT_ID, +from github_tests_validator_app.config import ( GH_ALL_ARTIFACT_ENDPOINT, GH_API, GH_APP_ID, - GH_APP_KEY_NAME, + GH_APP_KEY, ) -from github_tests_validator_app.lib.connectors.google_secret_manager import GSecretManager from github_tests_validator_app.lib.models.users import GitHubUser from github_tests_validator_app.lib.utils import get_hash_files @@ -41,13 +39,9 @@ def __init__( logging.info("Done.") def set_git_integration(self) -> None: - - gsecret_manager = GSecretManager(GCP_PROJECT_ID) - github_app_key = gsecret_manager.get_access_secret_version(GH_APP_KEY_NAME) - self.git_integration = GithubIntegration( GH_APP_ID, - github_app_key, + GH_APP_KEY, ) def set_access_token(self, repo_name: str) -> None: @@ -76,7 +70,7 @@ def get_files_content(self, contents: Any) -> List[ContentFile.ContentFile]: files_content.append(file_content) return files_content - def get_tests_hash(self, folder_name: str) -> str: + def get_hash(self, folder_name: str) -> str: contents = self.repo.get_contents(folder_name) files_content = self.get_files_content(contents) hash = str(get_hash_files(files_content)) diff --git a/github_tests_validator_app/lib/connectors/google_secret_manager.py b/github_tests_validator_app/lib/connectors/google_secret_manager.py deleted file mode 100644 index cb25de7..0000000 --- a/github_tests_validator_app/lib/connectors/google_secret_manager.py +++ /dev/null @@ -1,15 +0,0 @@ -from typing import Any - -from google.cloud import secretmanager - - -class GSecretManager: - def __init__(self, project_id: str): - self.parent = project_id - self.client = secretmanager.SecretManagerServiceClient() - - def get_access_secret_version(self, secret_name: str, version: str = "1") -> Any: - name = self.client.secret_version_path(self.parent, secret_name, version) - response = self.client.access_secret_version(request={"name": name}) - payload = response.payload.data.decode("UTF-8") - return payload diff --git a/github_tests_validator_app/lib/connectors/google_sheet.py b/github_tests_validator_app/lib/connectors/google_sheet.py index deeff4e..10a8fb6 100644 --- a/github_tests_validator_app/lib/connectors/google_sheet.py +++ b/github_tests_validator_app/lib/connectors/google_sheet.py @@ -4,7 +4,7 @@ import logging import gspread -from github_tests_validator_app.config.config import GDRIVE_SUMMARY_SPREADSHEET +from github_tests_validator_app.config import GDRIVE_SUMMARY_SPREADSHEET from github_tests_validator_app.lib.models.file import GSheetDetailFile, GSheetFile from github_tests_validator_app.lib.models.pytest_result import PytestResult from github_tests_validator_app.lib.models.users import GitHubUser diff --git a/github_tests_validator_app/lib/utils.py b/github_tests_validator_app/lib/utils.py index 8c5077b..7717814 100644 --- a/github_tests_validator_app/lib/utils.py +++ b/github_tests_validator_app/lib/utils.py @@ -5,7 +5,7 @@ from datetime import datetime from github import ContentFile -from github_tests_validator_app.config.config import DATE_FORMAT +from github_tests_validator_app.config import DATE_FORMAT from github_tests_validator_app.lib.connectors.google_sheet import GSheetConnector from github_tests_validator_app.lib.models.users import GitHubUser diff --git a/github_tests_validator_app/__init__.py b/github_tests_validator_app/py.typed similarity index 100% rename from github_tests_validator_app/__init__.py rename to github_tests_validator_app/py.typed diff --git a/poetry.lock b/poetry.lock index 8b7b67b..94c9a50 100644 --- a/poetry.lock +++ b/poetry.lock @@ -11,13 +11,13 @@ idna = ">=2.8" sniffio = ">=1.1" [package.extras] -doc = ["packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["contextlib2", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (<0.15)", "uvloop (>=0.15)"] +doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] +test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] trio = ["trio (>=0.16)"] [[package]] name = "astroid" -version = "2.12.7" +version = "2.12.11" description = "An abstract syntax tree for Python with inference support." category = "dev" optional = false @@ -40,10 +40,10 @@ optional = false python-versions = ">=3.5" [package.extras] -dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "bandit" @@ -60,17 +60,17 @@ PyYAML = ">=5.3.1" stevedore = ">=1.20.0" [package.extras] -test = ["beautifulsoup4 (>=4.8.0)", "coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "pylint (==1.9.4)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml"] +test = ["coverage (>=4.5.4)", "fixtures (>=3.0.0)", "flake8 (>=4.0.0)", "stestr (>=2.5.0)", "testscenarios (>=0.5.0)", "testtools (>=2.3.0)", "toml", "beautifulsoup4 (>=4.8.0)", "pylint (==1.9.4)"] toml = ["toml"] yaml = ["pyyaml"] [[package]] name = "black" -version = "22.8.0" +version = "22.10.0" description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.7" [package.dependencies] click = ">=8.0.0" @@ -96,7 +96,7 @@ python-versions = "~=3.7" [[package]] name = "certifi" -version = "2022.6.15" +version = "2022.9.24" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false @@ -164,7 +164,7 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] [[package]] name = "cryptography" -version = "37.0.4" +version = "38.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false @@ -175,11 +175,11 @@ cffi = ">=1.12" [package.extras] docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] -docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools_rust (>=0.11.4)"] +sdist = ["setuptools-rust (>=0.11.4)"] ssh = ["bcrypt (>=3.1.5)"] -test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pytz"] +test = ["pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] [[package]] name = "darglint" @@ -201,7 +201,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest (<5)", "PyTest-Cov (<2.6)", "bump2version (<1)", "configparser (<5)", "importlib-metadata (<3)", "importlib-resources (<4)", "pytest", "pytest-cov", "sphinx (<2)", "sphinxcontrib-websupport (<2)", "tox", "zipp (<2)"] +dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] [[package]] name = "dill" @@ -224,7 +224,7 @@ python-versions = "*" [[package]] name = "dparse" -version = "0.5.2" +version = "0.6.2" description = "A parser for Python dependency files" category = "dev" optional = false @@ -235,26 +235,26 @@ packaging = "*" toml = "*" [package.extras] -conda = ["pyyaml"] pipenv = ["pipenv"] +conda = ["pyyaml"] [[package]] name = "fastapi" -version = "0.82.0" +version = "0.85.0" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" category = "main" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.dependencies] pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" -starlette = "0.19.1" +starlette = "0.20.4" [package.extras] -all = ["email_validator (>=1.1.1,<2.0.0)", "itsdangerous (>=1.1.0,<3.0.0)", "jinja2 (>=2.11.2,<4.0.0)", "orjson (>=3.2.1,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "requests (>=2.24.0,<3.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)", "uvicorn[standard] (>=0.12.0,<0.18.0)"] -dev = ["autoflake (>=1.4.0,<2.0.0)", "flake8 (>=3.8.3,<6.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "pre-commit (>=2.17.0,<3.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "uvicorn[standard] (>=0.12.0,<0.18.0)"] -doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer (>=0.4.1,<0.5.0)"] -test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.3.0)", "databases[sqlite] (>=0.3.2,<0.6.0)", "email_validator (>=1.1.1,<2.0.0)", "flake8 (>=3.8.3,<6.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.14.0,<0.19.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "orjson (>=3.2.1,<4.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=6.2.4,<7.0.0)", "pytest-cov (>=2.12.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "requests (>=2.24.0,<3.0.0)", "sqlalchemy (>=1.3.18,<1.5.0)", "types-dataclasses (==0.6.5)", "types-orjson (==3.6.2)", "types-ujson (==4.2.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"] +all = ["email-validator (>=1.1.1,<2.0.0)", "itsdangerous (>=1.1.0,<3.0.0)", "jinja2 (>=2.11.2,<4.0.0)", "orjson (>=3.2.1,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "requests (>=2.24.0,<3.0.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)", "uvicorn[standard] (>=0.12.0,<0.19.0)"] +dev = ["autoflake (>=1.4.0,<2.0.0)", "flake8 (>=3.8.3,<6.0.0)", "pre-commit (>=2.17.0,<3.0.0)", "uvicorn[standard] (>=0.12.0,<0.19.0)"] +doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer (>=0.4.1,<0.7.0)"] +test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flake8 (>=3.8.3,<6.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.971)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest-cov (>=2.12.0,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.6)", "pyyaml (>=5.3.1,<7.0.0)", "requests (>=2.24.0,<3.0.0)", "sqlalchemy (>=1.3.18,<1.5.0)", "types-orjson (==3.6.2)", "types-ujson (==5.4.0)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"] [[package]] name = "filelock" @@ -281,7 +281,7 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.27" +version = "3.1.28" description = "GitPython is a python library used to interact with Git repositories" category = "dev" optional = false @@ -292,7 +292,7 @@ gitdb = ">=4.0.1,<5" [[package]] name = "google-api-core" -version = "2.10.0" +version = "2.10.2" description = "Google API client core library" category = "main" optional = false @@ -303,7 +303,7 @@ google-auth = ">=1.25.0,<3.0dev" googleapis-common-protos = ">=1.56.2,<2.0dev" grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} grpcio-status = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -protobuf = ">=3.20.1,<5.0.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" requests = ">=2.18.0,<3.0.0dev" [package.extras] @@ -313,7 +313,7 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] [[package]] name = "google-api-python-client" -version = "2.60.0" +version = "2.64.0" description = "Google API Client Library for Python" category = "main" optional = false @@ -328,7 +328,7 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.11.0" +version = "2.12.0" description = "Google Authentication Library" category = "main" optional = false @@ -341,7 +341,7 @@ rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} six = ">=1.9.0" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] +aiohttp = ["requests (>=2.20.0,<3.0.0dev)", "aiohttp (>=3.6.2,<4.0.0dev)"] enterprise_cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] pyopenssl = ["pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] @@ -361,7 +361,7 @@ six = "*" [[package]] name = "google-auth-oauthlib" -version = "0.5.2" +version = "0.5.3" description = "Google Authentication Library" category = "main" optional = false @@ -376,7 +376,7 @@ tool = ["click (>=6.0.0)"] [[package]] name = "google-cloud-appengine-logging" -version = "1.1.4" +version = "1.1.5" description = "" category = "main" optional = false @@ -385,7 +385,7 @@ python-versions = ">=3.7" [package.dependencies] google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]} proto-plus = ">=1.22.0,<2.0.0dev" -protobuf = ">=3.19.0,<5.0.0dev" +protobuf = ">=3.20.2,<5.0.0dev" [[package]] name = "google-cloud-audit-log" @@ -416,7 +416,7 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)"] [[package]] name = "google-cloud-logging" -version = "3.2.2" +version = "3.2.4" description = "Stackdriver Logging API client library" category = "main" optional = false @@ -429,24 +429,7 @@ google-cloud-audit-log = ">=0.1.0,<1.0.0dev" google-cloud-core = ">=2.0.0,<3.0.0dev" grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" proto-plus = ">=1.22.0,<2.0.0dev" -protobuf = ">=3.19.0,<5.0.0dev" - -[[package]] -name = "google-cloud-secret-manager" -version = "2.12.4" -description = "Secret Manager API API client library" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -google-api-core = {version = ">=1.32.0,<2.0.0 || >=2.8.0,<3.0.0dev", extras = ["grpc"]} -grpc-google-iam-v1 = ">=0.12.4,<1.0.0dev" -proto-plus = ">=1.22.0,<2.0.0dev" -protobuf = ">=3.19.0,<5.0.0dev" - -[package.extras] -libcst = ["libcst (>=0.2.5)"] +protobuf = ">=3.20.2,<5.0.0dev" [[package]] name = "googleapis-common-protos" @@ -477,7 +460,7 @@ grpcio = ">=1.0.0,<2.0.0dev" [[package]] name = "grpcio" -version = "1.49.0" +version = "1.49.1" description = "HTTP/2-based RPC framework" category = "main" optional = false @@ -487,11 +470,11 @@ python-versions = ">=3.7" six = ">=1.5.2" [package.extras] -protobuf = ["grpcio-tools (>=1.49.0)"] +protobuf = ["grpcio-tools (>=1.49.1)"] [[package]] name = "grpcio-status" -version = "1.49.0" +version = "1.49.1" description = "Status proto mapping for gRPC" category = "main" optional = false @@ -499,12 +482,12 @@ python-versions = ">=3.6" [package.dependencies] googleapis-common-protos = ">=1.5.5" -grpcio = ">=1.49.0" +grpcio = ">=1.49.1" protobuf = ">=4.21.3" [[package]] name = "gspread" -version = "5.5.0" +version = "5.6.0" description = "Google Spreadsheets Python API" category = "main" optional = false @@ -516,11 +499,11 @@ google-auth-oauthlib = ">=0.4.1" [[package]] name = "h11" -version = "0.13.0" +version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "httplib2" @@ -535,7 +518,7 @@ pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0 [[package]] name = "identify" -version = "2.5.5" +version = "2.5.6" description = "File identification library for Python" category = "dev" optional = false @@ -546,7 +529,7 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.3" +version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false @@ -569,10 +552,10 @@ optional = false python-versions = ">=3.6.1,<4.0" [package.extras] -colors = ["colorama (>=0.4.3,<0.5.0)"] pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] plugins = ["setuptools"] -requirements_deprecated_finder = ["pip-api", "pipreqs"] [[package]] name = "lazy-object-proxy" @@ -592,11 +575,11 @@ python-versions = ">=3.6" [[package]] name = "mypy" -version = "0.971" +version = "0.982" description = "Optional static typing for Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] mypy-extensions = ">=0.4.3" @@ -626,7 +609,7 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.* [[package]] name = "oauthlib" -version = "3.2.0" +version = "3.2.1" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" category = "main" optional = false @@ -673,8 +656,8 @@ optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pluggy" @@ -720,7 +703,7 @@ testing = ["google-api-core[grpc] (>=1.31.5)"] [[package]] name = "protobuf" -version = "4.21.5" +version = "4.21.7" description = "" category = "main" optional = false @@ -820,28 +803,28 @@ plugins = ["importlib-metadata"] [[package]] name = "pyjwt" -version = "2.4.0" +version = "2.5.0" description = "JSON Web Token implementation in Python" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] -crypto = ["cryptography (>=3.3.1)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.3.1)", "mypy", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] +crypto = ["cryptography (>=3.3.1)", "types-cryptography (>=3.3.21)"] +dev = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "types-cryptography (>=3.3.21)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "pre-commit"] +docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] +tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] [[package]] name = "pylint" -version = "2.15.0" +version = "2.15.4" description = "python code static checker" category = "dev" optional = false python-versions = ">=3.7.2" [package.dependencies] -astroid = ">=2.12.4,<=2.14.0-dev0" +astroid = ">=2.12.11,<=2.14.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = ">=0.2" isort = ">=4.2.5,<6" @@ -868,7 +851,7 @@ cffi = ">=1.4.1" [package.extras] docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] -tests = ["hypothesis (>=3.27.0)", "pytest (>=3.2.1,!=3.3.0)"] +tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] [[package]] name = "pyparsing" @@ -879,7 +862,7 @@ optional = false python-versions = ">=3.6.8" [package.extras] -diagrams = ["jinja2", "railroad-diagrams"] +diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pytest" @@ -903,7 +886,7 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2. [[package]] name = "pytest-mock" -version = "3.8.2" +version = "3.10.0" description = "Thin-wrapper around the mock package for easier use with pytest" category = "main" optional = false @@ -913,11 +896,11 @@ python-versions = ">=3.7" pytest = ">=5.0" [package.extras] -dev = ["pre-commit", "pytest-asyncio", "tox"] +dev = ["pre-commit", "tox", "pytest-asyncio"] [[package]] name = "pyupgrade" -version = "2.37.3" +version = "3.0.0" description = "A tool to automatically upgrade syntax for newer versions." category = "dev" optional = false @@ -969,7 +952,7 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] [[package]] name = "rich" -version = "12.5.1" +version = "12.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "main" optional = false @@ -1018,7 +1001,7 @@ python-versions = ">=3.5" [[package]] name = "safety" -version = "2.1.1" +version = "2.3.1" description = "Checks installed dependencies for known vulnerabilities and licenses." category = "dev" optional = false @@ -1026,11 +1009,15 @@ python-versions = "*" [package.dependencies] Click = ">=8.0.2" -dparse = ">=0.5.1" +dparse = ">=0.6.2" packaging = ">=21.0" requests = "*" "ruamel.yaml" = ">=0.17.21" +[package.extras] +github = ["pygithub (>=1.43.3)", "jinja2 (>=3.1.0)"] +gitlab = ["python-gitlab (>=1.3.0)"] + [[package]] name = "shellingham" version = "1.5.0" @@ -1073,11 +1060,11 @@ python-versions = "*" [[package]] name = "starlette" -version = "0.19.1" +version = "0.20.4" description = "The little ASGI library that shines." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] anyio = ">=3.4.0,<5" @@ -1099,11 +1086,11 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0" [[package]] name = "tokenize-rt" -version = "4.2.1" +version = "5.0.0" description = "A wrapper around the stdlib `tokenize` which roundtrips." category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [[package]] name = "toml" @@ -1123,7 +1110,7 @@ python-versions = ">=3.7" [[package]] name = "tomlkit" -version = "0.11.4" +version = "0.11.5" description = "Style preserving TOML library" category = "dev" optional = false @@ -1144,14 +1131,14 @@ rich = {version = ">=10.11.0,<13.0.0", optional = true, markers = "extra == \"al shellingham = {version = ">=1.3.0,<2.0.0", optional = true, markers = "extra == \"all\""} [package.extras] -all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] -dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] -doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)"] -test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<5.4.0)", "pytest-cov (>=2.10.0,<3.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<2.0.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] +test = ["rich (>=10.11.0,<13.0.0)", "isort (>=5.0.6,<6.0.0)", "black (>=22.3.0,<23.0.0)", "mypy (==0.910)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<2.0.0)", "coverage (>=5.2,<6.0)", "pytest-cov (>=2.10.0,<3.0.0)", "pytest (>=4.4.0,<5.4.0)", "shellingham (>=1.3.0,<2.0.0)"] +doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "mkdocs (>=1.1.2,<2.0.0)"] +dev = ["pre-commit (>=2.17.0,<3.0.0)", "flake8 (>=3.8.3,<4.0.0)", "autoflake (>=1.3.1,<2.0.0)"] +all = ["rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)", "colorama (>=0.4.3,<0.5.0)"] [[package]] name = "types-pyyaml" -version = "6.0.11" +version = "6.0.12" description = "Typing stubs for PyYAML" category = "main" optional = false @@ -1159,7 +1146,7 @@ python-versions = "*" [[package]] name = "types-requests" -version = "2.28.9" +version = "2.28.11.2" description = "Typing stubs for requests" category = "main" optional = false @@ -1170,7 +1157,7 @@ types-urllib3 = "<1.27" [[package]] name = "types-urllib3" -version = "1.26.23" +version = "1.26.25" description = "Typing stubs for urllib3" category = "main" optional = false @@ -1178,7 +1165,7 @@ python-versions = "*" [[package]] name = "typing-extensions" -version = "4.3.0" +version = "4.4.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false @@ -1201,8 +1188,8 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -1222,7 +1209,7 @@ standard = ["colorama (>=0.4)", "httptools (>=0.4.0)", "python-dotenv (>=0.13)", [[package]] name = "virtualenv" -version = "20.16.4" +version = "20.16.5" description = "Virtual Python Environment builder" category = "dev" optional = false @@ -1248,132 +1235,28 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "991adfa70ce1e1ad4a6ef2f72029523cb0478278f4f4545701559c8292a2546b" +content-hash = "d9477286cf1bdf683f93d06e49de5cdb4022bbd01cef903fbe861965aab08f59" [metadata.files] anyio = [ {file = "anyio-3.6.1-py3-none-any.whl", hash = "sha256:cb29b9c70620506a9a8f87a309591713446953302d7d995344d0d7c6c0c9a7be"}, {file = "anyio-3.6.1.tar.gz", hash = "sha256:413adf95f93886e442aea925f3ee43baa5a765a64a0f52c6081894f9992fdd0b"}, ] -astroid = [ - {file = "astroid-2.12.7-py3-none-any.whl", hash = "sha256:9b408d5d540387a74ca5405a5197aa24fbf9178b4019b16b3e532fbdf0e467cc"}, - {file = "astroid-2.12.7.tar.gz", hash = "sha256:cd468be9d9d03d086d4d7e6643a59bfc025762d2c895e1e22cf21feced7bb148"}, -] -attrs = [ - {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, - {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, -] -bandit = [ - {file = "bandit-1.7.4-py3-none-any.whl", hash = "sha256:412d3f259dab4077d0e7f0c11f50f650cc7d10db905d98f6520a95a18049658a"}, - {file = "bandit-1.7.4.tar.gz", hash = "sha256:2d63a8c573417bae338962d4b9b06fbc6080f74ecd955a092849e1e65c717bd2"}, -] -black = [ - {file = "black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd"}, - {file = "black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27"}, - {file = "black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747"}, - {file = "black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869"}, - {file = "black-22.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90"}, - {file = "black-22.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe"}, - {file = "black-22.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342"}, - {file = "black-22.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab"}, - {file = "black-22.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3"}, - {file = "black-22.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e"}, - {file = "black-22.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c"}, - {file = "black-22.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5"}, - {file = "black-22.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411"}, - {file = "black-22.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3"}, - {file = "black-22.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c"}, - {file = "black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497"}, - {file = "black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c"}, - {file = "black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41"}, - {file = "black-22.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec"}, - {file = "black-22.8.0-py3-none-any.whl", hash = "sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4"}, - {file = "black-22.8.0.tar.gz", hash = "sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"}, -] +astroid = [] +attrs = [] +bandit = [] +black = [] cachetools = [ {file = "cachetools-5.2.0-py3-none-any.whl", hash = "sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db"}, {file = "cachetools-5.2.0.tar.gz", hash = "sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757"}, ] -certifi = [ - {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"}, - {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"}, -] -cffi = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, -] +certifi = [] +cffi = [] cfgv = [ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] -charset-normalizer = [ - {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, - {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, -] +charset-normalizer = [] click = [ {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, @@ -1382,189 +1265,47 @@ colorama = [ {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, ] -commonmark = [ - {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, - {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, -] -cryptography = [ - {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:549153378611c0cca1042f20fd9c5030d37a72f634c9326e225c9f666d472884"}, - {file = "cryptography-37.0.4-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a958c52505c8adf0d3822703078580d2c0456dd1d27fabfb6f76fe63d2971cd6"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f721d1885ecae9078c3f6bbe8a88bc0786b6e749bf32ccec1ef2b18929a05046"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3d41b965b3380f10e4611dbae366f6dc3cefc7c9ac4e8842a806b9672ae9add5"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80f49023dd13ba35f7c34072fa17f604d2f19bf0989f292cedf7ab5770b87a0b"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2dcb0b3b63afb6df7fd94ec6fbddac81b5492513f7b0436210d390c14d46ee8"}, - {file = "cryptography-37.0.4-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:b7f8dd0d4c1f21759695c05a5ec8536c12f31611541f8904083f3dc582604280"}, - {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:30788e070800fec9bbcf9faa71ea6d8068f5136f60029759fd8c3efec3c9dcb3"}, - {file = "cryptography-37.0.4-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:190f82f3e87033821828f60787cfa42bff98404483577b591429ed99bed39d59"}, - {file = "cryptography-37.0.4-cp36-abi3-win32.whl", hash = "sha256:b62439d7cd1222f3da897e9a9fe53bbf5c104fff4d60893ad1355d4c14a24157"}, - {file = "cryptography-37.0.4-cp36-abi3-win_amd64.whl", hash = "sha256:f7a6de3e98771e183645181b3627e2563dcde3ce94a9e42a3f427d2255190327"}, - {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bc95ed67b6741b2607298f9ea4932ff157e570ef456ef7ff0ef4884a134cc4b"}, - {file = "cryptography-37.0.4-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:f8c0a6e9e1dd3eb0414ba320f85da6b0dcbd543126e30fcc546e7372a7fbf3b9"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:e007f052ed10cc316df59bc90fbb7ff7950d7e2919c9757fd42a2b8ecf8a5f67"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bc997818309f56c0038a33b8da5c0bfbb3f1f067f315f9abd6fc07ad359398d"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:d204833f3c8a33bbe11eda63a54b1aad7aa7456ed769a982f21ec599ba5fa282"}, - {file = "cryptography-37.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:75976c217f10d48a8b5a8de3d70c454c249e4b91851f6838a4e48b8f41eb71aa"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:7099a8d55cd49b737ffc99c17de504f2257e3787e02abe6d1a6d136574873441"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2be53f9f5505673eeda5f2736bea736c40f051a739bfae2f92d18aed1eb54596"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:91ce48d35f4e3d3f1d83e29ef4a9267246e6a3be51864a5b7d2247d5086fa99a"}, - {file = "cryptography-37.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4c590ec31550a724ef893c50f9a97a0c14e9c851c85621c5650d699a7b88f7ab"}, - {file = "cryptography-37.0.4.tar.gz", hash = "sha256:63f9c17c0e2474ccbebc9302ce2f07b55b3b3fcb211ded18a42d5764f5c10a82"}, -] -darglint = [ - {file = "darglint-1.8.1-py3-none-any.whl", hash = "sha256:5ae11c259c17b0701618a20c3da343a3eb98b3bc4b5a83d31cdd94f5ebdced8d"}, - {file = "darglint-1.8.1.tar.gz", hash = "sha256:080d5106df149b199822e7ee7deb9c012b49891538f14a11be681044f0bb20da"}, -] -deprecated = [ - {file = "Deprecated-1.2.13-py2.py3-none-any.whl", hash = "sha256:64756e3e14c8c5eea9795d93c524551432a0be75629f8f29e67ab8caf076c76d"}, - {file = "Deprecated-1.2.13.tar.gz", hash = "sha256:43ac5335da90c31c24ba028af536a91d41d53f9e6901ddb021bcc572ce44e38d"}, -] +commonmark = [] +cryptography = [] +darglint = [] +deprecated = [] dill = [ {file = "dill-0.3.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"}, {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, ] -distlib = [ - {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, - {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, -] -dparse = [ - {file = "dparse-0.5.2-py3-none-any.whl", hash = "sha256:b1514fb08895d85b18d4eba3b1b7025ff9e6ea07286282021e19def872129975"}, - {file = "dparse-0.5.2.tar.gz", hash = "sha256:c348994a1f41c85f664d8f5a47442647bc4e22c5af5b1b26ef29aff0fa5dddcd"}, -] -fastapi = [ - {file = "fastapi-0.82.0-py3-none-any.whl", hash = "sha256:a4269329a7374c78f6e92c195d14cc4ce3a525e25b79e62edf2df8196469743f"}, - {file = "fastapi-0.82.0.tar.gz", hash = "sha256:5ee7b7473a55940a18d4869ff57d29c372363bf8d3033a0e660a8cf38b1d3d9e"}, -] -filelock = [ - {file = "filelock-3.8.0-py3-none-any.whl", hash = "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"}, - {file = "filelock-3.8.0.tar.gz", hash = "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc"}, -] -gitdb = [ - {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, - {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, -] -gitpython = [ - {file = "GitPython-3.1.27-py3-none-any.whl", hash = "sha256:5b68b000463593e05ff2b261acff0ff0972df8ab1b70d3cdbd41b546c8b8fc3d"}, - {file = "GitPython-3.1.27.tar.gz", hash = "sha256:1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704"}, -] -google-api-core = [ - {file = "google-api-core-2.10.0.tar.gz", hash = "sha256:1d053734f14591939e7764e99c31253fed46bf2578da0dcd82821f17a6dd991c"}, - {file = "google_api_core-2.10.0-py3-none-any.whl", hash = "sha256:325529859836a479244b0882c1a77320fd35cb108df2ec1232e3e908ea56eda4"}, -] -google-api-python-client = [ - {file = "google-api-python-client-2.60.0.tar.gz", hash = "sha256:ca770930a1a8fce969ffdc81910844705138e8d05e040ab62d4276a4b1baddea"}, - {file = "google_api_python_client-2.60.0-py2.py3-none-any.whl", hash = "sha256:a992e2e44bbcdac57797156ac75b2e151a9fd1045c319ab1a970d5ec7f37d102"}, -] -google-auth = [ - {file = "google-auth-2.11.0.tar.gz", hash = "sha256:ed65ecf9f681832298e29328e1ef0a3676e3732b2e56f41532d45f70a22de0fb"}, - {file = "google_auth-2.11.0-py2.py3-none-any.whl", hash = "sha256:be62acaae38d0049c21ca90f27a23847245c9f161ff54ede13af2cb6afecbac9"}, -] +distlib = [] +dparse = [] +fastapi = [] +filelock = [] +gitdb = [] +gitpython = [] +google-api-core = [] +google-api-python-client = [] +google-auth = [] google-auth-httplib2 = [ {file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"}, {file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"}, ] -google-auth-oauthlib = [ - {file = "google-auth-oauthlib-0.5.2.tar.gz", hash = "sha256:d5e98a71203330699f92a26bc08847a92e8c3b1b8d82a021f1af34164db143ae"}, - {file = "google_auth_oauthlib-0.5.2-py2.py3-none-any.whl", hash = "sha256:6d6161d0ec0a62e2abf2207c6071c117ec5897b300823c4bb2d963ee86e20e4f"}, -] -google-cloud-appengine-logging = [ - {file = "google-cloud-appengine-logging-1.1.4.tar.gz", hash = "sha256:8a6d00d78390821c98aa0b640fbebba86fa788a417e23a5bd299b6c8d0700424"}, - {file = "google_cloud_appengine_logging-1.1.4-py2.py3-none-any.whl", hash = "sha256:06ba651b1d46fcf380ab978b554e95fd5da725829e8203c06731d31b884eef43"}, -] -google-cloud-audit-log = [ - {file = "google-cloud-audit-log-0.2.4.tar.gz", hash = "sha256:aabe5543671e4f8a9c7a4c0e3ea9a87ba2ba2b96f9ffad6faa02209900e1f308"}, - {file = "google_cloud_audit_log-0.2.4-py2.py3-none-any.whl", hash = "sha256:29ed77fe0b21eb2d5dfb998edb59ee2adc65fea5d5ac9fcf17828d60d25b58b3"}, -] -google-cloud-core = [ - {file = "google-cloud-core-2.3.2.tar.gz", hash = "sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a"}, - {file = "google_cloud_core-2.3.2-py2.py3-none-any.whl", hash = "sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe"}, -] -google-cloud-logging = [ - {file = "google-cloud-logging-3.2.2.tar.gz", hash = "sha256:719121491cc349ee3f84600f3c2916b5bb95d6860b94d90d34f8f63d979d1220"}, - {file = "google_cloud_logging-3.2.2-py2.py3-none-any.whl", hash = "sha256:1870ac9dae719b5344f31d523005930bd8fc8031e8686c55b6764912a0108bbf"}, -] -google-cloud-secret-manager = [ - {file = "google-cloud-secret-manager-2.12.4.tar.gz", hash = "sha256:9db33eb99afb6b7457bed2c8ee7e576590fdafd655a21e62092a190270c8b904"}, - {file = "google_cloud_secret_manager-2.12.4-py2.py3-none-any.whl", hash = "sha256:ddb2b856b767ba3dca5edc2fe8d7a06ec253074e32f4990b8a675caa70c231c8"}, -] -googleapis-common-protos = [ - {file = "googleapis-common-protos-1.56.4.tar.gz", hash = "sha256:c25873c47279387cfdcbdafa36149887901d36202cb645a0e4f29686bf6e4417"}, - {file = "googleapis_common_protos-1.56.4-py2.py3-none-any.whl", hash = "sha256:8eb2cbc91b69feaf23e32452a7ae60e791e09967d81d4fcc7fc388182d1bd394"}, -] +google-auth-oauthlib = [] +google-cloud-appengine-logging = [] +google-cloud-audit-log = [] +google-cloud-core = [] +google-cloud-logging = [] +googleapis-common-protos = [] grpc-google-iam-v1 = [ {file = "grpc-google-iam-v1-0.12.4.tar.gz", hash = "sha256:3f0ac2c940b9a855d7ce7e31fde28bddb0d9ac362d32d07c67148306931a0e30"}, {file = "grpc_google_iam_v1-0.12.4-py2.py3-none-any.whl", hash = "sha256:312801ae848aeb8408c099ea372b96d253077e7851aae1a9e745df984f81f20c"}, ] -grpcio = [ - {file = "grpcio-1.49.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:79298b2b153d00f34ecbf5db8ec1be9bf37172ff9d2b63a2e0c6ef67f85daf1e"}, - {file = "grpcio-1.49.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ebb539e0cf618593dc08ea9bf6fc72c538b632663f8efc1a344f6db62545dfaa"}, - {file = "grpcio-1.49.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:7ea88f3dfe2606a93193e8dc240659b5eedcee77ef90d655cbc792273a5c3eb2"}, - {file = "grpcio-1.49.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a821831518758b725ba857d791a43959e8ffdbe5935e89a50222496fe2ed0f9c"}, - {file = "grpcio-1.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91763e949104894b639ad47243c69988fc0bbdcbead995280f7d3fcba3824a79"}, - {file = "grpcio-1.49.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ad119d3db3a284e8f0dbf0149b904280e17a13c9eca38a250109cbee9d569a1d"}, - {file = "grpcio-1.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e26d4b147447cf63e7e20e92c7b938b6279c0cd463b421f0f6ecc2d991161614"}, - {file = "grpcio-1.49.0-cp310-cp310-win32.whl", hash = "sha256:172cfa96c6d4de9d84bbd00ffea7aebe820f44430d31cdfea6ec6d209007c117"}, - {file = "grpcio-1.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:07bbbb2675d5bcd5ea0dd5dc39d47d8cd9f81e12d5689d79079f5eb9bad87127"}, - {file = "grpcio-1.49.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:a3eccffe9cac99883cbfdcaac0af3d346d5499a7fcb7d57fdd2ec21209471c39"}, - {file = "grpcio-1.49.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:77742b6805c2b46a59b76f924b3018de89c4e3b565df7ef2d79d4d8eecd37a20"}, - {file = "grpcio-1.49.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:875cb37144865cc4d26e91add8c9672cf2c95f3547f15ae3daba8f27064fdb30"}, - {file = "grpcio-1.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1532064b23130be7760c940b82961e3661cb785f686204a937e8edca007069fe"}, - {file = "grpcio-1.49.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3477cec9b89334ddbb09b44cf099e9a81f4090b48fdd63310f91b71a762896d6"}, - {file = "grpcio-1.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb4a3812e90d8189ff96b1779c7e7e56d13e7525ef4928b7d897c62c0d8936e3"}, - {file = "grpcio-1.49.0-cp311-cp311-win32.whl", hash = "sha256:a9e154ff1d55540db0ff9ee123687c45e7946a235d22a44c5347b2384b2a4753"}, - {file = "grpcio-1.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:894fba84ef949c7f2403eaf09c9d2421eeeec447f4d61829353a371d4d1edb57"}, - {file = "grpcio-1.49.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:fcd45c259cabb739b8b0c3a539ad2796f627fef77e53e55e6c2b5389b59a00ff"}, - {file = "grpcio-1.49.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:4ae542364be7b2cb13d8372c2a601a84c77a93327c93a31cda64fd9c5c333448"}, - {file = "grpcio-1.49.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:3e7b20e78b8dcee038002fd42ae13d5e6e81efa7d21cc6682a25f4cbd18f0491"}, - {file = "grpcio-1.49.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82a40b2fea553a85d045b1934633d108643d3b870a08fa19d47137d967e8e716"}, - {file = "grpcio-1.49.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85150bce2438feb2a814e0c2dec09fb6e86a58b69a06279a1a49426b88b84176"}, - {file = "grpcio-1.49.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:db056a709ea38b2da97a6811ed6719329f6576a32240e102e897a05b681a1674"}, - {file = "grpcio-1.49.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:41d8e725b816964691650967b017a621d935ba7393a153fcf8d6dcae5e41e4b3"}, - {file = "grpcio-1.49.0-cp37-cp37m-win32.whl", hash = "sha256:6ea56034245fe04ca3c411d2bf7032782722973e4cd2964e89d55110d2142bac"}, - {file = "grpcio-1.49.0-cp37-cp37m-win_amd64.whl", hash = "sha256:bc39e9bd568b210ba9e44819736eb5e95cada054381dec5a3d2ec0a5f7c0178f"}, - {file = "grpcio-1.49.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:8d6f4ace5b41502b11c2456d2fa3a2d7ee776bbb7d2c3c05e0309d420654c95a"}, - {file = "grpcio-1.49.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:9736f24b9a0a5b66df739fa2e82132c1c420cc470df003e53596dcec8d90a52a"}, - {file = "grpcio-1.49.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:a0c39a3d81a727d36c855781886a66d868681e5dc8de76a766a7c3c4827f649b"}, - {file = "grpcio-1.49.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63c3823fc525882989c0a42191d1efeb37c4d4f4c1dc555cc21d721fe11570e3"}, - {file = "grpcio-1.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0522e5c678411977db57bb6a4c6dd29e1defc0961ebf2c0a29871459cce0fd9"}, - {file = "grpcio-1.49.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3cc65127b0755fc0cf4f7e095f2d0ed25fe225eb1525b76c0a32de3efaf7c22f"}, - {file = "grpcio-1.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:717ed04e949022e33e10c4d11b2a9567da2de5a02019535058482ea54d9f795c"}, - {file = "grpcio-1.49.0-cp38-cp38-win32.whl", hash = "sha256:dcb480c4141dd051120a3de9af555ef09fc3ce1d0cb47e95b22ac1406554af18"}, - {file = "grpcio-1.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:faa91b060bf3c520d0a4f11bd550d1b4026d649f188b082690270182fb462ec4"}, - {file = "grpcio-1.49.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:5df1748ac9d679f47ee39226a7389f73e8c7c49910c7493b0f61735825a0b5ec"}, - {file = "grpcio-1.49.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:4f70df4d99945a7dc4a358cf0d2c027bba2d3125bc8ad1acb069480747fc58de"}, - {file = "grpcio-1.49.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:6cbcbbab1c8f677d6b3bb55b22bfce87bd10713a8ef439098f86ada96e69eda8"}, - {file = "grpcio-1.49.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b40ca1a353ad0410f979d3ac7fdb07e2ad65717411c0c3e2df12a4b811898637"}, - {file = "grpcio-1.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ede5041e8a98ce8761d7b6d966da872ac6a5bf2d8de776b402ea509c8ba8a8bc"}, - {file = "grpcio-1.49.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:49a8a3aa2d61f1940983795cea78d336f86ab2e5c92029adfc7e6a8ee0fe6e3a"}, - {file = "grpcio-1.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b3bc29e95a578b5c5a1bf2908ef56f45ad8b669178298cf6a8357a6883baff99"}, - {file = "grpcio-1.49.0-cp39-cp39-win32.whl", hash = "sha256:60d31d1377429f0f83fe10887276e8bdef16fb297dfbccab896a145d7b171bc8"}, - {file = "grpcio-1.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:4e0374c5b31fdf5cd4a2f3209e5341762a34c80acedbaca0896ccb904ecdd707"}, - {file = "grpcio-1.49.0.tar.gz", hash = "sha256:90ec337f36db26fbc70a4c032bcbabb2008f950f4194e99385118a12688fdf92"}, -] -grpcio-status = [ - {file = "grpcio-status-1.49.0.tar.gz", hash = "sha256:91c4ba698aec928c807d0163ba6981614d201b7929dd96125082f5a4576885b2"}, - {file = "grpcio_status-1.49.0-py3-none-any.whl", hash = "sha256:9daff44251a3df615dcfe2f79e5d5842099d2e86353a3cfb7d193b31552d0d88"}, -] -gspread = [ - {file = "gspread-5.5.0-py3-none-any.whl", hash = "sha256:787b5fab9dd61a7d6d84af73356d7ff905cd3978438e528dc66dc8a9407fb851"}, - {file = "gspread-5.5.0.tar.gz", hash = "sha256:8620e987e5340315f2b8d8d26cf97e4736a84b3325a17c7d9bcff70525dc3003"}, -] -h11 = [ - {file = "h11-0.13.0-py3-none-any.whl", hash = "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"}, - {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"}, -] +grpcio = [] +grpcio-status = [] +gspread = [] +h11 = [] httplib2 = [ {file = "httplib2-0.20.4-py3-none-any.whl", hash = "sha256:8b6a905cb1c79eefd03f8669fd993c36dc341f7c558f056cb5a33b5c2f458543"}, {file = "httplib2-0.20.4.tar.gz", hash = "sha256:58a98e45b4b1a48273073f905d2961666ecf0fbac4250ea5b47aef259eb5c585"}, ] -identify = [ - {file = "identify-2.5.5-py2.py3-none-any.whl", hash = "sha256:ef78c0d96098a3b5fe7720be4a97e73f439af7cf088ebf47b620aeaa10fadf97"}, - {file = "identify-2.5.5.tar.gz", hash = "sha256:322a5699daecf7c6fd60e68852f36f2ecbb6a36ff6e6e973e0d2bb6fca203ee6"}, -] -idna = [ - {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, - {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, -] +identify = [] +idna = [] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, @@ -1616,55 +1357,19 @@ mccabe = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] -mypy = [ - {file = "mypy-0.971-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2899a3cbd394da157194f913a931edfd4be5f274a88041c9dc2d9cdcb1c315c"}, - {file = "mypy-0.971-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:98e02d56ebe93981c41211c05adb630d1d26c14195d04d95e49cd97dbc046dc5"}, - {file = "mypy-0.971-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:19830b7dba7d5356d3e26e2427a2ec91c994cd92d983142cbd025ebe81d69cf3"}, - {file = "mypy-0.971-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02ef476f6dcb86e6f502ae39a16b93285fef97e7f1ff22932b657d1ef1f28655"}, - {file = "mypy-0.971-cp310-cp310-win_amd64.whl", hash = "sha256:25c5750ba5609a0c7550b73a33deb314ecfb559c350bb050b655505e8aed4103"}, - {file = "mypy-0.971-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d3348e7eb2eea2472db611486846742d5d52d1290576de99d59edeb7cd4a42ca"}, - {file = "mypy-0.971-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3fa7a477b9900be9b7dd4bab30a12759e5abe9586574ceb944bc29cddf8f0417"}, - {file = "mypy-0.971-cp36-cp36m-win_amd64.whl", hash = "sha256:2ad53cf9c3adc43cf3bea0a7d01a2f2e86db9fe7596dfecb4496a5dda63cbb09"}, - {file = "mypy-0.971-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:855048b6feb6dfe09d3353466004490b1872887150c5bb5caad7838b57328cc8"}, - {file = "mypy-0.971-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:23488a14a83bca6e54402c2e6435467a4138785df93ec85aeff64c6170077fb0"}, - {file = "mypy-0.971-cp37-cp37m-win_amd64.whl", hash = "sha256:4b21e5b1a70dfb972490035128f305c39bc4bc253f34e96a4adf9127cf943eb2"}, - {file = "mypy-0.971-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9796a2ba7b4b538649caa5cecd398d873f4022ed2333ffde58eaf604c4d2cb27"}, - {file = "mypy-0.971-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5a361d92635ad4ada1b1b2d3630fc2f53f2127d51cf2def9db83cba32e47c856"}, - {file = "mypy-0.971-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b793b899f7cf563b1e7044a5c97361196b938e92f0a4343a5d27966a53d2ec71"}, - {file = "mypy-0.971-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d1ea5d12c8e2d266b5fb8c7a5d2e9c0219fedfeb493b7ed60cd350322384ac27"}, - {file = "mypy-0.971-cp38-cp38-win_amd64.whl", hash = "sha256:23c7ff43fff4b0df93a186581885c8512bc50fc4d4910e0f838e35d6bb6b5e58"}, - {file = "mypy-0.971-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1f7656b69974a6933e987ee8ffb951d836272d6c0f81d727f1d0e2696074d9e6"}, - {file = "mypy-0.971-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d2022bfadb7a5c2ef410d6a7c9763188afdb7f3533f22a0a32be10d571ee4bbe"}, - {file = "mypy-0.971-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef943c72a786b0f8d90fd76e9b39ce81fb7171172daf84bf43eaf937e9f220a9"}, - {file = "mypy-0.971-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d744f72eb39f69312bc6c2abf8ff6656973120e2eb3f3ec4f758ed47e414a4bf"}, - {file = "mypy-0.971-cp39-cp39-win_amd64.whl", hash = "sha256:77a514ea15d3007d33a9e2157b0ba9c267496acf12a7f2b9b9f8446337aac5b0"}, - {file = "mypy-0.971-py3-none-any.whl", hash = "sha256:0d054ef16b071149917085f51f89555a576e2618d5d9dd70bd6eea6410af3ac9"}, - {file = "mypy-0.971.tar.gz", hash = "sha256:40b0f21484238269ae6a57200c807d80debc6459d444c0489a102d7c6a75fa56"}, -] +mypy = [] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] -nodeenv = [ - {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, - {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, -] -oauthlib = [ - {file = "oauthlib-3.2.0-py3-none-any.whl", hash = "sha256:6db33440354787f9b7f3a6dbd4febf5d0f93758354060e802f6c06cb493022fe"}, - {file = "oauthlib-3.2.0.tar.gz", hash = "sha256:23a8208d75b902797ea29fd31fa80a15ed9dc2c6c16fe73f5d346f83f6fa27a2"}, -] +nodeenv = [] +oauthlib = [] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] -pathspec = [ - {file = "pathspec-0.10.1-py3-none-any.whl", hash = "sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"}, - {file = "pathspec-0.10.1.tar.gz", hash = "sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"}, -] -pbr = [ - {file = "pbr-5.10.0-py2.py3-none-any.whl", hash = "sha256:da3e18aac0a3c003e9eea1a81bd23e5a3a75d745670dcf736317b7d966887fdf"}, - {file = "pbr-5.10.0.tar.gz", hash = "sha256:cfcc4ff8e698256fc17ea3ff796478b050852585aa5bae79ecd05b2ab7b39b9a"}, -] +pathspec = [] +pbr = [] platformdirs = [ {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, @@ -1673,30 +1378,9 @@ pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] -pre-commit = [ - {file = "pre_commit-2.20.0-py2.py3-none-any.whl", hash = "sha256:51a5ba7c480ae8072ecdb6933df22d2f812dc897d5fe848778116129a681aac7"}, - {file = "pre_commit-2.20.0.tar.gz", hash = "sha256:a978dac7bc9ec0bcee55c18a277d553b0f419d259dadb4b9418ff2d00eb43959"}, -] -proto-plus = [ - {file = "proto-plus-1.22.1.tar.gz", hash = "sha256:6c7dfd122dfef8019ff654746be4f5b1d9c80bba787fe9611b508dd88be3a2fa"}, - {file = "proto_plus-1.22.1-py3-none-any.whl", hash = "sha256:ea8982669a23c379f74495bc48e3dcb47c822c484ce8ee1d1d7beb339d4e34c5"}, -] -protobuf = [ - {file = "protobuf-4.21.5-cp310-abi3-win32.whl", hash = "sha256:5310cbe761e87f0c1decce019d23f2101521d4dfff46034f8a12a53546036ec7"}, - {file = "protobuf-4.21.5-cp310-abi3-win_amd64.whl", hash = "sha256:e5c5a2886ae48d22a9d32fbb9b6636a089af3cd26b706750258ce1ca96cc0116"}, - {file = "protobuf-4.21.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:ee04f5823ed98bb9a8c3b1dc503c49515e0172650875c3f76e225b223793a1f2"}, - {file = "protobuf-4.21.5-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:b04484d6f42f48c57dd2737a72692f4c6987529cdd148fb5b8e5f616862a2e37"}, - {file = "protobuf-4.21.5-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:5e0b272217aad8971763960238c1a1e6a65d50ef7824e23300da97569a251c55"}, - {file = "protobuf-4.21.5-cp37-cp37m-win32.whl", hash = "sha256:5eb0724615e90075f1d763983e708e1cef08e66b1891d8b8b6c33bc3b2f1a02b"}, - {file = "protobuf-4.21.5-cp37-cp37m-win_amd64.whl", hash = "sha256:011c0f267e85f5d73750b6c25f0155d5db1e9443cd3590ab669a6221dd8fcdb0"}, - {file = "protobuf-4.21.5-cp38-cp38-win32.whl", hash = "sha256:7b6f22463e2d1053d03058b7b4ceca6e4ed4c14f8c286c32824df751137bf8e7"}, - {file = "protobuf-4.21.5-cp38-cp38-win_amd64.whl", hash = "sha256:b52e7a522911a40445a5f588bd5b5e584291bfc5545e09b7060685e4b2ff814f"}, - {file = "protobuf-4.21.5-cp39-cp39-win32.whl", hash = "sha256:a7faa62b183d6a928e3daffd06af843b4287d16ef6e40f331575ecd236a7974d"}, - {file = "protobuf-4.21.5-cp39-cp39-win_amd64.whl", hash = "sha256:5e0ce02418ef03d7657a420ae8fd6fec4995ac713a3cb09164e95f694dbcf085"}, - {file = "protobuf-4.21.5-py2.py3-none-any.whl", hash = "sha256:bf711b451212dc5b0fa45ae7dada07d8e71a4b0ff0bc8e4783ee145f47ac4f82"}, - {file = "protobuf-4.21.5-py3-none-any.whl", hash = "sha256:3ec6f5b37935406bb9df9b277e79f8ed81d697146e07ef2ba8a5a272fb24b2c9"}, - {file = "protobuf-4.21.5.tar.gz", hash = "sha256:eb1106e87e095628e96884a877a51cdb90087106ee693925ec0a300468a9be3a"}, -] +pre-commit = [] +proto-plus = [] +protobuf = [] py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, @@ -1735,92 +1419,20 @@ pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] -pydantic = [ - {file = "pydantic-1.10.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bb6ad4489af1bac6955d38ebcb95079a836af31e4c4f74aba1ca05bb9f6027bd"}, - {file = "pydantic-1.10.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1f5a63a6dfe19d719b1b6e6106561869d2efaca6167f84f5ab9347887d78b98"}, - {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:352aedb1d71b8b0736c6d56ad2bd34c6982720644b0624462059ab29bd6e5912"}, - {file = "pydantic-1.10.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19b3b9ccf97af2b7519c42032441a891a5e05c68368f40865a90eb88833c2559"}, - {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9069e1b01525a96e6ff49e25876d90d5a563bc31c658289a8772ae186552236"}, - {file = "pydantic-1.10.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:355639d9afc76bcb9b0c3000ddcd08472ae75318a6eb67a15866b87e2efa168c"}, - {file = "pydantic-1.10.2-cp310-cp310-win_amd64.whl", hash = "sha256:ae544c47bec47a86bc7d350f965d8b15540e27e5aa4f55170ac6a75e5f73b644"}, - {file = "pydantic-1.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4c805731c33a8db4b6ace45ce440c4ef5336e712508b4d9e1aafa617dc9907f"}, - {file = "pydantic-1.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d49f3db871575e0426b12e2f32fdb25e579dea16486a26e5a0474af87cb1ab0a"}, - {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37c90345ec7dd2f1bcef82ce49b6235b40f282b94d3eec47e801baf864d15525"}, - {file = "pydantic-1.10.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b5ba54d026c2bd2cb769d3468885f23f43710f651688e91f5fb1edcf0ee9283"}, - {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:05e00dbebbe810b33c7a7362f231893183bcc4251f3f2ff991c31d5c08240c42"}, - {file = "pydantic-1.10.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2d0567e60eb01bccda3a4df01df677adf6b437958d35c12a3ac3e0f078b0ee52"}, - {file = "pydantic-1.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:c6f981882aea41e021f72779ce2a4e87267458cc4d39ea990729e21ef18f0f8c"}, - {file = "pydantic-1.10.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4aac8e7103bf598373208f6299fa9a5cfd1fc571f2d40bf1dd1955a63d6eeb5"}, - {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a7b66c3f499108b448f3f004801fcd7d7165fb4200acb03f1c2402da73ce4c"}, - {file = "pydantic-1.10.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bedf309630209e78582ffacda64a21f96f3ed2e51fbf3962d4d488e503420254"}, - {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9300fcbebf85f6339a02c6994b2eb3ff1b9c8c14f502058b5bf349d42447dcf5"}, - {file = "pydantic-1.10.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:216f3bcbf19c726b1cc22b099dd409aa371f55c08800bcea4c44c8f74b73478d"}, - {file = "pydantic-1.10.2-cp37-cp37m-win_amd64.whl", hash = "sha256:dd3f9a40c16daf323cf913593083698caee97df2804aa36c4b3175d5ac1b92a2"}, - {file = "pydantic-1.10.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b97890e56a694486f772d36efd2ba31612739bc6f3caeee50e9e7e3ebd2fdd13"}, - {file = "pydantic-1.10.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9cabf4a7f05a776e7793e72793cd92cc865ea0e83a819f9ae4ecccb1b8aa6116"}, - {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06094d18dd5e6f2bbf93efa54991c3240964bb663b87729ac340eb5014310624"}, - {file = "pydantic-1.10.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cc78cc83110d2f275ec1970e7a831f4e371ee92405332ebfe9860a715f8336e1"}, - {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ee433e274268a4b0c8fde7ad9d58ecba12b069a033ecc4645bb6303c062d2e9"}, - {file = "pydantic-1.10.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c2abc4393dea97a4ccbb4ec7d8658d4e22c4765b7b9b9445588f16c71ad9965"}, - {file = "pydantic-1.10.2-cp38-cp38-win_amd64.whl", hash = "sha256:0b959f4d8211fc964772b595ebb25f7652da3f22322c007b6fed26846a40685e"}, - {file = "pydantic-1.10.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c33602f93bfb67779f9c507e4d69451664524389546bacfe1bee13cae6dc7488"}, - {file = "pydantic-1.10.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5760e164b807a48a8f25f8aa1a6d857e6ce62e7ec83ea5d5c5a802eac81bad41"}, - {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6eb843dcc411b6a2237a694f5e1d649fc66c6064d02b204a7e9d194dff81eb4b"}, - {file = "pydantic-1.10.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b8795290deaae348c4eba0cebb196e1c6b98bdbe7f50b2d0d9a4a99716342fe"}, - {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e0bedafe4bc165ad0a56ac0bd7695df25c50f76961da29c050712596cf092d6d"}, - {file = "pydantic-1.10.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e05aed07fa02231dbf03d0adb1be1d79cabb09025dd45aa094aa8b4e7b9dcda"}, - {file = "pydantic-1.10.2-cp39-cp39-win_amd64.whl", hash = "sha256:c1ba1afb396148bbc70e9eaa8c06c1716fdddabaf86e7027c5988bae2a829ab6"}, - {file = "pydantic-1.10.2-py3-none-any.whl", hash = "sha256:1b6ee725bd6e83ec78b1aa32c5b1fa67a3a65badddde3976bca5fe4568f27709"}, - {file = "pydantic-1.10.2.tar.gz", hash = "sha256:91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410"}, -] -pydocstyle = [ - {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, - {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, -] -pygithub = [ - {file = "PyGithub-1.55-py3-none-any.whl", hash = "sha256:2caf0054ea079b71e539741ae56c5a95e073b81fa472ce222e81667381b9601b"}, - {file = "PyGithub-1.55.tar.gz", hash = "sha256:1bbfff9372047ff3f21d5cd8e07720f3dbfdaf6462fcaed9d815f528f1ba7283"}, -] -pygments = [ - {file = "Pygments-2.13.0-py3-none-any.whl", hash = "sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42"}, - {file = "Pygments-2.13.0.tar.gz", hash = "sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1"}, -] -pyjwt = [ - {file = "PyJWT-2.4.0-py3-none-any.whl", hash = "sha256:72d1d253f32dbd4f5c88eaf1fdc62f3a19f676ccbadb9dbc5d07e951b2b26daf"}, - {file = "PyJWT-2.4.0.tar.gz", hash = "sha256:d42908208c699b3b973cbeb01a969ba6a96c821eefb1c5bfe4c390c01d67abba"}, -] -pylint = [ - {file = "pylint-2.15.0-py3-none-any.whl", hash = "sha256:4b124affc198b7f7c9b5f9ab690d85db48282a025ef9333f51d2d7281b92a6c3"}, - {file = "pylint-2.15.0.tar.gz", hash = "sha256:4f3f7e869646b0bd63b3dfb79f3c0f28fc3d2d923ea220d52620fd625aed92b0"}, -] -pynacl = [ - {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d"}, - {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b"}, - {file = "PyNaCl-1.5.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win32.whl", hash = "sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543"}, - {file = "PyNaCl-1.5.0-cp36-abi3-win_amd64.whl", hash = "sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93"}, - {file = "PyNaCl-1.5.0.tar.gz", hash = "sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba"}, -] +pydantic = [] +pydocstyle = [] +pygithub = [] +pygments = [] +pyjwt = [] +pylint = [] +pynacl = [] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] -pytest = [ - {file = "pytest-7.1.3-py3-none-any.whl", hash = "sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7"}, - {file = "pytest-7.1.3.tar.gz", hash = "sha256:4f365fec2dff9c1162f834d9f18af1ba13062db0c708bf7b946f8a5c76180c39"}, -] -pytest-mock = [ - {file = "pytest-mock-3.8.2.tar.gz", hash = "sha256:77f03f4554392558700295e05aed0b1096a20d4a60a4f3ddcde58b0c31c8fca2"}, - {file = "pytest_mock-3.8.2-py3-none-any.whl", hash = "sha256:8a9e226d6c0ef09fcf20c94eb3405c388af438a90f3e39687f84166da82d5948"}, -] -pyupgrade = [ - {file = "pyupgrade-2.37.3-py2.py3-none-any.whl", hash = "sha256:9746efd064dbf53d7f86d6f88a1d48120f58dbfc378f517768634740ea2225e2"}, - {file = "pyupgrade-2.37.3.tar.gz", hash = "sha256:1414c7a7c558004cf610e6180716b876814b639b5a5789c3da023c5cdaebcd49"}, -] +pytest = [] +pytest-mock = [] +pyupgrade = [] pyyaml = [ {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, @@ -1856,94 +1468,27 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] -requests = [ - {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, - {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, -] -requests-oauthlib = [ - {file = "requests-oauthlib-1.3.1.tar.gz", hash = "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a"}, - {file = "requests_oauthlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5"}, -] -rich = [ - {file = "rich-12.5.1-py3-none-any.whl", hash = "sha256:2eb4e6894cde1e017976d2975ac210ef515d7548bc595ba20e195fb9628acdeb"}, - {file = "rich-12.5.1.tar.gz", hash = "sha256:63a5c5ce3673d3d5fbbf23cd87e11ab84b6b451436f1b7f19ec54b6bc36ed7ca"}, -] -rsa = [ - {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, - {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, -] -"ruamel.yaml" = [ - {file = "ruamel.yaml-0.17.21-py3-none-any.whl", hash = "sha256:742b35d3d665023981bd6d16b3d24248ce5df75fdb4e2924e93a05c1f8b61ca7"}, - {file = "ruamel.yaml-0.17.21.tar.gz", hash = "sha256:8b7ce697a2f212752a35c1ac414471dc16c424c9573be4926b56ff3f5d23b7af"}, -] -"ruamel.yaml.clib" = [ - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:066f886bc90cc2ce44df8b5f7acfc6a7e2b2e672713f027136464492b0c34d7c"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:221eca6f35076c6ae472a531afa1c223b9c29377e62936f61bc8e6e8bdc5f9e7"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win32.whl", hash = "sha256:1070ba9dd7f9370d0513d649420c3b362ac2d687fe78c6e888f5b12bf8bc7bee"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:77df077d32921ad46f34816a9a16e6356d8100374579bc35e15bab5d4e9377de"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win32.whl", hash = "sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win_amd64.whl", hash = "sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d67f273097c368265a7b81e152e07fb90ed395df6e552b9fa858c6d2c9f42502"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d3c620a54748a3d4cf0bcfe623e388407c8e85a4b06b8188e126302bcab93ea8"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win32.whl", hash = "sha256:9efef4aab5353387b07f6b22ace0867032b900d8e91674b5d8ea9150db5cae94"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win_amd64.whl", hash = "sha256:846fc8336443106fe23f9b6d6b8c14a53d38cef9a375149d61f99d78782ea468"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:210c8fcfeff90514b7133010bf14e3bad652c8efde6b20e00c43854bf94fa5a6"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win32.whl", hash = "sha256:a49e0161897901d1ac9c4a79984b8410f450565bbad64dbfcbf76152743a0cdb"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win_amd64.whl", hash = "sha256:bf75d28fa071645c529b5474a550a44686821decebdd00e21127ef1fd566eabe"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a32f8d81ea0c6173ab1b3da956869114cae53ba1e9f72374032e33ba3118c233"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:61bc5e5ca632d95925907c569daa559ea194a4d16084ba86084be98ab1cec1c6"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win32.whl", hash = "sha256:89221ec6d6026f8ae859c09b9718799fea22c0e8da8b766b0b2c9a9ba2db326b"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win_amd64.whl", hash = "sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1b4139a6ffbca8ef60fdaf9b33dec05143ba746a6f0ae0f9d11d38239211d335"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win32.whl", hash = "sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win_amd64.whl", hash = "sha256:825d5fccef6da42f3c8eccd4281af399f21c02b32d98e113dbc631ea6a6ecbc7"}, - {file = "ruamel.yaml.clib-0.2.6.tar.gz", hash = "sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd"}, -] -safety = [ - {file = "safety-2.1.1-py3-none-any.whl", hash = "sha256:05ba551fb61ef24c864835d21089f75bc8b37292680047b9f29693a6552e2fc7"}, - {file = "safety-2.1.1.tar.gz", hash = "sha256:dbc5dffa2e47da76cc43dfe8cbbbfca99d29118d0c6c54dfcfa11c2bd349dff6"}, -] -shellingham = [ - {file = "shellingham-1.5.0-py2.py3-none-any.whl", hash = "sha256:a8f02ba61b69baaa13facdba62908ca8690a94b8119b69f5ec5873ea85f7391b"}, - {file = "shellingham-1.5.0.tar.gz", hash = "sha256:72fb7f5c63103ca2cb91b23dee0c71fe8ad6fbfd46418ef17dbe40db51592dad"}, -] +requests = [] +requests-oauthlib = [] +rich = [] +rsa = [] +"ruamel.yaml" = [] +"ruamel.yaml.clib" = [] +safety = [] +shellingham = [] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -smmap = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, -] -sniffio = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, -] +smmap = [] +sniffio = [] snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -starlette = [ - {file = "starlette-0.19.1-py3-none-any.whl", hash = "sha256:5a60c5c2d051f3a8eb546136aa0c9399773a689595e099e0877704d5888279bf"}, - {file = "starlette-0.19.1.tar.gz", hash = "sha256:c6d21096774ecb9639acad41b86b7706e52ba3bf1dc13ea4ed9ad593d47e24c7"}, -] -stevedore = [ - {file = "stevedore-4.0.0-py3-none-any.whl", hash = "sha256:87e4d27fe96d0d7e4fc24f0cbe3463baae4ec51e81d95fbe60d2474636e0c7d8"}, - {file = "stevedore-4.0.0.tar.gz", hash = "sha256:f82cc99a1ff552310d19c379827c2c64dd9f85a38bcd5559db2470161867b786"}, -] -tokenize-rt = [ - {file = "tokenize_rt-4.2.1-py2.py3-none-any.whl", hash = "sha256:08a27fa032a81cf45e8858d0ac706004fcd523e8463415ddf1442be38e204ea8"}, - {file = "tokenize_rt-4.2.1.tar.gz", hash = "sha256:0d4f69026fed520f8a1e0103aa36c406ef4661417f20ca643f913e33531b3b94"}, -] +starlette = [] +stevedore = [] +tokenize-rt = [] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -1952,46 +1497,19 @@ tomli = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -tomlkit = [ - {file = "tomlkit-0.11.4-py3-none-any.whl", hash = "sha256:25d4e2e446c453be6360c67ddfb88838cfc42026322770ba13d1fbd403a93a5c"}, - {file = "tomlkit-0.11.4.tar.gz", hash = "sha256:3235a9010fae54323e727c3ac06fb720752fe6635b3426e379daec60fbd44a83"}, -] -typer = [ - {file = "typer-0.6.1-py3-none-any.whl", hash = "sha256:54b19e5df18654070a82f8c2aa1da456a4ac16a2a83e6dcd9f170e291c56338e"}, - {file = "typer-0.6.1.tar.gz", hash = "sha256:2d5720a5e63f73eaf31edaa15f6ab87f35f0690f8ca233017d7d23d743a91d73"}, -] -types-pyyaml = [ - {file = "types-PyYAML-6.0.11.tar.gz", hash = "sha256:7f7da2fd11e9bc1e5e9eb3ea1be84f4849747017a59fc2eee0ea34ed1147c2e0"}, - {file = "types_PyYAML-6.0.11-py3-none-any.whl", hash = "sha256:8f890028123607379c63550179ddaec4517dc751f4c527a52bb61934bf495989"}, -] -types-requests = [ - {file = "types-requests-2.28.9.tar.gz", hash = "sha256:feaf581bd580497a47fe845d506fa3b91b484cf706ff27774e87659837de9962"}, - {file = "types_requests-2.28.9-py3-none-any.whl", hash = "sha256:86cb66d3de2f53eac5c09adc42cf6547eefbd0c7e1210beca1ee751c35d96083"}, -] -types-urllib3 = [ - {file = "types-urllib3-1.26.23.tar.gz", hash = "sha256:b78e819f0e350221d0689a5666162e467ba3910737bafda14b5c2c85e9bb1e56"}, - {file = "types_urllib3-1.26.23-py3-none-any.whl", hash = "sha256:333e675b188a1c1fd980b4b352f9e40572413a4c1ac689c23cd546e96310070a"}, -] -typing-extensions = [ - {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"}, - {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"}, -] +tomlkit = [] +typer = [] +types-pyyaml = [] +types-requests = [] +types-urllib3 = [] +typing-extensions = [] uritemplate = [ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, ] -urllib3 = [ - {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, - {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, -] -uvicorn = [ - {file = "uvicorn-0.18.3-py3-none-any.whl", hash = "sha256:0abd429ebb41e604ed8d2be6c60530de3408f250e8d2d84967d85ba9e86fe3af"}, - {file = "uvicorn-0.18.3.tar.gz", hash = "sha256:9a66e7c42a2a95222f76ec24a4b754c158261c4696e683b9dadc72b590e0311b"}, -] -virtualenv = [ - {file = "virtualenv-20.16.4-py3-none-any.whl", hash = "sha256:035ed57acce4ac35c82c9d8802202b0e71adac011a511ff650cbcf9635006a22"}, - {file = "virtualenv-20.16.4.tar.gz", hash = "sha256:014f766e4134d0008dcaa1f95bafa0fb0f575795d07cae50b1bee514185d6782"}, -] +urllib3 = [] +uvicorn = [] +virtualenv = [] wrapt = [ {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, diff --git a/pyproject.toml b/pyproject.toml index cf3b2af..531d608 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ version = "0.1.0" description = "`github_tests_validator_app` is a Python cli/package" readme = "README.md" authors = [ - "artefactory