From 54c7e0bcf9e3386a7f0f2ec9f08919fad3b3a23d Mon Sep 17 00:00:00 2001 From: Steve Pulec Date: Mon, 13 Mar 2017 23:07:18 -0400 Subject: [PATCH] Update docs to newer sphinx. --- docs/_build/doctrees/ec2_tut.doctree | Bin 7904 -> 8282 bytes docs/_build/doctrees/environment.pickle | Bin 7968 -> 8914 bytes docs/_build/doctrees/getting_started.doctree | Bin 10820 -> 11613 bytes docs/_build/doctrees/index.doctree | Bin 16675 -> 18990 bytes docs/_build/html/.buildinfo | 2 +- docs/_build/html/_sources/ec2_tut.rst.txt | 74 + .../html/_sources/getting_started.rst.txt | 112 + docs/_build/html/_sources/index.rst.txt | 91 + docs/_build/html/_static/alabaster.css | 176 +- docs/_build/html/_static/basic.css | 79 +- docs/_build/html/_static/comment-bright.png | Bin 3500 -> 756 bytes docs/_build/html/_static/comment-close.png | Bin 3578 -> 829 bytes docs/_build/html/_static/comment.png | Bin 3445 -> 641 bytes docs/_build/html/_static/custom.css | 1 + docs/_build/html/_static/doctools.js | 28 +- docs/_build/html/_static/down-pressed.png | Bin 347 -> 222 bytes docs/_build/html/_static/down.png | Bin 347 -> 202 bytes docs/_build/html/_static/file.png | Bin 358 -> 286 bytes docs/_build/html/_static/jquery-3.1.0.js | 10074 ++++++++++++++++ docs/_build/html/_static/jquery.js | 8 +- docs/_build/html/_static/minus.png | Bin 173 -> 90 bytes docs/_build/html/_static/plus.png | Bin 173 -> 90 bytes docs/_build/html/_static/pygments.css | 6 + docs/_build/html/_static/searchtools.js | 166 +- docs/_build/html/_static/up-pressed.png | Bin 345 -> 214 bytes docs/_build/html/_static/up.png | Bin 345 -> 203 bytes docs/_build/html/_static/websupport.js | 4 +- docs/_build/html/ec2_tut.html | 38 +- docs/_build/html/genindex.html | 26 +- docs/_build/html/getting_started.html | 74 +- docs/_build/html/index.html | 40 +- docs/_build/html/objects.inv | 7 +- docs/_build/html/search.html | 19 +- docs/_build/html/searchindex.js | 2 +- 34 files changed, 10849 insertions(+), 178 deletions(-) create mode 100644 docs/_build/html/_sources/ec2_tut.rst.txt create mode 100644 docs/_build/html/_sources/getting_started.rst.txt create mode 100644 docs/_build/html/_sources/index.rst.txt create mode 100644 docs/_build/html/_static/custom.css create mode 100644 docs/_build/html/_static/jquery-3.1.0.js diff --git a/docs/_build/doctrees/ec2_tut.doctree b/docs/_build/doctrees/ec2_tut.doctree index 2d6d78f26bdfa1142833303de5b05379aae3bafa..719a1ed0b0b296abd8f5a0552f3c7da449e67020 100644 GIT binary patch literal 8282 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 diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 2f5d88b27e3d1167003b58b79671819b79c26345..a1145484936f5a699ba82d8b41e5a96f5f92bd35 100644 GIT binary patch literal 8914 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 diff --git a/docs/_build/doctrees/getting_started.doctree b/docs/_build/doctrees/getting_started.doctree index fde8e76496d1a08c4083c3262db144f83776d0b6..b34024fc2fdb909814c552a41763971b78a9dd3e 100644 GIT binary patch literal 11613 zcmeHN2Y4M&Ybz8Iy!m$5;eg6Dxoi&3o@kccghU@7|fQ zBw$Dk1S~=cE%eX>A(XH++t|)_wz7@wY-jr}TiNoTb7x+WWUp<=_w9aPT;9ywd+xcX zpIgoYD=XEolEj`Lm4dJ;q5^%^L=YF$WqZ!3m8n`)w0i=#CgSR42*Sud7WEsR6eIWo2i0NR~ZT_am0Gcr~{Ga<8*2u-SB0KEX1e4nP}nbwSq^#HIcDxr4cP^;dN z#9kjIzFID|^f8EuQaB3nVl#yCHuGZQ8l|*Z>>qKFqD?+Uwu?rbG zj8+>)>@vHHgyK~rbw#Q+7GnMwM(wFJG1ty#;%93 zhiuRs4MnjyErxExj~~{_V1|guA(&4zlnKHJOH@lbiq&qrD|V+yX6kCYD~_n$!s{QrC>zT@~MrBE0V%x4X-3Wk!=e_l?`DNc4l_sw6kLc87r< z8dv*er<>TTVIo2uIJOGNGJ94Bo=A`&vx$cn&pQf}FQ~)+ z%Vf`c@QgZ=s^^0&NfTd}l-;B(NpUx&>Si?CE1LAk0V3pNPD~6Bt9zOZ**%R3)r(1PCzj)_JD1kUBADx4M2i{)XLhRY zB|;Z>Vycm(yqHVhi-mUmf;t5r$5M444ebKnj4z_(B}*v*F0$X3f(VMP5P^Cb<{nSg z%YlH6U<^`)O?G87CQ{sm6?L_L0m0W0S#OS zL=a@djA-f>`{>IAX@;th=&vJG&eio zQ!)5RQgu3Kv}XL9?0+^@b42AJs60Ap&BFy|-5_q&Wp3Ekqz-GAiPJFh`6d&RE&CNq zrGDU8Z%*7R$+9U=pJNvFDiE2b>eWQedEhYXEKH8ne}AeTAn3*FKeLn&3?jpRO{@A} ziwR$sst0qa+~2DHK2X}muzEef-;k=aG~<$9Llq1|lIj;y^+p1_8%U_Rxl{>jLs32PMTK)(3C)E{l~){v`g|-AQz8*3^-_I4x11Jvvz0tllu9mV5dFE# z-voBQy)>vdLke$6)mw9+EwCvOqdKvk(!#L%a0`L#6CYWQ zz>PV#9|eKm%5)zCHy=;cCx{!G`ccCTnc!oo`Xq7lGQ=&fRu6S-l_AIi`!KzgqC=$_ z0pl{A$HaW0!0RCE`22A&=NH5BG?s9Ch6@({V2Nuvju&{b;}j#|Pwum5J+#j{?fQwx zfC!NKO4MZ?VF(`G=wN8{@Uzgs96`X0wFMCtsR1CFR(c05PIRcar-87XRAxjB5b7;q zJ?NO0;y`WQybUygX8;Eti>9NcorQ3uNp=JMObHI?@KQO5BZmZs#ioYxnbMMByhY*c zl%Fb6Y79gWM(XheyW4kzsf2bHpC0RkVHwwM^IN-LdQ;NJ|JZT$RHU9rX?+S<86ha~TQx7JS{%qKTF?^Ga;?e4_pLJQW5yD}X-|g%?Qlx! zJ6cSNW5{QDlewZXoo9){go9!RLWKXq*{2y(@nz=~>*N;IO?FfDx zl>bDkev&9BWM6FR^h>GwDVp&ZW;{hF3ogQ3w#&C>u}7#=q{mqR$NmalB2w|mL#%t+ zve(?$qxN|uZUm#M6(-Q&Pq)y_8vL2%XdcY@|5?!d?Iz*p!1d3k>KBM>BIirZ%<$z@ z{UUMw#B!N|7N>biAeInuP0Favv9f?E&a5I^v&c|xYQGFqdq(dTyp`

63{d(Th7JYxCE#|1-lv_CZ{+8_F=zB|U62EPt z?^jdxI}{b@eCF0gN2R|D+xtpu4F0_~+*u56VEla;*>Y(90F3-$s{RPmNJ9D5W+eVv zs{WW}zZ0{cq_v|PHAC?}i?ZxIj%L{NBM&R@i3vLR#Q6-)Ib%VIlVfsg6#kPIsyPb( z>2g%xn#Tfaq-=*sBfr5?V>yV|qIy<`93aIl4<{vQjA5-;DH2wKO4ZZoU_8Y1C zXBu-5iR1jio=D`3$P0F}fyhJhd6)DT60-@>rTFjCac!}ix}WCwo%;~S?|-?7_dKpLtJP82zs{e^mc1H&YnZE8qjNizDfY zOgZ{8v~e)iEAf`Y;GNS3@ifia2&uZjAZrZB*a3uu{CL~-qtM)_S-3I7TUe)CF)X66j-^9xilSKg zmUJ&hw@^$`RQEB)r4*0mV(6zqhc9u)wHOTk*5Q%r^*q(iX+y>|ab)xYHZB4iw2k*f^(t13Lp@~Zah+bH6z?Poy|uCHiO>)gA@(O*h2_@ z=I{l(xX2U{xD){wGk^$aPIu`V1Y1##8Q9VzPV)BhuF=tZa9C5VhaOI9tfMjQM|o|E zD?^;;&=|fS#DX=jJae5=4TFK0?-cLhbN!Ou1G?Hp#F6zHCU>cbyj&f7Y24xebL{K` zSy0O$9;q%d6Fa9f9!U|+m_5WG`wht05vb)V$T$uiQ=wpq%0X+eerW&x{RQh9>qHU+ zbO3{^5E;jH+?^aactdGF{vH@6n4xwVa>P2oxH)3cTDj~-vhA?7ZCgB(3zn8t5bU>1 zkUj)N5XH54r20Ch#keYQ-Zanax&H>!KXwX)j?&>qc8cglWH2JYQ3kH6aVTO8X#nSq z364Uhu=$}w@rj9jR+%oNF%ou1m)6bGD}$<}Z^Rt!Vq#N!E>FGG)atoJh8f^6UkhFo zZTc`qLIlslBh^P3jk#UCC^Vp%gk&~L`uU9PrVN?cG8qw2Si70q7c*lJVB@53K|i$1 z_5itQN=u;dRySM{w5PMz z#M%v_$xzpX)^`Exh~3wy5TXJVeUvA>8^3lp8n`?~ALGUsQscU4zE%!>Cm$8*<7gh& zBhTFBy@-47q24PN4Rsjc#SCzQ0D3AOHr}Xwi1bNr9mOvhkKLOWJJBtOw$Y68 zrUoyK$|!v=4?BflqMk0Oz$e|ZkJ#N_)s*$<`|yo2sJ>QWBmEK{`cfL&m(yV=q#Ke{ zk5kV&9Jza%E{#xIgUg{vznq6T)Y*-z9V#q~^aMUzs&#P7gEFz8TDX_4wW5M{(I4tE zep6i`SbIY*Plrl{z~xM&tLOopmt($AS5XgE2M&0!Cn7D-H)8kd$qELbHZ0M;obR?_(Md?8r@6H+4r$7q#u-A`fqp%&eR}W9@1`)YDs+w7R*FCe^wLx1N*7##>JZ<= z04vGysTxby(RK{V2CFE83)mF2V!(oQ{Wt^D1lD2qW%QXcD;*J>ym7?d4wZ-6p-@+a zHXQRQk(YhE#sIU|5d#qhO3d#=7&@Wmj;bgpQ~ESvve$`PS&+%h`y!G;#CjI(3-%7A z?s^iR3;!G;>Lk)CkO_VCQOQ`4)SNl;JN*i@L91)4Nv-ZQOgPf7L_53@RbO5(8D_w* zGQj<_uBNO-=eWYH>6BqNlG-LcpSADczzVFu-d~MQ6nBXF;O_m`R`vb#xn9iSjunfO zIEgYTK0v5D>`rVyCcPC^c|r98q&U-*Kxb&ZELM{aSRM zwReEkS|c1Z&B)<86a6{>E!eAY8Koa&WQOs2B$6t)toi!&+`LZA)k7FE)<8lB*iGs; zaQg<59_k{wS}l{xS;o1>6pc9KEP8=~`^g_#4Ec@Rx^|Jq^h0R2JCb;E@J9V6dM{+C z$cx@=FnK|%lJ#2%tcQmTMiAFq>3gkH^&+)9Z(B!OSkOIdevC!cc9@|x82`v$@-myt-~I@19ZQO-n+8m zPyGnKKiX_wH&KL{ot;G?300MFgsFvNd)X8D~p4)V)-oN!it59x$@dq)OwnGf4e77F_HcpK*#mx W@oRUIp;jaPBtBC81^l9p=zjoXZ^-lj literal 10820 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 VuUw;)LQQoE;Y{i6Xnxem{0AO%_2mEn diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index 3dfe8f0888ddf510511c3b7e49f7d9a787efb1d1..41878354ca955f987b4b6d4ab3e04c8afadd446d 100644 GIT binary patch literal 18990 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 Zc`oSQhMQ2{j;p(QNZ!FRZ-Z~o{{X?28JqwB literal 16675 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 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/_build/html/_sources/getting_started.rst.txt b/docs/_build/html/_sources/getting_started.rst.txt new file mode 100644 index 00000000..e0a4fb10 --- /dev/null +++ b/docs/_build/html/_sources/getting_started.rst.txt @@ -0,0 +1,112 @@ +========================= +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: + +.. sourcecode:: python + + 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. + +.. sourcecode:: python + + 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. + +.. sourcecode:: python + + 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. + +.. sourcecode:: python + + 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. + +.. sourcecode:: bash + + $ 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. diff --git a/docs/_build/html/_sources/index.rst.txt b/docs/_build/html/_sources/index.rst.txt new file mode 100644 index 00000000..189ce524 --- /dev/null +++ b/docs/_build/html/_sources/index.rst.txt @@ -0,0 +1,91 @@ +.. _index: + +============================= +Moto: A Mock library for boto +============================= + +A library that allows you to easily mock out tests based on +_`AWS infrastructure`. + +.. _AWS infrastructure: http://aws.amazon.com/ + +Getting Started +--------------- + +If you've never used ``moto`` before, you should read the +:doc:`Getting Started with Moto ` guide to get familiar +with ``moto`` & its usage. + +Currently implemented Services +------------------------------ + +* **Compute** + + * :doc:`Elastic Compute Cloud ` + * AMI + * EBS + * Instances + * Security groups + * Tags + * Auto Scaling + +* **Storage and content delivery** + + * S3 + * Glacier + +* **Database** + + * RDS + * DynamoDB + * Redshift + +* **Networking** + + * Route53 + +* **Administration and security** + + * Identity & access management + * CloudWatch + +* **Deployment and management** + + * CloudFormation + +* **Analytics** + + * Kinesis + * EMR + +* **Application service** + + * SQS + * SES + +* **Mobile services** + + * SNS + +Additional Resources +-------------------- + +* `Moto Source Repository`_ +* `Moto Issue Tracker`_ + +.. _Moto Issue Tracker: https://github.com/spulec/moto/issues +.. _Moto Source Repository: https://github.com/spulec/moto + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +.. toctree:: + :maxdepth: 2 + :hidden: + :glob: + + getting_started diff --git a/docs/_build/html/_static/alabaster.css b/docs/_build/html/_static/alabaster.css index 07a9e2a4..be65b137 100644 --- a/docs/_build/html/_static/alabaster.css +++ b/docs/_build/html/_static/alabaster.css @@ -15,6 +15,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @import url("basic.css"); /* -- page layout ----------------------------------------------------------- */ @@ -22,12 +57,13 @@ body { font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif; font-size: 17px; - background-color: white; + background-color: #fff; color: #000; margin: 0; padding: 0; } + div.document { width: 940px; margin: 30px auto 0 auto; @@ -44,6 +80,8 @@ div.bodywrapper { div.sphinxsidebar { width: 220px; + font-size: 14px; + line-height: 1.5; } hr { @@ -51,11 +89,15 @@ hr { } div.body { - background-color: #ffffff; + background-color: #fff; color: #3E4349; padding: 0 30px 0 30px; } +div.body > .section { + text-align: left; +} + div.footer { width: 940px; margin: 20px auto 30px auto; @@ -68,6 +110,11 @@ div.footer a { color: #888; } +p.caption { + font-family: inherit; + font-size: inherit; +} + div.relations { display: none; @@ -84,11 +131,6 @@ div.sphinxsidebar a:hover { border-bottom: 1px solid #999; } -div.sphinxsidebar { - font-size: 14px; - line-height: 1.5; -} - div.sphinxsidebarwrapper { padding: 18px 10px; } @@ -168,8 +210,8 @@ div.sphinxsidebar input { div.sphinxsidebar hr { border: none; height: 1px; - color: #999; - background: #999; + color: #AAA; + background: #AAA; text-align: left; margin-left: 0; @@ -225,19 +267,15 @@ div.body p, div.body dd, div.body li { div.admonition { margin: 20px 0px; padding: 10px 30px; - background-color: #FCC; - border: 1px solid #FAA; + background-color: #EEE; + border: 1px solid #CCC; } -div.admonition tt.xref, div.admonition a tt { +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; border-bottom: 1px solid #fafafa; } -dd div.admonition { - margin-left: -60px; - padding-left: 60px; -} - div.admonition p.admonition-title { font-family: 'Garamond', 'Georgia', serif; font-weight: normal; @@ -252,25 +290,71 @@ div.admonition p.last { } div.highlight { - background-color: white; + background-color: #fff; } dt:target, .highlight { background: #FAF3E8; } +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + div.note { background-color: #EEE; border: 1px solid #CCC; } +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + div.seealso { background-color: #EEE; border: 1px solid #CCC; } div.topic { - background-color: #eee; + background-color: #EEE; } p.admonition-title { @@ -305,16 +389,16 @@ tt.descname, code.descname { } img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; } table.docutils { border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; } table.docutils td, table.docutils th { @@ -350,8 +434,22 @@ table.field-list td { padding: 0; } +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + table.footnote td.label { - width: 0px; + width: .1px; padding: 0.3em 0 0.3em 0.5em; } @@ -374,6 +472,7 @@ blockquote { } ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ margin: 10px 0 10px 30px; padding: 0; } @@ -385,16 +484,15 @@ pre { line-height: 1.3em; } +div.viewcode-block:target { + background: #ffd; +} + dl pre, blockquote pre, li pre { margin-left: 0; padding-left: 30px; } -dl dl pre { - margin-left: -90px; - padding-left: 90px; -} - tt, code { background-color: #ecf0f3; color: #222; @@ -403,7 +501,7 @@ tt, code { tt.xref, code.xref, a tt { background-color: #FBFBFB; - border-bottom: 1px solid white; + border-bottom: 1px solid #fff; } a.reference { @@ -411,6 +509,11 @@ a.reference { border-bottom: 1px dotted #004B6B; } +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + a.reference:hover { border-bottom: 1px solid #6D4100; } @@ -460,6 +563,11 @@ a:hover tt, a:hover code { margin-left: 0; } + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + .document { width: auto; } @@ -495,7 +603,7 @@ a:hover tt, a:hover code { div.documentwrapper { float: none; - background: white; + background: #fff; } div.sphinxsidebar { @@ -510,7 +618,7 @@ a:hover tt, a:hover code { div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, div.sphinxsidebar h3 a { - color: white; + color: #fff; } div.sphinxsidebar a { diff --git a/docs/_build/html/_static/basic.css b/docs/_build/html/_static/basic.css index 9fa77d88..7ed0e58e 100644 --- a/docs/_build/html/_static/basic.css +++ b/docs/_build/html/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -52,6 +52,8 @@ div.sphinxsidebar { width: 230px; margin-left: -100%; font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; } div.sphinxsidebar ul { @@ -83,10 +85,6 @@ div.sphinxsidebar #searchbox input[type="text"] { width: 170px; } -div.sphinxsidebar #searchbox input[type="submit"] { - width: 30px; -} - img { border: 0; max-width: 100%; @@ -124,6 +122,8 @@ ul.keywordmatches li.goodmatch a { table.contentstable { width: 90%; + margin-left: auto; + margin-right: auto; } table.contentstable p.biglink { @@ -151,9 +151,14 @@ table.indextable td { vertical-align: top; } -table.indextable dl, table.indextable dd { +table.indextable ul { margin-top: 0; margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; } table.indextable tr.pcap { @@ -185,8 +190,22 @@ div.genindex-jumpbox { padding: 0.4em; } +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + /* -- general body styles --------------------------------------------------- */ +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + a.headerlink { visibility: hidden; } @@ -212,10 +231,6 @@ div.body td { text-align: left; } -.field-list ul { - padding-left: 1em; -} - .first { margin-top: 0 !important; } @@ -332,10 +347,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.field-list td, table.field-list th { - border: 0 !important; -} - table.footnote td, table.footnote th { border: 0 !important; } @@ -372,6 +383,20 @@ div.figure p.caption span.caption-number { div.figure p.caption span.caption-text { } +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} /* -- other body styles ----------------------------------------------------- */ @@ -422,15 +447,6 @@ dl.glossary dt { font-size: 1.1em; } -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - .optional { font-size: 1.3em; } @@ -489,6 +505,13 @@ pre { overflow-y: hidden; /* fixes display issues on Chrome browsers */ } +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + td.linenos pre { padding: 5px 0px; border: 0; @@ -580,6 +603,16 @@ span.eqno { float: right; } +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + /* -- printout stylesheet --------------------------------------------------- */ @media print { diff --git a/docs/_build/html/_static/comment-bright.png b/docs/_build/html/_static/comment-bright.png index 551517b8c83b76f734ff791f847829a760ad1903..15e27edb12ac25701ac0ac21b97b52bb4e45415e 100644 GIT binary patch delta 733 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 delta 3577 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 diff --git a/docs/_build/html/_static/comment.png b/docs/_build/html/_static/comment.png index 92feb52b8824c6b0f59b658b1196c61de9162a95..dfbc0cbd512bdeefcb1984c99d8e577efb77f006 100644 GIT binary patch delta 617 zcmV-v0+#*t8i56nBYy%&NklWd+(1-70zU(rtxtqR%j-lsH|CKQJXqD{+F7Jup|pRuhQFVdUw@0>ky z*1TY!!dA#IA*r}ObSESk-6OCkg5*#h0AQq*X$E0;P~qAd6`Z=k_k*lIM8l(T*@4V1 z6=21^AfaqpB{>8^307MuAi4LvISfny#Dc7H; z+j6gYtxsBW-+zM8hyV(EnlU`4l!hvR5JGs7we;ZyuMOZ}%HtBU`yGuatU@${nlgNv z)@wkpl^@`pz&)=}ra^zdnc2viWjmk>NX@OXRRewEW;1j{m zniEpp4XNQqxFVSO^pqvDtz7R)=J&;kS|OK?bN zFaUsNI{<(mvC0%^<5{^ZU3?Vp!AxUrWg*=czh>)+OBG{E;zntC()^4N5cd32keyG0 zXzSOWC1Q7T4aMl~c47azN_(im0N)7OqdPBCGw;353_o$DqGRDhuhU$Eaj!@m000000NkvXXu0mjf DXSNf59&ghTmgWD z0l;*TI7e|ZE3OddDgXd@nX){&BsoQaTL>+22Uk}v9w^R9 z7b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&VLTB&dxTDwhmt{>c0m6B4T3W z{^ifBa6kY6;dFk{{wy!E8h|?nfNlPwCGG@hUJIag_lst-4?wj5py}FI^KkfnJUm6A zkh$5}<>chpO2k52Vaiv1{%68pz*qfj`F=e7_x0eu;v|7GU4cgg_~63K^h~83&yop* zV%+ABM}Pdc3;+Bb(;~!4V!2o<6ys46agIcqjPo+3B8fthDa9qy|77CdEc*jK-!%ZR zYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S1Au6Q;m>#f??3%Vpd|o+W=WE9003S@ zBra6Svp>fO002awfhw>;8}z{#EWidF!3EsG3xE7zHiSYX#KJ-lLJDMn9CBbOtb#%) zhRv`YDqt_vKpix|QD}yfa1JiQRk#j4a1Z)n2%fLC6RbVIkUx0b+_+BaR3c znT7Zv!AJxWizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifqlp|(=5QHQ7#Gr)$3XMd?XsE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*S zAPZv|vv@2aYYnT0b%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5c zP6_8IrP_yNQcbz0DW*G2J50yT%*~?B)|oY%Ju%lZ z=bPu7*PGwBU|M)uEVih&xMfMQuC{HqePL%}7iYJ{uEXw=y_0>qeSeMpJqHbk*$%56 zS{;6Kv~mM9! zg3B(KJ}#RZ#@)!hR=4N)wtYw9={>5&Kw=W)*2gz%*kgNq+ zEef_mrsz~!DAy_nvS(#iX1~pe$~l&+o-57m%(KedkbgIv@1Ote62cPUlD4IWOIIx& zSmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGAUct(O!LkCy1 z<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}TincS4LsjI}fWY1>O zX6feMEq|U{4wkBy=9dm`4cXeX4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC- zq*U}&`cyXV(%rRT*Z6MH?i+i&_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-N zmiuj8txj!m?Z*Ss1N{dh4z}01)YTo*JycSU)_*JOM-ImyzW$x>cP$Mz4ONYt#^NJz zM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{ zoHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR z&VO9;xODQe+vO8ixL2C5I$v$-bm~0*lhaSfyPUh4uDM)mx$b(swR>jw=^LIm&fWCA zdGQwi*43UlJ>9+YdT;l|_x0Zv-F|W>{m#p~*>@-It-MdXU-UrjLD@syht)q@{@mE_ z+<$7occAmp+(-8Yg@e!jk@b%cLj{kSkAKUC4TkHUI6gT!;y-fz>HMcd&t%Ugo)`Y2 z{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P`?ZJ24cOCDe z-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy000JJOGiWi{{a60|De66lYamJ z010qNS#tmY3ljhU3ljkVnw%H_000McNliru+6W5(F+1;8x4!@Y0;fqtK~y-)b&<ifarvbDmIM2^4!4}c(0gom<6 zl#?|7=gJF@kK8&YfUoC%nd{EHj8}LeqUUvoxf0=kqji62>ne+U`d#%J)abyK&Y`=eD%oA!G8q-d~|env}a@G z(3O{0R9Yvb^)mu;j>zt6Wg^_Qc)mG*|Mr`&1F%;<2_74{ZDOg>d}4W}h?QnWQh0lJ z?Ij2iL=yV-kL9^qy|EpD;Y02J-u(0=^>-d*{J`|^)`6?uNTzL9_ipG0bYZn9iX2Tm zemgn8^x>XeLoe}PxNPI)pF8)-WqDxA|Wj zJ~}&i?7NevKcA@{dGp<=jsJXo=8}H6UquC+gFgAR6l|+0|jZ_6oe@;fCU_FgBkz;&H}&BVO8(200000NkvXX Hu0mjfcLq?d literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~&H|6fVxZ#d zAk65bF}ngN$X?><>&kwMor^(NtW3yF87Slz;1l8sq&LUMQwyA_72h&sm+fe#sqFPEG6cGWQ5ul00000NkvXXu0mjfPn}Jr literal 347 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~&H|6fVxZ#d zAk65bF}ngN$X?><>&kwMol#tg zK_ydLmzem(vK1>2TzUEGl*lj!N<7$PCrdoWV0 z$w0*Ap!bZ4if7h;-yfL#MC0e;t{xY+$l~DX2EWYIPet1cohf^BdG+jXhtuq&W-0|c zKPmlKv-7OTjb}T)7@fTGd9y~u4{g8An;)c2U=w=nwQ7}zVDc>n+a diff --git a/docs/_build/html/_static/file.png b/docs/_build/html/_static/file.png index 254c60bfbe2715ae2edca48ebccfd074deb8031d..a858a410e4faa62ce324d814e4b816fff83a6fb3 100644 GIT binary patch delta 270 zcmV+p0rCFk0-gep8Gi-<001BJ|6u?C0Od(UK~#7Ft&@XN1_2a>_bGdYY}X*$wg%Z8 zX4^eLuH_4yI={KTGvE4t=dOhQ{{Ff0@^V-tLGTw3SS|KM34VWn@%{Y`^7Hc(fX9g_ zicl0KzJQGf2M0JjJOnv9Itt_X_}EYomFiC>k|gO1*chE`et&{k_w3`1`{pLd8NJp; zSHKirG_`jDQGLSB!vO}iUi_FB)c4J!zJCD?1B<9>>H?|nnlLX&FX=!=Dd|LdaVwJZ zYLJv$1)ft?HNJok%;*_tnx-%Czi(NV2}dSOW^;Ujqko~hyL-**-}v7%CAd|8D^sxP UU_nOG00000Ne4wvM6N<$f*gB&bN~PV delta 342 zcmbQo^o(hOWIZzj1A~Sxe=v~ZEbxddW?= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.0 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-01-04 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + // Known :disabled false positives: + // IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset) + // not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Check form elements and option elements for explicit disabling + return "label" in elem && elem.disabled === disabled || + "form" in elem && elem.disabled === disabled || + + // Check non-disabled form elements for fieldset[disabled] ancestors + "form" in elem && elem.disabled === false && ( + // Support: IE6-11+ + // Ancestry is covered for us + elem.isDisabled === disabled || + + // Otherwise, assume any non-

@@ -41,22 +46,22 @@

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
+
>>> import boto.ec2, moto
 >>> mock_ec2 = moto.mock_ec2()
 >>> mock_ec2.start()
->>> conn = boto.ec2.connect_to_region("eu-west-1")
+>>> 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 = conn.run_instances('ami-f00ba4')
 >>> reservation.instances[0]
 Instance:i-91dd2f32
 

Moto set static or generate random object’s attributes:

-
>>> vars(reservation.instances[0])
+
>>> vars(reservation.instances[0])
 {'_in_monitoring_element': False,
  '_placement': None,
  '_previous_state': None,
@@ -132,21 +137,18 @@ Before all code examples the following snippet is launched:

This Page

@@ -157,11 +159,11 @@ Before all code examples the following snippet is launched:

©2015, Steve Pulec. | - Powered by Sphinx 1.3.1 - & Alabaster 0.7.6 + Powered by Sphinx 1.5.3 + & Alabaster 0.7.10 | - Page source
diff --git a/docs/_build/html/genindex.html b/docs/_build/html/genindex.html index c1609cd9..8f9a214b 100644 --- a/docs/_build/html/genindex.html +++ b/docs/_build/html/genindex.html @@ -7,7 +7,7 @@ - Index — Moto 0.4.10 documentation + Index — Moto 0.4.10 documentation @@ -18,19 +18,24 @@ VERSION: '0.4.10', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', - HAS_SOURCE: true + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' }; - + + + - + + - + +
@@ -62,14 +67,11 @@
@@ -80,8 +82,8 @@ ©2015, Steve Pulec. | - Powered by Sphinx 1.3.1 - & Alabaster 0.7.6 + Powered by Sphinx 1.5.3 + & Alabaster 0.7.10
diff --git a/docs/_build/html/getting_started.html b/docs/_build/html/getting_started.html index a8a5832b..ee63ee56 100644 --- a/docs/_build/html/getting_started.html +++ b/docs/_build/html/getting_started.html @@ -6,7 +6,7 @@ - Getting Started with Moto — Moto 0.4.10 documentation + Getting Started with Moto — Moto 0.4.10 documentation @@ -17,20 +17,25 @@ VERSION: '0.4.10', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', - HAS_SOURCE: true + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' }; - + + + - + + - + +
@@ -42,30 +47,30 @@

Installing Moto

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

-
pip install 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
+
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
+
import boto
 from boto.s3.key import Key
 
 class MyModel(object):
-    def __init__(self, name, value):
+    def __init__(self, name, value):
         self.name = name
         self.value = value
 
     def save(self):
         conn = boto.connect_s3()
-        bucket = conn.get_bucket('mybucket')
+        bucket = conn.get_bucket('mybucket')
         k = Key(bucket)
         k.key = self.name
         k.set_contents_from_string(self.value)
@@ -75,52 +80,52 @@ python setup.py install
 

Decorator

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

-
import boto
+
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')
+    # 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 = MyModel('steve', 'is awesome')
     model_instance.save()
 
-    assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome'
+    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():
+
def test_my_model_save():
     with mock_s3():
         conn = boto.connect_s3()
-        conn.create_bucket('mybucket')
+        conn.create_bucket('mybucket')
 
-        model_instance = MyModel('steve', 'is awesome')
+        model_instance = MyModel('steve', 'is awesome')
         model_instance.save()
 
-        assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome'
+        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():
+
def test_my_model_save():
     mock = mock_s3()
     mock.start()
 
     conn = boto.connect_s3()
-    conn.create_bucket('mybucket')
+    conn.create_bucket('mybucket')
 
-    model_instance = MyModel('steve', 'is awesome')
+    model_instance = MyModel('steve', 'is awesome')
     model_instance.save()
 
-    assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome'
+    assert conn.get_bucket('mybucket').get_key('steve').get_contents_as_string() == 'is awesome'
 
     mock.stop()
 
@@ -129,8 +134,8 @@ python setup.py install

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://0.0.0.0:3000/
+
$ 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.

@@ -169,21 +174,18 @@ python setup.py install

This Page

@@ -194,11 +196,11 @@ python setup.py install ©2015, Steve Pulec. | - Powered by Sphinx 1.3.1 - & Alabaster 0.7.6 + Powered by Sphinx 1.5.3 + & Alabaster 0.7.10 | - Page source
diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html index b05d14c8..df954b1c 100644 --- a/docs/_build/html/index.html +++ b/docs/_build/html/index.html @@ -6,7 +6,7 @@ - Moto: A Mock library for boto — Moto 0.4.10 documentation + Moto: A Mock library for boto — Moto 0.4.10 documentation @@ -17,20 +17,25 @@ VERSION: '0.4.10', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', - HAS_SOURCE: true + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' }; - + + + - + + - + +
@@ -44,14 +49,14 @@

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 & its usage.

Currently implemented Services

diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv index d67caac9..d08c6096 100644 --- a/docs/_build/html/objects.inv +++ b/docs/_build/html/objects.inv @@ -2,7 +2,6 @@ # Project: Moto # Version: 0.4.10 # The remainder of this file is compressed using zlib. -xm -0yFDOls)TGf5 鳎XԔ뼳 KTL+p^AFVo'z4+= K2}OMľ,\ \ No newline at end of file +xڅK 0 z`x䱶i"5}xJ2;ERMH^T):!agD-pqTKr>+!C]hyĠ: +%Ӯ^? +qaOvuv)JP6p3T]%ބ` k2+95oN2 ^ם \ No newline at end of file diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html index 6fad36fa..4eb37a5e 100644 --- a/docs/_build/html/search.html +++ b/docs/_build/html/search.html @@ -6,7 +6,7 @@ - Search — Moto 0.4.10 documentation + Search — Moto 0.4.10 documentation @@ -17,14 +17,16 @@ VERSION: '0.4.10', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', - HAS_SOURCE: true + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt' }; - + + @@ -32,12 +34,15 @@ + - + + - + +
@@ -87,8 +92,8 @@ ©2015, Steve Pulec. | - Powered by Sphinx 1.3.1 - & Alabaster 0.7.6 + Powered by Sphinx 1.5.3 + & Alabaster 0.7.10
diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index cadbef52..29c63e80 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:47,filenames:["ec2_tut","getting_started","index"],objects:{},objnames:{},objtypes:{},terms:{"27t05":0,"57z":0,"91dd2f32":0,"__init__":1,"_in_monitoring_el":0,"_placement":0,"_previous_st":0,"_state":0,"class":1,"import":[0,1],"static":0,"true":0,"var":0,access:2,account:1,administr:2,after:0,all:[0,1],allow:[1,2],alreadi:0,also:1,amazonaw:0,ami:[0,2],ami_launch_index:0,analyt:2,applic:2,architectur:0,assert:1,assum:0,attribut:0,auto:2,automat:1,awesom:1,base:2,befor:[0,2],behavior:0,best:1,blank:1,block_device_map:0,bucket:1,call:1,can:1,client_token:0,clone:1,cloud:2,cloudform:2,cloudwatch:2,code:[0,1],com:[0,1],come:1,comput:[0,2],conn:[0,1],connect:0,connect_s3:1,connect_to_region:0,content:2,creat:1,create_bucket:1,databas:2,def:1,deliveri:2,deploy:2,dns_name:0,don:1,download:0,dynamodb:2,easili:2,ebs_optim:0,ec2:[],ec2connect:0,ed65f870:0,elast:2,emr:2,enabl:0,encourag:1,endpoint:1,eni:0,environ:1,even:1,eventsset:0,everi:1,exampl:[0,1],explain:0,f00ba4:0,fals:0,familiar:2,featur:0,follow:[0,1],from:1,full:1,gener:0,get_bucket:1,get_contents_as_str:1,get_kei:1,git:1,github:1,glacier:2,group:[0,2],group_nam:0,guid:2,have:[0,1],how:0,http:1,hypervisor:0,ident:2,image_id:0,index:2,infrastructur:2,insid:1,instanc:[],instance_profil:0,instance_typ:0,interfac:0,intern:0,ip_address:0,isn:1,issu:2,item:0,just:1,keep:1,kei:1,kernel:0,key_nam:0,kinesi:2,latest:1,launch_tim:0,manag:[],manual:1,method:1,mind:1,mobil:2,mock_ec2:0,mock_s3:1,model_inst:1,modul:2,monitor:0,monitoring_st:0,moto_serv:1,mybucket:1,mymodel:1,mymodul:1,name:1,need:1,network:2,networkinterfac:0,never:2,none:0,object:[0,1],out:[1,2],p3000:1,page:2,paravirtu:0,pend:0,persist:0,pip:1,platform:0,previous:0,private_dns_nam:0,private_ip_address:0,product_cod:0,public_dns_nam:0,python:1,ramdisk:0,random:0,read:2,reason:0,redshift:2,region:0,regioninfo:0,releas:1,repositori:2,requester_id:0,reserv:0,root_device_nam:0,root_device_typ:0,route53:2,run:1,run_inst:0,same:[0,1],save:1,scale:2,search:2,secur:2,self:1,set:0,set_contents_from_str:1,setup:1,sever:1,should:2,sinc:1,small:0,snippet:0,sourc:[1,2],sourcedestcheck:0,spot_instance_request_id:0,spulec:1,state_reason:0,statement:1,steve:1,stop:1,storag:2,subnet_id:0,tag:[0,2],test:[1,2],test_my_model_sav:1,than:0,thi:[0,1],tracker:2,tutori:0,usag:[],valu:1,veri:1,version:1,virtual:1,virtualization_typ:0,vpc_id:0,want:1,west:0,wrap:1,x86_64:0,xen:0,you:[0,1,2]},titles:["Use Moto as EC2 backend","Getting Started with Moto","Moto: A Mock library for boto"],titleterms:{addit:2,alon:1,backend:0,boto:2,context:1,current:2,decor:1,ec2:0,get:[1,2],implement:2,indic:2,instal:1,instanc:0,launch:0,librari:2,manag:1,mock:2,mode:1,moto:[0,1,2],raw:1,resourc:2,server:1,servic:2,stand:1,start:[1,2],tabl:2,usag:1}}) \ No newline at end of file +Search.setIndex({docnames:["ec2_tut","getting_started","index"],envversion:50,filenames:["ec2_tut.rst","getting_started.rst","index.rst"],objects:{},objnames:{},objtypes:{},terms:{"27t05":0,"57z":0,"91dd2f32":0,"class":1,"import":[0,1],"static":0,"true":0,"var":0,AWS:[1,2],EBS:2,For:1,RDS:2,SES:2,SNS:2,SQS:2,There:1,With:1,__init__:1,_in_monitoring_el:0,_placement:0,_previous_st:0,_state:0,access:2,account:1,administr:2,after:0,all:[0,1],allow:[1,2],alreadi:0,also:1,amazonaw:0,ami:[0,2],ami_launch_index:0,analyt:2,applic:2,architectur:0,assert:1,assum:0,attribut:0,auto:2,automat:1,awesom:1,base:2,befor:[0,2],behavior:0,best:1,blank:1,block_device_map:0,boto:[0,1],bucket:1,call:1,can:1,client_token:0,clone:1,cloud:2,cloudform:2,cloudwatch:2,code:[0,1],com:[0,1],come:1,comput:[0,2],conn:[0,1],connect:0,connect_s3:1,connect_to_region:0,content:2,creat:1,create_bucket:1,databas:2,def:1,deliveri:2,deploy:2,dns_name:0,don:1,download:0,dynamodb:2,easili:2,ebs_optim:0,ec2:1,ec2connect:0,ed65f870:0,elast:2,emr:2,enabl:0,encourag:1,endpoint:1,eni:0,environ:1,even:1,eventsset:0,everi:1,exampl:[0,1],explain:0,f00ba4:0,fals:0,familiar:2,featur:0,follow:[0,1],from:1,full:1,gener:0,get_bucket:1,get_contents_as_str:1,get_kei:1,git:1,github:1,glacier:2,group:[0,2],group_nam:0,guid:2,have:[0,1],how:0,http:1,hypervisor:0,ident:2,image_id:0,index:2,infrastructur:2,insid:1,instal:0,instanc:2,instance_profil:0,instance_typ:0,interfac:0,intern:0,ip_address:0,isn:1,issu:2,item:0,its:2,just:1,keep:1,kei:1,kernel:0,key_nam:0,kinesi:2,latest:1,launch_tim:0,manag:2,manual:1,method:1,mind:1,mobil:2,mock:[0,1],mock_ec2:0,mock_s3:1,model_inst:1,modul:2,monitor:0,monitoring_st:0,moto_serv:1,mybucket:1,mymodel:1,mymodul:1,name:1,need:1,network:2,networkinterfac:0,never:2,none:0,object:[0,1],out:[1,2],p3000:1,page:2,paravirtu:0,pend:0,persist:0,pip:1,platform:0,previous:0,private_dns_nam:0,private_ip_address:0,product_cod:0,public_dns_nam:0,python:1,ramdisk:0,random:0,read:2,reason:0,redshift:2,region:0,regioninfo:0,releas:1,repositori:2,requester_id:0,reserv:0,root_device_nam:0,root_device_typ:0,route53:2,run:1,run_inst:0,same:[0,1],save:1,scale:2,search:2,secur:2,self:1,set:0,set_contents_from_str:1,setup:1,sever:1,should:2,sinc:1,small:0,snippet:0,sourc:[1,2],sourcedestcheck:0,spot_instance_request_id:0,spulec:1,start:0,state_reason:0,statement:1,steve:1,stop:1,storag:2,subnet_id:0,tag:[0,2],test:[1,2],test_my_model_sav:1,than:0,thi:[0,1],tracker:2,tutori:0,usag:2,use:[0,1],used:2,useful:1,using:1,valu:1,veri:1,version:1,virtual:1,virtualization_typ:0,vpc_id:0,want:1,west:0,wrap:1,x86_64:0,xen:0,you:[0,1,2]},titles:["Use Moto as EC2 backend","Getting Started with Moto","Moto: A Mock library for boto"],titleterms:{Use:0,addit:2,alon:1,backend:0,boto:2,context:1,current:2,decor:1,ec2:0,get:[1,2],implement:2,indic:2,instal:1,instanc:0,launch:0,librari:2,manag:1,mock:2,mode:1,moto:[0,1,2],raw:1,resourc:2,server:1,servic:2,stand:1,start:[1,2],tabl:2,usag:1}}) \ No newline at end of file