From d0cde0218c812136f2f18fa0474bd87826e41ec8 Mon Sep 17 00:00:00 2001 From: Steve Pulec Date: Tue, 14 Mar 2017 23:20:17 -0400 Subject: [PATCH] Rearrange docs. --- README.md | 1 + docs/_build/doctrees/docs/ec2_tut.doctree | Bin 0 -> 8287 bytes .../doctrees/docs/getting_started.doctree | Bin 0 -> 12246 bytes docs/_build/doctrees/docs/moto_apis.doctree | Bin 0 -> 4727 bytes docs/_build/doctrees/docs/other_langs.doctree | Bin 0 -> 5297 bytes docs/_build/doctrees/docs/server_mode.doctree | Bin 0 -> 10556 bytes docs/_build/doctrees/environment.pickle | Bin 10880 -> 11476 bytes docs/_build/doctrees/index.doctree | Bin 30998 -> 30440 bytes docs/_build/doctrees/other_langs.doctree | Bin 5298 -> 5292 bytes .../html/_sources/docs/ec2_tut.rst.txt} | 0 .../_sources/docs/getting_started.rst.txt | 114 ++++++ .../html/_sources/docs/moto_apis.rst.txt} | 0 .../html/_sources/docs/other_langs.rst.txt} | 2 +- .../html/_sources/docs/server_mode.rst.txt | 67 ++++ docs/_build/html/_sources/index.rst.txt | 21 +- docs/_build/html/_sources/other_langs.rst.txt | 2 +- docs/_build/html/docs/ec2_tut.html | 306 ++++++++++++++++ docs/_build/html/docs/getting_started.html | 343 ++++++++++++++++++ docs/_build/html/docs/moto_apis.html | 256 +++++++++++++ docs/_build/html/docs/other_langs.html | 243 +++++++++++++ docs/_build/html/docs/server_mode.html | 283 +++++++++++++++ docs/_build/html/genindex.html | 8 +- docs/_build/html/index.html | 36 +- docs/_build/html/objects.inv | Bin 372 -> 398 bytes docs/_build/html/other_langs.html | 12 +- docs/_build/html/search.html | 8 +- docs/_build/html/searchindex.js | 2 +- docs/docs/ec2_tut.rst | 74 ++++ docs/{ => docs}/getting_started.rst | 2 + docs/docs/moto_apis.rst | 21 ++ docs/docs/server_mode.rst | 67 ++++ docs/index.rst | 21 +- 32 files changed, 1827 insertions(+), 62 deletions(-) create mode 100644 docs/_build/doctrees/docs/ec2_tut.doctree create mode 100644 docs/_build/doctrees/docs/getting_started.doctree create mode 100644 docs/_build/doctrees/docs/moto_apis.doctree create mode 100644 docs/_build/doctrees/docs/other_langs.doctree create mode 100644 docs/_build/doctrees/docs/server_mode.doctree rename docs/{ec2_tut.rst => _build/html/_sources/docs/ec2_tut.rst.txt} (100%) create mode 100644 docs/_build/html/_sources/docs/getting_started.rst.txt rename docs/{moto_apis.rst => _build/html/_sources/docs/moto_apis.rst.txt} (100%) rename docs/{other_langs.rst => _build/html/_sources/docs/other_langs.rst.txt} (78%) create mode 100644 docs/_build/html/_sources/docs/server_mode.rst.txt create mode 100644 docs/_build/html/docs/ec2_tut.html create mode 100644 docs/_build/html/docs/getting_started.html create mode 100644 docs/_build/html/docs/moto_apis.html create mode 100644 docs/_build/html/docs/other_langs.html create mode 100644 docs/_build/html/docs/server_mode.html create mode 100644 docs/docs/ec2_tut.rst rename docs/{ => docs}/getting_started.rst (99%) create mode 100644 docs/docs/moto_apis.rst create mode 100644 docs/docs/server_mode.rst diff --git a/README.md b/README.md index 5485c63c..2b4daeda 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![Build Status](https://travis-ci.org/spulec/moto.png?branch=master)](https://travis-ci.org/spulec/moto) [![Coverage Status](https://coveralls.io/repos/spulec/moto/badge.png?branch=master)](https://coveralls.io/r/spulec/moto) +[![Docs](https://readthedocs.org/projects/pip/badge/?version=stable)](http://docs.getmoto.org) # In a nutshell diff --git a/docs/_build/doctrees/docs/ec2_tut.doctree b/docs/_build/doctrees/docs/ec2_tut.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d9f63cfa2c607446b0504c6f849a7a9fc00f1a2c GIT binary patch literal 8287 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 literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/docs/getting_started.doctree b/docs/_build/doctrees/docs/getting_started.doctree new file mode 100644 index 0000000000000000000000000000000000000000..96db7c269c1fc6bbb195a3a10ea47c869849d3f4 GIT binary patch literal 12246 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 F{{aN*l~(`& literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/docs/moto_apis.doctree b/docs/_build/doctrees/docs/moto_apis.doctree new file mode 100644 index 0000000000000000000000000000000000000000..32d9752f64311f0df85931dae3e5895005a69890 GIT binary patch literal 4727 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 Fe*g+bTVMbH literal 0 HcmV?d00001 diff --git a/docs/_build/doctrees/docs/server_mode.doctree b/docs/_build/doctrees/docs/server_mode.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0cd41aa5686b1c07d53f09ea0723ddf0fb41d4cd GIT binary patch literal 10556 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%0AXSGhy94^edDJJEg9>P~sPi0{Zd@tli4 z?3>cslv$_tib zX()>poz8eVSIjuc0(M%C&im?JmU_2n4m*H)k1cN%%`1A>^sZc??!xSB=Rrx`?7fzH zAG<*lw!Fhq@0WMl{WAh}w|#7M_#{@U4_NAhB9<(T4qx44iw+t+;}y7k$Wk9Bfvto` zFWTfC@=nnVjYT`BJ`$*p+M<(#gqb*S)1l~(S?c4Wh1OM6sZT(6DA&m$kmv{MlSZ@x zlF=f~NuL@JZ5}$K#@O@Kr_nPb^wehnaST(clc#CMSD&@i=R}*0`J98UK960ThEVhz z^#ysCn1ju6v7o*zhu;x6SBj|B}T3`a-EU=7|8RZ?w^*h1A4z=LB)Gq42YSh=j**{w@>7ON6_s^8;@aykyDT)Q*$a2sVOT+Q&;pqN`h>du~e1=f; z)i-H6_*UiW`|WzW%ENw-v?Qj8nkw&dI0As~;KB85x~)^W4#Vb+1uBmK~P*NusgR`|9uW?yu+215+J( z(D6lUq%fm?8lv?xF&nn{>gPuN0@l}_08+(V&Iyt^*T+HNmzYr=GV0;-?(A0yd6Feh zw&W?6Jk^poP|*JR*R?{3JL#gM$JB2i;t`{MTNd%?R1sbBArkYuL}_BPGnw#Ul=j97 zb~->O*Y>Ek3o@pD4}p&v^@p;+Kh_iY2nqaCtz9?;;iQ&NJ2CZVh1kS;aPEMY@bxrHG=r_ET|}C_CP-*dabfn*J8;@@df4J2U+qo6dh2^-pM% zXM^eSa9i0{Hc0&|tXVL{WA$&Wh!lt?jQUU6+W$6m`hN*Ym_KRMQzdHMG^44h9>Wu` zUC%(H1gd%_GDgp0+VJ3|XE$Jck{IU@BXHEs%-B-N*h&T35tjk&?5^2DP7~lPnMLZ_ zC|%4u)GgJ!dmTg5p@X^|iP3ZM56|ln%C0Qg%23M?aS3?ou-8`Zvw9wr5Q=&}OY8_G z@>x`Oa-nt3oLN#rUN51PFh2(w zqt9jX2=nu(P=)!4-I$no$7knyv=i=lrj0b2M>-RfF6K#peOX+5up~||MLXaD4FD*X!bh(m;i9#)RNa%pPZ&F`~+U{)PYBp~%ajJ1}#@@lJh zmMf<&xcVAyWVi>BHF^mD5El-iU0i7Fyx?|PJg#Nt-IdJ44VXy}xpp0;g!=W!7<~hi zM~e4wVX9(ML%bHHg!+xh7@cJDi1#KcRG}X0#suaBbjLJZ{K+O#WK$aAk6FtJ=t@=D3VR2NKqQ1xTz#VYg7V7 zABoWc{!1v9Nq{0*))2*P2puL9Q8n8XnTh6@kbq{Euns2|npyU-&i$dz5a)3&)Zz@= zC(yvbc_uSGtCHzJU8b%q$tS-Jw^JW~HgZNkhszPdH*=v@V^@~+5c5GwDLT(Z#^~oU zdBppCDpW;(Z0B1oA79 zG5S?Z9`U}K3RNI4>dx6kZ1Zs=*5l@J1A*g}KXowF2cE1Wm9L?6@$d{lD&*SjRzo11o%Es4xuLZCtp*lItzG!IB#- z8Gb6!Z$bk{>&?vcmP)3#)@AC-l6-RiZQM@bx*a*A@8EI-`JG&-)!3CKJ;eNWN-13L zK*s2IGI_-NE-F-o3p=UkIJ=IFhYO+PP1sdco@=vY35kCGz--A-M~Q(eK4S zjRSoC$&wWeK0acWj@$Zu<;pti?fbcr0lynrqd$OuhzkM#AQu|De-GLj_YX1ehbwtM z(twxLkZ&KQlwkiDGDd%#$s@g=;KEeBq=tAuNh!hpDP)ZPG?PcXpP@n(?48{nE>(3; z=?>1HZWzciQukR(!_)5$k`ymX(w{>ULh*SdMt=eSG&<-*PA%aVNk&(e3=W4!IV{;Q z1~sejmr8`yOUakHnubl8ARE@<@{5*|uYkbluj0QP#jkN;hb4Df@)}DHS~C1#r@xK{ z4&OJJ>6?{I->S>hl_mLv$+x+k;`bfojQ%c{qZoXT3$+@%vZRNYzfUQ}?+3^j{X-^? zcz;BNs`wonHvMEgTnHr()eal7gv8%V>C=3R)ISChBKH#{M&E~j8btW)m?fL045ItX zm30Qu1Kh~)KZvZ+KgE9;{-1H7F&IDRcG|T5f|-9=$^1|QX3|5hK1?Y^;aA8Q{c9$V zko*l7rYa^i#QO-P6oua+WAvj;9`XK;3RO|)?B+EghqKivK3N7{c@#ZORLC+?_j^ji zQM8rTDwf3Gh4o`-LM;A(#OOcbzch+!2oW8!H5@?YkYq#rYX;Dtn2@{opIPqXq1~JpCu71nj?%G5X(39s&CV6{>)3?RiatIM zOczr!iZuO)(#69uOgMD?8D}B-zo-SA|3hN*llUh%t7(8F8CM@k?#WLvchgMf4ndp2 zg{h#G{GQ3})RSi+XY}k!<~a?RNe{WwjCStHEzH|m$=lX|m(&n%j8X!;9U0t0GI<2} zJStQH9_z+8Q4gO)Jw08#$tF@XpVH{yP?DiLPzks@kr=%I{{%N3zc!UffHqlHA8pzf zRdm*cEarqzOo;m;E=!~4Qn#4Wa1y|$Q<4;qBLSrzOpq;@yhk4JfC6aiW<5~KU@PoPDO0E+CG7Emi#z{*fS2-GSrGzMxl+8L-d z%zHs4?}ZI`Ney{%5v2sw#mE?a36n=at))U0P^Wa$(I(Sl;{%|>x9r%>(W{y1f=3pT z+Dj=7&zM8UB*w#cIQ+s&uLB7Hy$lKN`tVPH(j&443;>yYcsh`$+zDLHOtg^;$3Eq1 z>u6>O>+n^RuWO_GRDA`Tx1P=Gu;da;uD0YlOZL+%L#(X)IaY6As*NGlmi70pTDCIt z=nlDrvgap9Zt0S%!))e`Yvej67{BM?hh;x!m+rcIEu`U+iQbL*dJ{|AOwz=O>6~Zp zO*(jvl}qAc9`{*z`*=hw#;4@5MwY4ZlL<-pc~D|Z~&y?$_D>%f)+ zn+FGX3?3NTeC_7J%}e`kSkbe_+Ot$|14n<;nL|0)m>k%y8$^oTfk?D zBsxj-ut)DftEP;*xAS96VOPKefQe%#61o|;$U416aa+lsn^HED~2 zqqaC1Kc?n`r6rR}r6J6B3aM1gvr*leJTRi#(xPqBDp(V?_EftO%~r9fVnbq~wzX|# zQ&xVDHRY)e$d-5@Yk5nwp$K*50c+Gg&u7`n}$Qo3*_d)5X+c=w4#f z(u8Q&)*jCdbjDW4i6#-Vd|x~1z=yD9MlDZ>wro%&!#%YkDOxjm%kz*wJ}KJLR%VyB z$31mIQZzeRPo0<)^Fz{;l7VQ;NT8(cf;u^=PN_BI8hbA~yK?M!*t)~@-A(ZwZe~}! z|GLrmsI7N987O($f&J=Kqv8p9+%f4+6D>sxihR{2mjr1`wEETr8KSzyeD1M2JxGsr zK$YuDTc`3?VZu|ZB*AcoQD;JdXp-n}qO!lMEBbp@Wq;2u_j66u^PXfN(aT=Ba;y_t zc9NDjX$jy$PxYZAYmHh*9ck3QUUtbdV7M&V3v1gUXA;1qtfJ$o4Q%U1qs}SYdTyny z=T+Exe%ZVWBJ(y?T7O|^>qW4YbP)LQ{^9MOx)@eoV$`K%Wp&GCuy13HebkQ$+sDYA zNO``ceLJiA*~-mEU0$|wOQn?q6;^I7Te&T=@`_3;w})0<2`f*8rfs37_-LppzQ^$; zMvU*OL0Em2Q9H=$V^a>H7n>`4p>_i2R!Fxq>r;N6(G` zOu0d{)41y4ab-Z>n{>0Gu&n4PPW6uv-z$1Ny1*d*FBj&J!Wc}BF9dgde~`Xg^V)`UMOxof5Pns+l+ z-j1cN(N@9Bv&3QT?wyLMTn)+O6pdJpJiEmF?HnTW)BDw=+$Hk|RAD-OPy!%nRgeFJ z61d3Bu{?QD)&eARa+g@J!_5YHJ07ZXp{fW~?g6Dp6(h%V9ixn8d>G+EX^?p!(+8AK zWI$3*G>RJs0jQhK*%{wcfq{dxJK+{XL<2D=W7O`142%TWftXvIGHMT%MJwD0tGrT6 z4kK#sQOaiR`9@7uRAh=pqn?!z9olvMls7e*cJn1@!x8KCf+jY~Eiv_M#MOO9nS@y6 z+ml83#2&V^HR-A6U=j|A1*O`4jX3<=A<>bwv9f6Pow{iVi>RC70KR`n#GEWbyEE?C zT0L(FVKzupkK{HJ1Y+St-c6@`H{)v?f%f@W5Y-E0r-e22fM{_hIs8sbT5Au6i{+s- z%`&FXI$9kbTaS6%hl#AcKF_yz+kIQ`$-6~b>HBD=^nu*#<8?Yq`B2ph#j8ZS}UITT!qfxIFOQb)Umv+9G zN?RUpPt@x~D}_~bQ^cq>g{2G&>FdSfkSnGAY*hCK5u3CCnNERPy|EO7ZV?N^4MoZe z#>bt#>P<=YW-+f9qe{KS5=$`uoWi(EOaU9F-kMamCgd$*9tZT>#8OJ*TcY-GP~0v$ zM#($zVT|02xb{_G^b^}kn%~x-? z5O&<+ly)Yhuihb+tY5qCoHbZh%A&<$dv7KmWbITDdm&pFJoV0`dY5Pk2Y`CFC2tlj zYkN2Lu3M|_L@c!mprlp)uB3VocY_9vygjMjEAOxd=lJS<*3o(3kyxqTpHv?Zu~cau zc zr8OB<>f_KI%C+-wB*uaIgb{6}y@~qdkZ5-?7&T^@r#^*|8KI{>4Txiim3Dz5wx>Rm zRG$^?76LUpU40JwEDfO;IqLKBPB9t8hLO9|O&!g2Vz0iE@CTS7c$hD?;Ei=vNh!tczk*42S)u+ zb|%$*m8<#v4J~<~t_Kg+^x%l?iMB{|Ry`EL@gp%0T0Qk+qkaNAYd7KPAfLDWRNnEh z7yl_j#=}Pati1L4c|xv8%Hxyrgrqz%DY2)gJ?<}Rg%Eej!AOp&UqZwqMm<^<@vC|f zUGiZP^Xo(@a#`7I_-~SNCyQ3b$0*j;gtm$@rhWr~j~VsbvcTUp68H!S{C%xm_%*@L zQXyl<)E^+`aijiN7V{_GPi3U5X_di$PYb96?ZB1jDf%0B{3Ps1odN{`D}N}!UhOf` z^yg^vN3*igZ_8h>`TMI;e}gu88kimr_nhrzgVf){nk98TR{y}_Mvi#GsDGBN{nw10 z{&zwW=1&^+RGIoeji{d>!~ZLRr*4|l)MWG=d`m2PE*EN@-6fv{mu^O*1cG`VGtRGM zY@q^eP0LU&?v5r=PxMnTOK5Xs7O88cH2jUK+4So+G#%Kl+mRR@!xtUk*-}f`K{C2> zWN^5-4gr@ym;SNZ%R^Q#U=jjRFGSYpMfjF+>EuE^E`+9Dj7A1@2{SIOWIV1hV~%tX z?=ngW)8)t*y@JWZe^7lq6{;|eb<>K%8}`|vNj8z96DY0u(bFfQ5;&fO#ORapB^;~% z`1C2n*Oepl8X%affNdp9d0Hri|DyG&T$lm2I5*NjJdHWKDml9wbLL11b?0ZcO$m&uFT5!Xgl1Mc(a9&%p;u%N>`38!`7_7EG|A$5~o+A9cZ3~ z#OSl}B{XNGUPIEla%6ukur%>?4~yvy#e{J7aiI>*GAL`&UKdQG#U`fLp%rr1BQbgd ziz2|fa-<1+K|cG@8&McrGppTaAO8^2c21uIF3hLaNSQvD%FB#C4=MipORF^g^`ZkB z{HcaVP#*qerw-F0*IulXz8st@=FwLEP;LBejkW_xeLe{tlJ`&R3y>R<4@~P#oOy6s zU&xsw)A}N0Y|$c}ELPq_IIpsJSBPJZXldlLxum`rbP0LCd_X=ZkJw^i)Ee>~4#Yg# zSL#bZHE3ZFgmI&zV!hOtqAf_0vZsCS8rh=n;G| zlO)c@a%4#qy331bSgv0}Bf4^kuXi1m*bVHBQC4(Ks3@Fkf(z#*<@rf@K~io?%J8^M zUyBCz#&ygzR>}1AhD=>Kl22WJ2Dg(tu1C)38@L=nn&d*Q#;zRcA?6z?C3mEdG5VQI z9`RaKsCI{hB(}O7<~D?Vsc{EcLgLeu)-DhkRKgKiBu3l#k|QpIBglqYN9gf#WxY4_ z1UE9=5?P}id?7A`JI95YJHLzDX?4ys^JFD+VFqT>LtS$zCDe<^7_FE*Qmna9ub9*j zuSY4N?jvJ#z~m9{ZYorv9_z;HV*9j0&lZ2Oi4^UjG{hfEitW=;tlo=C;6H`L=x5{E&d+d{~G7KZ^4&W}Pnyb%r>7lN^lTz}+yO1&Z z-Ao=Kc_$a@6_Xm`y^B)v!h4W0`n^mZ@xG4=RbE)!?G*51mB;pE0;lmfXPTu~$TCv* zeoDjTcY9e9-(lzvpb5VCAQGeR#+T*`UGvls!aHPZIBUu-$%XjW#GVf^ArJ2lv)qq_ za>F_CQ7+VDQ^NIQ+)luLoS8pS$^6L~m`M-y^iz})u%AZ8=+7{D1ng(2Pz7v9_>UEM zILezXreqXp`W&Sz$6|nr&IIBtM1LN&fb$DTjQ%3N1ZOo3kR;<8BgrHAOU(V{kUIqJ zD_p1tt<>+YayyOWuQBu2E1ADB12gHNu6&bH0{mOZ7<~_uN1%P13-yXg4e{PfDFOZ+ zWQ_hUlSjPYqe2znv2L9CyEyW9^=$Dbn@G|3DUG6iNrwIbDgpNokr;g+z63X|nOjOE zK$|RUj5dYviotq6i+Lav6XO0L7wWrTg6;^~8M=p<_eYhyKc0b?)KHIpLMcJ_Q)G;O zn8_pPeny2V=oWY5w4biAdZIT1vjvbWBXvKgGz(o1C=2^lC@ci?*Ibwx%-^7$!F-H)e_P4>yBT;%4fXE#loFVKK*s3DnLGmX zk5s4vb6z)IK+G0EvW8UriPDv0&9o)6_UJ#O2+;n5#OS}`OQ1!K0E+CG6;OX;0e=q# zgh2g+3o`@t1lk#>e=_gCDtZ4s123teUOY)D0reCzM*oM&BcT3Eg({#<=*GfR$o5z` z|F(N@UxqV$x)7dqxFicnZPQ$&;r;pOQHk+TVw@!EIUoU`bCDR`j4uI77wI!F0A%XJ z{{y*hBR3DC!=LzY?$eg8wvHl0Scijs+T6`&t6D;FqBi`evQ03bOo4etL zn>(_E#4n@tm~SBTa*)7>E07p{JihRu#Dj+%S=8854DSidaAL?1!g~@IX723CXlIm9 zVcwOMyic2fm();CPNkGUjw56AX-pmg)y0K+y`+YCyD24*Pe;b+RZJf7odu7^j*Kh2JCo*b>iMHin3M#pseY}UMnHFqZEs-)bIl>JFLOfSN)Z{>?Q-NRJ9 zA=S42`_?^l_gVLzB3DuN$Wu2gUm-Ve?OnIt^Qi2n?EUSr(+|txFxz&=6_AF%WqN(& z={}aWmZXX0nY?T5O4)culTYFJ7eD5BuXac*DB9sIcPh|%5tqJS^fvYN?b)-Zw>afX zx6teAiN378yAOn3pI!%PxB<8FxE`bT0E6?zQjcC*1ZlqeOYI$Z_2gmP7UPaT8{VyZ z(zgA>VkPb`CsX5iDp7EKJ5@fhN_n{6vhh3scav2z7VWV#-t5pjD!lHSES=@jyS?by z-gP0tD7VM-dKiaMw}Jb;k^9{YJ^CDEGa64}=wb;E4rBUU)QGchNF=rlY!=)0Z6DgY zbKiCSBSYJVw(T1j8QD3qZ*<_=fsujLeb=w;*_gaxwLT9VgH6*T`g~$-Bh$t)YV`#u z($#J=9zx2wVu2pd@T&pF^OO>vzU$(xp=0~wj3-@A_vuX}X$76U;_ee+p595|n%7F_ z?d&1ZNf$=gg0RuJ|2rfWIfY{2gCaw(k0wNW;E(s5-{UzG`a*~b@D9ZurzaQ0rY}Mj zZddtW7x%%yfnHQ*^~F@LFTs}%dRvqFQe^pQh`x++N2sp9T(_BW4^Z9Z<+?4Ddywh| z%5__j!v!{uyi*tt(Gw574YfvJfv;E^-EEUY`GOCQ*^Y+8qBB)+{GyZDmBQN)7u8py V8qyDp=t1IaPnFTW3T2?(`#-8@&e0y&aINBrX-p7`Q9Jj^Vq7cy61*db-TJ%)9N~+ zZ+j}&UMys?`N>_mR61YBYG=BuP#3PW!I5F#DD2me7}AyOOc$1Rr}JU|C>+qxGO|yf zJ{{>oA=A}SpD!d;A)N{b&Tbii=1f;Ay(Ap8tYuYHlBratkjZr=v-K*S&lOcWObnjg zG8(eZTp?GV$>)pd`hrTfFHEa&$g-BPMl!9wGuOVbKDjtwpHHhr87kIkMYd(S7N}&t zpo;BWz@WI<-`bMu~oYaN6${w zrPA#=m85pK%Iw7GWU-K2kjoXia)orO^i;TNe5J%7c4#J*5648|Y7PFt#7NVdlS;ig z)*qA@p!;%le{f>eo}Qf4)05-;A&JrK$4SzUlS=)#hF_OhP1@Oslh9$4%AL5TKNMl1 z#p%NF{xGAX*}zS?11I>y6Kj>bZ<5u0J$BbBCI+|rnQRJu9IibttZ#5L3wZ*Tb>TY5 ztBFy#F7iqt5Xp)#)>4NdnmoC_RY*@u3`CD(ghJ2nn;2+7>$PkQ(3AwoJY*W5_QQ!L1o&C1&rl}QMge< zq92E2<9Ug}ZOBE%fuDp*s@P54d^mYtVo-ZFna|^R%Dlt?-MR^mfX$@BP5sr2iT>G4 zS2}FO01qymM&VSyufO)ZVw>9=`E)z8q%PbH-LZKTZqeY!5`BEo_1E*)PmD`1=?0<| z*3;;R_H?SXZE36U*fI*Y@(1}7^L|5OkTDZ(?Ssa&27mHAf66?6(ma3TdEqt<{+j;k zX@8S>;kFHaoj)jD^c&*?e1w!3Th%^@Y!`*w`>WGB262bVLCh4g>AG-71U)?pcS6u| z%FaU9PphBBQ+E2k&GpTtQ+8(%+MI+C>j0cr*>pIAk?ztfQbbsejBa;zJ8N!w2@p+Eh|4tuOe= zLVYru&0(flnk&|0qDm+88O$6qDdmcVdL&LEU*DF@V+z42&L`{MXVm=G$rkw`Wyj%c zcEFz1I$#ioh8?h1gWuG$?f)^RaBuX;oG5H2!T+ls7tTd*CZcd3Ivaz? ztM*7@Fek6NUt=+8>+b$+*BDm}I^WEe&@^gU=Jn zkHQRH@ao!RuCC4I>Kedhn?8|zIfEAVvTe?wvc)VSuV$tbOuC{l2RA-V`kE$Bh3+T} z>HSi8pSgf}zy6|heHZ3eRbOP9&!5i;cK-bOw)BFWN^dNuM&8dAvngC{lPR1w>AGo{ z_@>QwqOV_^DfpNja2{?p>^Iq! zs?Xr8EAkr5ldIGraz?3Y9WuPs#d)4l%*(3O!UFoG7=?@20X0$Z*j;%JWHW`dN@nZA z#puK(QMi;g2E$V+ZszpCmBGOnbMg?x)gNf~ZFnfch@$W?n2;=7g5lvTZ+wJ@BjcJ{ zCIG&|K?sk4og<_0cMRn>(S}yO+s||@nT#6^eIwYN?n>eQu5}4cx4Q86Aa_(09!-l| z!vFu{IETm3o4Ftivt5M8vY(cLEd23av!x&0AX~!a(zH0Ky29g@$!uXRRcB_Fxn~RJQhT zg|)!|FV3V2etaw~-UExA=8TE(5lnNm@@N$PrEKM~6<8V5W5q8iKOTiol$D=cf%3Y& zl`A^Q$F;34dOVtcK&CY$fqI2=} zMlG!iUxAIkM&YYv8-J^2;|1Dy&F4k^^(cG;;Fe*?ag)vUv-xG{O?3NTO+w4%^Y4|G z8slSV=`AF4h5p;f+Muk72mHmy|u4F3wx$@4W(3VRfX@0>d{5J}JEpb$Ra1UDjL~3O*5DScb z24VL(Gg*xm<@TL*ICH&Jxg z)w(UKfFG8@()GB7?9OGnaL=B~b){8|a4(=Eo1!Obt`|dbJ%XERnp_`ZuxvmPsSU(X zEHHi;l+6-nj*pYZXL4^S3L9w!O?G3cxM6s{B=;l{G7Tn+<`i3Vlj@oQoiGD8Wy$1j z#6hH{3fv?&76|k0N!(O+sLcrT0y?m}XLEtOaW%%r(exGso8-1kZHZ=d%T_2NwY3y=q;2f47?UUYZRx-BdBB)1jNjs$xF-Pqiwi<0ZZ zaNCLCrWyu!h7b&Apor8iVkQtSZdl=4yTo~>yx^b;rGZ*(D z+zaT)<~U2#TrY;>Y=Ud2_nr`gKVMfH$$IzFQ6xzVMg>^H-=$Aa8qrY3n2&3EQ&~Vilta!95Jj4o?U{> zX{6@aEfqI_9-blO!c&QEUhCFO^#b8uKu0#sqNurE49!IZ*G~1t5QF6s6p>mghGK#7 z!=P-IcB&sN3WsO~P4-Z!xM7%7k3`5+KTI?aw>6Kbt{Kn?lkrHFO!eR4AX2{%52G*^mprb42%Ctt+P+*6%az?p?}x z#Crif*&NRoJ=cxl_$Pw(DO}a&1(1X1g(xC*kywfa#u3A^dD_W+u_#=k6*S#TrQ*h6 zlKV0dGPy4o%`0rpE30b;bix$8iY1f#Y8*uB8iB`JhGQO|kt`(Z_sVpqx%#E9CD04# z!tSB#M8S=$F}^m9|C!*XD#osd09|tfib&lkCSrl{z(DM-krcm4kT+|j?vq=j;(GSV z%x;BTnB6A2w`*Pb`lV;_6!>+Q=-olI7toJQ?@rNjofvv|5v;$^Rk3(Cq~LfDib&ln zc4C2X!;mUC-Y3ZWHBxhYKq{{L9*z$}E*u{c-G{Yq?KFRccrTzQo8_aT=ejX0|3dHz z()=;V!Sitxk$OTb#RB7qVc9(GG=EYQp3(}M?$c6n<1lIdj0lTk|oKxewI5<@Kw^$OeZ_4u#ECI)Je zdKI-6{O>c#Sxn>V@;Z#Rvz(Hpzd9*tOOepUD3Df?%_hRF30IG=k+Dk%M!~#Q^R^S)@Mq~ zOzLY<`$ntj9RF4-ZU|mEQ@?{eFxmLMsQ*w__W~N!go086{z!4~+llud!I`fA36)6w z%qFB4@7m1_Cd5;1>KBOE|Nj+8Ww;EDo%SnB_J5zgw73#JVKESOFQ6N{|NDyAwPup6 zAB5=tD#7%J1cNXDMWhCbjj{{+bq1l7UxNfcSmWi-482JEzlfqPD75 z)44WADsCV>xwabQrCb{;>Z_O4y?_RtTpLI6|037c5S+=iHBpJwcs3!|YONDZfSg0I zmf$L5W_(PzwOMi~>TwXMbp##@MBNMM%N~k}B6h8rgj<*3+Fwp$5Mwwz6p>m_43+)R zxicK4tXp634I1B4k5kK87Tc&E&xI5+cs@=ZSxV>C1^|=$hN9#~>jfq58xcqD8{;5S zlLQ_MMBNMM*ycW2#I7}yhEoV``rn1O39#shO;JRuQLL7oG7_gFdh*h~+)owl&9t^o z&&{Rc252t#TZoXC`z=LtD_e8x>Y4$aFiEDNbg!{^urJdkPbQj6{x$%?{I)0}wH-c@ zo;tAYrBV@Cz({C*2b8~I-dxRh1QI@`qlnZ__~a?D8FFHmog3>W)lZ)_6Q8^6)Qr!W zU3d-<4}Ilv+?>XfcbUS{`X>IdjxBSO9eLcjF<3puiB%m!;!*8P08(j&_;M*U#v2&_ zE)=>1@I(V{KX!!(0XLzD)NW!VCV!Pjz-lJy2!d=(5dEp8c4q^e#sy!)=^g|%m2J&J z6-hN4MWpr=#aLh*(7Pm+8)FaUI<*%-h;(l;Fh?8E!`CboHw+Uu=+A|`H0>oseV?+r z7to+)SH8sVOYw@QJ&*m`A~-Yc?T1RF_Gc5uoDVi&wABHqv#So2_R1I;4^7Qu$y5Cx z97L*B;ITl|y@0muQ+>XOU2BbTi7H93?s!JfhAKL~9Yv&4qFA;|XU^GNn%2^SU!d`N z6nAP?9jKFzFYRssUQnWwA&ztc97JlNz+-`^djW0Rbh09Ltu@BiW6yLFZ1M;ZbfF45 zITVrV7R9n%I;%k^6ui=Sx%Vuee=3hwk}8PQ4WoxtkvNiCgo8*e7I-WWbuXX?o755! zyVe@x>yy+{g7v*;PaFrM5!4Pr5vfB(y=Yfy^>f0)M0ZI3gZsKX&6!6O9YhSWpw zNa9HFcR0Yxm%w9zsCxnZ*aVLfv1`ptIY$$$Z+qNmj)4d?k3|uwWn!f4gN|#^TrT+I zG+rL3;vA`tM+3Q?AObg<9&RTRM{a+>L8ML+cq|ZgFQ9Ro+sPt!tu@9s;NYD?uzsRT zLO2z55IPM-q)r#jvSE622&RZ_oeCfMs+?xUO@A9Z~RHXuItTP{$aAt zxht#LhG&B7o#n!+x>a!MDu(0*BxCpA)e@S^#Pr`a1ULPE4f|SzfYG`RMWp^L!Nvl^ zg`I1UmVJ+Ry(rwE74)FpC>58gxyQRnguKVQSu}64HE*r18PEyy>^7D>fp5n_r0x)S z>0YH--AS<*(6HV0cL~gmr!l?}P2Np#=@z9~-GeH+;a(Jxx=$2ifw4=cb~nf><^6(u zKqEE(2c_cr^U5q9f?QZUEV_?q-Cn0*UOh^X7tp-T38Gut{K;cpp`C!v`oL z^`R)n0%Mm>?QW0+{z#A?YozA?iBw#FUYW(GkPC}{itcAx*G}MUoBEs}EXT2sABOmR z{!IN#z^-k>kOcR(bt0fMk6(&Z>8dT?P2sC83%VJ6P-LZw9mGs38=40S(*T zQYSDsp2qkTnjA{7Nne;4hAO&YIEqM(5Jjwq5rZ{16m~aA`i>OjD2>#Ey|PqXe_olz zXvl@dDx$lp*0s~OQ>ifoc>&GaTvijXYuj)cOK`9Bg`w5a2u9;jL~0FDj|Ij$1E^rM zrXa^_q-HchDz4WaMr%PXjMf(2daYYCeb*rz3ui2>^qnYbt{1~?U4m<;Zwz9v^iW{o zObo>W2?}Rve^a)k=j<^`p>xfCcMLN+KxakpbMMR_M+h0 zH=K4LSpONfx3L`|0JG^Ru(~BCVuA6%Kq{E+EXWxeshRB}71whQvt1zK=skmNy z7neiJI%haLW^1JADffgJls#q!x*xSYZ4xD4V67zKca+ ziB`~LmrBJA!=&%QB4qj=BASQVno)JlfKHfehp}Y(9*zSnObI;JG7z)z9?8zOR8k#D zgcs1Z-7~)vq#IIWd~;g;J;6=3m7~yt&Nv!Hq>d5YSYS-kwcQz##K#J9nMUefSS}UU zrB~*19OS~~c+ovU>&nk5^z@n4j7}uZ3+TaS^asJa<_)8h2-ZK%=w<6%h~rVJd?v51A_NOVEUde(s|D)D)EM8AX0IVw-&&N+T#F`j z$8{*MP$SA%s3Fb^=-loON$2YYd4opkez;L8u1~Mb<|fF6&CQ~Fi`JEgx^xOIG@NcF z5bFReEKawHf@|M!x}9MA)}mzW4hX>PP85;4OH9N9Xcp~>2)jE`81&4(-<`V_y z2GkhejyBgNSpUgVY{XDUM|dc(WFwkbvLVO|=+^ECN#OMb*`SfS2R4w3>kv;bp`AWA zWJw+y;UH2Q3taz>Lf=Rr?;6!4qVV;fg~evFpk3pJ%@l(5?Z)`a6PmMkoC(?renV#sYnaP1V{ z7Gkj64n?H47eleY_+d~sOFM;k5QQDJf+jm%DsC7ig?ADmQ+Q|5oMCJ3Qe88k6At~Z zEIIT|IKXp70@sf<&q=59er7>I%_IgZH!Q5a*t~&Xg5xg*9xb24mj~0oISYTW*lnQPK2=YLU)ZFGt#dY1o?I6g7TdU~K z*Sa-RI!U+}(2-5BP1Ia3hG09vwNp9;F<7QiL~4N;iUr0GgR)uLDcvCozE;p=Gg5KG zFex2~kSV=TG_$s5XLZehPMCUKESb_d9N@_#f$J}MbMUgT^yX7lNC*~lSXg7P1nS1r z7@tnFd4lzqypov$n$R6Z6j;C!Wh~$j=LK|bcZVeOVnHs^NZk)hrQ-VZ%4`mXT-Y2U zx`%3A>q{PU_3C83TD3- z9=SsAJ&s8WQb+u^60%M%+EBIU^$ZIuH^SMqcuG1bqe}-K6TraveXx*Brdn4gq zKu0#Un?%j^VyN9raP8E+1!Azg6-A_O6GO4U_+d~sOFMOM7lk{tf+l;XRNOF3>fR+n zrtaOMd5^7mZ*|RpPMB!-v1IDrkAp}(AaMQlu6dVc^&rJqwqaq7_(KA7<7tfVLX!^@ ztiRsT#3QJp8y-c0Wg1b$G7T|!CRW>F{hx)!3GS7?F!Tc&!RSX6 zk@}CQ#{y%W0aP&hNsvElq-OMsR9vq;jQ$I`F#1(=``|^_{EKR>-!H8MIk?f0&8@Gf zxn2yne$=U*zWpHv%K<3xvo|pm3ydEIWwW%?caSIy)(V>J5UIFfnDng^A=7uLXb!VA zhga7O=!Cg8f+f>;Bn~1qO5i4a_ik1zQ;bC$7S@oD7ML4PV|*q}u0pU$Uzk`GRdmA` z6j-DYMJ&<~gGX{u*xexMJ64dZYoz8sPAaZHJVu0ex?F=LS*(cz{8&xk`kiFvk{{;P z1cLD0pM}L`Edjf>4VSeE?v=hURF6h5S_eg>CW<$zljU8>0@EcTm_Y z?ev`@3Y%yJO?FeMxM7&|Z4@EXcdBS^W@~OJX4f!;Ix$!i{<21Pq!6toSVp~+v4cno>0*xqQfrc17hJ(WH21(x?1i7O|YW~xu z;`;N-EOvriSnMpiGqkQf`xf$Q7lQCTpM}L`R{^`W4VNZ@d!;W7?S@7$nu#J(yNh}( zFxDAB1*5ni_s~eqXqHr5uRV-rLoST=6y3eFZq4-Fn{Y3nBb(bCQFFZ*Zp{SOPT#o@ zgJl9mr1lX*vB3CYP&P|DefJdwzFD@sw7;KJ+%Qb~?k_^7?*XEDpshKtx@JHp%(a79 zGJRWd5UKeBH|e|Yt}00}7H3#kL*6DZH=f4$EShX5*rYE^q)LJpo0ibx$MmSTZ%#IS6hCV^4l-I9ETq&i#>Y#3OOSH`L%N;>#m z65oNYjzk02ZSbixz5LpLc@w(&y$Gz})lq2i$MFTd>S!JgmUr|vn|IZ!V?<#`SUwg< z_$`>!W72EWdv+C>Q`%KTEvFGLU>v5`_?mQeoakAO&6^?1j*h2-?zyUVPk!6UHEB%7>Btf05QOFKEp7Jk9PocQy7o;0jc{@m=)D5Q!*8Ga}G_iiV zwk|J`o-glIZgSXxazSt)3{Lgn6v*~u(1w>syyOlcts0-QNBpU}*H?J-N0^@x# zib!38Pm|99Iq1_w54jnXO9gnD28v-lC^Kbeo4I;toB6GE)d%Bp(W~gb@?cy6xeUgY z;^r#jMmAUw0*)JXH5I&oQQ53WK- z9U3abzz})AIYd)r%bL8pfu^gB)QxP{FI1}Zpl*T`qjWQhNZo?Z(kPLFHA=EAuQy^*x5Er~udpYZ4Vb}qi2eP2Za$&zM8zMU zv^Swpcd>1#%ycd06gL6h4N0W#5d*Q7?M#4`%yodZGv9P;P&3AR#l`-C>34M>Lt3ME znD?`7h=jRc?=T;LBvKEGjabVxJIsn%=(j?x9pgh{fB(Ro#p+?kGog2kkFaf+#JGPs zM)w^7*b1aOSL{mFsYd}v9{dGGq#na(DPejp7}&qaz}4e4jsbl_fO6WXCvlt@S;(~) zR60FrG4_z@#_s~2LaPLZ6qa3V%BSwrkhHs-Dj4-T^$etl=UEhydJdnZco?BRbFp)g zcBYkxWwSDVrLt2F{NHaJ>DlVJk!;lEvC|bCY4Hesh7~Y9B++25ie9vc5{;< z^)i}fC;E3}b8YGs952&nT%u04VB`*gd4R6B~=EHw5se0Qg!T0d!*13%&yxPg{xjEfMo& z<08h-j$5%6mwH=-|G;NDG0?Dl2eoC1VTSsGOctTOi#Gi54WA7G0}ALgpy_}n(uu*H z$t9_DcfnWhqaN?eH*p<^DNtq%%oY5{7k?y%Vk@n#JYQUjG5!G9*@@xheY`LgSUz5yII_L$JS%v%k|coVOG;ODRJq|)UVSBie-khS z+hxehTl4B`Y5fMDJmC_PL$*o139mK%Oy_SKtun4Q6}zZ7=8Le|O-T-blBKX(vG^q)C< z*FDwG(B<|&>K7cy#q_^8h}5rQ)4b-T4<0YC_KsV|Lfw@h$K_}vq~>lgt-yIVg$7V&NxH4^fi8ih~1L7mvd=u!%{ zavL>vQeKUQ1aYnce>s)Hrh44=1zVbNa#;nk*@`{D zVsa*3STH%KI;QxA&g>L5hL9o1wf3}Z*R~q!%dkmby1Qq?w7eQC#z$bAz)W{5=5}rp zmshJx>u}7iR*d7&=)ap7o=tXj6tTMy;Fz=4Kx?8erqnfgFa$4&#I9e-&TchcYz)&w z(<&*cCZH{jvjPOMgJ73_;qh7mtn-suyj+l(tJWrLKw`LwN^dEr>WTAb%ubBQK<88| zx+f>Q@93(JEmN{MTnDhkC{oTt(T9Khlq;S>(WwUR2r8ECdyLGi+(y? zP%*SGPfWm{?z@YHTJ}8}8pzOam0ORM;oM*j7o655oD9|aXv0{JOcgu3Tg&HqUNxW{ zQzT|>Y=V|E;0-i*1h?+tPC~Go#!qcF6zmud7N>2Fc`K#?P(hY&1Yu$@WRtv2HcP3E zSzS53BvWA0V}}LPi<4-2Kw@Bfu4_T2LroTwGSbNDMH$)nQB9H7F?iiKAOFUEhXhLYkFmKu{l(4X^5A2bS+d{2zUg~g7V~%S6fQ! zNN2>9n>+DdKB<2qxC=gu^3Dbr;Svf75QA)+!VkM7!*^^vWqOrAT(AlIc6 zw-enVm|waPMP`ZGp0GZN3GF^M&1(lU-T7e28NanNsTLNy)eb-{$H|y%Yn3fs)Q)I~ z4^E8eoylrCtqn-b-4$`~#N$C`-%PbLYS{8n_Q1qOe>_#u`vo-v?bz_CBaK(iCb5&J z+64`>6C)(~db)a7X&shFJcZVC+6cP}mY z*f5UsN-Di*3efo}Y9?X0qIMOMOIrO*ho8m&g4&(U{j)i|r$5fa@xA-FwfBj-2Oxo* zKqELkxAt`EEGqZSq||I4jKCRVC&!*>T%K4{PY!9lNogMaTJT%V?vrXSKya#=QIk_B zul7dcyu@m9K4rRa-zEE(rn@-4DK!VuW!L~KxfmzDZfZsoFCNmD&#sHLQW+r~%tVZtjoM--6b{_DE}@Iu@Ip=IL*$y&s(0EcV|~~tDO@@ z_GXK{r7DkilX_!}xl`BG7>3@5JY8efrShVoH3sk5A3BP#bqrF;q8i-X9SG$wL_x<+=xQQIzS2)2WNYHQYXmRz{`VKn2qhPD4+v8Ha13rxc1zb)a~P+cbu*KPHI_dS1PdW_Luud59~&rE}UG!y=o9chAah4qv!I9B$~3bpyfRVIW(=jS$Di zahOCLT`ln2-k$6h!?PKbzn;H-dTc4vFP1h*kI`!3^mI$6R8sk#atU3vX&i3WnqEDh zjl#_rr^oeRP!UHIZh=a+JVf0n+;VYxY;PeGML2FMeUp~q40O@BUO!*Rf?wFa7^CQKk{%oB4h?7eh+^ATf6K*w>tcV4#s21t z!|htr9=mG>Q)&hVXht=qX8GIX{H+#;+qe2H{@7gEZ%d8#>0<4M9f|mMh{GNIZTyWR zzkPAIQ)^v+=1YZKOSm(-bC)>WmEFmdo)7o4lk=I@ujZzJmti2uQ;58kbJt`rQDM#_qdjju$g|98S-1g zy}@ChIGjrk3&3GcvXJjl8MQK5@-wAmrcfy2Ok7zkCvhU@GEu&;QlGTNaw&;?C`HMh zOq9zek>}k@NPGBMyQJMBKfdZX+?O4&U!x8f%b{Th?BD8lbnX7Xj43<-Ju)v24Ezu>-r>PALpGS`4$0Kg`q1<= z=JN1P4Hsl2ThK`h(MOzU>w7+21m@{DJPcvVtdo*l0Dd*#+aWwW4!g)f>Y7{5&^say zkEE!bP|Onb=4U7UQfX-R%$W$UJu{Fwwm8_{TO63_Ypy2WHQ%FJ(__#ZWt9()mN~qM zDo*3YoLaUEkIC?~MkjUqx;OO6(PDA~QF2aQ5{H=zyNW}Z8+wK%R@j@KVlHGeDi^XW zdoaxTV=_GHCRK8-uhr*S-5-ZO>GKk}zqtf1G?&0UdTNP2n|(QrgJI6hX|4Z28VMj<9LVGc(R-Wo@|>Ok9b9S)`QChKmAPu;W`J`79h_<1 zQ=Y}saSF%eZ1<{_ALN}vOLz`?;oLYp553@@!l1ut#x*>@H9d+w6<*-4%IW(8IUPO! zBwD->!?rF+H9aT7i!fvt$KkgsLw~Lw`Z3ydcu8dj-GGDtC1*=`DGXf}hnI7tz6z{| z-e=}s5r-rM5vc7);6#Z59GZlaVjJ-j`;12Nwjhj&$a!^DGIFv`QbnL7702&=Oa)xC9w z`&F?#)DqqY%lF6O1KKjoe799+dM&p{^%e_JYV|ULypy^2VBJk50l1BC2_J&BhvV>( zs~K36sHlST%fWas|0 zu5*!(YGq6KGuZff9R8weaQSZd_CEVXi zxNpYcTMU=qeCOtRiz9~mL`boV#6Y8H3Y7;AeM$CVS z!@n|STKve4Ifp)89T^pVidObFZjLh9@U!}xh*D26i=_D+qwu#l{Ckz-Kk8#LnfuRH zpK1C<9R90{{&yqv-&b(mb;>$R+EbLUDjN)zJQJz2_ZXDt&W3Ojnax; z6VRP=4w;wSKU2yr&#Y9V3G@8_T3xBe2-daRmRg5)$5NrA&dxYApK_uak0MqrVjvM{ z;{hYEJCb#yXiNi)*#jk z=)&eTO>|uQhS!<|cQm%Q7GxloKoKiXtRw>CgyGbYTU(IpXrv~$u2fv-hTM7(3c2+~ zaRaT`wI;~n+{`6$GdEPs5901QTO7=(4GH%Gda?O!Bxe<*ivV zr?+{lIgt=2eDct@I=>SB*H$0VmXVi>;oAt468JeUO*pq z4;>~NZfI?(4QTyvf;$>n<2nvH=Li(BI#O&T0^@?A*qtLuev}}O)=1qei>2ba_Nv^D zfn2zCi|!JwEB^-2(|7N1h8g0$fSzoIJ)-BjF${YN?r3f^3pse^P{gWFEF}Wth+)<7 z>=&f3k(y^-DsBKZo&n^-bE)VSv~JT>A0XTd=*XryC~B@3L$gS5^Hd*#7%W2+u~K3v z5g0!V%4TV&dL#-Zt)R)4rQ(KRQhk{Snd-|$bA_$Bvax1BCrrj;Su)j+!$GXRCUE_~ z1xfYgnNqK>Vxqi&_U+y|UeIn>ZK;iD`RfFC$bTs;ODCWeopK_ISbanE6M-?$5bREo z6hBFjCu^kcjZ>uJy7j7@PK8`JohG`gw61kWAt|nzoldM5(2LFN4AF627-nY@Y~P_+ z_RfL~{LV%Zt8>IkA}~%EP948<1$mxEYJT68itD__?|jIG-vy$3q1Kht4J-NiUiU8L zBI3P(o@|a6i=OMoaQqg*`V?+x^AgCx^HLPCx=bu30^^8b**xv!zFZWp&@9=CzGA13F;}UdNKjeLW6hb%VeYU6U}6&&`xF$wTr(Ij%^l8wvCR zy0ClbCQ)!BYfB|*{M!U~G%$8E1n8PuP{isxVj>Y34-CZa8cFe61$moB>OQ$$Dz0a* z%Iprvh1s2=dzaRgZ&!L2&w}4jh2Gsndjb8}^zIQY*NLHbFTwizS_6ysK?;udqlnc5 zVkZ$8Hw>wc<97x5phjwr4@t#!U*q^N-?G~Fkq;>Kap{Kq0>nm;9)PurT$G}a90 zgqip(N_PRKr(7uHO5KHgRBBPr0RYoKK@qE;;!}Tf^#VH6eU+YIX{evE9bW{0PHcLN z7O7vL##@vTGn}v}672YUK7OP<;<;~-YQ5qKgHbuXX;I|p77v1`o){VKs7!^3zDZ5a30 zQN-#E(XJY&$I7^;$5+{@-%5L6IKC;WZ)sJ%LSs12Qg5S`B;OIK8vuBv+h4QfI`B?13Jaq!iN_gBH0uKyI3 zSbfGOq!;hn%?u{Qvpwo_h}i#s6G(ly42_-kcb4q`f8Zci{}gy45Opu08@vC%5V32` zB-y_R);Il5F#m=GgYX{|vHGvrsJftEXAmm+HDV<3tKpL*x%5BW?kqJDGO}DWWIIaTZbiwVqF}>YCVA`0#Ww@`m%>&eG$9XOu}tIaPu!G8$yiX*a$_e zHWouwKXmR4M8S(TSt@mb1&oB|cR~3T=FQc7S0LeIHi}s7hEJXXJ0K_a-Dg(IjO3j8^YFRv z-V5ka$$P6M$6OLwvau z+EQCF{tgOV0(iCnw;y{#gn;)#5vw_3Bq9GKN5E=t)DZ;Pm>@<`OYOr3IGro_CQkPy zsH19YKU9%a`=f}}0iu`)j01X?q;g}dQEpN5079e(ih-0ipoi}uskmX7xIuqD>(6?`LwqM`}I)4nQ3nUDzRF~CX6|sGr(x8MX0l@($ZcZBjcf| z!&vfEKO6_K>JoS&5Opu0ZTnO|Ld34Mwvd< z){YT;x5n#H+g`3o3Mah$Ed|9K<1U{iuSDk0MriQLNgfvnF%`!7tT#x%aG|f2x31k{S@H8%B-PAaNvB#6hfv1fB>) z-3#c!CKZa%9p?sfv9@{{n!L!5xdsRlyf}6`nJc7=IaoF<_Rcbb)p!l`k><` zG`}JElQdo)Y~mcLPDTT{ogxA^ni{uLi6ghua1g6i0#5{@?gcb%b30wcuC=z*)*QSu z2-eS5NeE}64nk+4h}GGmSv5>=4k3NLOt;h~H+7Dnj9^MlAXhGRuC`%)&o~b)vHB)H ztJkperQ$~HRWFejKrZ|*6y1xouAB+_zBJc6OI=Km7tp-j8{ZPJYr8GAIeX(0f^{m_ z3|)#wbjf8XVs*KwCjw)g0aUuA`pxMIL0+kmdRo6qDz4WWqpKkoM%Re$wOY4pdHo$2 z|1sI(+?6$L!_&b@XSuMUZUdaUjv;vg$=LmOy@cj6G5vP~!5#l!!@dzAV6<*R5vy-Y zu!+EMVdvVTW#8l7EDE=11wClrk%~*z+~eIULf+%uCYra~ns+qT4CsV;b|*`oz<1#w zR(A`$a<8&b-9xb#(6HV0_X^C7r!Cb+llKu^xkXv1?nf2f@BoTfeOD9{fw4=cb~nf> z<%5EJNFz1>ho$2B^QtT!fm~QTD!Pwp-C?I;q#h^83uxZv@;w2&whfmj2p)bKM(X=$ z1fw6Ih}928JrNk|44{tDj|BOoMruYsmWu1O#^@=?h0)WZ`;69Yz9#uB@m@erHo50S z&vj$S{e<8zS(E%J83cu6}n(nWp;>KYT_<0dBfnN~K z7j4a#8fyl0!fg9BOD6EkIKcXxz)b=lw6}VNVlSX!yI)=vm>W-9s+}fZBiJM`OuUXN zy5S8JvHGnjCIVxZPVH`x1b$PHZ)v3F|F%?Ie_oZvJCF;DcSZL-t!pQ6p+~(>5SHUu z$WKIkK3=ANCt%mM;qn2&!x9*VK13rJ{T>CD<3v3X80!q6j?qVg{G&!{MjuPX^;%=} z3FN})Pon#0t=n|r;xB|_WsZf#?XRNddNJHSCAj&@!)FkK<>x4{0w;zNf$_tjY?gNV z{#_LQp%paQe@ev-!=&#QB4qmhOEmv&YyPLPWH>4)X-jQOlcT6((ibL1ql#`AgCbUAMG@;^#9+-0h20I3zT*TrUL!UC z7OA-Yyef+ckPC~6qB}|J+UYx>)MSFZfaYy3Qv~eVHe99>JS=@-Xbm)i(KHmXT2s^$ zfw9g2>KLsh$b?2}MxIn$uQf(%LoSTg5#4pQZqxK#k8muUv9Qv2eNl707;YO7+&q0Z zgcvM0LV<-dF_Z|59|mQ!w9_{!3Y%yJO?J9e+%Qb~ZYn~i?`ER8xvjZHW6gk0m}^_I zWcs$^AXZxmJkd24cZ>TMGQIhnQd<+^1vGAV%{BscV`@vyqS-crJBFE=fhKfEJBnD% z6y-!fBGM9uYL_{}A_c{=Y4F<9=0B3Ap0A*@tU#|s#g&C*Wi14Ln- zR?uV*l!_aMN#~RZna&4^=6qYTv$1ACCrp5YSuz0*!9lDJ6}Y~cm^Wv>T0pTE(6HSt z3kBxJ)0WzSCKnN`XJeX3ql#`g3`MLC7sW(i?9!>-4U)!OB#PA$8majoDHYeBS7mV& z(@+MDVAO*mR=uL02#j?GP{$}M z$ec!MMtxFoz1A4@LoSSb(ame!rs*3H?geyYb6YBEt{20tKydT)9e@}t2T{bTD25V& z@x!2OmUj9Mi9)CqG+8ATHw=@$kqDW-CDAO~n#&q%26Vz)Th5Z{y8;JTm=buRYYb-N zgE9j>*^D}t2rr;*yJwCQq#IIOYA0I#8o?d5l^8APjN?(n>g%GL2#jgEwmU&mYs^z>QKj7}xa3+TaSbeiB@^M=tXg7q&ihS@qD z?cj9=iddZ~77~GRz%c4~oh8V#HB$3BM=Gx48n1I97hdOy?l-k=^DlPi6YmA|Wb?Z~ z^jtTF--QH!$rrneAP3KjQN-$7Vkr?AM-0p6X(#g~qHw8J&~z`8iW`SX=F3IMWWGW) zue3Fs5evQ=3 z9*~ObxyJ0fkPEX1MfV}C+jMSzm~bzkBb(nNqUL%r{2nE^`P}>%#9;Y2idcP53?%~N zhe6pa?R0)Z6uz$&G}#|W#SO!x^AAPHbpDZOK51+IxUptHC(OI2STdcT#zCx}5xBm! zNX=iUo~0P;H!Q4Se@{1jDm!_QD)xkePRTtkc((5c-GlE%Lf z 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 diff --git a/docs/_build/doctrees/other_langs.doctree b/docs/_build/doctrees/other_langs.doctree index 7070542cb3c7599e4ecafe69d6ef8c90f307c965..eb8fa04730391ca1ebedd044f845d2a5e9bab295 100644 GIT binary patch delta 48 qcmdm_xkhsX3k&0l$*e5(%z6qQle<_n7_BC6X0b;X+q{rfkRJe5NewLk delta 54 tcmZ3Zxk+;a3k&1w$sbti*%T7Kx3g$4>P_CjVvj|5^K4c@egOQJ5pn` guide to get familiar +:doc:`Getting Started with Moto ` guide to get familiar with ``moto`` and its usage. Currently implemented Services: +------------------------------- +-----------------------+---------------------+-----------------------------------+ | Service Name | Decorator | Development Status | @@ -79,11 +78,6 @@ Currently implemented Services: +-----------------------+---------------------+-----------------------------------+ -Moto APIs ---------- -some stuff - - Additional Resources -------------------- @@ -91,6 +85,7 @@ Additional Resources * `Moto Source Repository`_ * `Moto Issue Tracker`_ +.. _AWS infrastructure: http://aws.amazon.com/ .. _Moto Issue Tracker: https://github.com/spulec/moto/issues .. _Moto Source Repository: https://github.com/spulec/moto @@ -99,7 +94,7 @@ Additional Resources :hidden: :glob: - index - getting_started - other_langs - moto_apis + docs/getting_started + docs/server_mode + docs/moto_apis + docs/ec2_tut diff --git a/docs/_build/html/_sources/other_langs.rst.txt b/docs/_build/html/_sources/other_langs.rst.txt index 6fb617c3..664ce50b 100644 --- a/docs/_build/html/_sources/other_langs.rst.txt +++ b/docs/_build/html/_sources/other_langs.rst.txt @@ -4,7 +4,7 @@ Other languages =============== -You don't need to use Python to use Moto; it can be used with any language. To use it with another language, run moto_server and here are some examples in other languages. +You don't need to use Python to use Moto; it can be used with any language. To use it with another language, run moto_server. Here are some examples in other languages: * `Java`_ * `Ruby`_ diff --git a/docs/_build/html/docs/ec2_tut.html b/docs/_build/html/docs/ec2_tut.html new file mode 100644 index 00000000..63b3adc2 --- /dev/null +++ b/docs/_build/html/docs/ec2_tut.html @@ -0,0 +1,306 @@ + + + + + + + + + + + Use Moto as EC2 backend — Moto 0.4.10 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Use Moto as EC2 backend

+

This tutorial explains moto.ec2‘s features and how to use it. This +tutorial assumes that you have already downloaded and installed boto and moto. +Before all code examples the following snippet is launched:

+
>>> import boto.ec2, moto
+>>> mock_ec2 = moto.mock_ec2()
+>>> mock_ec2.start()
+>>> conn = boto.ec2.connect_to_region("eu-west-1")
+
+
+
+

Launching instances

+

After mock is started, the behavior is the same than previously:

+
>>> reservation = conn.run_instances('ami-f00ba4')
+>>> reservation.instances[0]
+Instance:i-91dd2f32
+
+
+

Moto set static or generate random object’s attributes:

+
>>> vars(reservation.instances[0])
+{'_in_monitoring_element': False,
+ '_placement': None,
+ '_previous_state': None,
+ '_state': pending(0),
+ 'ami_launch_index': u'0',
+ 'architecture': u'x86_64',
+ 'block_device_mapping': None,
+ 'client_token': '',
+ 'connection': EC2Connection:ec2.eu-west-1.amazonaws.com,
+ 'dns_name': u'ec2-54.214.135.84.compute-1.amazonaws.com',
+ 'ebs_optimized': False,
+ 'eventsSet': None,
+ 'group_name': None,
+ 'groups': [],
+ 'hypervisor': u'xen',
+ 'id': u'i-91dd2f32',
+ 'image_id': u'f00ba4',
+ 'instance_profile': None,
+ 'instance_type': u'm1.small',
+ 'interfaces': [NetworkInterface:eni-ed65f870],
+ 'ip_address': u'54.214.135.84',
+ 'item': u'\n        ',
+ 'kernel': u'None',
+ 'key_name': u'None',
+ 'launch_time': u'2015-07-27T05:59:57Z',
+ 'monitored': True,
+ 'monitoring': u'\n          ',
+ 'monitoring_state': u'enabled',
+ 'persistent': False,
+ 'platform': None,
+ 'private_dns_name': u'ip-10.136.187.180.ec2.internal',
+ 'private_ip_address': u'10.136.187.180',
+ 'product_codes': [],
+ 'public_dns_name': u'ec2-54.214.135.84.compute-1.amazonaws.com',
+ 'ramdisk': None,
+ 'reason': '',
+ 'region': RegionInfo:eu-west-1,
+ 'requester_id': None,
+ 'root_device_name': None,
+ 'root_device_type': None,
+ 'sourceDestCheck': u'true',
+ 'spot_instance_request_id': None,
+ 'state_reason': None,
+ 'subnet_id': None,
+ 'tags': {},
+ 'virtualization_type': u'paravirtual',
+ 'vpc_id': None}
+
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/docs/getting_started.html b/docs/_build/html/docs/getting_started.html new file mode 100644 index 00000000..5ab53fe7 --- /dev/null +++ b/docs/_build/html/docs/getting_started.html @@ -0,0 +1,343 @@ + + + + + + + + + + + Getting Started with Moto — Moto 0.4.10 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Getting Started with Moto

+
+

Installing Moto

+

You can use pip to install the latest released version of moto:

+
pip install moto
+
+
+

If you want to install moto from source:

+
git clone git://github.com/spulec/moto.git
+cd moto
+python setup.py install
+
+
+
+
+

Moto usage

+

For example we have the following code we want to test:

+
import boto
+from boto.s3.key import Key
+
+class MyModel(object):
+    def __init__(self, name, value):
+        self.name = name
+        self.value = value
+
+    def save(self):
+        conn = boto.connect_s3()
+        bucket = conn.get_bucket('mybucket')
+        k = Key(bucket)
+        k.key = self.name
+        k.set_contents_from_string(self.value)
+
+
+

There are several method to do this, just keep in mind Moto creates a full blank environment.

+
+

Decorator

+

With a decorator wrapping all the calls to S3 are automatically mocked out.

+
import boto
+from moto import mock_s3
+from mymodule import MyModel
+
+@mock_s3
+def test_my_model_save():
+    conn = boto.connect_s3()
+    # We need to create the bucket since this is all in Moto's 'virtual' AWS account
+    conn.create_bucket('mybucket')
+
+    model_instance = MyModel('steve', 'is awesome')
+    model_instance.save()
+
+    assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome'
+
+
+
+
+

Context manager

+

Same as decorator, every call inside with statement are mocked out.

+
def test_my_model_save():
+    with mock_s3():
+        conn = boto.connect_s3()
+        conn.create_bucket('mybucket')
+
+        model_instance = MyModel('steve', 'is awesome')
+        model_instance.save()
+
+        assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome'
+
+
+
+
+

Raw

+

You can also start and stop manually the mocking.

+
def test_my_model_save():
+    mock = mock_s3()
+    mock.start()
+
+    conn = boto.connect_s3()
+    conn.create_bucket('mybucket')
+
+    model_instance = MyModel('steve', 'is awesome')
+    model_instance.save()
+
+    assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome'
+
+    mock.stop()
+
+
+
+
+

Stand-alone server mode

+

Moto comes with a stand-alone server allowing you to mock out an AWS HTTP endpoint. It is very useful to test even if you don’t use Python.

+
$ moto_server ec2 -p3000
+ * Running on http://127.0.0.1:3000/
+
+
+

This method isn’t encouraged if you’re using boto, best is to use decorator method.

+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/docs/moto_apis.html b/docs/_build/html/docs/moto_apis.html new file mode 100644 index 00000000..690a8069 --- /dev/null +++ b/docs/_build/html/docs/moto_apis.html @@ -0,0 +1,256 @@ + + + + + + + + + + + Moto APIs — Moto 0.4.10 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Moto APIs

+

Moto provides some internal APIs to view and change the state of the backends.

+
+

Reset API

+

This API resets the state of all of the backends. Send an HTTP POST to reset:

+
requests.post("http://motoapi.amazonaws.com/moto-api/reset")
+
+
+
+
+

Dashboard

+

Moto comes with a dashboard to view the current state of the system:

+
http://localhost:5000/moto-api/
+
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/docs/other_langs.html b/docs/_build/html/docs/other_langs.html new file mode 100644 index 00000000..3b5a91b5 --- /dev/null +++ b/docs/_build/html/docs/other_langs.html @@ -0,0 +1,243 @@ + + + + + + + + + + + Other languages — Moto 0.4.10 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Other languages

+

You don’t need to use Python to use Moto; it can be used with any language. To use it with another language, run moto_server. Here are some examples in other languages:

+ +
+ + +
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/docs/server_mode.html b/docs/_build/html/docs/server_mode.html new file mode 100644 index 00000000..c226df02 --- /dev/null +++ b/docs/_build/html/docs/server_mode.html @@ -0,0 +1,283 @@ + + + + + + + + + + + Server mode — Moto 0.4.10 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + +
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

Server mode

+

Moto has a stand-alone server mode. This allows you to utilize +the backend structure of Moto even if you don’t use Python.

+

It uses flask, which isn’t a default dependency. You can install the +server ‘extra’ package with:

+
pip install moto[server]
+
+
+

You can then start it running a service:

+
$ moto_server ec2
+
+
+

You can also pass the port:

+
$ moto_server ec2 -p3000
+ * Running on http://127.0.0.1:3000/
+
+
+

If you want to be able to use the server externally you can pass an IP +address to bind to as a hostname or allow any of your external +interfaces with 0.0.0.0:

+
$ moto_server ec2 -H 0.0.0.0
+ * Running on http://0.0.0.0:5000/
+
+
+

Please be aware this might allow other network users to access your +server.

+

Then go to localhost to see a list of running instances (it will be empty since you haven’t added any yet).

+

If you want to use boto3 with this, you can pass an endpoint_url to the resource

+
boto3.resource(
+    service_name='s3',
+    region_name='us-west-1',
+    endpoint_url='http://localhost:5000',
+)
+
+
+
+

Other languages

+

You don’t need to use Python to use Moto; it can be used with any language. Here are some examples to run it with other languages:

+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index 1a7b3409..d0445ccd 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -90,10 +90,10 @@ diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html index cab7668b..9b6474ca 100644 --- a/docs/_build/html/index.html +++ b/docs/_build/html/index.html @@ -36,7 +36,7 @@ href="genindex.html"/> - + @@ -89,21 +89,11 @@ -
    -
  • Moto: Mock AWS Services -
  • -
  • Getting Started with Moto
  • -
  • Other languages
  • -
  • Moto APIs
  • + @@ -170,13 +160,15 @@

    Moto: Mock AWS Services

    A library that allows you to easily mock out tests based on -AWS infrastructure.

    +AWS infrastructure.

    Getting Started

    If you’ve never used moto before, you should read the -Getting Started with Moto guide to get familiar +Getting Started with Moto guide to get familiar with moto and its usage.

    -

    Currently implemented Services:

    +
    +
    +

    Currently implemented Services:

    @@ -321,10 +313,6 @@ all endpoints done
    -
    -

    Moto APIs

    -

    some stuff

    -

    Additional Resources

      @@ -346,7 +334,7 @@ all endpoints done diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index 157697e1afd26af9b70476a677479fd9a0902829..9d86687f9f2ad7b680f6b17a3f9d25a5f6533ab2 100644 GIT binary patch delta 286 zcmV+(0pb4i0*(Wad4E#DZo?o9z4H~8*p*G|vA1fPrXD6$il!YS3RV&|300u&_V)`A z7D&hi!L#49dA3wSzo6Ka=4L<}xtB@+dj%Qc&$a1V_|gcU$|&F(-rsg`=Hi0ABrdZ; zW17Aywc&$7xl&rhz2b)lp_oXI#?-Ea*X+hy$*+xGsr^U1j(_Xwa5`$w(>UC5C_5!_ z#f)N}TQ~qLKw=wOe#SOy1RWpDrfnHgVc+x;e^Q-*`m#rRB{|p9!a3jQ1hPQe_HpiG zG9hZgChW&kT;T9sI3pT?nq+#PS@da>H(HpXUVm8#gtGG1;$%QN;`Hn3kg0t#mpYGI kBOgSaay=G?>lflDULjd-MOtjR7t{mHrN=w+2jL`A7MQ2+n{ delta 259 zcmV+e0sQ`s1M~urd4G>fYr`-Qgzx?p3+`2g=9pV3rQ}c=Fr`PMNQ*5ZOTk+A@$V~H ze#mNa5z_2@GbKE$Cf$`9}eNok_GPI<#`8ZE-q+ffeEMi8FfyU z{=tIdUP6OL8HqpJh*^#8$8hydB4wJ|5$_3Qx@$Iy)N2%>ntc4MCIRX*J1IxBCW*Izad=2|&uoPOH*teRhyOLttvbx$~)jxKXA z6|w~cdO83A diff --git a/docs/_build/html/other_langs.html b/docs/_build/html/other_langs.html index 8ec0b721..c329485c 100644 --- a/docs/_build/html/other_langs.html +++ b/docs/_build/html/other_langs.html @@ -91,6 +91,16 @@
        +
      • Moto: Mock AWS Services +
      • Getting Started with Moto
      • Other languages
      • Moto APIs
      • @@ -159,7 +169,7 @@

        Other languages

        -

        You don’t need to use Python to use Moto; it can be used with any language. To use it with another language, run moto_server and here are some examples in other languages.

        +

        You don’t need to use Python to use Moto; it can be used with any language. To use it with another language, run moto_server. Here are some examples in other languages:

        • Java
        • Ruby
        • diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html index 311903b7..f78097c2 100644 --- a/docs/_build/html/search.html +++ b/docs/_build/html/search.html @@ -89,10 +89,10 @@ diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index f66b2d15..73a7045f 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["ec2_tut","getting_started","index","moto_apis","other_langs"],envversion:50,filenames:["ec2_tut.rst","getting_started.rst","index.rst","moto_apis.rst","other_langs.rst"],objects:{},objnames:{},objtypes:{},terms:{"27t05":0,"57z":0,"91dd2f32":0,"class":1,"import":[0,1],"static":0,"true":0,"var":0,AWS:1,EBS:2,ECS:2,For:1,KMS:2,RDS:2,SES:2,SNS:2,SQS:2,STS:2,There:1,With:1,__init__:1,_in_monitoring_el:0,_placement:0,_previous_st:0,_state:0,access:[],account:1,administr:[],after:0,all:[0,1,2,3],allow:[1,2],alreadi:0,also:1,amazonaw:[0,3],ami:[0,2],ami_launch_index:0,analyt:[],ani:4,anoth:4,api:[],applic:[],architectur:0,assert:1,assum:0,attribut:0,auto:[],automat:1,autosc:2,awesom:1,backend:3,base:2,basic:2,befor:[0,2],behavior:0,best:1,blank:1,block:[],block_device_map:0,bodi:[],boto:[0,1],bucket:1,call:1,can:[1,4],cell:[],chang:3,client_token:0,clone:1,cloud:[],cloudform:2,cloudwatch:2,code:[0,1],column:[],com:[0,1,3],come:[1,3],comput:0,conn:[0,1],connect:0,connect_s3:1,connect_to_region:0,contain:[],content:[],core:2,creat:1,create_bucket:1,current:[2,3],data:2,databas:[],decor:2,def:1,deliveri:[],deploy:[],develop:2,dns_name:0,don:[1,4],done:2,download:0,dynamodb2:2,dynamodb:2,easili:2,ebs_optim:0,ec2:[1,2],ec2connect:0,ed65f870:0,elast:[],elb:2,emr:2,enabl:0,encourag:1,endpoint:[1,2],eni:0,environ:1,even:1,eventsset:0,everi:1,exampl:[0,1,4],explain:0,f00ba4:0,fals:0,familiar:2,featur:0,follow:[0,1],from:1,full:1,gatewai:2,gener:0,get_bucket:1,get_contents_as_str:1,get_kei:1,git:1,github:1,glacier:2,grid:[],group:[0,2],group_nam:0,guid:2,have:[0,1],header:[],here:4,how:0,http:[1,3],hypervisor:0,iam:2,ident:[],image_id:0,implement:2,index:2,infrastructur:2,insid:1,instal:0,instanc:2,instance_profil:0,instance_typ:0,interfac:0,intern:[0,3],ip_address:0,isn:1,issu:2,item:0,its:2,java:4,javascript:4,just:1,keep:1,kei:1,kernel:0,key_nam:0,kinesi:2,lambda:2,languag:[],latest:1,launch_tim:0,librari:2,localhost:3,mai:[],manag:[],manual:1,method:1,mind:1,mobil:[],mock:[0,1],mock_apigatewai:2,mock_autosc:2,mock_cloudform:2,mock_cloudwatch:2,mock_datapipelin:2,mock_dynamodb2:2,mock_dynamodb:2,mock_ec2:[0,2],mock_ec:2,mock_elb:2,mock_emr:2,mock_glaci:2,mock_iam:2,mock_kinesi:2,mock_km:2,mock_lambda:2,mock_rd:2,mock_rds2:2,mock_redshift:2,mock_route53:2,mock_s3:[1,2],mock_s:2,mock_sfw:2,mock_sn:2,mock_sq:2,mock_st:2,model_inst:1,modul:[],monitor:0,monitoring_st:0,moto:4,moto_serv:[1,4],motoapi:3,mybucket:1,mymodel:1,mymodul:1,name:[1,2],need:[1,4],network:[],networkinterfac:0,never:2,none:0,object:[0,1],other:[],out:[1,2],p3000:1,page:[],paravirtu:0,partial:2,pend:0,persist:0,pip:1,pipelin:2,platform:0,post:3,previous:0,private_dns_nam:0,private_ip_address:0,product_cod:0,provid:3,public_dns_nam:0,python:[1,4],ramdisk:0,random:0,rds2:2,read:2,reason:0,redshift:2,region:0,regioninfo:0,releas:1,repositori:2,request:3,requester_id:0,reserv:0,root_device_nam:0,root_device_typ:0,route53:2,row:[],rubi:4,run:[1,4],run_inst:0,same:[0,1],save:1,scale:[],search:[],secur:2,self:1,send:3,set:0,set_contents_from_str:1,setup:1,sever:1,should:2,sinc:1,small:0,snippet:0,some:[2,3,4],sourc:[1,2],sourcedestcheck:0,span:[],spot_instance_request_id:0,spulec:1,start:0,state:3,state_reason:0,statement:1,statu:2,steve:1,stop:1,storag:[],stuff:2,subnet_id:0,swf:2,system:3,tabl:[],tag:[0,2],test:[1,2],test_my_model_sav:1,than:0,thi:[0,1,3],tracker:2,tutori:0,usag:2,use:[0,1,4],used:[2,4],useful:1,using:1,valu:1,veri:1,version:1,view:3,virtual:1,virtualization_typ:0,vpc_id:0,want:1,west:0,wrap:1,x86_64:0,xen:0,you:[0,1,2,4]},titles:["Use Moto as EC2 backend","Getting Started with Moto","Moto: Mock AWS Services","Moto APIs","Other languages"],titleterms:{AWS:2,Use:0,addit:2,alon:1,ani:[],anoth:[],api:[2,3],backend:0,boto:[],can:[],context:1,current:[],dashboard:3,decor:1,don:[],ec2:0,exampl:[],get:[1,2],here:[],implement:[],indic:[],instal:1,instanc:0,languag:4,launch:0,librari:[],manag:1,mock:2,mode:1,moto:[0,1,2,3],moto_serv:[],need:[],other:4,python:[],raw:1,reset:3,resourc:2,run:[],server:1,servic:2,some:[],stand:1,start:[1,2],tabl:[],usag:1,use:[],used:[],you:[]}}) \ No newline at end of file +Search.setIndex({docnames:["docs/ec2_tut","docs/getting_started","docs/moto_apis","docs/server_mode","index"],envversion:50,filenames:["docs/ec2_tut.rst","docs/getting_started.rst","docs/moto_apis.rst","docs/server_mode.rst","index.rst"],objects:{},objnames:{},objtypes:{},terms:{"27t05":0,"57z":0,"91dd2f32":0,"class":1,"default":3,"import":[0,1],"static":0,"true":0,"var":0,AWS:1,EBS:4,ECS:4,For:1,KMS:4,RDS:4,SES:4,SNS:4,SQS:4,STS:4,Then:3,There:1,With:1,__init__:1,_in_monitoring_el:0,_placement:0,_previous_st:0,_state:0,abl:3,abov:[],access:3,account:1,action:[],added:3,address:3,administr:[],after:0,all:[0,1,2,4],allow:[1,3,4],alon:3,alreadi:0,also:[1,3],amazonaw:[0,2],ami:[0,4],ami_launch_index:0,analyt:[],ani:3,anoth:[],api:4,applic:[],architectur:0,assert:1,assum:0,attribut:0,auto:[],automat:1,autosc:4,awar:3,awesom:1,backend:[2,3],base:4,basic:4,befor:[0,4],behavior:0,best:1,bind:3,blank:1,block:[],block_device_map:0,bodi:[],boto3:3,boto:[0,1],bucket:1,call:1,can:[1,3],cell:[],chang:2,client_token:0,clone:1,cloud:[],cloudform:4,cloudwatch:4,code:[0,1],column:[],com:[0,1,2],come:[1,2],comput:0,config:[],conn:[0,1],connect:0,connect_s3:1,connect_to_region:0,contain:[],content:[],core:4,creat:1,create_bucket:1,current:2,data:4,databas:[],decor:4,def:1,deliveri:[],depend:3,deploy:[],describeinst:[],develop:4,dns_name:0,don:[1,3],done:4,download:0,dynamodb2:4,dynamodb:4,easiest:[],easili:4,ebs_optim:0,ec2:[1,3,4],ec2connect:0,ed65f870:0,elast:[],elb:4,empti:3,emr:4,enabl:0,encourag:1,endpoint:[1,4],endpoint_url:3,eni:0,environ:1,even:[1,3],eventsset:0,everi:1,exampl:[0,1,3],explain:0,extern:3,extra:3,f00ba4:0,fals:0,familiar:4,featur:0,file:[],flask:3,follow:[0,1],from:1,full:1,gatewai:4,gener:0,get_bucket:1,get_contents_as_str:1,get_kei:1,git:1,github:1,glacier:4,grid:[],group:[0,4],group_nam:0,guid:4,has:3,have:[0,1],haven:3,header:[],here:3,hostnam:3,how:0,http:[1,2,3],https_validate_certif:[],hypervisor:0,iam:4,ident:[],image_id:0,implement:[],index:4,infrastructur:4,insid:1,instal:[0,3],instanc:[3,4],instance_profil:0,instance_typ:0,instead:[],interfac:[0,3],intern:[0,2],ip_address:0,is_secur:[],isn:[1,3],issu:4,item:0,its:4,java:3,javascript:3,just:1,keep:1,kei:1,kernel:0,key_nam:0,kinesi:4,lambda:4,languag:[],latest:1,launch_tim:0,librari:4,list:3,localhost:[2,3],mai:[],manag:[],manual:1,method:1,might:3,mind:1,mobil:[],mock:[0,1],mock_apigatewai:4,mock_autosc:4,mock_cloudform:4,mock_cloudwatch:4,mock_datapipelin:4,mock_dynamodb2:4,mock_dynamodb:4,mock_ec2:[0,4],mock_ec:4,mock_elb:4,mock_emr:4,mock_glaci:4,mock_iam:4,mock_kinesi:4,mock_km:4,mock_lambda:4,mock_rd:4,mock_rds2:4,mock_redshift:4,mock_route53:4,mock_s3:[1,4],mock_s:4,mock_sfw:4,mock_sn:4,mock_sq:4,mock_st:4,model_inst:1,modul:[],monitor:0,monitoring_st:0,moto:3,moto_serv:[1,3],motoapi:2,mybucket:1,mymodel:1,mymodul:1,name:[1,4],need:[1,3],network:3,networkinterfac:0,never:4,none:0,object:[0,1],other:[],out:[1,4],p3000:[1,3],packag:3,page:[],paravirtu:0,partial:4,pass:3,pend:0,persist:0,pip:[1,3],pipelin:4,platform:0,pleas:3,port:3,post:2,previous:0,private_dns_nam:0,private_ip_address:0,product_cod:0,provid:2,proxi:[],proxy_port:[],public_dns_nam:0,python:[1,3],ramdisk:0,random:0,rds2:4,read:4,reason:0,redshift:4,region:0,region_nam:3,regioninfo:0,releas:1,repositori:4,request:2,requester_id:0,reserv:0,resourc:3,root_device_nam:0,root_device_typ:0,route53:4,row:[],rubi:3,run:[1,3],run_inst:0,same:[0,1],save:1,scale:[],search:[],secur:4,see:3,self:1,send:2,servic:3,service_nam:3,set:0,set_contents_from_str:1,setup:1,sever:1,should:4,simpler:[],sinc:[1,3],small:0,snippet:0,some:[2,3],sourc:[1,4],sourcedestcheck:0,span:[],spot_instance_request_id:0,spulec:1,stand:3,start:[0,3],state:2,state_reason:0,statement:1,statu:4,steve:1,stop:1,storag:[],strongli:[],structur:3,stuff:[],subnet_id:0,swf:4,system:2,tabl:[],tag:[0,4],test:[1,4],test_my_model_sav:1,than:0,thi:[0,1,2,3],tracker:4,tutori:0,usag:4,use:[0,1,3],used:[3,4],useful:1,user:3,uses:3,using:1,util:3,valu:1,veri:1,version:1,view:2,virtual:1,virtualization_typ:0,vpc_id:0,wai:[],want:[1,3],west:[0,3],which:3,wrap:1,x86_64:0,xen:0,yet:3,you:[0,1,3,4],your:3},titles:["Use Moto as EC2 backend","Getting Started with Moto","Moto APIs","Server mode","Moto: Mock AWS Services"],titleterms:{AWS:4,Use:0,addit:4,alon:1,ani:[],anoth:[],api:2,backend:0,boto:[],can:[],context:1,current:4,dashboard:2,decor:1,don:[],ec2:0,exampl:[],get:[1,4],here:[],implement:4,indic:[],instal:1,instanc:0,languag:3,launch:0,librari:[],manag:1,mock:4,mode:[1,3],moto:[0,1,2,4],moto_serv:[],need:[],other:3,python:[],raw:1,reset:2,resourc:4,run:[],server:[1,3],servic:4,some:[],stand:1,start:[1,4],tabl:[],usag:1,use:[],used:[],you:[]}}) \ No newline at end of file diff --git a/docs/docs/ec2_tut.rst b/docs/docs/ec2_tut.rst new file mode 100644 index 00000000..86d6ae31 --- /dev/null +++ b/docs/docs/ec2_tut.rst @@ -0,0 +1,74 @@ +.. _ec2_tut: + +======================= +Use Moto as EC2 backend +======================= + +This tutorial explains ``moto.ec2``'s features and how to use it. This +tutorial assumes that you have already downloaded and installed boto and moto. +Before all code examples the following snippet is launched:: + + >>> import boto.ec2, moto + >>> mock_ec2 = moto.mock_ec2() + >>> mock_ec2.start() + >>> conn = boto.ec2.connect_to_region("eu-west-1") + +Launching instances +------------------- + +After mock is started, the behavior is the same than previously:: + + >>> reservation = conn.run_instances('ami-f00ba4') + >>> reservation.instances[0] + Instance:i-91dd2f32 + +Moto set static or generate random object's attributes:: + + >>> vars(reservation.instances[0]) + {'_in_monitoring_element': False, + '_placement': None, + '_previous_state': None, + '_state': pending(0), + 'ami_launch_index': u'0', + 'architecture': u'x86_64', + 'block_device_mapping': None, + 'client_token': '', + 'connection': EC2Connection:ec2.eu-west-1.amazonaws.com, + 'dns_name': u'ec2-54.214.135.84.compute-1.amazonaws.com', + 'ebs_optimized': False, + 'eventsSet': None, + 'group_name': None, + 'groups': [], + 'hypervisor': u'xen', + 'id': u'i-91dd2f32', + 'image_id': u'f00ba4', + 'instance_profile': None, + 'instance_type': u'm1.small', + 'interfaces': [NetworkInterface:eni-ed65f870], + 'ip_address': u'54.214.135.84', + 'item': u'\n ', + 'kernel': u'None', + 'key_name': u'None', + 'launch_time': u'2015-07-27T05:59:57Z', + 'monitored': True, + 'monitoring': u'\n ', + 'monitoring_state': u'enabled', + 'persistent': False, + 'platform': None, + 'private_dns_name': u'ip-10.136.187.180.ec2.internal', + 'private_ip_address': u'10.136.187.180', + 'product_codes': [], + 'public_dns_name': u'ec2-54.214.135.84.compute-1.amazonaws.com', + 'ramdisk': None, + 'reason': '', + 'region': RegionInfo:eu-west-1, + 'requester_id': None, + 'root_device_name': None, + 'root_device_type': None, + 'sourceDestCheck': u'true', + 'spot_instance_request_id': None, + 'state_reason': None, + 'subnet_id': None, + 'tags': {}, + 'virtualization_type': u'paravirtual', + 'vpc_id': None} diff --git a/docs/getting_started.rst b/docs/docs/getting_started.rst similarity index 99% rename from docs/getting_started.rst rename to docs/docs/getting_started.rst index e0a4fb10..97f667d2 100644 --- a/docs/getting_started.rst +++ b/docs/docs/getting_started.rst @@ -1,3 +1,5 @@ +.. _getting_started: + ========================= Getting Started with Moto ========================= diff --git a/docs/docs/moto_apis.rst b/docs/docs/moto_apis.rst new file mode 100644 index 00000000..3414cba1 --- /dev/null +++ b/docs/docs/moto_apis.rst @@ -0,0 +1,21 @@ +.. _moto_apis: + +========= +Moto APIs +========= + +Moto provides some internal APIs to view and change the state of the backends. + +Reset API +--------- + +This API resets the state of all of the backends. Send an HTTP POST to reset:: + + requests.post("http://motoapi.amazonaws.com/moto-api/reset") + +Dashboard +--------- + +Moto comes with a dashboard to view the current state of the system:: + + http://localhost:5000/moto-api/ diff --git a/docs/docs/server_mode.rst b/docs/docs/server_mode.rst new file mode 100644 index 00000000..e8139e04 --- /dev/null +++ b/docs/docs/server_mode.rst @@ -0,0 +1,67 @@ +.. _server_mode: + +=========== +Server mode +=========== + +Moto has a stand-alone server mode. This allows you to utilize +the backend structure of Moto even if you don't use Python. + +It uses flask, which isn't a default dependency. You can install the +server 'extra' package with: + +.. code:: bash + + pip install moto[server] + + +You can then start it running a service: + +.. code:: bash + + $ moto_server ec2 + +You can also pass the port: + +.. code-block:: bash + + $ moto_server ec2 -p3000 + * Running on http://127.0.0.1:3000/ + +If you want to be able to use the server externally you can pass an IP +address to bind to as a hostname or allow any of your external +interfaces with 0.0.0.0: + +.. code-block:: bash + + $ moto_server ec2 -H 0.0.0.0 + * Running on http://0.0.0.0:5000/ + +Please be aware this might allow other network users to access your +server. + +Then go to localhost_ to see a list of running instances (it will be empty since you haven't added any yet). + +If you want to use boto3 with this, you can pass an `endpoint_url` to the resource + +.. code-block:: python + + boto3.resource( + service_name='s3', + region_name='us-west-1', + endpoint_url='http://localhost:5000', + ) + +Other languages +--------------- + +You don't need to use Python to use Moto; it can be used with any language. Here are some examples to run it with other languages: + +* `Java`_ +* `Ruby`_ +* `Javascript`_ + +.. _Java: https://github.com/spulec/moto/blob/master/other_langs/sqsSample.java +.. _Ruby: https://github.com/spulec/moto/blob/master/other_langs/test.rb +.. _Javascript: https://github.com/spulec/moto/blob/master/other_langs/test.js +.. _localhost: http://localhost:5000/?Action=DescribeInstances diff --git a/docs/index.rst b/docs/index.rst index 560ebc66..2ce31feb 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -5,18 +5,17 @@ Moto: Mock AWS Services ============================= A library that allows you to easily mock out tests based on -_`AWS infrastructure`. - -.. _AWS infrastructure: http://aws.amazon.com/ +`AWS infrastructure`_. Getting Started --------------- If you've never used ``moto`` before, you should read the -:doc:`Getting Started with Moto ` guide to get familiar +:doc:`Getting Started with Moto ` guide to get familiar with ``moto`` and its usage. Currently implemented Services: +------------------------------- +-----------------------+---------------------+-----------------------------------+ | Service Name | Decorator | Development Status | @@ -79,11 +78,6 @@ Currently implemented Services: +-----------------------+---------------------+-----------------------------------+ -Moto APIs ---------- -some stuff - - Additional Resources -------------------- @@ -91,6 +85,7 @@ Additional Resources * `Moto Source Repository`_ * `Moto Issue Tracker`_ +.. _AWS infrastructure: http://aws.amazon.com/ .. _Moto Issue Tracker: https://github.com/spulec/moto/issues .. _Moto Source Repository: https://github.com/spulec/moto @@ -99,7 +94,7 @@ Additional Resources :hidden: :glob: - index - getting_started - other_langs - moto_apis + docs/getting_started + docs/server_mode + docs/moto_apis + docs/ec2_tut