From 2bd775988f77df397aee3a1caf4de90146b7f363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Fri, 5 Apr 2019 13:54:00 +0400 Subject: [PATCH] :sparkles: Add/refactor addditional responses, tests, docs --- .../tutorial/additional-responses/image01.png | Bin 0 -> 82427 bytes .../tutorial/bigger-applications/image01.png | Bin 61037 -> 77899 bytes docs/src/additional_responses/tutorial001.py | 23 + docs/src/additional_responses/tutorial002.py | 28 ++ docs/src/additional_responses/tutorial003.py | 37 ++ docs/src/additional_responses/tutorial004.py | 30 ++ docs/src/bigger_applications/app/main.py | 7 +- .../bigger_applications/app/routers/items.py | 13 +- docs/tutorial/additional-responses.md | 235 +++++++++ docs/tutorial/bigger-applications.md | 32 +- fastapi/applications.py | 47 +- fastapi/openapi/models.py | 23 - fastapi/openapi/utils.py | 50 +- fastapi/routing.py | 93 ++-- fastapi/utils.py | 6 +- mkdocs.yml | 1 + tests/test_additional_response_extra.py | 52 ++ tests/test_additional_responses.py | 471 ------------------ .../test_additional_responses/__init__.py | 0 .../test_tutorial001.py | 116 +++++ .../test_tutorial002.py | 115 +++++ .../test_tutorial003.py | 117 +++++ .../test_tutorial004.py | 118 +++++ .../test_bigger_applications/test_main.py | 49 +- 24 files changed, 1057 insertions(+), 606 deletions(-) create mode 100644 docs/img/tutorial/additional-responses/image01.png create mode 100644 docs/src/additional_responses/tutorial001.py create mode 100644 docs/src/additional_responses/tutorial002.py create mode 100644 docs/src/additional_responses/tutorial003.py create mode 100644 docs/src/additional_responses/tutorial004.py create mode 100644 docs/tutorial/additional-responses.md create mode 100644 tests/test_additional_response_extra.py delete mode 100644 tests/test_additional_responses.py create mode 100644 tests/test_tutorial/test_additional_responses/__init__.py create mode 100644 tests/test_tutorial/test_additional_responses/test_tutorial001.py create mode 100644 tests/test_tutorial/test_additional_responses/test_tutorial002.py create mode 100644 tests/test_tutorial/test_additional_responses/test_tutorial003.py create mode 100644 tests/test_tutorial/test_additional_responses/test_tutorial004.py diff --git a/docs/img/tutorial/additional-responses/image01.png b/docs/img/tutorial/additional-responses/image01.png new file mode 100644 index 0000000000000000000000000000000000000000..b69b9c7df2c98ef6c472ee5e7339ed82d5219111 GIT binary patch literal 82427 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 literal 0 HcmV?d00001 diff --git a/docs/img/tutorial/bigger-applications/image01.png b/docs/img/tutorial/bigger-applications/image01.png index 78544b4034199b100cf5431b16b367fc85d135f2..f31195934b6892ef73d1f5da15daca6be7c40ec5 100644 GIT binary patch literal 77899 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 literal 61037 zcmdqJbx>T-^C*fFJOm4#5F`W*?vOxm2@u>p=;Cg{3GNOdL4vz47Cg8+i!JW9$gfXA)zur`BojG&P>FMd|?rEzH|Ews5gGq*ofPjD_BQ2qVfPmbAfPljH z3=KZgTUloWzo0mMl=<=u-n^fghQaTjJAcx2Rt1~Aeng_p6Fa#V!owSCbvtT;3}qRu@NZ|E zeD3HDClJOBMaF+>am6ER_UzU(%o_(L8#X66n7F;*t5|0aj9|lmUMSi-a1~^=U}a5- zpp#2}N$l_MFE%kT!SB4o9v;qM-=tg2`0tAoL*|?>(YUQqkPRcLgck^Oe-SGyk9YU= z6@^GVwQ?2K6!L~et=D%vY0Rm^1@H8tjZ)dMRbjC6znp8XEtXT2BFUMV6zd!7GV(&X zB{EN6ZNA%b6~w^7VqoT~)rEN7URYioE=J5BsO5qw1bs6%`iz-MGaDQECMG9k^AUs%9I#B6mH#oCH>R?{c$OP^-6oOl0uCN0ybXQ#``VArtyb1_XG z&AbLRVg5@&^~lI))B5zP)X^S|!ol#txY>w#t2$!FLj6|H?p`W21mb@PKDgn?-?W|W z^^((k>Qh68uotdsp<<8omOf~3&7QCExXp`{)0|K|G`b(F(p=8>TCeu2NR7p)(b*>B z+)(|C!%kl`7;ROIlNqHjq%rZa(yum?b@jI$$)!z#l$fSf4Hj9OXbYq&A=idV9MNh3V2^ zJFUbXo0p(wH1J*>*f>^Ke|i4|vYg6u2jAEvhNy*ANGOu6?YeZxEc5V8$a&`(9OmfH zPv;&xxl(5kVdtGN8ogg^;OY$Pdt@Xc-%sU^Jk-=sWF$5Ge*nRO7@gM>-EDvDyml0? zoVFSU+_Sv&EmOBH`opGcj#b$ZgJ)i1M@?LWIi!xYA|kSBYLPOEJ4$`r(b(-Rd9H^pF$ymwVMxAFV^J%`L)-k@wb6rEp*ixH0u(B#mR3EhaAwFH$f ze`;8)a$;a>y>?7PD=d~rMF%3CwTR`kGR(=Nx_zs^b>H86Q4|2QNx50M%)Bv4a;#6Ul&!L^zB&O%?=3os zA2!E=b5iRjp_CcU0)l!;5`1qrm0X;8Hi@x2EgF~{vRUp)w0yjXioRp3G9J1A?q?mu z?0nn}%mq5;LGyYdYSZCll^6sZvs5%0iSo;C-A_+5oCy-b)e7TX^UU9(sisKZ8xQ5G z!9sO|iLg3)ZZ^*S*6$lY&A{h2C=)kj0FN4pxi~D3~n!-3^%92#MpG9^Cl+2_i`SjxcxN;iINLZi)1CanH zYlwNUPd4Mz;ybE@bu>>vfE&hJXPAe#AvDxsbcA;0ZI41Ki`{0pSKrt#HE}B~O49;b zd+$Xh@3SL{tH$!>8w(*x;a=}sK(^p1hR;L&?=fpa(H){I5uKEIH{s4g1}JO0ogaYp zml+SxsA~{w-U{`RB^bGD=7XA4&{~@7|27pP*{=^Im|=DL&#oD`-=7=EynAl9gfX5% z71N0s=zESI`!w!@=hn+I_u23tkW_r32Yo>+kt=3S z)^qfj%+)p^bkyQyVtrDR!I1GRqu`3mo5nVEdPYUm$l{|S2I}pTwKqcHTa-rN;Hy$o_AVgQz#c-@3>x zPGMeHVXmGC1|LI3{%|(9{PK}Th`vCHhF!l_8k+k%UzBLQe9IGIH+%=FB2{vNMEZRC z>*`Urc{GlnsePfeg6owoV*)4`j#rxZS*aov>5XEZPnI~*P;wlsobiTeU6@VlX(#aL zZm0CrH>_+XT<%&VmzxiytuF86lgeAyC5b9|XW+2n*{P}?T|;Q?KsVaH`|jE$q1S7H zAG+JzNh)kc8YQw2C12t633m{5wM@|Dk*!?GEB5qN+b%3ZO_onz05;xROp&Aa4SR9*Ur<;O0!=LIwg$Q+!5N7^3kr_N5{^@4vSCAbM3V zqs|CuHdwNywUUn)C8yzFC{|nX7K-~2OxG-Yo~`-zCItOBjDBi3+<4}Q8BVBgNqZ1z zmJ$HxwdWDn%EAjJ^SWs0+O9*bmtuHcKVD=K3N_0Ta5Y@4KZF9EWo}4* zQz1X9p`QremxGpWBnc$TNe^?IE5lL^LZg}Y)>@vfYe&*Tdga>&EEyZ4B8n)e_|mN7 z8Ga^%N2&;!ptgN^{*krcSmAnrpq6ZQQ^6`0#TbM$s9#(@v-=+aC?SS%TeC&xhj z&1xM8iyV#H4LVdysdsbElyf%S>oTOnmy**!$)YwVYsryX#iCSW{+FHup^Knz33bsO zI`A61v?}$1zJ>MWgr3aZ&E>LNTJ0|3%Wov#+o!x7FcZAcz*#BV&nJ&O14uC}1T6*o zHE;1_Dz2l6eL~pXKZ|Bxn-UTv`~H z+%1!KFNIX%{*3a0>Iw-Ya`{%t7Szirw{dN`jj!KU#H8mFGg%s(=0iPf(FS@Y(w<9+ zYoTLTNnz1>+sNs1g)Rb=&PrlK7ZibFQ6IBVxGIo3Y^ubES32=$VcGeK78?;-**09? zn5@29R=%t_tbsu77V9ZrwF_PVnZ_`o?P(xFE!TQ5q}8v@H?2tj$*x9h9Kz+b`^dTP zV6K?c*Nnno*uw{2GkOTnF^dEGA{vw%4AtJPY;B81=0Os{-Wk~u!n1+x?V#X|j56T{ z2sXI;PlNk;;T)8G|9$CH#x-We74^qL0HkKxXDwF$1!*Xx^3r}l+-xFwSb|*mw?R8k ztk}#1(E$bbHxUAkubW=}6>fAj^8mps^t;p4It=bNe#UA*tVp@pG^K+N#+1HX)}WUa z!-5ewCv?kO{#~+t1&9;|jfFcrbk8J17^0RL;vHP~q#OLHHQg6n3Sib8KqurO8J#di z7qwk$_x`BBvo1iV-6&ksyyETChd~gT62CucWhDD)LSphkZ9OAme3Q=ufC{1}8`R+AOO$Y^TonA|1y(GX`z7QpgN0TLcZ^*LSc%kSNYp)A)vmr6IQs6?z&YqlB$=XLM+$0KTs15j}m#W|^E| zbpkc)5(CR=NsL%W5V?1si0r{yH`@bR|rv&t{(HaZGv#_UT9=@^-1HdfXUY#3VBR z>1r>Q6S^Pb0J~i($tW_I`y!`ID* z8>Xv8cZ5`i@Pxr^swB?7$vZV|p0qF4G-{gRpe_rYZ*V^izRXQBm0}5N9-S{H@CQXJ zU0}+9e;&ZCLBoiiQZj;~zle>s$8g2h$oygM*9p_(n$%bj$kEg@8m#2=FwdJaA(frr z1~e~BA%jQ4`IEZo2@qLQa;EN1m1NzEN8;hfflyKZ4TUKG>%!yzr&IKi>vs59Y~@)y z+}Gx%5^@(J+kHB3Hf1@nk&%%T=7Z)71Y?x>cJgYSi?me5}A3_rPgvzmN8fdk0d zf3bg3;o*i7q;y5~SoPW{>oNhXOxkDuR15}p#p$fA@g9qRSbIXGTmcPDqnJ9MoVN)V zowZPoEeMWD*x)YBtX)O766(JklB{}?bl+w@TDRfMh{A**hffugp(|B>MD+ZT1Wo2= z4d34Ik~HX;+$N@A9)Hn)!& z8%+ggCKLrS-ap1w&xt4%OurDq;}~nso&pGN3Yi_VlkJQq*O##w8)MV|2nA8K$Gks~ zczN(~v&?Feyi8_KGVEyHa3*l?<T#6K-)U)E493V$=MMpqqT6!$2DpbRERx8m}IK zN^M}^xja^*^3gtpHOph|X8T#Ge(TBENY?H|6X%-{oQ*>_&@Yz~^~mYTUA4QM?`lgi_mTA2q1n>Xs{^7UPCcxRF8jQ(30Yax0j;(x zMC$78BCQ_h)D;BJU-l2BfgJX)1z)m%eTIyNvo>?;b^9hQJ;p zk%St}{=UMh1@dNp4&7qYvU)P9x7oM*_)X0%-mhH=rV5z7TW)rlWKbhos}GtiI(Ffz zCptupB^V1+Jk(YhEGR#HlrjxjP@B*0Y=uGE6+9w!lDKhEFr3blFFBlk(+RQJ(6hH^ zx7DsIpSmUGb~If9@y3*%RKLqZZFDVL@IE=xxmkmR7v{X?rvrc2v)7u}D%EOX%?m-r?u|QlLYhy)$zauv}XAs7H8MLcfU;n5arB~}f<$Q%BN}%91qdAz+Zq0R` zjAJ#8#NA5lP4S{qmEV8`5Y{OhP5x>BC)c7rlwxGD0wBC_xi6Oz^7_l0giY}bE!e*L zy3_g9{(B9E(uY^KJb14=(mp}6&6xF^!fL#j_HUuFpAm zP`zvcfy;Iw5g8p+!Oxr3;tEiqIp!WHy}_ z>m!uwmGC62_@!vqS?dw4HE@WZ?2I?Sy{Rhip6@hkkkZ0zZ{X4&HvdJvv+~htoTl zLrDFrey4zC)ctlzUaHm_;c~Odn?8#o_sgcN?PK4xlwb5`ecS`Jk+3*F;d=aI&a^4p z62%xPgUy*Cg@eCWpZQ31itfAjf%BY!)Sx@T5^t~b)h@QP(MAG!D5#CbsDAU2o|xx! zHapU{TDX;)esVGw|LvQ|;F#34nZEw{AZd^59 zBzoLynOpGyg8bHTe>yEa>CowXjbjlC{uhDYI&pX}+Mo#7V1bu2XGu(2`g^_Q-%l?u z0Drx8c8D-KG_0@7N}n&)NR0vw*tdpQT<`B8D_#9-U4xK3*;A@UaB{}`G z*hhu>W!V#SH4J2od(s?4SbOCA4o^V#PIZHly8-W6SEgzKpO zkg^+(3wwdl`BC%2?dtm0DSkemH!of95Uc>OZxwD{lhx5AeZJZXUw%^Z4Xo=8dsMsl z1PI4b)PzjdnYqNz_;&s6R~5q+ox|9{oQ=G*SdCc6 z9GeA9F#|pPecg~`l?5<$5AB^g;p|sXFg%B9*(fOQJVvg*0r4~Lq4&SHsKvPb{E&)K zpA%BZXYklwUoAcua$wuF+6p1x;=ST#iMqI$G|jV!&CXVoG?yG`=1mbN*;!pRJOY{s zt*u?MHS4X1qZBA+bPjChS?{^Ln?>;Efg(*|V65F8x3z9M;r4YWF7AxMj~RM)_R8+X zyX)JDRw=h+HUoWD@N8MaY~9*wr+82KgVok z(`UBTdX(mpF}aZ5JtA)D&*lQ4=s6K!w0SUN4RvgN_H{Z~|HkWt=Jx}iB=29NzVE@M z4qtvLH|S%Nn;2aU5p}nepF z2KXZ_wZAaOTi#0Bs>v53n$zAc+7M0Nm8$%!%41RXB=YLwcs6I=$#-=z?SYPyspQXI zIR|@aTjCZ;gy>R)9tQX90RYu)cp6 z>G-XD`1d|lSdyjO52}C5z`D6>U>s2@>fU9$q|XonXxCHld_SsGq#n4JEkB`@6*1Du zIFLtX`&(m~e4T^UdQq+_JKA)BB+jGaeWlNhBpDw0P|zX`U#4C{0qi}L%S)8sziTVB zogreU)amtj|6kh0-%>wPl(#M|04TVYGlUP_Srq-w3FKpmM>z7`&|3eb&@+)A)f@qq zvz4c5)RgJtH6Gm2ELp>Ue*+DD-VXfe&05|iYm0uM;})**B^&&S8G~d8x$K&a8-R&R z@yG3knBFrmz=^H$*-HBzwf6}Xp77aAoIhP!4W2mXB$@l9dr0&Ox6l3Yy8z}L9f%a+ zQQ(MCk=G?bYt_twhGwRw>>hiw^4YhSY8q~+=$*wXh}TV`?e?Eq#42>__Tm@a7lFGj z;!57$J_93vjh7c(!0Nv6#GgVsPp)zo+QD-B!_P%Dbo6s*&1j|f4Q4X*OfG*arfco3 z+A43Fd?N)|u)VVHw_-Qv!+OFM2JqoJW!vS$h>qW^!t%)ql=OU^RixRaS@{glf5Jvb zWy@b1WsV?hfn3hc-9>l0>#K%nY?pFT(wV1cWOJ?Es@z_EU>@T9hq~W(iWals>n#@+ z=%Jqny}$ePjRyN#ds0Z%*wo@-(J$&b-)l{q)YmXtaT1bWfRHFO8S+ZgdS*L#*I}bq*KrY}A!hrQHOq3bKy6;XLj`5wItV45%T9OwFoVlZ z-uvUtFzDcYvFbw_0RZ5|%x%#p+>%b=@6an6Kq)7dg1YZ zZVYVf^YI7AM=EX)3=e}N*hDQxvxS}aXDBmfn~r+nTE5w3ew0}~RF2Yj@E62N zdb!#AV(l)H;(eyuif4ka&+TT#{%j%MG4PW9jTH9wFFX)Kp53x+QB6gmUzh&}@pr(> zh9%^aX^H?JA8#fuDAG_)`*W}8td&;J_m16RSa!1oYD{)yLSgVsZh?G;e!T(U?M;Ru z+(fRmolK4uc%9;FGKG~D0RKXgJRcSczNkgtKsI) z8zpqgxz6$nv4uJjFDi9UHyg#_4fMIBo#q2uxi<{#LE0gt>1|yibh3~WBvSOiI3dV)d9?NuL=u5$upX-O`ODng z?HR%1>D;!8EY(xSYx=CsM5ZvbTo}nM-?sCGK(e1;AnE|D)@rfRcuSc8e(Dvi>#~vz z3=GiHX20so7T46|GcsC(`#sX~0x~KpDl5(f`8WW{`He*%$WjkFwfuUQ4E6c7s*=+k z<%Y-gx4Xw*(?;~E5NvAFn{U@-<-za;WZ7w!8?r#;&9?SmwE$oGhl@3Io?Ts@4pZMW z{e%b5i>AJ;_(Jp$vb~|oNA25oRx`g5{o5<3Z5M0TPW!0V4*l*4YUcmw09w0>rm9_1 zScdO=&$n1Q4qeaBGM}kG-rU~Wi5&^=Td5B zmCaI$?B$X8&U_xC%Ob9+dxjOQ-LhonhqPI*NP$}0Ri!(JL3$$Wwdh&fuF zwc`EQXR_d#4s+HKcs*4LinTXja`j@}Lt%kSiVBckA>IB=g2tpb5_t&G#&z&1h~idP*ySNVRRL15vHX-5-Szi;cj zKkIlCghfI8Lf-Do!I;%^v^=moMt_T_o#cAMV8yUf_}l$CXf^*BqFVa_$hDaKbLB8p zi^mV+;z+i=ig#5Gx5z;mT5HN3j^-bc$$g%-&mBe{8kw7Q&c)!yY-k6gXfxBvA)1Ix zMl6z`Vx3bKN}0-k*zmeTxYZL)jq_F4vmq9}pb`VMy|J`#h<9~n z!%C^3S;=Y;v6NZ4C2z*dPvYGy=&d}RGm5?qo@mq%^t|yf;p3DMY)+%w$KCbgflFYV z@f^@5C?wi%>AKEPnGNJ?RNNckE3cnDeqn{OZK*(}rs6P2j1z3uDF zKj6Po!3kd})8Wnby5cWJN2xSFB>Ook-@E+V!Q}R8PhoF&5_oQ8lN< zDB)MR8SQxSQ?LeQzC#fXp zU5?SawTn+FGwlEac&>e5E%l}OaJsm<>&jtxn@C$ErQmmXl(5Qknk>0YQv=kJdo8AJ9-;`~`UHvm`6`3qs3avYT10=G~pN4-Zs zUr3U&yyeby;rKqfhWu5Z zq9j+N8BVWqci2=JIyTErV|v4bD+NCHb?+)L|CY}uZXp&?L@ItUdvxb?gLz8Z-78x^ zv$s7@FjBc@VJPmg4w@ePzHF!Q35t82tvl#OU9R@&@m;8*`+R9}kfX5*k?tF|yn&z; zH2^l8YWQ*1!F?N@gL}b7Z|fQ1u`KflRJIZgv$i*CyN?JvvM`J>X#*REL*|WV_J1HS zli+rm+wcJ7lTIec{L%lZdul?fVWWy<`cjWUz>|TKptaTj+@)HzjvX*v1s?_vg1gt8 z)#lhVsJa@BsWBg+(hv=Fbg0f7xZ)s}Ob5V&e(VRhz5kd|lo|3?Fq{_s!0h>RjJl}fzpQ4X(ASWIbqQ}+3 z8&c&z*Z*{+rZSrl0Z}aPr+Dy3dyD6+gyO;jQQ_U8~V5yE^}825U%7;ra&I|g_{HxC@ka*nb&Jdu5A~#A#d{x$hy0wVNvV!zHc0$^U#hSlMv>)i zlD6GthgBr$`>Sp z$j9YdvNbPM5oYe1A8Oz~RqIUe$C&{K%S!572=K{O>0%SJQly`3XcL1&Z2tU+%BCB* zco(Vlfg10$<9mYHiqgl?zWJL5*!50bYvpi4(@Ybe-z0NJjZ9`@K5bX@$sZ@C4Ctpad!ZXK;jyf+)pZVzIh zYWy{KGzKT^`Bj^~VfY8b{^iK8Tu}cki9-t&;S6di~S`}BTFr`Z5On4@HgpTh(Mv|LM@i&Pn?da-u>w^)X9LwLs z%V0aV{6Wp_>!W1fEPuv2QKPY#b!@vivlfB>=pQH)T!WJm2iw3I@N6D1;&m`l1XDd0 zaLqa1l_Ptnj9l}ir$y*G6uk+sRd0;E30|l+8Aa9cwZ1y|)b2mYoYoNV6*LpMqegB0 z?NafiyPQ7elSJV_Q3c(Gr9HU%+Ko_9hJ!mILj$j?br7WGf$ma zPkF}*>VOmvhX9(*`wqT}vUH7|cT3a1ePI<}jyim~>c|Xh^NogoKvyXyuGMaD8LCWX z%e?FEiE!ubjKwzWuII}wq-)l$bG)O{yxQrwcM#EnLox;1GUeeDOl2rN@&ciMK8IP= z)&79@X?v45q`e6U8}wDw_@aDuKV*>Oy!NWijz4Ms{miB`z13gq$eZ>Yeig;LC324) zq}|1w-dt`6%9XBy);monF3R??+bKqOp%K#=zXwtC134B~61(FCt`ZX(2Z;LB!O}=H z7n2LwEGywpIY;KW@DfZRj>%Hk*MOR>YJ14TTxMe+%iTlw(xwg4UQ}NA0Lsg$vdNs) zOzQc}c!fjlLw@pawljOHBE#X43EgxR7DoWyvzZY!(*@qM`@fyu)qdQeoY8R`Bc0h9 zK5-jQX%=OKPfad3UcUP9VRuzqx&5WC-qZAZcTmJvL9R7jT()9###d29iYuZcV zPADb}pzfdR_yC!o?d>^LRW`Ji)hoe>DWYew=IYL_PBcjH?b5S-Rc1rn(RJEL&9~-4 zzzfOjnw-6liZd#E#slU)6mG28xeuBaiE+;5Mj@5vBwv~4La{P6eS^i>V@ zQCJz_sKa8hM$?^N4Ns|Y!X&cfrj z+OYOmF2t~x)jiZpR8!+^q>kg8v^t*f(=O|jT`pT5wu2rNrLH6eM|$@~8-ENy2Cu1U z{5tDR+c0TbUegfDBD4ERZUGJlXAP?-a}O)8PG!qT$mnFZS^h^chV)dP=ew@R<{tyo z1AQ=LaCy1+A-{OOjoH2T6KzRIFT)4}h0*|4l zsn~m(e-QN$4f=Cz{w2!%y1N$)GO^>derNxvVU!Wt==nFUPWGW@rAzpqE~+F{sww7h zu+%|fAIW+1v_{(^Tf2XEqvjv#cdE8M}*83|J`f{6d**KD-&z~V=rv5+Qm9CkVsDx6tl9%1neY)BAJ$WQXS7U1g z)~3Zf+R_M>UJ8=|CG@BXXlHX1+A;1>lhfGcQlth!&G&wi0JCpb2(Dmp3-^dcc?VE4CHq}7E~@65N0sofz_$Cuk4 z|L7xlHQ{i-@tvst`VIJ$ZqM9iAkqvB(q9_|00-Nf2{}cJh0~R&{i4!NuU;(ISg+FB z_7ENk#dTh|0rI0RF@skp1vNeOAr?w0ZO+wXVpwQ;8i6;cTZ@nCJ9XxA*Ijee$ z=MCG(v!JpyTPqOM(v;_C>=Q9PtHO&A4%y=|5SSvbQ2Ow%*s5=qXN-VGu-fgcakR0? z{<7GLpH%f#d35R$OIl=N$>ddUg@@iA$u4@;DBN zcm^r#&s5Rv>ZYDALWGq@+p-Pp2CeZ+=l!^1xQBXQv?l?!4&Mo}t7R!Jc{nXX)yIC& zub7piZx<7lx)2?~mTCYIoGd_n=bhO&vcZ&1>QIedUvpbo6HU+_(bYm8tvO-qtNVLd z?j0=$V5@B;<@>M!&`{gY*_Ao`z>_Ohn2k-cm}EVS32q76_e29s_uGwYQ1(=x3_?Qx z3Y?SHH}#S?gJ`&4r8@4}I5<09SS#sm3~!_Fc9)vOh&-a%0X{al zFRIg_-_mkGlIQ2LZ5y2#H?Sg->m5TyShcDXapi73!!8nvE^pXkIWjIeR0u#afSR2_ zF_FF48}&nxf2OOLt_ADsTK;jlUl?VqL@L3NDc_-sJ==Q~xBg(R zYo%YjJBLr}U}p^6X@36GE=#-i`_~~j#~W0F8ycTOKQ|oDQ}HJBcdK<}7#ULElb;=++O*c~^X^Yf4lJ`zWFgsf$xKQo{_~W+j zWCp^Yc*?E~=tfgRvoKlaV=Yi0@k3#sILKfeKL<R(*!8p}wy^|e%X+KiDI3TYZnR5yuzZ$*wpHvB6KYWJ6dzukL| z*QgDD&rsY^S?A$o6CjsIjfOyvMsFRzh8vK9BZ?I6L!yUTy)00 zv_`iDYU7l0ggdrUR#xw`>)sthg&mmnJS*i}*zFzd2hbF;skK;tsdzCHdk0wIFXWN7 zdam?`!ODIgn(bu0eeyutj}bDtug&U(+-?F%@<-A-5BR)t%ZG8>pB>%a)d)?rnXg5W zv=8_<_%S(G9Q3$1w8mM0+TtuGV`@w`)Mo$-!)^ED2O`2W;jJx5;H?F9L3)%i(#qlHw)tQJxnspW5JS z+~Tvf-Zlj}V1zbudEpw~`{0kx>+xWT<(Wp)*V<3WOCUC$)i(OPwAD~znrenyI82UM zSTyG(tMsWxfn*lwiASi5>em>-SQitRvTN(m~q8aV5xp0Z*W{!p=d?YR(C_G>8JRX z&o^2w3-60%7@OI6kL6?1Yry7N|WDf2!BGVqH$LhkpEd~VX$Rv0U6RYBlopcBc_mfR3`kV2jZbMSjRz20t)J+TC)>P*-ib+dK{%Q2 zW^puh!#wYi`ir5aQila)%2Mo{)hEsUPQe*d;9O8__y~A1(sk|4lc5$Do+rq1Jyk9h zk-Xf*2t5Fx>QA+vD$_%#`bG?hYfSHbuP6i*{}eHEWO@XeYq5x+%oItvCzv}Q&E~}M za)Ezth%``+_9g6b+kI27 zHy@Ef_N7~U9D@H`6uAt}Ur3|qU93EbV%)plmjcee`_|5$JMjU?e*EtD`M-yIGp(Q5 zOjW|TS5W_DflciH_v+REl(GJAb>J%JTS8Aw^qEz_{<{iRk_bPcq3-)8I$hQ$T}z{Z zH8>sTcL+^4GWuFp()wXRzCGj5u3deiebYaOz*__o!i=5;?KYq}Pk*G`27pPiij$;6 zVwS4Ty{-wbn~u{lEvqxPQg~osTz+S|0+)@q5>b(-Onx&8*|mBIZF(Q=q_^W$da9GV ziQ|jpeVcBo+JwZTKjXAv1Fc9H-NT)f3?3dj#D%)6Cv~TNYp<~@%xQKTHn2r3*Axo_ z%d`}uH(boKLcyXvXF0^V@_;q9RTSOrWL_7}<3b4$g(2(VD-4WPYViO|vyeGqhMWBY z`E|s?;a+6knXUSC;`sVrhjSUGn9T*PthLP_gAr1p(?-s*S{lEf)+f#1gqf}@Od(>- zQ2ULS$AU+dxX|!eH>Jmo*K{q+s+(15ebJd$vxA8{G_{xe2GV#tw7bz&3}&=Ju7)t2 zJC}AE9NF}*w{*GF@@7fZTV&1qunyMvxLe5carVvpm|1a7-t>I+Cc%woj?~%7$G5El zks3wN-9b;l6(QoomIJy10Nd>L8qHgKwr8+Jal5P~=m6PLX#2$E)+g%vrp-S4eALV+ zfFOSI`g}nbEvjgAy@mWtT#$hJK6B_p$M+BGr@F;>&%hCImLlKD&uvL$BtD!}0kk z8&YWvHss2&hA1}6P!9eObZkzaj2mO*lZNMZ4hf07h!0lYt_Ck5C~1fUW#n^n3A?n1 zL&~2*t|ta(5wK~}-8bCcg(B1Ok!K7`EKk`GQ~zDhoBTK`;^HAPCA&~%V;*wNQJPN5 z{w(sOaNkmpd~z9q;`eS>l*M1`=cZtZ0y&Mse>bN2Oz#KhL8-ltJ8eHom0k4^J<@P* zT9Ucd9QMS4htb%fnqgLtg#UckLya3~P5Da%c^_zgKHgOI8Eq~qV=j{(D)TcM4YB9S z%!$^Bm)h{)tZu0$>${)N=7)d~}HQZiL@L(NSM)`W$JYieBb$mZW@2#qM)hv}`Infqi4kjyL5zQm9;e`JW0m6?+)YT4{jqP__WfK|4dBSzP zx61&Tg4Y8TQ$lk1<INbL0gj>~&F@QrSfd27WJi&4n&jW0W$Ju4scp@hvJetyBY5}k& z5ov>u|u2)z+dwy*bN@%DmX4)i59C{YCVSMF#N@WG}5`Cvg9A zVF>77y`-qdi^IsK!CAlcu6ILYO+pgqMGY527aQXbg+-@Ce9F>hx|!9#yn*CEeAq8bI z{-HQ+;l)StnC!GFjRabcWme$@er*Sp@kWzJf_LQf?JU%lfG>3xTCG!PE$`~fwzre1 zWT&IBTFJ&MzO%v-B4o9^KF`v()Scdjaq9l5sIWK`9=MQx{Mvs)rTxRNpLg(zWM>gw z)Mn-rCeFe5!8`#(_`_B2PsVr4z;w=gf2vE=-TFQH>BnJ&ZN@v)n*8@kTrD62)h}NL ztrpySD_no;R4nZER-rt-!L9B8^eT$s<1NCoj;G7>e+FM6AV1!UJ?#L3KLYmCL&TR) z7bNz_%m3pb!v8w7|Ai_3KcW3^Bm6%>`)3vZ)8PNFmfw*x;QQM400u!TfebCj=jBQI z)a?xGe5tv{N{&|UBWX|QixnCn_VhgB+|!5NL@sOJ?qUyX)#&M56*5k4CkfMj9OvFE z?g812`Hu_}Zg45SoprNsHCIY6tKhNIFxIX=BP=~3bD3TT2w#d-Y!&N5ds@u*SMKPo zGG2RRk?fCaDeeEQSeaDKxmQ}844ihoaBp3hg04R0O2gfRupr-XRE~i3$P&5}NcLAc2GyLazeSYv@fnq4y3Ge80QqoA2J4 zHFxeGv(~KnC&}~VJo}typSJh!?DIQfcN@nIc1PZFOC>QspH7%Tkhl6 zu)0HWCUk~*YqQMGG8JP8Z=a1NxrxmLE+RNCKIZUhaX0CzSAc%FGV57K$scVge*ZGJ zFdDbt0G+BegOgLUP5uoMq<{20Oo6j`SK?oVkdV;}zKf2I#ts+6j1(DqwRII4qSaEx zJ+)L+z7tbCeviO*8}rQMdTJzlS-yi1$WsGdoq0V&1xV8z@|T60EmVwo16oPK5RTfB zIUl?ax~#7;&jYUDgGrY_XxcbRYVxYGzgACKIG5(KtTXoz z(6pdw{D%+`Y-c!$U^T3Bv%1R4HFWpb&wauc>u^2^WNq25a{60KkJ+9-hrYdYg@q$M zPL~qW4^T2!C)w3r+s5VHRgsL(@zS@y+hILqSt1x4^qFKkCr?oF&KCyR7J45YfI34oq{U?|~5XadA^j?Z%H7;{oQkwP{QVolYF?Z;*wdG`I9v_4q2DVfk$&-(_!4dELSs=#q9mfN*<96mBD`;qsCqN?= z#0ba(Djde;)Cz8%?BS+Wf0Pz^N5vtys2dASdIA6l4gS#DCzUGZRUAxrfi9|`+k1Q) zZ?xzyaVy~RaJ2ep!rpVgM?@Ktm6dg;fruxcr$1WgY54LOx!MHmdUKx{yoZBiD;%~v zXeBF+O}>NGThf`J=WR$%VM|Saydp2K2$0U`{>wV8w06jM7`A_LjCx>Cmj}~1@4jaM z7W5jsBej3APQTxqU_A;rHTt(R^}dRr7b^d_YbGZr$Iii_6i&KQic(LPkx+^z6o)JRqp1w_g?V4S{Hnj!DOz7LoCw=)xR8fm#uox=4%FdMTeaoE zS+c-AtH*;CL_?^5+971@oD~Sf_i{xym}xr0utn=z$35jtMdgDjN;UG@q9QwkwF&73 zfx0?rb{X*KN%F*W01bEfO1adHa$J_5d^}7Ng5-SLap72eL)HlMOC<)K7<`U@{tnW8 z2|u_h20)&vud@0am>eF?u2^$q&na;X1f53#i>fMXe=8qsn|iHlwd>!SbDw6qDS@c$tyxkj zJkGa0ArzzQw5t8L_ebm$+$spRl&bT`sj-(X&Yr>vb|rDlOpY@S-ja~Vr^@mmu$DHK z7t^j?kGVH_#JT&fn%@u7!i1XzgaFs2N7Z%eY$$Q3LdVtysjSe$NxO+yWVy=%&!%dx zZdwasr&9>CSi0`90t^^x&9s)0J~l%CoeEr>z9WD&2F4A!(={MPNQLvHQqfHr@pwKS zG6-^1o79ZRnYpmv+{rNd55wXA@%;aPuwwql^Z$wcxH6b99%YxgZ_x(_TN6u;~Q+6a^PP@()iVMw6u`Y=_XBJ=>z}p zStW@(33jB#mil|=mwTtaL;;tqL3}rV&oz_Pe+}3KX+v#0ozPu^Jz9=LJaKqNV}t9* z=S#aEVb22kNpeTh~8{*rPJv@31P1YvAes%H60OlVV42 zyBc2&iln$n`9juA)-kNeKIXyp(EQsFr=lfJ%pXMV;FQ4_(ZtHWy*^~Pnxv@yCaH!l z(0Ck59r8VET{=$p4i9Qk{{*^F_7-jZS5V81pgygFz6;sCzh);+VbbJ-1v%gxb@XZZ zbD@kDW6+B!T)Gy)Mk*=U`Ct1K|Kzd7*|-=j{Sn=bi2rK?Zy|`P+_IF|vqnzpxg+n; z_WtUDwWsni_+W9u0VIxle22C~o2Vgb_6g8rRtL!;+*;+}mK0xF%I&Ch$7T=IAWW+g z0oEtg&NfpAOvld{E@M1LMFHEftoli1Q*gbZB7URfaRWZbl6fHQ`V7N*+_;x**CfnV z0L{UTKoggfL~}_i+>{glgy2rYJroMA{)PSYav~uKPDTea>c|y#6&8vpUn|+Jo3K#a zTkeZaj*EwLC$g?|30=ffET5pR0@W3`6ieB8gx|$cY52ZDXkDJ-e*~vxtBmHkAB!ZF zF6TP{ePH%EnjrJ5QQVl-lDiz`p)*}Z)}W9l18-2D(AtyTxTBX#GrHRQ$!iTJQ#tc+ zmM+J?zF|FCfk$R5QIMO7Ut_!6`?Y`%hG)0Cca*6g&qRhBd;rrbFp*`ScxhP*<;E>> zLxy7WJ^;ds;8s#+YfbA|j#aXe=wi1LNRpR^JGzOM@#ZxjL3GdvRrK4Rg98o`?|;I^ zy`d^Zv6L3ruN0bg^LO)|zGbTFw`-~G&2W*=Y;cz_buItk9?P`sisbl*{X?1kK@ks1 z$j_kosjRkd{4;HTugVn5ilJ(~b(uuCBSIYOWnY%{!>nv%H7<>%yqP&iyyZFeFdjsN zWXzjP2j*KC5+0`W8=z*fDgvk4PxTL{bJfrN`)kJ8E|1m0y|-{Fkje%1XU-@4HLul#J1~ zCjvxcNkeKqqNbW!qRCzYJn&8a=5BY{W7Dq}BR^Y6Pt=t}SA%jHR`$VSUi3T~P#svR zmJ?IOjf1iBkL_}D`amXRE*!#8E#BQ~hf=M(nbLsV|gf8Vn5s zjPmNLUq_G{CrAgxULE$@F$!;xz(LXTlI#;G%dgT5)v`4qQG+q6LCS@r<@1M2@X19l zfM%+JXIyfvLV;qUHNeWXzV#Z@tdmSXHGY|ce`<8nVpnkPnXo#&TSLXmZZIysgE{vx zUzX49d}1;tcQ)Dbc^Lh=@)`SijiS%m!qP;HV+Vh;r)GM{p+kZX31o46&!p}G>)01~y}VhqL*G^U(X@aOuMuNY!rvBN>09{y zt^CDeMWOkSD)khH3i;Yy{0KGCk)WYxS3AFh;u{?{eK+|o z!LC8es`^lHGKgm&$nJOEtI1D3`@0lGrksYMik}2{%0yel^SuRh*$b2;$ZcsaLohgy zLRNs*VKDm4Z}>OFLB_YRy`(r>UTX@mWGNI9w-aI~~i0SxxkP?kQ?s&Qh@ zy(b~x74P-Rq(Mkuc>$?=y|aBV@y%O_;Q}IUOUbIx%wKo1%0TZoz~EDzCaY#0Tz_2^ z)aEPr+H>1vvl9Ir;$&%2>wF{3HVdv z1{8EE|| z5RZtx9tjTo$kH(T7gfJEZ3;_*ixkODfd5qpLS;D(eUz|}j?T2yK; zs?1icYsM$bIZIx}5S|0HM|q4IaHn#OGfY9PgQua(PO=r<9+vO;W3zJ@4dXnf#2wNc zav6``zj_cR-YVKJz`j3rH-@U{WaBnt;h2`XSK(0&mb0vBQ_egvwZ?kgB#KvenkkjE zbDx8=C;NxV%0A3`D}b`;)~HK!!e+tGSFf)Ij0Y4-m);o_KJaVctVmH% zXc>G4h_}#tXJI_8xuYj1A=bmt@->mElCrfJl#A96Thc-;W zq5{(67j+%e)eWD#lfvJ4?|+Va=FR1;{!#iZ3VaW98*O2G-It8=?$PQ=+|NF8N`^+y z8t3*o6(U~Qd~1G|`^aFUU8{ac5+i&GN|gI!Hyv@= z7GUJ=p$v0EW-gK9QT6&lTp=8~cK~zMpOP;6S=nl5&}QG$($b5-Gat2qEaZt*_JY`6 z*UoqgF_y*h(zs|_#b_eavv={OEo!=@hSV&nN-{qRjW9eQ%O$~0vDg9<)xGwKGu+sJ z8Q5ee^NQq|Lw`tLeU|m|=+NTt`)gTSK3hGL>a`CmP%B>s)lg~ko?MC;qz$5aKf(U0 zp25TVwKIW&O%8_=35loDUI%2q+%w1MZ`17LAg)a1Y|+{4B~w*BQgljYs%pzrM|#*8 zNrYHk_T)x;ra=0#(Vz+dzkb^4LRLfJS>s+>aK@oc~g-W zi26{)5LU%=|LLOc1z1;FB~a#9UZ-0%pw8PKDD$D1$sukwEv5Kc!~Y9nTqUB}k-x}9 zXgeIEBpms5efW@62y_)$CIR*!wxkJeUNYetNGqnP&QmUusU&8E?H|{80Gkthc9Sg> zwdz1U)VnQ4Ju-nle`UdyE}g!8J*C0KsRL_S;j)!?IC$HdBXTSqaZw z96yHMGb%2$ihIR!O6gQQ5UI0i8FMhPC#95NvB+wF9xEbfdM#I-tqdIB6UJr-kPopn zEVC(<*?G3gEvBp9u^Z9VV=e5D#hgy}IeLT3ZH8B~M&nN);ypfUzY(-vqm8=bNk>z6 zRL5iA7XxjTPFy36eas8A?1!}voQF02@AT=q2~!HN`h?u&zXN5*JrZBP1QMysTZDANw8T)Rn*?)VW-hf*jWGr;^!S%G26AyJ;jbuDa7sS6uAS*&-|<% zD8Elor|#&Qc2(>Vn+km4UV{#y6B2n9^V~)=xqY~xC)G#j)UR&$q%Mhvee|2wrSx$@ z`s9zA7Vc{IRzvy$=OPZBZyG4W?EzW6T0}ydB$B;PCa;DGTPU?Hl{wjPNB8T5BW7Wb zbTwiO=Rk|7F8TW;9P@hEb}N0-F4$txYUR zS3bPvxnE{Y4*&H2q&7UfadYbhr&$v(0srdpAXC+q^? z@%RpbY6?Jcxq#5WJ_OzixW5X?D)x~ws74?5q*BK)P<2Qrq?5@})WO!OHY)zZUlFo6 z5rP6Ud4~n@h@$y8+oaqH0wX)U#7<}Y3Qi8u3G02gef-WKQM8BW z_gn=AFg3M9%(N440Dk2Tc`}qeZ>Zo=vO0QXufV#{B;Ha{Yry0tlg6*PFZZb_{Df3% zHb7uaQWx8=b6V-d9fGRk4#N8J0FS@mN^HbGz86J;adxz;3)__bHy}X9#@D%+X3jOgnsy&edWu~&VNj5rekfBN+&n@Rm*e?KPj`~ z(N-LsUHW@VGUYDbDu32du%t-QYVBHlBk+~}{grq`0T&9np{e8YN-Ylu1I6Fzu$0E5 z4gQecmlvB7DDUW5V4IT}AdF%cj$L=VdGA;H#WDgJfY8%K=XcqXtz*8W;|@zmQV&zo zoxx{$N%Hj7xro&4zgp}3F{Y7hwmxC;>%3faAk)zPRLQf_zCaL71NwAydSMX%425_D z=e;RQEFeLz!nXBE_G-0yE_IMHw>M4w+6mXd=3h9avlu66zDx%zaQ#E_rVw~bZwk~u zdvL5VtqnO!7b%jj7AG)zO2b!w7ywEOoC#~5rVQW4B?~O;3k>+WUqSS7kXM>p>Dh(x z9SU%+TqwTkS*wEOjUZ9yR5bocUMwDXg`h?Hrr59Wq;DtsgL=OP`~6)5{vRzs{_oIT zLCB-lGrw1>Yq^g9IQ*Zj_h1`Zt)AoYbyU|e*3_MKLl_xm` znp^0gocxd=sdgIKL!`Z6JkmVuiFttQ!vCHTkUypkK<6IEdwWg`sbM5672}t=jf<&a%Ol{#UWMI6cac)~dJ%rnn`hyD5B|PFJzn#+tm7t@(p1U6 z;V5^RLpGR0&#gc;MOBr>(PsmU6xN5-p1Lnukx zC)Z*nqDub(*9q{)n@L-FF?6^#br}II6yq>VNW;?G#!mmdKJ?)J?NV^c!U#Z9wIJ=! zEv98Y#vjqZv4K+WqfyD&vjEAAdh+J${=GN;AC;%s#15y%0`hlVwM6v21UT&hch~P+8W028sYRo;IalY z9EBP_RavvCkmpjtY)EQD2|DlcAHE5BA+&o-N90#Ow9vd^D(2YAcE`#&^zglKh(i+v zw;@OeUlBhUnC*t1NY-&fvPk$k836*YaEzU_9EaZUQx$&uZPO}P zsdg;wDqGUHgo)mU+D@%-mhZkQ<^S#iK+LKzo*!v%Ki8Bqq%5}#+Vb&59N}d3Q98zn zIwD3k6m`=cAby^Qtk?Bodb7IC*dz*5lf=!lwajW(PlX>qSm{QXRI9+>+HQ-C7HOWN zc2`D$0>PtWmq}#Ox2~%FE;J|i0*I7EX0T+ls#tKuQky@;(~jF2kYG;2PXkD zI^8Fk*hS&aR%@}GAj9)zq=s9KQ&#Ifz#(_hCcY=!J;Gp*e0sCOe?L&!Wb%bJkG=t#&#;V<&#iio z`QGu0?PBfQr3oYcsRyiYaOPVVnS@;ao&Ug*Dxa|kYC&bLX{-LyaBX|`%ct&L!Toz5i~`zy*}rC@k_7_9}y3Y7F%u9`Zv}pa!W*VE?UMY zqenkJMgEK3QI&d>iJtmvNTHPS;gNm%dOKB=#n_S)#!&Ve^IC|jBdzo`^Y_Q_*1OQ= zY4 z*E?cm76XI7*I(wa0sf9WS3~;puY`ig6s0edC=ICG3`a`Vpd?O;TNjOS_xo4Bm;=-7 zMJNVK7a*Ej{tZq>E850YMXJbonRK|&CweUAymZ!qS|ahkKv7h+|3Xp5<~SUi_c;<{ z%JLq=%%tBRmRyvIl!6BEs`b~hcX>Du^~!Mvp631IOH$65FT%X7ao?>p?kAP#0)Mzb z;pZd~^Ee2seCP*gfGyZO`;*hhQ!yd`OJk{;k!nLjzh(nKi-%U+M zCqRpaXzY|*tE)3hRU>09eH?#D=92p>rk968SWFX*eGkYZ>Q~9hi_$Y$og+pE!_)io zj)6~)2Qc)9a}4xVwYf9Z;%^z+>)~q;ylm#-j5=b+f%SCaI&?D?E47Zh+U@pA9x{G> zrKqQ|ML_K~+rcEM>gsH5cVmCU@bznL=O~BF-?fBE*JIi~*zlyJDR_mES{_BwIRK;J zn<17bS_Pq-P)SYR94%9$~R5qoku4tJ?1kqwI();_9-V z(COcVrqM9tjh~{2;@iXhY78C<2I_u?tAOv+xJmOLyaXoMtDxEJ;1uCxl7LisJ$_Hs zICGiO7kF2lolcj6xugj83Zo?`ArDd$$yd`{PciQ!b`+)mLDtc*1C*-DnUi%{%zwsiG1?cVXH6Xi#m^3NT6I?~ zp{c(QDDYjjjQ@5Dx3Xz7mgPG>=34Fbol>L@0h(s2eXUA`aN#~k4n-G>pE<`Lr&L^{ ze|je$YT~G{HU9{oJr1)Q&^;z+$QYqu_iDK=FV$j*uw`J?hoG_4*clf{nlTeE28oR1 zjToXFj5YgjM7O!mB5|9P%{rA~ttv&;1_S|V)QNW{kKap&!_!^3RYoJxZ+A)X@KVIdGiZvEd zT1Sw?JlIhdA6YuZRZ(5922oX~GjQwDtwQ&d1+zN>S{Xj$R21U|uZPx$((^eMK|n>A z!5cWN)WX>%IgJjKoK!;{m&Spn%<<)3V5t^9^yPG$v#Ds6 z&zCWK6q_kaO_xkKr#}1RSlNYt4AL_7YT0_#_0F#Z5Sh%9Xw8Rb%FgZHQq0hMIssSw2;BtYeCAk-_ zQ<`%}af@Ut%XKMlxH7xCCT*0~z7(_ZTgz{DReaiTAlLHi;W@+7@QVtLJc&2d{FJd9 zCC?PDTwOXoBUe466e=3!BfzW5mLH!P9<7b)#~}@FOo*M+Mo59>xjRON<1MYoOHcQt z+(dl{Z(-77;Q~V;Ssq2Yc3v+CU!#>6LScW^P8C?Gu%@~-a!KAj4mXr?j6eRaj#(88}NLk3bH)^8BF-hJZ94B2J;lyquO zJLzW+DZ0WzXPK`52|AMqAyu|iT&caZ=9q)!)q5GkT95$XIp>tpO+UyZGGu|Jq%5YgkD)aubs%i3bx zM@!$w>dIAFmc0p=e{($|PI&^ud6Xxz{t2= z8>$3LBenOu4~Cjvg_hLul~6=fP5C!FzLLu}(p`xDT84TmqM~rhB+t=EC)xfq4sQ0cJ=%H$xEbCHx6dzRjobV8Uy|KcOxGNlgrD>rwV z4N1$Yts~$t`-()}(N&cA4_n1f-FdGVLAQYiz`+GOO!45s!p;+)i{#Ipaa1m?`D&ZR z7hWc)L`0G6EB8ES_DA4U+yr7g6i`3zH?rNJbslL~;|gnI8yVWc0n5dc@8~3iC6}P#Y8?80?qz`S*LA<#rM7sq zW_tG&th{oDzMo?;$64mXueDO2*JnQ3k&*twD(XcZYja0ZY{cm4aG|4CIeJQMK*_)W z$#ITNd!&cHd@+x$7Fz%i0mXVLXczeg)bZ2SW?jt&b3Sj@P&245_0`(*j9UN1WBq`p zFGEGq&Cw*IfWdun%T;^8Lw038YUV1Ygeup5yFq`5nHlLNE;67^ju>cBXBwDfmWKK} z8}j>7036&yf`1Wpn4^YLH+5H0*Wg!O9B*M-I0I_uSeO22;DwX{xYBt0I>V=yU+uF~ za@Nkzr0Psrce%beH}xZZk_Me?-?i6%2TeLshsS*4Ts2cAo}S~4D+fE6Q||nPSx}vB z-G1#>@@lj)gnCj*mbgN%(gAz)>lLFfj#!|^lnKnHpIFK%2!+z4sui=-usOj_vhivSy>@y=u&xll z95C@lKZ`l@h!DkRUR>}<;B3=>jr|Sq$^7){m2|p#Vxm5_ivO(%NW3J znq5TOUpcawsYw?HmqxLw%Y_N{bO~)BFvneaMAG590 zO}O#yM3M5jf3DEv@w$cqE{+HERc=%#o5{;oBPu*Rg1a|e!K?XzdZL_7U%?l`oddBG zwkaGzGbJmdPb3>#SLk`FfYw@86(jeU^E2(?HjO8Ls>Swx9a8lYUbtGZNS&O%6!PDE zeQ7TTBdjh}W(=s8;PdWV?J z&>Xm&K=C}q%l05BHr*WlRg*rf@C10UHFjkQ^4DJ3I;Fqp+clW}Y3}KJ-1mPU9MWKt-_cvuU)*=| z=l#IGCQD60H4~dL>znId>y=GF#oUE`8T&R3Ppj$7o7dp)HhceJh29N!ep|+rZ0NAH~Ywn+5V>aK9NqR zk#hc?f=dsFlBrH^LMH(6x~vcX24ZIvp7F6~z|FbFH?0bS=d>L0g;li~Il$$AigOcp zr452^fS3%j@pQWW?vLpsc?Q)LVR|?O$&S>e0BFh4Ks1KPp9^GiOv!5vrKqdt%Q)ep zczBcT3)1M zHom!APxJsIxQT{XcKzvDbz4v$%`9oB!)nxM}o z&-h&Yu=&d;yHmDcUoaNbbG=I0W7wd4K3Hlg)Xq2jf<`=5EWI}{Mn)& zDxIDD9)oN>pU8fafFD@0?3F=x|Ap;8?5?dxy&@D zz_T}+m~||q{&@Y`fDxQN5*c@9GbqSC3CUq8r820>OgcQPVX8zpm1x8j#mS!8FA5_a z7`I0kdbbZd1|27o%{!RfQB27%H8w##BaNS8%BOW@8Mkd=E!V)T^dTt{yD|MJNk23X z@0fyB8wK~zm$Km_&Z9`%wY`%Kl5j*pB@f!J-!XxG0^-j!ZW853i?BzMjs~+%#!Vgw zUz!Y=2(HCMh#QrJ`jCUQynanY7CBE@^cXY%&j-1QA5({t&osA_61=f&K$(M0Ff-Rs(dpS!Y{4&c!_JeiI`5VX@}@P1oZ zO8Sfs1$)e4g7tRJn>JfU#bwl=~Yc*V_!#}wg74D2x zjvsOC9&u3ko`MLPo9`R??H$^QsfUdZzR0Df{rl+mt z@w<9)xt@vbcmyVVr0gOO7Up>pTXCdaS6cv?=MatcuqkTmnaPk~vU_4UL*d7NBIcL& zlP%yKE2dy=aDWhuT7#nx8k;0lAA#!ZE{M3pHgQ`d8!x$%W2a@^bYP|4aZU% zw#80cFOG5mFFDTLvCMybfKhTFTJBjpZW0`?49hvjcr7EBaH&5JVks0>t@aC^I)^F_;pBBElFbjx)^~-UKaPTpq~y^*i0;m2~ax zM?8xELO$GGck<cfeAV-fnsyCg~OVA=XbnbSuT0!)u+m^*lGbWORKAeNKDv;uyO+;-|#>F@oC} zUjMUJHzeW%AmF3LYfh&MQ2o)*E8LR#K9p;yPE{gdHPZG!#rARhk7E10_JnzH=vloi zzJ6)fCMaFok$&X0Z_>Jqnnbh`i9U1?}0jV|Q?$)U8_ifVOHo^)!w6uPw(NJTK z*~*o`N=g>WtZ~9;58voNEmer$ICpw!72Ndle7bi#O5Y({!!IQ9cz^e2i2YWT^{H=f zo%?M1(&Nr!@2KNsi`aZtzNG29ug9A#mPWP57r!1r`}ka6nTI9K>GK7*hw!j~&Qxg1 znHy7&NEz&F;|Dz+UlG^whgABQMY*3{91{sENuTnt7*erfWBetht{-hlfko|xpAX(L znN#)nXip{N#GVT5+l?`XjxN?cHmVP1*_22#RG&2^i(+_<<`s^113Sy3XM6Vj@=7*r z9$VurB!sF&DYBIeGuFz~-aAYoKKdy~wsFaBKXTppWt!W&2y$4PVb|^y)GFD8pnU%2 zO28T!oz~b}Kssjp0s?O4ezeTDTzkzI&MDQ^-eO0Y#MD!ZkKDtS^Q&waMN(3>?aUO& z`(DjP>Ig3A?_$HrQd~I0(+b++UCmFQocPzD&QUZEWt|?PM&EgeR4)5X%2-OqgiHS_ zH$A-j{Oji!nT5$iO+ni~CqsS*?xLdgyLhZ2zD+60LAC^j6>Sg4%AF}9L_u#_NG-4X zN__|jp{dYyu(>U>W?<~BbZ%cw`orBNytCu_)YA*?6h8(}{#|Oj$0u_ylEx(%CE4IVFDzWxWqB#WNdOum=3*#5PoMg_v0!#EWvU&T# z^(J@i&xGs!SN-dIVR})iPf-jzzb5PQoo^d_(H_?)U(OM3VV73E9) za?!AH9#KmDFA))he7?qWM!W{NHZvWGM{=?>TPi8(PGeu2S-v`WkmM79uZ7#rvvk{> zj^C5e^|nay!5neC+AYH+MC~p}&rXb-OVRq>Ei$dp$(oqT@DWqjT%(sMw2cZc<#+`0 z_LVBU5lzq1sAF{93pE&xoi*nnp8AlZ-LCHRanr!Q2XB`u7;QXyXbDLFAZXLfX8Vyp zYp$Px1Co1YW~~-bwAt7)BwwNJ-R}n$5CL^ruLB;?Ta*6k&!$k95x=!0!Z(DaE7m5F z3#BZe>Bq@}-)Px3|6vc2Evp1pmJ+&v_J0#aF^-!~%4un}QHVc`#6=?w9_H2<(O$Nt za{x)x-mcvUftur~~vi(*!b*e8+>|9?nqX}^P1JXo@sVjxhL2Heeuwhk=4=>mPwZM9NE$IF6kI$vb@ShVaiQLk9r&jV{^*{ny zn<|RfoABaE2(`7SeUZPv?>i?FQ!wk-Sf2mv0*0R3t&i%z;637d-uE}#>V03~D;{l0PV5qr zPMOE3f{ZA}PZy}~h!c`JxsDh%`+0ui+RFnWbJ5%Gl<1q1o!-Io-Ji*98B^7(626U( z4{B@)jpr@FCi>_VU%s#+y9@@f)t#XHL!;G)S(?+og3nJy5<@hb?7-F*?u2c23G{B5IHs{P^_o=I1|iZ5&;7p`B_z=EsQ zy@ot^q|rXwo0IK`m4E5W?G&1{s_EVUhVj$Ff>h@11M~OZw?7&cN-WoWaB_bCB{dqi zf#TwT!(y?^OtS6+4d)<%?QqqprPJ5>M%%uh;S3C3B!MiqDS(5YZNjHpu$OFnjA}|F zus&d2TAtVRcMVz`0jT^7F6|hO*EEI8`2J}}x7ohC|2bQP5`9lbA7c%o5Fe819=?}$ zysP;M<-M_08c-@Pk$E^dR8dY&n)gi{;-RR2OPqhAP%TBeiLP;~D%Fo^AJP^iyI$co zOf+J)l<%%!cqToW27CTKrq6}{uCF|iQ_*`o!h4!BJs*a=^*GccCVoX}CzNb6OS5vX zu~+h=DcuasvB9_ToIs9JK8NHQ!7_2{vF%Q8es9a{O@AtPk01;Ud4GQC;Vg6 zvh93_KG$aaD!zfyzs$az#m-cA3`eEPr6jU6utiefQ;UT-aJ_&lVJbb^d)7U) z`tHdQ+L^9mM-Ve1k{O%WIN^1^KZtC9N9gNs8p})jbNtnw_4&zY^W;%RjWwO~y|hjk zOK1-M)-M}S&sEAF8F_7}k-QCZtemC^zQVu#v90``NjFE^y|Z9c$8%9KGB5s69@U$3 zGNZ2<5Am+ajca0%{t@QRJs-As0Y83!;Cyf*ni|^+`)RT4pllh9x=+;0X=(iCi85e|x$|z;e$>!U4Chh&kI`>gpjlA|Ns(oqE`RJgIYB(Rm-MBonzAS}pkHu|aob z6Db{?ZpybTxw~$yWnSBKD%t;FUkeztG;EuFY@Yi*g<$=M)~#-@WEuS4fUQcEu>OmV$cvr9 zkJ7flR6WjwxtWA>H;3Vs+8qt~m*{xs#+IV45A?*FO!Z$Q(xnvowu9K;*Rx-qc`P-8 zXZM@g9{7%wiEM`W%Qqlm?vik}NO=usts1@SDv+%s(*c@~e5`P#SA8ctLQ;)*1Ae-WnfPg#`TP||yP zu6<)GRpPXa`4j6%9@I%~?cVegtq6kmZ%F?9&Q5J%Z@Bn1|5nCMYAEP;msLOj{Si1! z_j7~U+MkaUX$7y3opOKfPCKt0&IRSE01X7i+s>pELZ{2V`Y|zlGNsNRy?St#DpD(w zKi%bPWW!-{SsYZP$@VSkc6fkkCji-b+0$i$xiT3S)_yPGh=2QnV+g+AqgOs7lT5)h zSV3Edj#%vKQ3#cee_OY8tZ@;Z{vO;^u#}?$hYA|ih7%5)kGu9q^wFv8PLO|G?zr6x ztU_yngMBr=AlZ86jyDG$M@6+;-FsSVCYOY^d(#n6EA{+~RbNAAM^uBw^0H(1m6^x539D`PR)j=d3HTq7Vi!dD|=LD zK^uxKthK85YuLa1o~~ah^1!;ou6%nsRGg&Yrlp@kd;;YV0yB-U@&Nl=n|;^01d~Gh z1f$H zh+>CDWW1P;X(au?wX-O!I*qzicDk8{sj!g!-=mbX@KRV>Dlc*!KQr#=coK2^l@(n( z-^V|99n@C%mxuP-yZRsY_+u~0$XYUjC?lVr>QMg8;HmfUz%yp*lohuR^(2k@w;jv$ zZRsiO&8Yw5RFORx%2hh)OX8Trh!J^H)dZmf%Aks6s&!fWxxf*4nDXy&zfU0{k5%{h z%o{>f*;JEg-OW)3?x@?MqX_=E0YZoDcdwawbyclh3sVOSeK*uc6#vZ`LaXEQCgx=f zExejtt3Rm6sw)6rbUm<0my;so^ULrM9!n{YZ#!m5&tDz=)hzD37xRuzUwv(pB3%aI zWbT^VqUbj+h*{zeJCs?;`rD3S2WzRCi4ii_RfIpiaY_Ir@@CT zZJ)nLC*$1o;F8d2#pHF{I0b>c{Hx*L6m5vHjTw0N1p>&5H14JDSLtu zfd5tvvcz)_QLFvABbI3@riZ+Sih?=?{~@uUR^Zmzh82yID4hP^vumOsPoK~>@uPQM z*Pw9(ZC1R?0e0-ja)YqYh~(KT-gKdIYw3mgjk8=|X?H#bFGg13Cq(H2KOa)txq#c9 zB&RBG5%o=`SRYAD@maCpxdNChT7OoY(D--#-i|MOB2K4n;|deTcJKQoX%0BeNtB0` zWV7wBZ`r76{4fL1_it9UuNlA^0>T(bcf&?A7&RE|8~VKYf1dyQy~p?MU>x`2-krbSecso3-PcLU zedETBZ+K7=gu8vS~!{PonSRah}f9L>6>y3EP9|2cezuy?Z55 z^cM%jeX`q)HVO^Rd!yIRtQOd|PprfR!SFLJ=wmQv_d(1bnV~N*25IjHJ{u!e)3q)J z=Tk1zwXYg|UBYiMCYAMWby2h`bI9S9g$JbddoJ|+AG@3eq6C+fDV7cy=rd+|yyREH zCeNNfYIPD)sxp{cJmXnTk*(&2lbAe2x%+p~nVSOey}3OL;njoi(5{?+n0DFkHimk-25 zv0jJ%A+p7>J(f&&RUXg5un(uu|CLSD2Rw`AOhHv#;R;DcN0MF(ajBXF?rrn`0$6NlC5o zZ%_%EN?IfuUC><#awgsc*?xG%8ur61mu_9q;0V;Htx;$q`p)j{`KDot;y}^B1Ld?c z#=CLUA2(-u1(1hVxW$|m$5DMtk9yq=W?xSZT+5X1-z%nxcx-=EzJaQV2L=tj5NFlo z5VJ0s!J@p#f*};=ne`FZvl=w2{wy-4=7xrJc=56O{QS}Qh)-3%+fy*XM*RORRN7%G zwkt^}Mua!gT3LTdp>yMcVsKw1%GgYJE9&scwashL6%U3s*5r}&(q=^_lWo)@43oWkJo3P@fwiBo-BhNIgYHov(+y(?Fl-bRT<1yLc5&6f4#@Ng()pj3p&QW zz^*eP<`{h6Z6hgEu%tYTZz>voQB8%g(1c{*R#7N~9u62#S4*4;!{VQNd22 z6iM~!1P&vd*m%L#=JIqbcJ;1afk}Jsn4!@10_U`<%nv51HWt4ltzmTXzMMA++pZ>- zb_P*A${vDN+VgB>%78H@6t^jn-^XC*5QP~}^LwS;)&hJY%P^M|wZ=p8zc-j7?Lu81 z8XfPjcYoibQ`<{@^qIfoe0Jku(1G;bTjj+} zDrHvoYr}<)!nBlyo!U8Qe&!HaLeMmsSlX!R7HeSze(CG2LlO$D!zE&3FRp3-US0AY zVO0m$G84qV!%vfU{V)H(7D(Q0Z1?FQ!BygG1&{Yl2}?PNMlO$fnp{Zs8%^fQp z>k|~ki&bn+f=0bR!@nB|g^Q7m(ewUUv&NsbNeB@ye7k-SvS}4)ZMPTTeZ}GE-PMTX zg(Pjl6w(hb&pH7qLwy*FdEl(QSu(1qF;f0xPqW4iwer8N`(f|QRlDBgbq zw3rq7*1unm+vWLp$oSut2J{YOk3Rg%@+I)9YAqb?eagxhsE)*u{(+)J-66la>3 zjYq*&@5_&N$4L^ymbdVbvgdEvmyoi3d+|5_jMA5P@=WB!`bCHDV$+dC?)o>5{A7RT zpVGAqgBY@|4~&)HzVmI<^KWeTm1`>TfyJNTzXH#TawzTgEGrE6=WnkSvn=F#kUM^0 z@Q$or-}*<>74Ki+fA-Ay;ZcAglT*H$kyfcD0G_xrR?POB1(a;-@e=ygKj^O_-+rP0 zB8@(iL}l4of(e`Cc%1#%lU*(4j?902T>g=O^en#TPzLt^`0pTnv+hYlx~SmEt}Df+ z)~V#GzLMDh$z+zR6)A;&?VYWcz(3vhYt+6K7q(eTd@^muLes^Iox7n4v9c-#xdDK> zbbmU-bGE^i2-V;Rc0^wPE=~DoFs|Ws4_EY7XWr=A|M^Zf!9U>NKTTkwa2p^$)SPDZ z`TbCjinhvwXVsAmataspR5u+SZoiw?Fs5rk4yN?UO$ z*m|y%4sO`+a;?bt>MP?RfQV0*=3QRzd;>Ea6X=f=9$p=xtPyplOTrt!n02aVU$+uLf@H`*qYaP7mb5+k@zUu~w) zJTqVQNIzfHV7c%;3v+uNa68OtUK4~jyh}!Sp2@scSnpQMjKCbG_$SNK9;zxxb9>v) zI%z!oXn+3h!HZeF?K%Vy{D2xxi61RARXI#kjRs20)e708`01`(-?l+~4}*c7=Rdrsc zbp?S(=Oney!1o4k+;7s>FqS>JJzGTE_VD{x?3<7-+G3^T`zl7|?4R#$Hw<4)3urL}p{HDf;&`ROiL%7R~hSXbPEC!*}4jJhdwj)pO%4OH;3s_xYK z6psPuz`IB@pu?S+hPi(RBztZ~4!Pcr(Csva0g>IDO!9R(iM4G+d1{)Fz=jl9wHEXPa_-2@A|o*+o7t{4@@In5g#Q z%1aS`j({FfbU1p3JH)-W{ElJvBWlwXcy62tkJ>1E7O`r zQU_qlYUW3=EOUo}@{aeTtcTnun68d&tK)*<4{Y0GtZ<7&xUp(U$Xobe_b0xW8QlKk zug^k47F+kMnMj@chTpT~W)8R3?5QXROM{wS-GS;PqapVKt6v{5GFQSz z^(FDXA;c&v^fQuh`{n>o!8Df6V^dGE*$(edS1<2|*DQN(REC4JuaUKOyd4SMiZ#h^ z3Ojq6Zj&1>DlD)3Gkr6K-=Ky7Cip_xL8ZBRdW}tPJ}EEle15>Txr{2KasCBLY2bQY zK+>IUkarztvHG^5TfT zE5AgIfM<(QER>d}8--r6mEAK>jQ-}Ri^x1C*7iAAZi2Ka6>vugV-IdL1XX6 zm>gszs^&@U*>{%CK>>Exg(U0&EQ{*oDh^+}Pk^TkOOax^A;Tf1puyDoWO{U+XTuPY zu5jDGr1ewtOOeaMFjVuS)K5O|AJ%HE6iCS1+s$UlzC0j^kI+C`9v@>$eQrAMLD6%f zUaAGhw1l#2H2>iZ&@yt!Y~5eQT2(((6)0OQp0z&M$B5!B)8y;;*}sbFxMz3f!F!AK zXGecLc7H^tNwgoF)iIw{w@p`d+VtyWl(}GDHigroZ^g21F>o^bLDIpSV9cBQYR3|b zi=_TuloOR=Nv(N7UT<{EDH+VyW~5Nuwq6&)BZIg9=uKR+loIM&fHO5aE|eSoVt^S} zmnTj~Wo$}Ge?fEzA!ar`Q;E_U>=B!V<=thk+ba#VH;%JRenQ7L?Lbp~h${Jqt&Nua zW&AyXlWL$(mZ31q{+m%GUauA**h()sh>PzB)+TeJlDMS zJo=m7`D^;m1WF9M!hOy|(;1B`kRV z6E3A2eDtB5#Vj@3mf8v0N&@M!K_tUBa$kN76NM$07u)DK&g#bLpIh{2S+U{y{P=I7 zp`xlOGq;w4pW9SwnjI3_8Mc+BB2^hfO+u4BsLw1 z+W>bWH40bD^=IXJJH3o_h~*N475PhP;y^P8C;>= z&_g794z|;kbQAs$vOK+clXp6f(Au@*8i!^GnB`_ERFJVze*EvM!KuQfpTw;3-TqF9 zYpHXt^}C*E8`RaLR@b)yYIG-rpJ<_i*?^{ofAa;1kZK(ZG>sXn3VCSzgv!29p*KFU z1h+Ao5kz=#^~#_l{HrlAJDa#F=XkC$lsEG*cH_|ST;)#p!_2HhJtLC;+#58U5 zuigqS&*ctxc00CT6d5MtR}Z+qoK}_jLeykmvK#s8XCSrE1CtwB|A~JN7~j51)%%rb z$BV(H+8GO+EH?%_T_PA@M(Mt13EBTQ&RN0p@O1?HcMWco_Z4nIUTr{1s_xB7OEC%* zx>}(>U=H4+K}sj#wyWm?qiKv7J=1zEosN&$2yVnzd$)l;XhK*81g^8W0?QX*<1H5l z&6*vt3OGE{sr-cW7WveFH$lLL zfQKpbj8taEwZEa&ERT2e3aIjpk~(5DN!Z?ggPNx4?V={vpzRWmemo*KJLRn7s1Nd+ zhbdh)vMyN8+lN(i-Q?sHQis`jY^-dpx)-N=!*`|L*>9S~`a4Wk*aq6 zwYoG$q^}m5w0*A|6$JDMsA@D32hIGJsB2F8KPX$bC|t&?-HTsrt*K0kafIUIc#0G! zqUI8--*j`J+1u^t+#5EpOMbSm@xeLcSCy7v_E+fp5n~F`qc4spSVz?Fb1_2}#ei)_FqiVu_-K_lvlda4{w&7J+`)jQL@t=WL2x=fE)Dnq6^U*pMTCorUSgQyCXq#`@gS0efo}P za8)?dQ8M*dnf&$sx3{wUx=z{hK`E}oBzLt-3AZZ@y6Pu6>4!ilN?B(&ufcp##CnT>}hg`Dp^WpZQ4JcFFn zOhTFPR5mv0!+2uMf96fo4Moo;wtGA{@_|BiG_p@R_Xg76zY*3E)&g^lJ_zN^xgEp! z!%H&1p((xEXczUHwvh*Y${qa!jNY;c=#xEF5YA*y=6RoklEJLOa5fg_<8dtTA&|WF z#*`eBD*S74+Hg=P^wjE_$#+fnDIywNdqRO};;9+S(p$$K_26m+%DBScXJ>T<(uEQO zCC`@-bpe3KlC`}BtBTMlzou1W3~tqO*;&T@swR8Q^oVJO0bu?=j;bgAzp|; z1eJL6bn>`3)%Woez&f4dn$8~rXFnI;=04|yr;kG^)8OHq`@0m+OLZYHj+Q-b)%Xb1 zcCK1>%ydhDTH41i0HVI810h?P_2Z1)SwLCbmfuDFGABY-2XsaH?>3uIa{Nkp_+z!w zho7IbV0;-sk26^?+q?l1yEwl(Uen8~Wkvd1l;vMjz(2F1pyp}6$;8gM|NEvn@RqAU zcKGcKo6(O4Je&0V|KRYqQ7SCNhs<)eP@ANP}IavbFBorxr6ACUyUAmFo zzaMw})Lj#V)+16BwGOY0|T%yTf`zjS)SKY;AmOkDi*6G?*re7vfkn}O-^V`w?mXEB(2sh=d zU#!n3o_4EfG_|O?6>>MU%HO})Tu3lE>O_}SZHb8=R8@uV$G?W?KmAyTcMNo=RU$cc zmt-<586$n_nMu)V#5S?KcN@H6eWIy=H#W(dbUb|)S_Ewihyto~ZBd^Q_ywQep26=pC-|Kl3M@2sE186-MD|3YDCV^2rn(`sj~Od+l65XeXS&cekjY zN|g(~L$tg8tg&`>?Fd!Xv=3MAUlZWCEIZ_=Sz8J3lDF+{z{!^pW%OggzRgNZRa1D9 zVcB|#MQB#d?_JjWSv45+Q=1p}3a#0#V<%msv9Sm4PWtoZHk_n-DB}GDROA;Bf}Sq4x_2Y zn#&D5M3ju2P9v*h_s#iNuas^#(;BAQF;DB9o@mmP&2-e#FQ*Lcvu8%XY|OkI-UkFY zzQyB$>*6doYTu2+zQj9lyuNKd0h;DD#7|hOR$d7cjn)hg(9Ft*N44B$eo)g6Cr|!S zSl%0od<_Cp>iZ-w=~&OKha}hGAISoSwt)?@%n`x1`=?cgJ3EileyepD`{(M*%9QKr zziaTYz7SG)s4xgJ9;m*zAGhr8C42ga;9@&q80rOK8ec>gwFeOuxzFD+Az{-E2qYN2 z=wb*AriOesP)bdEb)v9$KYn>>l79QW6G^MI3bM)Gh z3QsT7wxJx;+kGb@;4 zko1%L*KU#vyf9o%lD*iM(}lC;Fe2ph)aRcD{+uOi5RiFdU8URHnKxadAm6B^80cXgfEIDZ{5#clS4`gyr`U1n%BEX> zrE>sNzVOW(&`+rutO%U3@?EkCn&yF^?-JTaG1C<#=KYyZeby#Rt~zxO*cR2@9tHbH zJ<*6V_Yg1{)<<8QcVOTFb8i7G?OGt+29(^Lnn)pK4NC{zE9;A+5U2rMLDf|=5@S#G z{B&NHba;wlF}ZtSTg`EVx5XdLp2?#dzMkw5eNva}mf0D>$bf?pO1`ZjvatQN$9oWX zVP+03pu09qDcQ7-54wCTJ^&2gci6le!txFNASqZh;^$lV-vy0OQpoY;&q!7-#=4w` zFqZHRA<=rjVfrI4eg_%_GJDjutkG(zitFYGnAJB{{Z_~N$`OH0qQnJap<>X1$XdUO}SEF!e_5LUR6?Qp)1r==#JVjezdY>vZ z&WdePEi*+T9Vw4_uM_^c^=@v#LL_qGh+5s>MJQs9xxXmIEbjkDNdB=MVb z=kv&h0r#!nH}85$COU_`aQCv|a0SQ`Q*bVbI8*VOB(;k_{JiwcCY%zF?V9$N{KSE6 zH+VFqLL~N7>MHg-#wRjSS?SmH+J9zF zAR==sJw^E;Crnv;(B0$cC6$L1Qz2)NkOfpK5|VO@;i&#rpiCflTQYF^D>5kB$h0)% zz`DdTCA_*s?30@>E9Ym=lYABQ*;lQT*IxX2voU2OE(iWQuNWd29+Nb3gO-LNXHqx) zh+Yg94v@;~%iVCNlsi+D|62LJs^2nF-|a;XvW&E3q3h(tG(_gb`U8X8Mq`@u%Pm?_c+}#jo0|%s8x@Z-8)2drMZ>>_)@@~tWdC8|&gvC$n zT}?vt%b)xGsEnd^Yla<6h#JlXrm};YVKN%;4ppB1xe=jBhEcByLkayPV;N$ZJvS5T z+$}y*y4zhXrDJ7(-G8W_RAd}#OUwDa`n&m*%K>(Ku81-DKbb>&J1x@QPs_nR`qCS` z-FfK8lP^>db+_8j>4re4#`}PW?iwP4bqAK3zGZIumv^0L-3#2o611KFC_z0{dv??lS-b)imv z+y2x9_q;nIdJ_-v)`rbRyH=$k&or$S3lM>lOX4(g;<4*06dqI`o7z*4FnWt`2Y1o; z_WD8^D6A>WQ$s(0MjN>gML1l2h3T{k{5{g22e5d(urUHF9(~(kWx2q`B}jgP^miQ2 zP7(=1s}{~$yuH%ew#V+rT`JESc+R4?#q%s^Um6rrAFAp$ue5#`4@7d)GAo?N#bmK8 zao<|Xs!(_tVyflHa+WA;!JIqtQOhqY@X3r*7aAM5YvHO;<4a-gRFiT>DgE%Qvui?& ze;LlE5RbwJ1OiO%Yzf2YuuBoq56;=j46Z8lS8^57fhhvOOZG` z*!$+dC1QlH!>{kOVj@boiuZC7vu&~NFwXCHox?hA^!ihjWVVJn-NA8CFHbGAO#uL5Uo&7-=ng5Fg zcN%)qImuF!0=Eyc3 z9}zsZ{ru`ZOPs7S`B(5>z&QO(s2t{@Nz5t!q)+VdC%Jo974FT_zv~$IG(6w>TnlgA zd3O$G+-CsXOXVPn>u_7Hn2vgP^RRK|$@+Z0$AfP8iB5@<#ueZ5wn zT{CiQy)zka0+k|b)qDnjk?=Jrdin8b9^6?_|2>G0>MAAEp|OYBq7pxJ>TwGOpik5C z`OB@y(3?9;w;Te7>zY~u6?6}XoD-akBeJ>th}2&4PCW4(mcB}q+0OZ38~noi-Ayan zQVA)Z6kU6F-+^+g9c%6R;}mLe(%?PaVktM!`c2sQU6VT2ZFUhZ9!bWU>`B`9U!kLF z=)%*+dwB3m(h8IyI8!I*PI=k-0`rnmTfNn0aOr_vH`d+388Op06g}byFK!u;o&{ps48zrD zAJ4Si;+Ly`n@icI58-obnmv36jJ>{B{IxpOI&1^wA9Yu1Yg#@y1tTg$hLU>sW2Tnq z^HW?iFhSX0Bt?qlzn<@MFp?A@8iE2F{59>#ytGIJp6Dw;%3i)ANipRjP|WJuhS={B z=50y$9C4xzJ&SK=>=yfv(yFPs;mE5*kOcYg05EazjfKoJ$5$g)-&f&XN4&O{TV%15 zknwt^uuodz6{klP*s4!h&j(+;iTKy;rPlim4YWN;90-*LGUmhMU-uWeZK=v8~w2N+Z?bLtk7r7#pa!W?4OyW`NC$!-eZn6iC?;M^D0oRCUR^MF- z$VZJJd2*K9;}_aP#_3qh0dtV;qdV#8#R?>UHbd#jDTYSAk3MHAVIh#p#F(30qH%4M zhF2P|?Fd*c5ObJg8<-FTCTI^SDOKq832y1olxHR$+)^M8@$HZ z@tAG-seC++_k)eX{{O-fEoFM|ml@VIyw9O$T`byC_z2vkq;0j55HD9C40vPj>1WtGA0?2p2{(yu|wMVKS&|irh7FM71iA?A{ z7FnqwuIC)tbpxwiGdW(Um=qFm9LfkpKj$R5`|Qm}1zT3!*Dr_XLPo*IKkh`!`f#&? zHlAOTp_;g$rXZ6id>lF)!;YERv*fy+w$->1=eY(1@va>8V5n^c!Nl3I4 zbolY@m*c&(dzHKGeXY*N$KChvnspBM<-s6g3J*jk-ZKt4v*n`z_HsSFIDd-`>aV~| zG#JsXx=82g#ErS|#y!gW8tJ|9n+qNhB0nDF%YM9Tz6>QLXhjT!8J8JkJ&MXN>(z*2 zjNgb$_jn0(ohXxq%9hL4H5cgxmj@{g8G==iV$g-DIaiZpWThO;d>=`fF_!|+FuMRL zAlt-Ts^-tggL*y#%|VfoNdw+ff^PJ1|0gy_lbkX&e5wu}b{9tx-Qp)fib*kNDy7)7 z>Tw!J(mcc$dNrNmADU%Z0js~X0;Rz8V|U}wV590bc7v6-3Ny)*E&zBpXzqx5%rG-1 zAR~6UmPbuB$@VCH6lc4Vl&=@}w1R73q{SU6PKzhf&W-b9yZTzrlcJ{=G*^A9x>sw{ zaEa?~gFKT#XXXw%>e79IlE?iHpMC-<6~rN?aLfl;5u#EepM4h7F_a2N_iSGRHAc5-n> zMx)UAt5Ps#eiWJdqF+Md36iaCiT#su}?G))?At&2qr~ zvOpgz33TTIFBBoC*-j#-5Ols_T4zls0fBRAGy#q_wYLbJ79!YJZ8n8eY~~xT3v#H{ z^hzo-Pm4f|uf(YOK=P|~jNQtUi>4Fp3>%ZN7Tb^HM$_vKlc!rUwJgRoe;wAT_eV0z zr)!ZFO|8L%O!nP_v9r@6_+f-&iv>As4@J@WLLp+u$(&C9EU}^kLC2?q<=e#0$@|1z zxg9?@_j7RoEq`6T9M?4!uTCDBe8^~Q;EJN6$iBgHpc!q=}P2)X^sExZ_3!#Nnw~p_ZiZ zZt!SXM8R`l+CIl;hc`b$7VQN)ff!_%0&HGiJU_?E79mEX^I*jGNC=u)RY<}^3O#=H>!Dl%PgISxR8j7_?R?iR=p$5Q+Vh@4uEwl2TPg-g>UjYq} z#GZIo1#-S6WTOur>Pu}{OH=?A3gvyROsFXcR;;U&TvNng%SF+nd>2WIEx4Tn%!(0a zUn}GbOg>m`jLTuIT5;|W0?2pb9Xeb&Mz-#ri-55wH4fv=ZZUF)3F(r@+?d%(3Hwbj z`2ej}W&&%_;Xzx_Pf8O9WLC=9U{o&b{ioFS`sU#;EZGixXG8ARe^aT**7Of7`Sj_ zj+3y%+?h3IamiwJ-%BAyfy+o|E$)IlBNL=cJCr~u<(FJ(iv2u{hQvctESR7rIJ`>q z6+bm?ejcr?LPeJJdg)`3Q4#`?_b8WxM?gzeX)~dEBW`T7YohzJact1Vp(h|nAg97? zK({1K*?4Fsq0CHy&nIk*XZ<%1waMCo`?gsfa!#*Afj|uEh}zE$r(~|Imt;aK>t^>X-~%$V>GRmVHudyo zNwp*nPQ8q(*@d^5-&xc49XI>S@+t<(nQG^oqEqluA=EQs*FW1jOuIyE0o!>n?Wa7Q zHS~uOAvShJ%;-D3kJ!r8Z&t`cI`+l#FIAh!z?nquPcXW$`{yX8c* znu;`Nf3c_(?giqfIYlJQpPynPsC;|Z$Fcj=?0&5Q3dy@o0BfA}G4^83XC`_7{jzuq zHj~!;iwQQLkYFO3Iz|fd^|hjoa8;&1ud2vlPmkMaytsr!eno|Fk-@ml$*;m0|7V?Q zETY&Qe-)(58|!Y*@7(4d{-sifP8gTbLC8|?u=%2l$NU_x-MO5_#n32lE7r@an?4}# zut;z)Rz*lsU>?{cUNR4GaFw=|;T|o@RI3tQIw)J|3ZtI9Xm{F=pA9S}CMcI;2nGbX z&X(b6HQoH;Vt!6ew+m{>Ibg=&e7R@&4`o5y4l9}X1T;ku^O{J5_GCMyZ>9Xc& zD2Uy((!|TDUww#zzJkENZ8d&A#|vQ~+^RB!Ch|twfQ=q~mtl>t(p!U_HGystF?bP% za;a(O{KsICZ~V4lUC~BU>9)7XM-at2K#^iERn57%NV}I zH`|%VyZ~?Z@4J)=SzuliAYFKx6^s94E{wO=myo%P2WavGpR$kGK+2$)sapq{*D5QA zm?q@tYaU;QiFYng7IN+q+;|o$_KM`Oi6ciAEv(0Xb1{(?2^}Ts?7cYNNehp~n zz%_|-!#N~&5#@r9b&{Lr0+x-CH+0rpngb?wRYGBVS&0NMm3H)X2m_byeu9#%Q$ zM3%JFHxpqC`iWSPOVn)a&{~Uyt3Uzb=|cx8je&3x4j>nfgDJeXz@f9(+HS6kcv3g5Je zE4q4mc}~dw^}+8>#(KIp7HSR;f!=*52Rk)-z6`$=MiWaiIPtAA2~BMfGph7+U||-O z4HF>X_v@p8?3C739QjY%2l%i7SW}}(i9 zp&ahU;Hz8S>7VwQK*DD5vqIms@tMSK`;zBb$lCS!kVbEz(*7ZC)*if27l%Qg>GF@u zS$5a0?9RecG4?!b(&4#LL&pBLsi!+A2|PZ~<3bxOQ8!?c5Hf%MOdeBURp9PSNDvD6 z+R)HYY+S=T+u##m1`{%GlEj}SP_?zqB?yLzjpWsqe$C-e+%C$*0hM-{juUrn=ASlt zJ3*hEj`j8YNOSGmUe2?>D16N;?Ur$|>+dFiQJR5X`ZV-;cxRw27+}JZVG{oo^i~Rc zpoJisuEU@2soEbj@tobJu-|V_G%}gvnFYx3=4W{O`TpSLaQIaZ>;JV%xjD3#sCfL`(rg~Te*L~u|}852OQ^lVu%rODmF zaY%X_K$i*t2Rg>A%{rPb2*H1*DX)N*^K33Er$&-%G?0Xi$dh>aukZb9_XUXw2;w-B zO+8ghTTVA-fXIwV{L^B%GM-DL_mv8B;;@#29IdH)8x166&RpjkEFj0?c!BkM#+C*eAS5_y zR^f8iJw0X$?hOzs0eNzU_WvO=(`xWhI*IFgITKcnk>zTFOWc{@8aa5GBc7Q zGF|(BZzrvkPIucV#fftV3)(YRX=uwz$_*$ejBA~$xu$zr%8$$NSk&<)m#rsi1>Cs5v)aNIwmIZIbPDN z2YcxrzrEBXaw@XTrt0|cTb`Y!<9`VXYm;*&c_* z6_E1{C-eYB%;;cTM&#(@Kn}cjibK^}Pj9NJcY|RXFu5SSS|BLI;WU2k)z)7_f+2!4L=*6`O~+xB-Diai7v5OCrY{`Bn5YhrID;IUAfcs@<66cjC`8(bJ2w*U>jg8|`UGGZ)M8RdU%NwJmV8$k^8a4iy$A zKtL^;9Dkz|XK0IH_BD)=*{R2_ zYlZZ(MKHy2Kz3Ws_UDdUB;@=L{JMX-?Ta_w)bG(bMr_Q_eVr~n^9h#sZ@Vs0SqPiy z&bL>J>+;PQ{$3nw{vPmLFRnMg+wP!hVAg$u0yCCk(Mt>6N6%ChNPr6G1kW21ISOF= zktL$e6Xj%#;v6ywVtMkaqamWVAQvgJ73Dmto6Z5hzD!!@w@hYvy3mw4Y7Tu359c`a z64~ijSea6Y?pq?4t6JWPSXmqHhua^or{@R{2pTPB;3GFX>keef;b+!yjtYncI1n%w zf40*obUX{Nm_uhC7lYNBW zqslyCd@X|78$} z9(gBl+zhb#Tag0KC!;etRFehG<~;V!j_`o^cq^d4ZfLK6dLOC6jab^fweYu(DN#9u|YCNQ;UTPWrc)ON>4-7clR!m&Orh9V3-D@msgAI6w16oO+PwKF*tng-(i>c&9E| z6c6|pG-~%J?c+JNr_XnH*$?!qEpW^LW8Cp}?JUB@pY{zNESXo;-4B%D=G4R^wEqNu z{|A8f&k*cHV1f%d<6i5pS236RfF{8Nto8Hem+4j-XD_;wN7oqeVZs4dFZ2FuQ2XBs z{vUAne*=?#+<3(c3qu_pov~80Gz0=c6{VztFLi;MiXlnkBlT-z9lYBvQQUwdg^a4g#RROYM-bc0-2=8?;ySv z)MD`r7k-=eSf`o&KXCtlr2bo-{^>sBpY`8=w0z<7OFP=8$fe%si+%{E^Pu4o*_n4R zx-)3V|GhZ{3@q|3|IxVvDys>3zqnCCj9^DTS7kzPx=rBl6wk~`ja=0&q zXatq1FJ~bU;X2n{y&*$-AjFVp@Rtg>nb*j%P`|32n#Hl2W5e!#x-WdWVBPDrVDs8f z=d^al2G|&Oc`0xsyhjMCHY~0PJ&F$mh7MEUqvp4!fu5d`&4uJAXobjr)={=MJ)fIw zT*6rLgO3a|4RzFYI%}m~yCcUBsa(#EVBczd9Om-ij8IIc6lA@RbU$J)AJI@nuD;2U zYgX6)?TM4le2v;vQ%}CZbpN(a#TSAdBRzLl{B*qH=QV71EGN3wP(g1ZDnJ2u?wwZTdv{mkQ^agjDU5c!*_$AfdA~kKkx1tF2Hqsdic+a|nolCDmr$Oh(d}kFb zAO|B`Oqct=8w+(|dE$zd7P#K%v?gB4ZgsWmTM0R~-iL$SG@LxJqqE&OL7p5;${=Jt z9J=zQK+9gq+Ndz#Xdw1DgdfZ@hPEAtR`C4hQ=b3I=N9;I*kClj2^pJyviOsQO$%Pilla1Fsf_?si@7sjf6Xsi(6o16DQPf zooelM5aMDJggKx6E)vuhIYPxdoORsF^bkt~#Kp1*2+N_9($7n#MT_8>Qky2kb{l1` zzlf@mY&7)h4nlDGUI@bJCQJX5BHl6kEl~e2Ev~V=VO4wNcdfavMO?)%pj9F11M=tb z_~HCiz`S2!DsA&R_~=ZvAZS3sv$G;d+ptk`8Ru>78sfcwIzH>uoh7wM#M;+lQsdl~ z8e)1{34?y=0*c5JawbDxw$%S6X;X6HBuxE=R?}u3Ql<^nHNXI5JE^hqn{n*&P~b)QrvZf@^&(ydwFBR>6m@_LD(H19vmwXV zY~YrI9sUdv-em^zp2dI`gXjFB^C+5_Z~K?Pl;LhpncjChh21Cud5trBYlDJTzl`J_`ab zmm9{Neo8r*A#lwK3QzY`4tFkpV-_K}Zm6ClhF6WL{p!3V*0Va?WoxV>jK2^(Ph2y` zN}%^;w&d>3?qtMYLxX!)5TMUhp(*7PL<$}uTf_9MRJHuZ>0nUBo$9*X42Q1l+8R0 zP#)_`|6)YnbPKf6kVUv%f5QWc7xgl6c-+j`S{PK~8*tb_f^AIm9t z-OW@kSWe;u?(cxoe^H15XLkDBD%*7!ie2>)(8=JNHYmdZy?pcvVI-<(G^m9BtPXn$ z0@${T@(rP|B<5A8Q&S`Pwvk?XK5UzIe)*6FwZeER?eV)Kn`36`w*OCcR~pvTxvg#O z(N+-Z5u_lXEg&*iMww6LI7Fr@24n~*7{Zi*3<+Z*TCswHggFe6GD(mri~&MaD#(-w z0V0GDlpz9PFkz4olDqNTp5Di&_ttZtdw$$s+1Y!4-(LG0*Sp@e*COCslfnwWlhre* zi-a?7g^7+$d{IG!tevSog79M-9iDKHISq$ki|Yw2iKQzL2zWU36hpUr-sQ6A2f2L@ z){jAHlJIRmWkBycc&xs^zSMg}YD{mdI_asYiD#-f<{Emwm7D2g9TwSGO?Y8I5nrgv z@oeg*U9gKXb8dWGjhNx95Y&tsTn8?DV1|*S#5=qsJUdTa!M&{OKpDp;Cc<&}m%X6? z74RaD@y%0NunuFr%Kwo)-2Q~?M)diB%;IC9uqdcmy`CzqJ!-4*@~e8M+7^O-ccS62 zRqimT;4rh&)#Ta4>~k5j5C?wjT?pf}Nbwh};^n zu7B34iyk?n26E~kx8?OJMN;oW?yFYAq=HIE?2rk!NWH1u(A3>whkElOfbieP&+L|LcVuejmXQEcxQVEdcgF zp)IR#AM|-*1s5nZ*^)S?Yztl5rQi%+A86_)YYt&AbGjZ~EiyD$ZiKa1@|v`9ac6bg zLmZF`m(nyGbsQqFf_lkcjZusF2pb& z-31E)gL~5IbA?&LX^tawqr;*5y53h?5Z>#lEzVtcd|zKhdv204>jWgg7dD8Q1=#2G zZ3i=M#Oaw{))!hJO{uLQU8~0BKu_3p#uP8U-G^5(R~N=SEeC!2u<~MTbZlo|pq=A;B49Hd4gt+A1fo-$W?<(|{@8(1i zYtbrKy;7Cc^HP(n(0&QXfFAmkGF64{ToT$vHV_K=VY4?FF$c>tbFb*IUf^$Qd9sZL zHNv|^oV={MWW~%yTREuEMjAR!bRLbSy*A|w4Z<$p5ie@QEs;1oFCCeCTrsTg#Pftw zZ(qx`OW14kX=&oJ!z+N6ZyG`&PrQt%a%<>Goxyku-@h|mZsUitA{aaBbmLCI9~PIn zJiN-jUbco|Bbacz_ylpMZYviHVCjxzK(TK6%xT9m{JZA+hsyH*+9)3>;dER^(G>tA z_6;+8LqK=q;XB7`QeRFcChmi2|EAglJQWxW27rN)5&#yi9NYm5nVF>of+iG5H8UNk z&Acc*5w>?H#q?iM@xWH{Cu08oK3_jU?%=9V1qUBs(G4BX(M-WJ91ceWLPQw?G~Q)x zvq7Mi>W4obFD@=tt#oTR@9#f%Xj7r-#evDr&d#Bck<#*VkPuMGf^K@(W|x+h?wqQv zy|9Y{8DcQZV*nuxhck~n>F@8S?qtT=X%7II14p=dr2|iZ-w#0Rcfmj94gUn_1plPp zIyo$hE1Na(5~7#9hVv>NC>CrsrGrn=qSADLA;>&rR3g|dH`4?W;nJ$V$w+Xy>=jn% zm^|tev7|^|mBpig-GZNgWGQzqCFD9#h43a@wpWW@+J%&loZjMf??#>*#$6}z?%}UZ z;|9Ym*WP$UpJT{bv=67}@}4hm>qyu}&pcYjn5(a8$35pDK1Mn&v6?3NoB6^Bz|oY} ztj`{;j4kSIKnn?Z$W2OJTL;>7i$^!mzRe)B%REKTV>jMq_*<-wkB9U;F#2CIH4 zA@5ss8YY3wP-sMXi$!a_@qW;GChGhhV&Q2rE(?F8{n#tGKTkY8P(jJ^ zk6`!BoR#cr-_3+hPiYx!z56O^{ecY~aqE3-bYHQyrfLI|n;I9>UJx(t396fVBIyRk zwJ);Y-`zbUvDDoJfWss!-nNIRsuHXEUw~O|bf2+>v7Y4QdU?qC9VNkcYD7wOPPd(_ zvd|L%T>`$g*j(gxrYrME9!Q>pUL^OcBLSPRZd@0yh$ga_!nwhibWC=z6k1dx14J|s z$84nOMWR0JB^!@H}$cXI_#05ssS<9 zNuk2+YKvXg+3*F`ZeA^>F9H*LGEGh!WM8Pi*u=K%%8w157%mH)a&*bt9MpLEJR>J| zYM8Vh-|af|$_&2uNP*+hL|f|59y$IP$_WZ3Ce~N4!afXKw)$#wB`diR+136#)hG4hss)3#rGJwf(WSn(W@R&vgmy_892CLS@cPN4o4Zn}?kRCK}yd}9o`)}pbpQMrWOrV6hR5CZs; zTN}iIGN0s+^6xdAcTmsIPqB*fslwH0Zc|0q+bteym-LoSSDOgGMLEWq*%rVZ7S>tx z7={Y3P+Bp)eOOH|JAqs~!#+OMl|tL(;PHXgWMd_B&?d~hr7b0ZHfaE{(xhjbvbK#=hJpnT zICUto7do8rQ(uLaZB{vlArG^o`H67BlDtMqiYPEk; zl(7K=6+#-#uizzvn4y}^2y5-VO6@2?I{aFCOS5VbI`#rkXSSXHe0F>cH?=SyS9gU= z-h7TiW6iVbe?@J!^rmUevNDc{XGKFnbnET0LxbOAP9a32%lydgK*bTA^pZAh4H*|G zwclixUBN6vE$jNH@zS%Jf?)5SvN|!|(rg(`PvoY_;LitC064j=)p19f#+&IS2Ltj6Ap56L?E^=zXjGh z%)VVXb3iZZ{_xrS)L=@5W3SJ}a~HGZD^vP5C^2sY{?kqj^6f)NSa3UEKj-cHwvIc_Z+tJX&dASCoqA<3_Ly*x5!hJ9{_odlv9<{VHt zbM5`gYtq_?`+WdQ9KA8xrqlNNS?p$J=1PDY$xurn&3nxE$=$9Jam!IH$#E4MrqzS3 zOrg389zlJ8p!43=w;0L^rfXO&>Yx^7;oZEb75)OmX+n3ADT|%i@5-w2FDg>2kh?ZA zIIEg5M{yU|J77;mByd?KGbws;Xqo1hRyGc%DmKQK8>?)x!nKd}DkwNPx!W0EKf}BE zm80)zEDpZzfl;aUE`%j4j_d&1R3ih}HRnBL8!cT7lzjFrlwZyv)~gDX;L;)95DxgF z>}@CQb^_S7CG~J6|SBf5~JkA7pIv96e_J|g2pN71;961AG1L&^OSjPbm^rBqw^lmro()>QJN zS5`u&ccNNGc~!KCGXn;fJ6x=L>J!*0(xHf^AUP|2i5wW5lI+^96|jI+EdehQU&j?z zRJa*Ge2fG+2e0ru2~vkGsw@CH3QUPiTpuG-9oAYt+DdlkzN8kIgxdWxDGX}~%{bJYb*;9Bf1tAE#x;Sp<-fRqlHk$I9xu!K3Bq6A$ zrzP`ffZro_F~<)iQylwo5%DIosT!jpZ$jqA%XdsfVTCSI(X@7XAPj8u zP&M_JQ&_`mi%BEQmoHa{w9%Ls$#V~i1#<)Pq@@HGV20n5H!=qeBD+4TUeGF-c)$Cl znmL?p1R}=1d1U8~qE`~3KA~c6r)q}$_mNETrf-~pj;8{v9}!@2XB(La0|DS1ZJvB! zQs>9oV$8bImZBt~)dlPdOV>dsvhf z-3q2IHCx@e#IX!(=Vfe?;wk0?ZNwK1wnI*16D(r7^up#0%wfyY=;JI;VP30pmh`Gp znwLF3pQ+n&Tw)JA;|+bvz}M49!A!DSJ(=|`VzD|4;P@`)EQ;B;H=iwBUUcrle7|M6 zPQRCjLg|XupK(Vk43pF?Q~mEhmq95Mq%1jWpn(k()A!}dp@6d8Nc*OUIuCrVNa)dA zu#zJU+gKXbu&}feqk}G(Gr(8qukRBtt74$bcD@r z!e(ovs+YqNq_0K>?~7bVRs`!9r!ojXCyCl~2eq7=oTSbvyrVulmxvgh%cjjTz0eGC zc(DKoDJu(D2p$xN^quIEIgCrpSsQW!VapvIM0muL-705io@}p2+b~E0!jVlshr>0|IaK`7&fX^4;&Q)&k;cUaTcZ1=JfYZdr+X17nS!yr0jPt<~ z`s(J;P-Qpp&zCwL1^9?9xVKwEgV*-d6CS-#?m%|m{7aHSRL>BAAx&)oVH$SG@%>I)&|L8IQ z4~EB|i1<-M{hOwi=!+E#nlmu&9*TB3VEvHI(6mde*hV+4Ltw= diff --git a/docs/src/additional_responses/tutorial001.py b/docs/src/additional_responses/tutorial001.py new file mode 100644 index 000000000..dfb0fc91e --- /dev/null +++ b/docs/src/additional_responses/tutorial001.py @@ -0,0 +1,23 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from starlette.responses import JSONResponse + + +class Item(BaseModel): + id: str + value: str + + +class Message(BaseModel): + message: str + + +app = FastAPI() + + +@app.get("/items/{item_id}", response_model=Item, responses={404: {"model": Message}}) +async def read_item(item_id: str): + if item_id == "foo": + return {"id": "foo", "value": "there goes my hero"} + else: + return JSONResponse(status_code=404, content={"message": "Item not found"}) diff --git a/docs/src/additional_responses/tutorial002.py b/docs/src/additional_responses/tutorial002.py new file mode 100644 index 000000000..bb19c8938 --- /dev/null +++ b/docs/src/additional_responses/tutorial002.py @@ -0,0 +1,28 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from starlette.responses import FileResponse + + +class Item(BaseModel): + id: str + value: str + + +app = FastAPI() + + +@app.get( + "/items/{item_id}", + response_model=Item, + responses={ + 200: { + "content": {"image/png": {}}, + "description": "Return the JSON item or an image.", + } + }, +) +async def read_item(item_id: str, img: bool = None): + if img: + return FileResponse("image.png", media_type="image/png") + else: + return {"id": "foo", "value": "there goes my hero"} diff --git a/docs/src/additional_responses/tutorial003.py b/docs/src/additional_responses/tutorial003.py new file mode 100644 index 000000000..bca3ba93e --- /dev/null +++ b/docs/src/additional_responses/tutorial003.py @@ -0,0 +1,37 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from starlette.responses import JSONResponse + + +class Item(BaseModel): + id: str + value: str + + +class Message(BaseModel): + message: str + + +app = FastAPI() + + +@app.get( + "/items/{item_id}", + response_model=Item, + responses={ + 404: {"model": Message, "description": "The item was not found"}, + 200: { + "description": "Item requested by ID", + "content": { + "application/json": { + "example": {"id": "bar", "value": "The bar tenders"} + } + }, + }, + }, +) +async def read_item(item_id: str): + if item_id == "foo": + return {"id": "foo", "value": "there goes my hero"} + else: + return JSONResponse(status_code=404, content={"message": "Item not found"}) diff --git a/docs/src/additional_responses/tutorial004.py b/docs/src/additional_responses/tutorial004.py new file mode 100644 index 000000000..f7314ba8e --- /dev/null +++ b/docs/src/additional_responses/tutorial004.py @@ -0,0 +1,30 @@ +from fastapi import FastAPI +from pydantic import BaseModel +from starlette.responses import FileResponse + + +class Item(BaseModel): + id: str + value: str + + +responses = { + 404: {"description": "Item not found"}, + 302: {"description": "The item was moved"}, + 403: {"description": "Not enough privileges"}, +} + + +app = FastAPI() + + +@app.get( + "/items/{item_id}", + response_model=Item, + responses={**responses, 200: {"content": {"image/png": {}}}}, +) +async def read_item(item_id: str, img: bool = None): + if img: + return FileResponse("image.png", media_type="image/png") + else: + return {"id": "foo", "value": "there goes my hero"} diff --git a/docs/src/bigger_applications/app/main.py b/docs/src/bigger_applications/app/main.py index 4a12da434..2cebd4244 100644 --- a/docs/src/bigger_applications/app/main.py +++ b/docs/src/bigger_applications/app/main.py @@ -5,4 +5,9 @@ from .routers import items, users app = FastAPI() app.include_router(users.router) -app.include_router(items.router, prefix="/items", tags=["items"]) +app.include_router( + items.router, + prefix="/items", + tags=["items"], + responses={404: {"description": "Not found"}}, +) diff --git a/docs/src/bigger_applications/app/routers/items.py b/docs/src/bigger_applications/app/routers/items.py index 46a241902..de5d9b645 100644 --- a/docs/src/bigger_applications/app/routers/items.py +++ b/docs/src/bigger_applications/app/routers/items.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException router = APIRouter() @@ -11,3 +11,14 @@ async def read_items(): @router.get("/{item_id}") async def read_item(item_id: str): return {"name": "Fake Specific Item", "item_id": item_id} + + +@router.put( + "/{item_id}", + tags=["custom"], + responses={403: {"description": "Operation forbidden"}}, +) +async def update_item(item_id: str): + if item_id != "foo": + raise HTTPException(status_code=403, detail="You can only update the item: foo") + return {"item_id": item_id, "name": "The Fighters"} diff --git a/docs/tutorial/additional-responses.md b/docs/tutorial/additional-responses.md new file mode 100644 index 000000000..a74e431f8 --- /dev/null +++ b/docs/tutorial/additional-responses.md @@ -0,0 +1,235 @@ +!!! warning + This is a rather advanced topic. + + If you are starting with **FastAPI**, you might not need this. + +You can declare additional responses, with additional status codes, media types, descriptions, etc. + +Those additional responses will be included in the OpenAPI schema, so they will also appear in the API docs. + +But for those additional responses you have to make sure you return a `Response` like `JSONResponse` directly, with your status code and content. + +## Additional Response with `model` + +You can pass to your *path operation decorators* a parameter `responses`. + +It receives a `dict`, the keys are status codes for each response, like `200`, and the values are other `dict`s with the information for each of them. + +Each of those response `dict`s can have a key `model`, containing a Pydantic model, just like `response_model`. + +**FastAPI** will take that model, generate its JSON Schema and include it in the correct place in OpenAPI. + +For example, to declare another response with a status code `404` and a Pydantic model `Message`, you can write: + + +```Python hl_lines="18 23" +{!./src/additional_responses/tutorial001.py!} +``` + +!!! note + Have in mind that you have to return the `JSONResponse` directly. + +!!! info + The `model` key is not part of OpenAPI. + + **FastAPI** will take the Pydantic model from there, generate the `JSON Schema`, and put it in the correct place. + + The correct place is: + + * In the key `content`, that has as value another JSON object (`dict`) that contains: + * A key with the media type, e.g. `application/json`, that contains as value another JSON object, that contains: + * A key `schema`, that has as the value the JSON Schema from the model, here's the correct place. + * **FastAPI** adds a reference here to the global JSON Schemas in another place in your OpenAPI instead of including it directly. This way, other applications and clients can use those JSON Schemas directly, provide better code generation tools, etc. + +The generated responses in the OpenAPI for this *path operation* will be: + +```JSON hl_lines="3 4 5 6 7 8 9 10 11 12" +{ + "responses": { + "404": { + "description": "Additional Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Message" + } + } + } + }, + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Item" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } +} +``` + +The schemas are referenced to another place inside the OpenAPI schema: + +```JSON hl_lines="4 5 6 7 8 9 10 11 12 13 14 15 16" +{ + "components": { + "schemas": { + "Message": { + "title": "Message", + "required": [ + "message" + ], + "type": "object", + "properties": { + "message": { + "title": "Message", + "type": "string" + } + } + }, + "Item": { + "title": "Item", + "required": [ + "id", + "value" + ], + "type": "object", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "value": { + "title": "Value", + "type": "string" + } + } + }, + "ValidationError": { + "title": "ValidationError", + "required": [ + "loc", + "msg", + "type" + ], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": { + "type": "string" + } + }, + "msg": { + "title": "Message", + "type": "string" + }, + "type": { + "title": "Error Type", + "type": "string" + } + } + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": { + "$ref": "#/components/schemas/ValidationError" + } + } + } + } + } + } +} +``` + +## Additional media types for the main response + +You can use this same `responses` parameter to add different media types for the same main response. + +For example, you can add an additional media type of `image/png`, declaring that your *path operation* can return a JSON object (with media type `application/json`) or a PNG image: + +```Python hl_lines="17 18 19 20 21 22 23 24 28" +{!./src/additional_responses/tutorial002.py!} +``` + +!!! note + Notice that you have to return the image using a `FileResponse` directly. + +## Combining information + +You can also combine response information from multiple places, including the `response_model`, `status_code`, and `responses` parameters. + +You can declare a `response_model`, using the default status code `200` (or a custom one if you need), and then declare additional information for that same response in `responses`, directly in the OpenAPI schema. + +**FastAPI** will keep the additional information from `responses`, and combine it with the JSON Schema from your model. + +For example, you can declare a response with a status code `404` that uses a Pydantic model and has a custom `description`. + +And a response with a status code `200` that uses your `response_model`, but includes a custom `example`: + +```Python hl_lines="20 21 22 23 24 25 26 27 28 29 30 31" +{!./src/additional_responses/tutorial003.py!} +``` + +It will all be combined and included in your OpenAPI, and shown in the API docs: + + + + +## Combine predefined responses and custom ones + +You might want to have some predefined responses that apply to many *path operations*, but you want to combine them with custom responses needed by each *path operation*. + +For those cases, you can use the Python technique of "unpacking" a `dict` with `**dict_to_unpack`: + +```Python +old_dict = { + "old key": "old value", + "second old key": "second old value", +} +new_dict = {**old_dict, "new key": "new value"} +``` + +Here, `new_dict` will contain all the key-value pairs from `old_dict` plus the new key-value pair: + +```Python +{ + "old key": "old value", + "second old key": "second old value", + "new key": "new value", +} +``` + +You can use that technique to re-use some predefined responses in your *path operations* and combine them with additional custom ones. + +For example: + +```Python hl_lines="11 12 13 14 15 24" +{!./src/additional_responses/tutorial004.py!} +``` + +## More information about OpenAPI responses + +To see what exactly you can include in the responses, you can check these sections in the OpenAPI specification: + +* OpenAPI Responses Object, it includes the `Response Object`. +* OpenAPI Response Object, you can include anything from this directly in each response inside your `responses` parameter. Including `description`, `headers`, `content` (inside of this is that you declare different media types and JSON Schemas), and `links`. diff --git a/docs/tutorial/bigger-applications.md b/docs/tutorial/bigger-applications.md index 611c848bd..3bf406f3a 100644 --- a/docs/tutorial/bigger-applications.md +++ b/docs/tutorial/bigger-applications.md @@ -103,7 +103,17 @@ But let's say that this time we are more lazy. And we don't want to have to explicitly type `/items/` and `tags=["items"]` in every *path operation* (we will be able to do it later): -```Python hl_lines="6 11 16" +```Python hl_lines="6 11" +{!./src/bigger_applications/app/routers/items.py!} +``` + +### Add some custom `tags` and `responses` + +We are not adding the prefix `/items/` nor the `tags=["items"]` to add them later. + +But we can add custom `tags` and `responses` that will be applied to a specific *path operation*: + +```Python hl_lines="18 19" {!./src/bigger_applications/app/routers/items.py!} ``` @@ -192,7 +202,7 @@ So, to be able to use both of them in the same file, we import the submodules di Now, let's include the `router` from the submodule `users`: -```Python hl_lines="8" +```Python hl_lines="7" {!./src/bigger_applications/app/main.py!} ``` @@ -217,7 +227,7 @@ It will include all the routes from that router as part of it. So it won't affect performance. -### Include an `APIRouter` with a prefix +### Include an `APIRouter` with a `prefix`, `tags`, and `responses` Now, let's include the router form the `items` submodule. @@ -237,9 +247,11 @@ async def read_item(item_id: str): So, the prefix in this case would be `/items`. -And we can also add a list of `tags` that will be applied to all the *path operations* included in this router: +We can also add a list of `tags` that will be applied to all the *path operations* included in this router. + +And we can add predefined `responses` that will be included in all the *path operations* too. -```Python hl_lines="9" +```Python hl_lines="8 9 10 11 12 13" {!./src/bigger_applications/app/main.py!} ``` @@ -250,12 +262,18 @@ The end result is that the item paths are now: ...as we intended. -And they are marked with a list of tags that contain a single string `"items"`. +They will be marked with a list of tags that contain a single string `"items"`. + +The *path operation* that declared a `"custom"` tag will have both tags, `items` and `custom`. These "tags" are especially useful for the automatic interactive documentation systems (using OpenAPI). +And all of them will include the the predefined `responses`. + +The *path operation* that declared a custom `403` response will have both the predefined responses (`404`) and the `403` declared in it directly. + !!! check - The `prefix` and `tags` parameters are (as in many other cases) just a feature from **FastAPI** to help you avoid code duplication. + The `prefix`, `tags`, and `responses` parameters are (as in many other cases) just a feature from **FastAPI** to help you avoid code duplication. !!! tip diff --git a/fastapi/applications.py b/fastapi/applications.py index 9e9cf7126..b8387babd 100644 --- a/fastapi/applications.py +++ b/fastapi/applications.py @@ -1,8 +1,7 @@ -from typing import Any, Callable, Dict, List, Optional, Type +from typing import Any, Callable, Dict, List, Optional, Type, Union from fastapi import routing from fastapi.openapi.docs import get_redoc_html, get_swagger_ui_html -from fastapi.openapi.models import AdditionalResponse from fastapi.openapi.utils import get_openapi from pydantic import BaseModel from starlette.applications import Starlette @@ -115,7 +114,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, methods: List[str] = None, operation_id: str = None, @@ -132,7 +131,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=methods, operation_id=operation_id, @@ -151,7 +150,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, methods: List[str] = None, operation_id: str = None, @@ -169,7 +168,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=methods, operation_id=operation_id, @@ -187,10 +186,10 @@ class FastAPI(Starlette): *, prefix: str = "", tags: List[str] = None, - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, ) -> None: self.router.include_router( - router, prefix=prefix, tags=tags, additional_responses=additional_responses + router, prefix=prefix, tags=tags, responses=responses or {} ) def get( @@ -203,7 +202,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -218,7 +217,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -236,7 +235,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -251,7 +250,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -269,7 +268,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -284,7 +283,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -302,7 +301,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -317,7 +316,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -335,7 +334,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -350,7 +349,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -368,7 +367,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -383,7 +382,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -401,7 +400,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -416,7 +415,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, @@ -434,7 +433,7 @@ class FastAPI(Starlette): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -449,7 +448,7 @@ class FastAPI(Starlette): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, operation_id=operation_id, include_in_schema=include_in_schema, diff --git a/fastapi/openapi/models.py b/fastapi/openapi/models.py index 1be51a1a5..6572c7c07 100644 --- a/fastapi/openapi/models.py +++ b/fastapi/openapi/models.py @@ -3,7 +3,6 @@ from enum import Enum from typing import Any, Dict, List, Optional, Union from pydantic import BaseModel, Schema as PSchema -from pydantic.fields import Field from pydantic.types import UrlStr try: @@ -344,28 +343,6 @@ class Tag(BaseModel): externalDocs: Optional[ExternalDocumentation] = None -class BaseAdditionalResponse(BaseModel): - description: str - content_type: Optional[str] = None - - -class AdditionalResponse(BaseAdditionalResponse): - status_code: int = PSchema( - ..., ge=100, le=540, title="Status Code", description="HTTP status code" - ) - # NOTE: waiting for pydantic to allow `typing.Type[BasicModel]` type - # so, going for `Any` and extra validation on - # routing methods - models: List[Any] = PSchema([], title="Additional Response Models") - - -class AdditionalResponseDescription(BaseAdditionalResponse): - schema_field: Optional[Field] = None - - class Config: - arbitrary_types_allowed = True - - class OpenAPI(BaseModel): openapi: str info: Info diff --git a/fastapi/openapi/utils.py b/fastapi/openapi/utils.py index 9b0e4ed30..78175d841 100644 --- a/fastapi/openapi/utils.py +++ b/fastapi/openapi/utils.py @@ -178,6 +178,23 @@ def get_openapi_path( definitions[ "HTTPValidationError" ] = validation_error_response_definition + if route.responses: + for (additional_status_code, response) in route.responses.items(): + assert isinstance( + response, dict + ), "An additional response must be a dict" + field = route.response_fields.get(additional_status_code) + if field: + response_schema, _ = field_schema( + field, model_name_map=model_name_map, ref_prefix=REF_PREFIX + ) + response.setdefault("content", {}).setdefault( + "application/json", {} + )["schema"] = response_schema + response.setdefault("description", "Additional Response") + operation.setdefault("responses", {})[ + str(additional_status_code) + ] = response status_code = str(route.status_code) response_schema = {"type": "string"} if lenient_issubclass(route.content_type, JSONResponse): @@ -189,13 +206,14 @@ def get_openapi_path( ) else: response_schema = {} - content = {route.content_type.media_type: {"schema": response_schema}} - operation["responses"] = { - status_code: { - "description": route.response_description, - "content": content, - } - } + operation.setdefault("responses", {}).setdefault(status_code, {})[ + "description" + ] = route.response_description + operation.setdefault("responses", {}).setdefault( + status_code, {} + ).setdefault("content", {}).setdefault(route.content_type.media_type, {})[ + "schema" + ] = response_schema if all_route_params or route.body_field: operation["responses"][str(HTTP_422_UNPROCESSABLE_ENTITY)] = { "description": "Validation Error", @@ -205,24 +223,6 @@ def get_openapi_path( } }, } - for add_response_code, add_response in route.additional_responses.items(): - add_response_schema: Dict[str, Any] = {} - if ( - add_response.content_type or route.content_type.media_type - ) == "application/json" and add_response.schema_field is not None: - add_response_schema, _ = field_schema( - add_response.schema_field, - model_name_map=model_name_map, - ref_prefix=REF_PREFIX, - ) - add_content = { - add_response.content_type - or route.content_type.media_type: {"schema": add_response_schema} - } - operation["responses"][str(add_response_code)] = { - "description": add_response.description, - "content": add_content, - } path[method.lower()] = operation return path, security_schemes, definitions diff --git a/fastapi/routing.py b/fastapi/routing.py index 9dfd316ab..cc6cac79b 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -7,7 +7,6 @@ from fastapi import params from fastapi.dependencies.models import Dependant from fastapi.dependencies.utils import get_body_field, get_dependant, solve_dependencies from fastapi.encoders import jsonable_encoder -from fastapi.openapi.models import AdditionalResponse, AdditionalResponseDescription from fastapi.utils import UnconstrainedConfig from pydantic import BaseModel, Schema from pydantic.error_wrappers import ErrorWrapper, ValidationError @@ -105,7 +104,7 @@ class APIRoute(routing.Route): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, name: str = None, methods: List[str] = None, @@ -139,35 +138,30 @@ class APIRoute(routing.Route): self.summary = summary self.description = description or self.endpoint.__doc__ self.response_description = response_description - self.additional_responses: Dict[int, AdditionalResponseDescription] = {} - existed_codes = [self.status_code, 422] - for add_response in additional_responses: - assert ( - add_response.status_code not in existed_codes - ), f"(Duplicated Status Code): Response with status code [{add_response.status_code}] already defined!" - existed_codes.append(add_response.status_code) - response_models: List[Any] = [m for m in add_response.models] - schema_field = None - if ( - add_response.content_type == "application/json" - or lenient_issubclass(content_type, JSONResponse) - and len(response_models) - ): - schema_field = Field( - name=f"Additional_response_{add_response.status_code}", - type_=Union[tuple(response_models)], - class_validators=[], + self.responses = responses or {} + response_fields = {} + for additional_status_code, response in self.responses.items(): + assert isinstance(response, dict), "An additional response must be a dict" + model = response.get("model") + if model: + assert lenient_issubclass( + model, BaseModel + ), "A response model must be a Pydantic model" + response_name = f"Response_{additional_status_code}_{self.name}" + response_field = Field( + name=response_name, + type_=model, + class_validators=None, default=None, required=False, model_config=UnconstrainedConfig, schema=Schema(None), ) - add_resp_description = AdditionalResponseDescription( - description=add_response.description, - content_type=add_response.content_type, - schema_field=schema_field, - ) - self.additional_responses[add_response.status_code] = add_resp_description + response_fields[additional_status_code] = response_field + if response_fields: + self.response_fields: Dict[Union[int, str], Field] = response_fields + else: + self.response_fields = {} self.deprecated = deprecated if methods is None: methods = ["GET"] @@ -205,7 +199,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, methods: List[str] = None, operation_id: str = None, @@ -222,7 +216,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=methods, operation_id=operation_id, @@ -242,7 +236,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, methods: List[str] = None, operation_id: str = None, @@ -260,7 +254,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=methods, operation_id=operation_id, @@ -278,7 +272,7 @@ class APIRouter(routing.Router): *, prefix: str = "", tags: List[str] = None, - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, ) -> None: if prefix: assert prefix.startswith("/"), "A path prefix must start with '/'" @@ -287,6 +281,9 @@ class APIRouter(routing.Router): ), "A path prefix must not end with '/', as the routes will start with '/'" for route in router.routes: if isinstance(route, APIRoute): + if responses is None: + responses = {} + responses = {**responses, **route.responses} self.add_api_route( prefix + route.path, route.endpoint, @@ -296,7 +293,7 @@ class APIRouter(routing.Router): summary=route.summary, description=route.description, response_description=route.response_description, - additional_responses=additional_responses, + responses=responses, deprecated=route.deprecated, methods=route.methods, operation_id=route.operation_id, @@ -323,7 +320,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -338,7 +335,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["GET"], operation_id=operation_id, @@ -357,7 +354,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -372,7 +369,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["PUT"], operation_id=operation_id, @@ -391,7 +388,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -406,7 +403,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["POST"], operation_id=operation_id, @@ -425,7 +422,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -440,7 +437,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["DELETE"], operation_id=operation_id, @@ -459,7 +456,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -474,7 +471,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["OPTIONS"], operation_id=operation_id, @@ -493,7 +490,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -508,7 +505,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["HEAD"], operation_id=operation_id, @@ -527,7 +524,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -542,7 +539,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["PATCH"], operation_id=operation_id, @@ -561,7 +558,7 @@ class APIRouter(routing.Router): summary: str = None, description: str = None, response_description: str = "Successful Response", - additional_responses: List[AdditionalResponse] = [], + responses: Dict[Union[int, str], Dict[str, Any]] = None, deprecated: bool = None, operation_id: str = None, include_in_schema: bool = True, @@ -576,7 +573,7 @@ class APIRouter(routing.Router): summary=summary, description=description, response_description=response_description, - additional_responses=additional_responses, + responses=responses or {}, deprecated=deprecated, methods=["TRACE"], operation_id=operation_id, diff --git a/fastapi/utils.py b/fastapi/utils.py index d0ffbb5d8..8eacb83d1 100644 --- a/fastapi/utils.py +++ b/fastapi/utils.py @@ -30,10 +30,8 @@ def get_flat_models_from_routes( body_fields_from_routes.append(route.body_field) if route.response_field: responses_from_routes.append(route.response_field) - if route.additional_responses: - for _, add_response in route.additional_responses.items(): - if add_response.schema_field is not None: - responses_from_routes.append(add_response.schema_field) + if route.response_fields: + responses_from_routes.extend(route.response_fields.values()) flat_models = get_flat_models_from_fields( body_fields_from_routes + responses_from_routes ) diff --git a/mkdocs.yml b/mkdocs.yml index 2760194af..e453323e8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -44,6 +44,7 @@ nav: - Path Operation Configuration: 'tutorial/path-operation-configuration.md' - Path Operation Advanced Configuration: 'tutorial/path-operation-advanced-configuration.md' - Custom Response: 'tutorial/custom-response.md' + - Additional Responses: 'tutorial/additional-responses.md' - Dependencies: - First Steps: 'tutorial/dependencies/first-steps.md' - Classes as Dependencies: 'tutorial/dependencies/classes-as-dependencies.md' diff --git a/tests/test_additional_response_extra.py b/tests/test_additional_response_extra.py new file mode 100644 index 000000000..45afcc0e5 --- /dev/null +++ b/tests/test_additional_response_extra.py @@ -0,0 +1,52 @@ +from fastapi import APIRouter, FastAPI +from starlette.testclient import TestClient + +router = APIRouter() + +sub_router = APIRouter() + +app = FastAPI() + + +@sub_router.get("/") +def read_item(): + return {"id": "foo"} + + +router.include_router(sub_router, prefix="/items") + +app.include_router(router) + + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/": { + "get": { + "responses": { + "200": { + "description": "Successful Response", + "content": {"application/json": {"schema": {}}}, + } + }, + "summary": "Read Item Get", + "operationId": "read_item_items__get", + } + } + }, +} + +client = TestClient(app) + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/") + assert response.status_code == 200 + assert response.json() == {"id": "foo"} diff --git a/tests/test_additional_responses.py b/tests/test_additional_responses.py deleted file mode 100644 index fa46d3ccb..000000000 --- a/tests/test_additional_responses.py +++ /dev/null @@ -1,471 +0,0 @@ -import pytest -from fastapi import FastAPI -from fastapi.openapi.models import AdditionalResponse -from pydantic import BaseModel -from starlette.responses import JSONResponse -from starlette.testclient import TestClient - -app = FastAPI() - - -class Item(BaseModel): - name: str - price: float = None - - -class Response400(BaseModel): - """HTTP 4xx Response Schema""" - - title: str - detail: str - error_code: int # functional error ref - - -response_403 = AdditionalResponse( - status_code=403, description="Forbidden", models=[Response400] -) - -additional_responses = [response_403] - - -@app.api_route( - "/items/{item_id}", methods=["GET"], additional_responses=additional_responses -) -def get_items(item_id: str): - return {"item_id": item_id} - - -def get_not_decorated(item_id: str): - return {"item_id": item_id} - - -app.add_api_route( - "/items-not-decorated/{item_id}", - get_not_decorated, - additional_responses=additional_responses, -) - - -@app.delete("/items/{item_id}", additional_responses=additional_responses) -def delete_item(item_id: str, item: Item): - return {"item_id": item_id, "item": item} - - -@app.head("/items/{item_id}", additional_responses=additional_responses) -def head_item(item_id: str): - return JSONResponse(headers={"x-fastapi-item-id": item_id}) - - -@app.options("/items/{item_id}", additional_responses=additional_responses) -def options_item(item_id: str): - return JSONResponse(headers={"x-fastapi-item-id": item_id}) - - -@app.patch("/items/{item_id}", additional_responses=additional_responses) -def patch_item(item_id: str, item: Item): - return {"item_id": item_id, "item": item} - - -@app.trace("/items/{item_id}", additional_responses=additional_responses) -def trace_item(item_id: str): - return JSONResponse(media_type="message/http") - - -client = TestClient(app) - -openapi_schema = { - "openapi": "3.0.2", - "info": {"title": "Fast API", "version": "0.1.0"}, - "paths": { - "/items/{item_id}": { - "get": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Get Items Get", - "operationId": "get_items_items__item_id__get", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - }, - "delete": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Delete Item Delete", - "operationId": "delete_item_items__item_id__delete", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Item"} - } - }, - "required": True, - }, - }, - "options": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Options Item Options", - "operationId": "options_item_items__item_id__options", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - }, - "head": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Head Item Head", - "operationId": "head_item_items__item_id__head", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - }, - "patch": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Patch Item Patch", - "operationId": "patch_item_items__item_id__patch", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Item"} - } - }, - "required": True, - }, - }, - "trace": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Trace Item Trace", - "operationId": "trace_item_items__item_id__trace", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - }, - }, - "/items-not-decorated/{item_id}": { - "get": { - "responses": { - "200": { - "description": "Successful Response", - "content": {"application/json": {"schema": {}}}, - }, - "403": { - "description": "Forbidden", - "content": { - "application/json": { - "schema": {"$ref": "#/components/schemas/Response400"} - } - }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - }, - }, - }, - "summary": "Get Not Decorated Get", - "operationId": "get_not_decorated_items-not-decorated__item_id__get", - "parameters": [ - { - "required": True, - "schema": {"title": "Item_Id", "type": "string"}, - "name": "item_id", - "in": "path", - } - ], - } - }, - }, - "components": { - "schemas": { - "Item": { - "title": "Item", - "required": ["name"], - "type": "object", - "properties": { - "name": {"title": "Name", "type": "string"}, - "price": {"title": "Price", "type": "number"}, - }, - }, - "Response400": { - "title": "Response400", - "description": "HTTP 4xx Response Schema", - "required": ["title", "detail", "error_code"], - "type": "object", - "properties": { - "title": {"title": "Title", "type": "string"}, - "detail": {"title": "Detail", "type": "string"}, - "error_code": {"title": "Error_Code", "type": "integer"}, - }, - }, - "ValidationError": { - "title": "ValidationError", - "required": ["loc", "msg", "type"], - "type": "object", - "properties": { - "loc": { - "title": "Location", - "type": "array", - "items": {"type": "string"}, - }, - "msg": {"title": "Message", "type": "string"}, - "type": {"title": "Error Type", "type": "string"}, - }, - }, - "HTTPValidationError": { - "title": "HTTPValidationError", - "type": "object", - "properties": { - "detail": { - "title": "Detail", - "type": "array", - "items": {"$ref": "#/components/schemas/ValidationError"}, - } - }, - }, - } - }, -} - - -def test_uncompatible_response_model_undecorated(): - app = FastAPI() - - class NotBaseModel: - pass - - response_403 = AdditionalResponse( - status_code=403, description="Forbidden", models=[NotBaseModel] - ) - with pytest.raises(RuntimeError): - app.add_api_route("/", get_not_decorated, additional_responses=[response_403]) - - -def test_openapi_schema(): - response = client.get("/openapi.json") - assert response.status_code == 200 - assert response.json() == openapi_schema - - -def test_get_api_route(): - response = client.get("/items/foo") - assert response.status_code == 200 - assert response.json() == {"item_id": "foo"} - - -def test_get_api_route_not_decorated(): - response = client.get("/items-not-decorated/foo") - assert response.status_code == 200 - assert response.json() == {"item_id": "foo"} - - -def test_delete(): - response = client.delete("/items/foo", json={"name": "Foo"}) - assert response.status_code == 200 - assert response.json() == {"item_id": "foo", "item": {"name": "Foo", "price": None}} - - -def test_head(): - response = client.head("/items/foo") - assert response.status_code == 200 - assert response.headers["x-fastapi-item-id"] == "foo" - - -def test_options(): - response = client.options("/items/foo") - assert response.status_code == 200 - assert response.headers["x-fastapi-item-id"] == "foo" - - -def test_patch(): - response = client.patch("/items/foo", json={"name": "Foo"}) - assert response.status_code == 200 - assert response.json() == {"item_id": "foo", "item": {"name": "Foo", "price": None}} - - -def test_trace(): - response = client.request("trace", "/items/foo") - assert response.status_code == 200 - assert response.headers["content-type"] == "message/http" diff --git a/tests/test_tutorial/test_additional_responses/__init__.py b/tests/test_tutorial/test_additional_responses/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/test_tutorial/test_additional_responses/test_tutorial001.py b/tests/test_tutorial/test_additional_responses/test_tutorial001.py new file mode 100644 index 000000000..e1ec1ed8c --- /dev/null +++ b/tests/test_tutorial/test_additional_responses/test_tutorial001.py @@ -0,0 +1,116 @@ +from starlette.testclient import TestClient + +from additional_responses.tutorial001 import app + +client = TestClient(app) + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/{item_id}": { + "get": { + "responses": { + "404": { + "description": "Additional Response", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/Message"} + } + }, + }, + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/Item"} + } + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "summary": "Read Item Get", + "operationId": "read_item_items__item_id__get", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + } + ], + } + } + }, + "components": { + "schemas": { + "Item": { + "title": "Item", + "required": ["id", "value"], + "type": "object", + "properties": { + "id": {"title": "Id", "type": "string"}, + "value": {"title": "Value", "type": "string"}, + }, + }, + "Message": { + "title": "Message", + "required": ["message"], + "type": "object", + "properties": {"message": {"title": "Message", "type": "string"}}, + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": {"type": "string"}, + }, + "msg": {"title": "Message", "type": "string"}, + "type": {"title": "Error Type", "type": "string"}, + }, + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": {"$ref": "#/components/schemas/ValidationError"}, + } + }, + }, + } + }, +} + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/foo") + assert response.status_code == 200 + assert response.json() == {"id": "foo", "value": "there goes my hero"} + + +def test_path_operation_not_found(): + response = client.get("/items/bar") + assert response.status_code == 404 + assert response.json() == {"message": "Item not found"} diff --git a/tests/test_tutorial/test_additional_responses/test_tutorial002.py b/tests/test_tutorial/test_additional_responses/test_tutorial002.py new file mode 100644 index 000000000..b45a148d4 --- /dev/null +++ b/tests/test_tutorial/test_additional_responses/test_tutorial002.py @@ -0,0 +1,115 @@ +import os +import shutil + +from starlette.testclient import TestClient + +from additional_responses.tutorial002 import app + +client = TestClient(app) + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/{item_id}": { + "get": { + "responses": { + "200": { + "description": "Successful Response", + "content": { + "image/png": {}, + "application/json": { + "schema": {"$ref": "#/components/schemas/Item"} + }, + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "summary": "Read Item Get", + "operationId": "read_item_items__item_id__get", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + }, + { + "required": False, + "schema": {"title": "Img", "type": "boolean"}, + "name": "img", + "in": "query", + }, + ], + } + } + }, + "components": { + "schemas": { + "Item": { + "title": "Item", + "required": ["id", "value"], + "type": "object", + "properties": { + "id": {"title": "Id", "type": "string"}, + "value": {"title": "Value", "type": "string"}, + }, + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": {"type": "string"}, + }, + "msg": {"title": "Message", "type": "string"}, + "type": {"title": "Error Type", "type": "string"}, + }, + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": {"$ref": "#/components/schemas/ValidationError"}, + } + }, + }, + } + }, +} + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/foo") + assert response.status_code == 200 + assert response.json() == {"id": "foo", "value": "there goes my hero"} + + +def test_path_operation_img(): + shutil.copy("./docs/img/favicon.png", "./image.png") + response = client.get("/items/foo?img=1") + assert response.status_code == 200 + assert response.headers["Content-Type"] == "image/png" + assert len(response.content) + os.remove("./image.png") diff --git a/tests/test_tutorial/test_additional_responses/test_tutorial003.py b/tests/test_tutorial/test_additional_responses/test_tutorial003.py new file mode 100644 index 000000000..09dc8fd3c --- /dev/null +++ b/tests/test_tutorial/test_additional_responses/test_tutorial003.py @@ -0,0 +1,117 @@ +from starlette.testclient import TestClient + +from additional_responses.tutorial003 import app + +client = TestClient(app) + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/{item_id}": { + "get": { + "responses": { + "404": { + "description": "The item was not found", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/Message"} + } + }, + }, + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {"$ref": "#/components/schemas/Item"}, + "example": {"id": "bar", "value": "The bar tenders"}, + } + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "summary": "Read Item Get", + "operationId": "read_item_items__item_id__get", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + } + ], + } + } + }, + "components": { + "schemas": { + "Item": { + "title": "Item", + "required": ["id", "value"], + "type": "object", + "properties": { + "id": {"title": "Id", "type": "string"}, + "value": {"title": "Value", "type": "string"}, + }, + }, + "Message": { + "title": "Message", + "required": ["message"], + "type": "object", + "properties": {"message": {"title": "Message", "type": "string"}}, + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": {"type": "string"}, + }, + "msg": {"title": "Message", "type": "string"}, + "type": {"title": "Error Type", "type": "string"}, + }, + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": {"$ref": "#/components/schemas/ValidationError"}, + } + }, + }, + } + }, +} + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/foo") + assert response.status_code == 200 + assert response.json() == {"id": "foo", "value": "there goes my hero"} + + +def test_path_operation_not_found(): + response = client.get("/items/bar") + assert response.status_code == 404 + assert response.json() == {"message": "Item not found"} diff --git a/tests/test_tutorial/test_additional_responses/test_tutorial004.py b/tests/test_tutorial/test_additional_responses/test_tutorial004.py new file mode 100644 index 000000000..91b5ca959 --- /dev/null +++ b/tests/test_tutorial/test_additional_responses/test_tutorial004.py @@ -0,0 +1,118 @@ +import os +import shutil + +from starlette.testclient import TestClient + +from additional_responses.tutorial004 import app + +client = TestClient(app) + +openapi_schema = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/items/{item_id}": { + "get": { + "responses": { + "404": {"description": "Item not found"}, + "302": {"description": "The item was moved"}, + "403": {"description": "Not enough privileges"}, + "200": { + "description": "Successful Response", + "content": { + "image/png": {}, + "application/json": { + "schema": {"$ref": "#/components/schemas/Item"} + }, + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "summary": "Read Item Get", + "operationId": "read_item_items__item_id__get", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + }, + { + "required": False, + "schema": {"title": "Img", "type": "boolean"}, + "name": "img", + "in": "query", + }, + ], + } + } + }, + "components": { + "schemas": { + "Item": { + "title": "Item", + "required": ["id", "value"], + "type": "object", + "properties": { + "id": {"title": "Id", "type": "string"}, + "value": {"title": "Value", "type": "string"}, + }, + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": {"type": "string"}, + }, + "msg": {"title": "Message", "type": "string"}, + "type": {"title": "Error Type", "type": "string"}, + }, + }, + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": {"$ref": "#/components/schemas/ValidationError"}, + } + }, + }, + } + }, +} + + +def test_openapi_schema(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema + + +def test_path_operation(): + response = client.get("/items/foo") + assert response.status_code == 200 + assert response.json() == {"id": "foo", "value": "there goes my hero"} + + +def test_path_operation_img(): + shutil.copy("./docs/img/favicon.png", "./image.png") + response = client.get("/items/foo?img=1") + assert response.status_code == 200 + assert response.headers["Content-Type"] == "image/png" + assert len(response.content) + os.remove("./image.png") diff --git a/tests/test_tutorial/test_bigger_applications/test_main.py b/tests/test_tutorial/test_bigger_applications/test_main.py index eb68c4492..fd11a77a9 100644 --- a/tests/test_tutorial/test_bigger_applications/test_main.py +++ b/tests/test_tutorial/test_bigger_applications/test_main.py @@ -69,10 +69,11 @@ openapi_schema = { "/items/": { "get": { "responses": { + "404": {"description": "Not found"}, "200": { "description": "Successful Response", "content": {"application/json": {"schema": {}}}, - } + }, }, "tags": ["items"], "summary": "Read Items Get", @@ -82,6 +83,7 @@ openapi_schema = { "/items/{item_id}": { "get": { "responses": { + "404": {"description": "Not found"}, "200": { "description": "Successful Response", "content": {"application/json": {"schema": {}}}, @@ -108,7 +110,38 @@ openapi_schema = { "in": "path", } ], - } + }, + "put": { + "responses": { + "404": {"description": "Not found"}, + "403": {"description": "Operation forbidden"}, + "200": { + "description": "Successful Response", + "content": {"application/json": {"schema": {}}}, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + }, + }, + "tags": ["custom", "items"], + "summary": "Update Item Put", + "operationId": "update_item_items__item_id__put", + "parameters": [ + { + "required": True, + "schema": {"title": "Item_Id", "type": "string"}, + "name": "item_id", + "in": "path", + } + ], + }, }, }, "components": { @@ -158,3 +191,15 @@ def test_get_path(path, expected_status, expected_response): response = client.get(path) assert response.status_code == expected_status assert response.json() == expected_response + + +def test_put(): + response = client.put("/items/foo") + assert response.status_code == 200 + assert response.json() == {"item_id": "foo", "name": "The Fighters"} + + +def test_put_forbidden(): + response = client.put("/items/bar") + assert response.status_code == 403 + assert response.json() == {"detail": "You can only update the item: foo"}