gcloud 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +0 -0
- data/CHANGELOG +4 -0
- data/Makefile +4 -0
- data/Manifest +760 -1
- data/bin/gcloud +7 -0
- data/bin/{gcutil → gcutil.symlink} +0 -0
- data/bin/gsutil-symlink +377 -0
- data/gcloud.gemspec +5 -5
- data/packages/gsutil/CHECKSUM +1 -0
- data/packages/gsutil/COPYING +202 -0
- data/packages/gsutil/LICENSE.third_party +295 -0
- data/packages/gsutil/MANIFEST.in +5 -0
- data/packages/gsutil/README +38 -0
- data/packages/gsutil/README.pkg +49 -0
- data/packages/gsutil/ReleaseNotes.txt +780 -0
- data/packages/gsutil/VERSION +1 -0
- data/packages/gsutil/boto/Changelog.rst +35 -0
- data/packages/gsutil/boto/LICENSE +18 -0
- data/packages/gsutil/boto/MANIFEST.in +12 -0
- data/packages/gsutil/boto/README.rst +163 -0
- data/packages/gsutil/boto/bin/asadmin +290 -0
- data/packages/gsutil/boto/bin/bundle_image +27 -0
- data/packages/gsutil/boto/bin/cfadmin +108 -0
- data/packages/gsutil/boto/bin/cq +89 -0
- data/packages/gsutil/boto/bin/cwutil +140 -0
- data/packages/gsutil/boto/bin/elbadmin +284 -0
- data/packages/gsutil/boto/bin/fetch_file +43 -0
- data/packages/gsutil/boto/bin/glacier +154 -0
- data/packages/gsutil/boto/bin/instance_events +145 -0
- data/packages/gsutil/boto/bin/kill_instance +35 -0
- data/packages/gsutil/boto/bin/launch_instance +252 -0
- data/packages/gsutil/boto/bin/list_instances +90 -0
- data/packages/gsutil/boto/bin/lss3 +77 -0
- data/packages/gsutil/boto/bin/mturk +465 -0
- data/packages/gsutil/boto/bin/pyami_sendmail +52 -0
- data/packages/gsutil/boto/bin/route53 +205 -0
- data/packages/gsutil/boto/bin/s3put +374 -0
- data/packages/gsutil/boto/bin/sdbadmin +194 -0
- data/packages/gsutil/boto/bin/taskadmin +116 -0
- data/packages/gsutil/boto/boto/__init__.py +793 -0
- data/packages/gsutil/boto/boto/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/auth.py +682 -0
- data/packages/gsutil/boto/boto/auth.pyc +0 -0
- data/packages/gsutil/boto/boto/auth_handler.py +58 -0
- data/packages/gsutil/boto/boto/auth_handler.pyc +0 -0
- data/packages/gsutil/boto/boto/beanstalk/__init__.py +65 -0
- data/packages/gsutil/boto/boto/beanstalk/exception.py +64 -0
- data/packages/gsutil/boto/boto/beanstalk/layer1.py +1153 -0
- data/packages/gsutil/boto/boto/beanstalk/response.py +703 -0
- data/packages/gsutil/boto/boto/beanstalk/wrapper.py +29 -0
- data/packages/gsutil/boto/boto/cacerts/__init__.py +22 -0
- data/packages/gsutil/boto/boto/cacerts/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/cacerts/cacerts.txt +633 -0
- data/packages/gsutil/boto/boto/cloudformation/__init__.py +68 -0
- data/packages/gsutil/boto/boto/cloudformation/connection.py +364 -0
- data/packages/gsutil/boto/boto/cloudformation/stack.py +360 -0
- data/packages/gsutil/boto/boto/cloudformation/template.py +43 -0
- data/packages/gsutil/boto/boto/cloudfront/__init__.py +324 -0
- data/packages/gsutil/boto/boto/cloudfront/distribution.py +745 -0
- data/packages/gsutil/boto/boto/cloudfront/exception.py +26 -0
- data/packages/gsutil/boto/boto/cloudfront/identity.py +122 -0
- data/packages/gsutil/boto/boto/cloudfront/invalidation.py +216 -0
- data/packages/gsutil/boto/boto/cloudfront/logging.py +38 -0
- data/packages/gsutil/boto/boto/cloudfront/object.py +48 -0
- data/packages/gsutil/boto/boto/cloudfront/origin.py +150 -0
- data/packages/gsutil/boto/boto/cloudfront/signers.py +60 -0
- data/packages/gsutil/boto/boto/cloudsearch/__init__.py +45 -0
- data/packages/gsutil/boto/boto/cloudsearch/document.py +265 -0
- data/packages/gsutil/boto/boto/cloudsearch/domain.py +394 -0
- data/packages/gsutil/boto/boto/cloudsearch/layer1.py +738 -0
- data/packages/gsutil/boto/boto/cloudsearch/layer2.py +67 -0
- data/packages/gsutil/boto/boto/cloudsearch/optionstatus.py +248 -0
- data/packages/gsutil/boto/boto/cloudsearch/search.py +365 -0
- data/packages/gsutil/boto/boto/cloudsearch/sourceattribute.py +75 -0
- data/packages/gsutil/boto/boto/compat.py +28 -0
- data/packages/gsutil/boto/boto/compat.pyc +0 -0
- data/packages/gsutil/boto/boto/connection.py +1081 -0
- data/packages/gsutil/boto/boto/connection.pyc +0 -0
- data/packages/gsutil/boto/boto/contrib/__init__.py +22 -0
- data/packages/gsutil/boto/boto/contrib/ymlmessage.py +52 -0
- data/packages/gsutil/boto/boto/core/README +58 -0
- data/packages/gsutil/boto/boto/core/__init__.py +23 -0
- data/packages/gsutil/boto/boto/core/auth.py +78 -0
- data/packages/gsutil/boto/boto/core/credentials.py +154 -0
- data/packages/gsutil/boto/boto/core/dictresponse.py +178 -0
- data/packages/gsutil/boto/boto/core/service.py +67 -0
- data/packages/gsutil/boto/boto/datapipeline/__init__.py +0 -0
- data/packages/gsutil/boto/boto/datapipeline/exceptions.py +42 -0
- data/packages/gsutil/boto/boto/datapipeline/layer1.py +546 -0
- data/packages/gsutil/boto/boto/dynamodb/__init__.py +66 -0
- data/packages/gsutil/boto/boto/dynamodb/batch.py +262 -0
- data/packages/gsutil/boto/boto/dynamodb/condition.py +170 -0
- data/packages/gsutil/boto/boto/dynamodb/exceptions.py +64 -0
- data/packages/gsutil/boto/boto/dynamodb/item.py +196 -0
- data/packages/gsutil/boto/boto/dynamodb/layer1.py +575 -0
- data/packages/gsutil/boto/boto/dynamodb/layer2.py +798 -0
- data/packages/gsutil/boto/boto/dynamodb/schema.py +112 -0
- data/packages/gsutil/boto/boto/dynamodb/table.py +540 -0
- data/packages/gsutil/boto/boto/dynamodb/types.py +326 -0
- data/packages/gsutil/boto/boto/ec2/__init__.py +96 -0
- data/packages/gsutil/boto/boto/ec2/address.py +103 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/__init__.py +781 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/activity.py +74 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/group.py +337 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/instance.py +60 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/launchconfig.py +209 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/policy.py +166 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/request.py +38 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/scheduled.py +60 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/tag.py +84 -0
- data/packages/gsutil/boto/boto/ec2/blockdevicemapping.py +141 -0
- data/packages/gsutil/boto/boto/ec2/bundleinstance.py +78 -0
- data/packages/gsutil/boto/boto/ec2/buyreservation.py +84 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/__init__.py +603 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/alarm.py +316 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/datapoint.py +40 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/dimension.py +38 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/listelement.py +31 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/metric.py +175 -0
- data/packages/gsutil/boto/boto/ec2/connection.py +3409 -0
- data/packages/gsutil/boto/boto/ec2/ec2object.py +107 -0
- data/packages/gsutil/boto/boto/ec2/elb/__init__.py +553 -0
- data/packages/gsutil/boto/boto/ec2/elb/healthcheck.py +89 -0
- data/packages/gsutil/boto/boto/ec2/elb/instancestate.py +62 -0
- data/packages/gsutil/boto/boto/ec2/elb/listelement.py +36 -0
- data/packages/gsutil/boto/boto/ec2/elb/listener.py +75 -0
- data/packages/gsutil/boto/boto/ec2/elb/loadbalancer.py +324 -0
- data/packages/gsutil/boto/boto/ec2/elb/policies.py +89 -0
- data/packages/gsutil/boto/boto/ec2/elb/securitygroup.py +38 -0
- data/packages/gsutil/boto/boto/ec2/group.py +39 -0
- data/packages/gsutil/boto/boto/ec2/image.py +350 -0
- data/packages/gsutil/boto/boto/ec2/instance.py +661 -0
- data/packages/gsutil/boto/boto/ec2/instanceinfo.py +51 -0
- data/packages/gsutil/boto/boto/ec2/instancestatus.py +207 -0
- data/packages/gsutil/boto/boto/ec2/keypair.py +113 -0
- data/packages/gsutil/boto/boto/ec2/launchspecification.py +105 -0
- data/packages/gsutil/boto/boto/ec2/networkinterface.py +247 -0
- data/packages/gsutil/boto/boto/ec2/placementgroup.py +51 -0
- data/packages/gsutil/boto/boto/ec2/regioninfo.py +34 -0
- data/packages/gsutil/boto/boto/ec2/reservedinstance.py +227 -0
- data/packages/gsutil/boto/boto/ec2/securitygroup.py +357 -0
- data/packages/gsutil/boto/boto/ec2/snapshot.py +170 -0
- data/packages/gsutil/boto/boto/ec2/spotdatafeedsubscription.py +63 -0
- data/packages/gsutil/boto/boto/ec2/spotinstancerequest.py +188 -0
- data/packages/gsutil/boto/boto/ec2/spotpricehistory.py +55 -0
- data/packages/gsutil/boto/boto/ec2/tag.py +87 -0
- data/packages/gsutil/boto/boto/ec2/vmtype.py +58 -0
- data/packages/gsutil/boto/boto/ec2/volume.py +293 -0
- data/packages/gsutil/boto/boto/ec2/volumestatus.py +200 -0
- data/packages/gsutil/boto/boto/ec2/zone.py +80 -0
- data/packages/gsutil/boto/boto/ecs/__init__.py +90 -0
- data/packages/gsutil/boto/boto/ecs/item.py +153 -0
- data/packages/gsutil/boto/boto/elasticache/__init__.py +62 -0
- data/packages/gsutil/boto/boto/elasticache/layer1.py +1252 -0
- data/packages/gsutil/boto/boto/elastictranscoder/__init__.py +62 -0
- data/packages/gsutil/boto/boto/elastictranscoder/exceptions.py +46 -0
- data/packages/gsutil/boto/boto/elastictranscoder/layer1.py +509 -0
- data/packages/gsutil/boto/boto/emr/__init__.py +73 -0
- data/packages/gsutil/boto/boto/emr/bootstrap_action.py +44 -0
- data/packages/gsutil/boto/boto/emr/connection.py +531 -0
- data/packages/gsutil/boto/boto/emr/emrobject.py +176 -0
- data/packages/gsutil/boto/boto/emr/instance_group.py +43 -0
- data/packages/gsutil/boto/boto/emr/step.py +281 -0
- data/packages/gsutil/boto/boto/exception.py +476 -0
- data/packages/gsutil/boto/boto/exception.pyc +0 -0
- data/packages/gsutil/boto/boto/file/README +49 -0
- data/packages/gsutil/boto/boto/file/__init__.py +28 -0
- data/packages/gsutil/boto/boto/file/bucket.py +112 -0
- data/packages/gsutil/boto/boto/file/connection.py +33 -0
- data/packages/gsutil/boto/boto/file/key.py +199 -0
- data/packages/gsutil/boto/boto/file/simpleresultset.py +30 -0
- data/packages/gsutil/boto/boto/fps/__init__.py +21 -0
- data/packages/gsutil/boto/boto/fps/connection.py +369 -0
- data/packages/gsutil/boto/boto/fps/exception.py +344 -0
- data/packages/gsutil/boto/boto/fps/response.py +175 -0
- data/packages/gsutil/boto/boto/glacier/__init__.py +57 -0
- data/packages/gsutil/boto/boto/glacier/concurrent.py +409 -0
- data/packages/gsutil/boto/boto/glacier/exceptions.py +58 -0
- data/packages/gsutil/boto/boto/glacier/job.py +152 -0
- data/packages/gsutil/boto/boto/glacier/layer1.py +637 -0
- data/packages/gsutil/boto/boto/glacier/layer2.py +93 -0
- data/packages/gsutil/boto/boto/glacier/response.py +48 -0
- data/packages/gsutil/boto/boto/glacier/utils.py +163 -0
- data/packages/gsutil/boto/boto/glacier/vault.py +387 -0
- data/packages/gsutil/boto/boto/glacier/writer.py +242 -0
- data/packages/gsutil/boto/boto/gs/__init__.py +22 -0
- data/packages/gsutil/boto/boto/gs/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/acl.py +304 -0
- data/packages/gsutil/boto/boto/gs/acl.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/bucket.py +870 -0
- data/packages/gsutil/boto/boto/gs/bucket.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/bucketlistresultset.py +64 -0
- data/packages/gsutil/boto/boto/gs/bucketlistresultset.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/connection.py +103 -0
- data/packages/gsutil/boto/boto/gs/connection.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/cors.py +169 -0
- data/packages/gsutil/boto/boto/gs/cors.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/key.py +704 -0
- data/packages/gsutil/boto/boto/gs/key.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/resumable_upload_handler.py +659 -0
- data/packages/gsutil/boto/boto/gs/resumable_upload_handler.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/user.py +54 -0
- data/packages/gsutil/boto/boto/gs/user.pyc +0 -0
- data/packages/gsutil/boto/boto/handler.py +44 -0
- data/packages/gsutil/boto/boto/handler.pyc +0 -0
- data/packages/gsutil/boto/boto/https_connection.py +124 -0
- data/packages/gsutil/boto/boto/https_connection.pyc +0 -0
- data/packages/gsutil/boto/boto/iam/__init__.py +74 -0
- data/packages/gsutil/boto/boto/iam/connection.py +1317 -0
- data/packages/gsutil/boto/boto/iam/summarymap.py +42 -0
- data/packages/gsutil/boto/boto/jsonresponse.py +163 -0
- data/packages/gsutil/boto/boto/jsonresponse.pyc +0 -0
- data/packages/gsutil/boto/boto/manage/__init__.py +23 -0
- data/packages/gsutil/boto/boto/manage/cmdshell.py +241 -0
- data/packages/gsutil/boto/boto/manage/propget.py +64 -0
- data/packages/gsutil/boto/boto/manage/server.py +556 -0
- data/packages/gsutil/boto/boto/manage/task.py +175 -0
- data/packages/gsutil/boto/boto/manage/test_manage.py +34 -0
- data/packages/gsutil/boto/boto/manage/volume.py +420 -0
- data/packages/gsutil/boto/boto/mashups/__init__.py +23 -0
- data/packages/gsutil/boto/boto/mashups/interactive.py +97 -0
- data/packages/gsutil/boto/boto/mashups/iobject.py +115 -0
- data/packages/gsutil/boto/boto/mashups/order.py +211 -0
- data/packages/gsutil/boto/boto/mashups/server.py +395 -0
- data/packages/gsutil/boto/boto/mturk/__init__.py +23 -0
- data/packages/gsutil/boto/boto/mturk/connection.py +1027 -0
- data/packages/gsutil/boto/boto/mturk/layoutparam.py +55 -0
- data/packages/gsutil/boto/boto/mturk/notification.py +103 -0
- data/packages/gsutil/boto/boto/mturk/price.py +48 -0
- data/packages/gsutil/boto/boto/mturk/qualification.py +137 -0
- data/packages/gsutil/boto/boto/mturk/question.py +455 -0
- data/packages/gsutil/boto/boto/mws/__init__.py +21 -0
- data/packages/gsutil/boto/boto/mws/connection.py +813 -0
- data/packages/gsutil/boto/boto/mws/exception.py +75 -0
- data/packages/gsutil/boto/boto/mws/response.py +655 -0
- data/packages/gsutil/boto/boto/plugin.py +90 -0
- data/packages/gsutil/boto/boto/plugin.pyc +0 -0
- data/packages/gsutil/boto/boto/provider.py +337 -0
- data/packages/gsutil/boto/boto/provider.pyc +0 -0
- data/packages/gsutil/boto/boto/pyami/__init__.py +22 -0
- data/packages/gsutil/boto/boto/pyami/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/pyami/bootstrap.py +134 -0
- data/packages/gsutil/boto/boto/pyami/config.py +229 -0
- data/packages/gsutil/boto/boto/pyami/config.pyc +0 -0
- data/packages/gsutil/boto/boto/pyami/copybot.cfg +60 -0
- data/packages/gsutil/boto/boto/pyami/copybot.py +97 -0
- data/packages/gsutil/boto/boto/pyami/helloworld.py +28 -0
- data/packages/gsutil/boto/boto/pyami/installers/__init__.py +64 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/__init__.py +22 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/apache.py +43 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/ebs.py +238 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/installer.py +96 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/mysql.py +109 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/trac.py +139 -0
- data/packages/gsutil/boto/boto/pyami/launch_ami.py +178 -0
- data/packages/gsutil/boto/boto/pyami/scriptbase.py +44 -0
- data/packages/gsutil/boto/boto/pyami/startup.py +60 -0
- data/packages/gsutil/boto/boto/rds/__init__.py +1194 -0
- data/packages/gsutil/boto/boto/rds/dbinstance.py +357 -0
- data/packages/gsutil/boto/boto/rds/dbsecuritygroup.py +177 -0
- data/packages/gsutil/boto/boto/rds/dbsnapshot.py +108 -0
- data/packages/gsutil/boto/boto/rds/event.py +49 -0
- data/packages/gsutil/boto/boto/rds/parametergroup.py +201 -0
- data/packages/gsutil/boto/boto/rds/regioninfo.py +32 -0
- data/packages/gsutil/boto/boto/regioninfo.py +63 -0
- data/packages/gsutil/boto/boto/regioninfo.pyc +0 -0
- data/packages/gsutil/boto/boto/resultset.py +169 -0
- data/packages/gsutil/boto/boto/resultset.pyc +0 -0
- data/packages/gsutil/boto/boto/roboto/__init__.py +1 -0
- data/packages/gsutil/boto/boto/roboto/awsqueryrequest.py +504 -0
- data/packages/gsutil/boto/boto/roboto/awsqueryservice.py +121 -0
- data/packages/gsutil/boto/boto/roboto/param.py +147 -0
- data/packages/gsutil/boto/boto/route53/__init__.py +75 -0
- data/packages/gsutil/boto/boto/route53/connection.py +403 -0
- data/packages/gsutil/boto/boto/route53/exception.py +27 -0
- data/packages/gsutil/boto/boto/route53/hostedzone.py +56 -0
- data/packages/gsutil/boto/boto/route53/record.py +306 -0
- data/packages/gsutil/boto/boto/route53/status.py +42 -0
- data/packages/gsutil/boto/boto/route53/zone.py +412 -0
- data/packages/gsutil/boto/boto/s3/__init__.py +84 -0
- data/packages/gsutil/boto/boto/s3/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/acl.py +164 -0
- data/packages/gsutil/boto/boto/s3/acl.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/bucket.py +1634 -0
- data/packages/gsutil/boto/boto/s3/bucket.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/bucketlistresultset.py +139 -0
- data/packages/gsutil/boto/boto/s3/bucketlistresultset.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/bucketlogging.py +83 -0
- data/packages/gsutil/boto/boto/s3/bucketlogging.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/connection.py +540 -0
- data/packages/gsutil/boto/boto/s3/connection.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/cors.py +210 -0
- data/packages/gsutil/boto/boto/s3/cors.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/deletemarker.py +55 -0
- data/packages/gsutil/boto/boto/s3/deletemarker.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/key.py +1712 -0
- data/packages/gsutil/boto/boto/s3/key.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/keyfile.py +134 -0
- data/packages/gsutil/boto/boto/s3/keyfile.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/lifecycle.py +231 -0
- data/packages/gsutil/boto/boto/s3/lifecycle.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/multidelete.py +138 -0
- data/packages/gsutil/boto/boto/s3/multidelete.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/multipart.py +315 -0
- data/packages/gsutil/boto/boto/s3/multipart.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/prefix.py +42 -0
- data/packages/gsutil/boto/boto/s3/prefix.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/resumable_download_handler.py +339 -0
- data/packages/gsutil/boto/boto/s3/resumable_download_handler.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/tagging.py +71 -0
- data/packages/gsutil/boto/boto/s3/tagging.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/user.py +49 -0
- data/packages/gsutil/boto/boto/s3/user.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/website.py +237 -0
- data/packages/gsutil/boto/boto/s3/website.pyc +0 -0
- data/packages/gsutil/boto/boto/sdb/__init__.py +67 -0
- data/packages/gsutil/boto/boto/sdb/connection.py +617 -0
- data/packages/gsutil/boto/boto/sdb/db/__init__.py +20 -0
- data/packages/gsutil/boto/boto/sdb/db/blob.py +75 -0
- data/packages/gsutil/boto/boto/sdb/db/key.py +59 -0
- data/packages/gsutil/boto/boto/sdb/db/manager/__init__.py +85 -0
- data/packages/gsutil/boto/boto/sdb/db/manager/sdbmanager.py +732 -0
- data/packages/gsutil/boto/boto/sdb/db/manager/xmlmanager.py +517 -0
- data/packages/gsutil/boto/boto/sdb/db/model.py +294 -0
- data/packages/gsutil/boto/boto/sdb/db/property.py +703 -0
- data/packages/gsutil/boto/boto/sdb/db/query.py +85 -0
- data/packages/gsutil/boto/boto/sdb/db/sequence.py +226 -0
- data/packages/gsutil/boto/boto/sdb/db/test_db.py +231 -0
- data/packages/gsutil/boto/boto/sdb/domain.py +377 -0
- data/packages/gsutil/boto/boto/sdb/item.py +181 -0
- data/packages/gsutil/boto/boto/sdb/queryresultset.py +92 -0
- data/packages/gsutil/boto/boto/sdb/regioninfo.py +32 -0
- data/packages/gsutil/boto/boto/services/__init__.py +23 -0
- data/packages/gsutil/boto/boto/services/bs.py +179 -0
- data/packages/gsutil/boto/boto/services/message.py +58 -0
- data/packages/gsutil/boto/boto/services/result.py +136 -0
- data/packages/gsutil/boto/boto/services/service.py +161 -0
- data/packages/gsutil/boto/boto/services/servicedef.py +91 -0
- data/packages/gsutil/boto/boto/services/sonofmmm.cfg +43 -0
- data/packages/gsutil/boto/boto/services/sonofmmm.py +81 -0
- data/packages/gsutil/boto/boto/services/submit.py +88 -0
- data/packages/gsutil/boto/boto/ses/__init__.py +54 -0
- data/packages/gsutil/boto/boto/ses/connection.py +521 -0
- data/packages/gsutil/boto/boto/ses/exceptions.py +77 -0
- data/packages/gsutil/boto/boto/sns/__init__.py +78 -0
- data/packages/gsutil/boto/boto/sns/connection.py +431 -0
- data/packages/gsutil/boto/boto/sqs/__init__.py +56 -0
- data/packages/gsutil/boto/boto/sqs/attributes.py +46 -0
- data/packages/gsutil/boto/boto/sqs/batchresults.py +95 -0
- data/packages/gsutil/boto/boto/sqs/connection.py +417 -0
- data/packages/gsutil/boto/boto/sqs/jsonmessage.py +43 -0
- data/packages/gsutil/boto/boto/sqs/message.py +253 -0
- data/packages/gsutil/boto/boto/sqs/queue.py +478 -0
- data/packages/gsutil/boto/boto/sqs/regioninfo.py +32 -0
- data/packages/gsutil/boto/boto/storage_uri.py +835 -0
- data/packages/gsutil/boto/boto/storage_uri.pyc +0 -0
- data/packages/gsutil/boto/boto/sts/__init__.py +55 -0
- data/packages/gsutil/boto/boto/sts/connection.py +207 -0
- data/packages/gsutil/boto/boto/sts/credentials.py +215 -0
- data/packages/gsutil/boto/boto/swf/__init__.py +60 -0
- data/packages/gsutil/boto/boto/swf/exceptions.py +44 -0
- data/packages/gsutil/boto/boto/swf/layer1.py +1512 -0
- data/packages/gsutil/boto/boto/swf/layer1_decisions.py +287 -0
- data/packages/gsutil/boto/boto/swf/layer2.py +342 -0
- data/packages/gsutil/boto/boto/utils.py +927 -0
- data/packages/gsutil/boto/boto/utils.pyc +0 -0
- data/packages/gsutil/boto/boto/vpc/__init__.py +910 -0
- data/packages/gsutil/boto/boto/vpc/customergateway.py +54 -0
- data/packages/gsutil/boto/boto/vpc/dhcpoptions.py +72 -0
- data/packages/gsutil/boto/boto/vpc/internetgateway.py +72 -0
- data/packages/gsutil/boto/boto/vpc/routetable.py +109 -0
- data/packages/gsutil/boto/boto/vpc/subnet.py +57 -0
- data/packages/gsutil/boto/boto/vpc/vpc.py +54 -0
- data/packages/gsutil/boto/boto/vpc/vpnconnection.py +60 -0
- data/packages/gsutil/boto/boto/vpc/vpngateway.py +83 -0
- data/packages/gsutil/boto/docs/BotoCheatSheet.pdf +0 -0
- data/packages/gsutil/boto/docs/Makefile +89 -0
- data/packages/gsutil/boto/docs/make.bat +113 -0
- data/packages/gsutil/boto/docs/source/_templates/layout.html +3 -0
- data/packages/gsutil/boto/docs/source/autoscale_tut.rst +220 -0
- data/packages/gsutil/boto/docs/source/boto_config_tut.rst +125 -0
- data/packages/gsutil/boto/docs/source/boto_theme/static/boto.css_t +239 -0
- data/packages/gsutil/boto/docs/source/boto_theme/static/pygments.css +61 -0
- data/packages/gsutil/boto/docs/source/boto_theme/theme.conf +3 -0
- data/packages/gsutil/boto/docs/source/cloudfront_tut.rst +196 -0
- data/packages/gsutil/boto/docs/source/cloudsearch_tut.rst +411 -0
- data/packages/gsutil/boto/docs/source/cloudwatch_tut.rst +116 -0
- data/packages/gsutil/boto/docs/source/conf.py +32 -0
- data/packages/gsutil/boto/docs/source/contributing.rst +204 -0
- data/packages/gsutil/boto/docs/source/documentation.rst +59 -0
- data/packages/gsutil/boto/docs/source/dynamodb_tut.rst +339 -0
- data/packages/gsutil/boto/docs/source/ec2_tut.rst +86 -0
- data/packages/gsutil/boto/docs/source/elb_tut.rst +257 -0
- data/packages/gsutil/boto/docs/source/emr_tut.rst +108 -0
- data/packages/gsutil/boto/docs/source/index.rst +146 -0
- data/packages/gsutil/boto/docs/source/rds_tut.rst +108 -0
- data/packages/gsutil/boto/docs/source/ref/autoscale.rst +62 -0
- data/packages/gsutil/boto/docs/source/ref/beanstalk.rst +26 -0
- data/packages/gsutil/boto/docs/source/ref/boto.rst +47 -0
- data/packages/gsutil/boto/docs/source/ref/cloudformation.rst +34 -0
- data/packages/gsutil/boto/docs/source/ref/cloudfront.rst +68 -0
- data/packages/gsutil/boto/docs/source/ref/cloudsearch.rst +59 -0
- data/packages/gsutil/boto/docs/source/ref/cloudwatch.rst +27 -0
- data/packages/gsutil/boto/docs/source/ref/contrib.rst +32 -0
- data/packages/gsutil/boto/docs/source/ref/datapipeline.rst +26 -0
- data/packages/gsutil/boto/docs/source/ref/dynamodb.rst +61 -0
- data/packages/gsutil/boto/docs/source/ref/ec2.rst +140 -0
- data/packages/gsutil/boto/docs/source/ref/ecs.rst +19 -0
- data/packages/gsutil/boto/docs/source/ref/elasticache.rst +19 -0
- data/packages/gsutil/boto/docs/source/ref/elastictranscoder.rst +26 -0
- data/packages/gsutil/boto/docs/source/ref/elb.rst +47 -0
- data/packages/gsutil/boto/docs/source/ref/emr.rst +34 -0
- data/packages/gsutil/boto/docs/source/ref/file.rst +34 -0
- data/packages/gsutil/boto/docs/source/ref/fps.rst +19 -0
- data/packages/gsutil/boto/docs/source/ref/glacier.rst +63 -0
- data/packages/gsutil/boto/docs/source/ref/gs.rst +72 -0
- data/packages/gsutil/boto/docs/source/ref/iam.rst +27 -0
- data/packages/gsutil/boto/docs/source/ref/index.rst +40 -0
- data/packages/gsutil/boto/docs/source/ref/manage.rst +47 -0
- data/packages/gsutil/boto/docs/source/ref/mturk.rst +54 -0
- data/packages/gsutil/boto/docs/source/ref/mws.rst +33 -0
- data/packages/gsutil/boto/docs/source/ref/pyami.rst +103 -0
- data/packages/gsutil/boto/docs/source/ref/rds.rst +47 -0
- data/packages/gsutil/boto/docs/source/ref/route53.rst +34 -0
- data/packages/gsutil/boto/docs/source/ref/s3.rst +111 -0
- data/packages/gsutil/boto/docs/source/ref/sdb.rst +45 -0
- data/packages/gsutil/boto/docs/source/ref/sdb_db.rst +83 -0
- data/packages/gsutil/boto/docs/source/ref/services.rst +61 -0
- data/packages/gsutil/boto/docs/source/ref/ses.rst +21 -0
- data/packages/gsutil/boto/docs/source/ref/sns.rst +17 -0
- data/packages/gsutil/boto/docs/source/ref/sqs.rst +61 -0
- data/packages/gsutil/boto/docs/source/ref/sts.rst +25 -0
- data/packages/gsutil/boto/docs/source/ref/swf.rst +22 -0
- data/packages/gsutil/boto/docs/source/ref/vpc.rst +54 -0
- data/packages/gsutil/boto/docs/source/s3_tut.rst +450 -0
- data/packages/gsutil/boto/docs/source/security_groups.rst +82 -0
- data/packages/gsutil/boto/docs/source/ses_tut.rst +171 -0
- data/packages/gsutil/boto/docs/source/simpledb_tut.rst +188 -0
- data/packages/gsutil/boto/docs/source/sqs_tut.rst +246 -0
- data/packages/gsutil/boto/docs/source/vpc_tut.rst +100 -0
- data/packages/gsutil/boto/pylintrc +305 -0
- data/packages/gsutil/boto/requirements.txt +10 -0
- data/packages/gsutil/boto/setup.py +89 -0
- data/packages/gsutil/boto/tests/__init__.py +20 -0
- data/packages/gsutil/boto/tests/db/test_lists.py +96 -0
- data/packages/gsutil/boto/tests/db/test_password.py +128 -0
- data/packages/gsutil/boto/tests/db/test_query.py +152 -0
- data/packages/gsutil/boto/tests/db/test_sequence.py +109 -0
- data/packages/gsutil/boto/tests/devpay/__init__.py +0 -0
- data/packages/gsutil/boto/tests/devpay/test_s3.py +181 -0
- data/packages/gsutil/boto/tests/fps/__init__.py +0 -0
- data/packages/gsutil/boto/tests/fps/test.py +100 -0
- data/packages/gsutil/boto/tests/fps/test_verify_signature.py +12 -0
- data/packages/gsutil/boto/tests/integration/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/beanstalk/test_wrapper.py +209 -0
- data/packages/gsutil/boto/tests/integration/cloudformation/__init__.py +21 -0
- data/packages/gsutil/boto/tests/integration/cloudformation/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/cloudformation/test_connection.py +110 -0
- data/packages/gsutil/boto/tests/integration/cloudsearch/__init__.py +21 -0
- data/packages/gsutil/boto/tests/integration/cloudsearch/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/datapipeline/test_layer1.py +122 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/test_layer1.py +266 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/test_layer2.py +484 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/test_table.py +84 -0
- data/packages/gsutil/boto/tests/integration/ec2/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/ec2/autoscale/__init__.py +21 -0
- data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_connection.py +167 -0
- data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_connection.py +277 -0
- data/packages/gsutil/boto/tests/integration/ec2/elb/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/ec2/elb/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ec2/elb/test_connection.py +130 -0
- data/packages/gsutil/boto/tests/integration/ec2/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ec2/test_connection.py +192 -0
- data/packages/gsutil/boto/tests/integration/ec2/vpc/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/ec2/vpc/test_connection.py +95 -0
- data/packages/gsutil/boto/tests/integration/elasticache/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/elasticache/test_layer1.py +67 -0
- data/packages/gsutil/boto/tests/integration/elastictranscoder/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/elastictranscoder/test_cert_verification.py +35 -0
- data/packages/gsutil/boto/tests/integration/elastictranscoder/test_layer1.py +115 -0
- data/packages/gsutil/boto/tests/integration/emr/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/emr/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/glacier/__init__.py +22 -0
- data/packages/gsutil/boto/tests/integration/glacier/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/glacier/test_layer1.py +44 -0
- data/packages/gsutil/boto/tests/integration/glacier/test_layer2.py +45 -0
- data/packages/gsutil/boto/tests/integration/gs/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/gs/cb_test_harness.py +71 -0
- data/packages/gsutil/boto/tests/integration/gs/test_basic.py +379 -0
- data/packages/gsutil/boto/tests/integration/gs/test_generation_conditionals.py +399 -0
- data/packages/gsutil/boto/tests/integration/gs/test_resumable_downloads.py +358 -0
- data/packages/gsutil/boto/tests/integration/gs/test_resumable_uploads.py +525 -0
- data/packages/gsutil/boto/tests/integration/gs/test_storage_uri.py +125 -0
- data/packages/gsutil/boto/tests/integration/gs/test_versioning.py +268 -0
- data/packages/gsutil/boto/tests/integration/gs/testcase.py +116 -0
- data/packages/gsutil/boto/tests/integration/gs/util.py +63 -0
- data/packages/gsutil/boto/tests/integration/iam/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/iam/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/mws/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/mws/test.py +100 -0
- data/packages/gsutil/boto/tests/integration/rds/__init__.py +21 -0
- data/packages/gsutil/boto/tests/integration/rds/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/route53/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/route53/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/route53/test_zone.py +132 -0
- data/packages/gsutil/boto/tests/integration/s3/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/s3/mock_storage_service.py +589 -0
- data/packages/gsutil/boto/tests/integration/s3/other_cacerts.txt +70 -0
- data/packages/gsutil/boto/tests/integration/s3/test_bucket.py +263 -0
- data/packages/gsutil/boto/tests/integration/s3/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/s3/test_connection.py +245 -0
- data/packages/gsutil/boto/tests/integration/s3/test_cors.py +78 -0
- data/packages/gsutil/boto/tests/integration/s3/test_encryption.py +115 -0
- data/packages/gsutil/boto/tests/integration/s3/test_https_cert_validation.py +141 -0
- data/packages/gsutil/boto/tests/integration/s3/test_key.py +375 -0
- data/packages/gsutil/boto/tests/integration/s3/test_mfa.py +95 -0
- data/packages/gsutil/boto/tests/integration/s3/test_multidelete.py +181 -0
- data/packages/gsutil/boto/tests/integration/s3/test_multipart.py +139 -0
- data/packages/gsutil/boto/tests/integration/s3/test_pool.py +246 -0
- data/packages/gsutil/boto/tests/integration/s3/test_versioning.py +158 -0
- data/packages/gsutil/boto/tests/integration/sdb/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/sdb/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/sdb/test_connection.py +119 -0
- data/packages/gsutil/boto/tests/integration/ses/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/ses/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ses/test_connection.py +38 -0
- data/packages/gsutil/boto/tests/integration/sns/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/sns/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/sqs/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/sqs/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/sqs/test_connection.py +217 -0
- data/packages/gsutil/boto/tests/integration/sts/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/sts/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/sts/test_session_token.py +65 -0
- data/packages/gsutil/boto/tests/integration/swf/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/swf/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/swf/test_layer1.py +246 -0
- data/packages/gsutil/boto/tests/integration/swf/test_layer1_workflow_execution.py +173 -0
- data/packages/gsutil/boto/tests/mturk/__init__.py +0 -0
- data/packages/gsutil/boto/tests/mturk/_init_environment.py +28 -0
- data/packages/gsutil/boto/tests/mturk/all_tests.py +24 -0
- data/packages/gsutil/boto/tests/mturk/cleanup_tests.py +47 -0
- data/packages/gsutil/boto/tests/mturk/common.py +45 -0
- data/packages/gsutil/boto/tests/mturk/create_free_text_question_regex.doctest +100 -0
- data/packages/gsutil/boto/tests/mturk/create_hit.doctest +92 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_binary.doctest +94 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_external.py +21 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_from_hit_type.doctest +103 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_test.py +21 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_with_qualifications.py +16 -0
- data/packages/gsutil/boto/tests/mturk/hit_persistence.py +27 -0
- data/packages/gsutil/boto/tests/mturk/mocks.py +11 -0
- data/packages/gsutil/boto/tests/mturk/reviewable_hits.doctest +129 -0
- data/packages/gsutil/boto/tests/mturk/run-doctest.py +13 -0
- data/packages/gsutil/boto/tests/mturk/search_hits.doctest +16 -0
- data/packages/gsutil/boto/tests/mturk/selenium_support.py +61 -0
- data/packages/gsutil/boto/tests/mturk/support.py +7 -0
- data/packages/gsutil/boto/tests/mturk/test_disable_hit.py +11 -0
- data/packages/gsutil/boto/tests/test.py +59 -0
- data/packages/gsutil/boto/tests/unit/__init__.py +79 -0
- data/packages/gsutil/boto/tests/unit/auth/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/auth/test_sigv4.py +73 -0
- data/packages/gsutil/boto/tests/unit/beanstalk/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/beanstalk/test_layer1.py +128 -0
- data/packages/gsutil/boto/tests/unit/cloudformation/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/cloudformation/test_connection.py +605 -0
- data/packages/gsutil/boto/tests/unit/cloudformation/test_stack.py +63 -0
- data/packages/gsutil/boto/tests/unit/cloudfront/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py +113 -0
- data/packages/gsutil/boto/tests/unit/cloudfront/test_signed_urls.py +354 -0
- data/packages/gsutil/boto/tests/unit/cloudsearch/__init__.py +1 -0
- data/packages/gsutil/boto/tests/unit/cloudsearch/test_connection.py +241 -0
- data/packages/gsutil/boto/tests/unit/cloudsearch/test_document.py +324 -0
- data/packages/gsutil/boto/tests/unit/cloudsearch/test_search.py +325 -0
- data/packages/gsutil/boto/tests/unit/dynamodb/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/dynamodb/test_batch.py +103 -0
- data/packages/gsutil/boto/tests/unit/dynamodb/test_layer2.py +119 -0
- data/packages/gsutil/boto/tests/unit/dynamodb/test_types.py +82 -0
- data/packages/gsutil/boto/tests/unit/ec2/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/ec2/autoscale/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/ec2/autoscale/test_group.py +162 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_address.py +39 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_blockdevicemapping.py +79 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_connection.py +480 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_instance.py +243 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_networkinterface.py +140 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_volume.py +248 -0
- data/packages/gsutil/boto/tests/unit/emr/test_emr_responses.py +373 -0
- data/packages/gsutil/boto/tests/unit/glacier/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_concurrent.py +120 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_job.py +60 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_layer1.py +98 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_layer2.py +266 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_utils.py +116 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_vault.py +100 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_writer.py +185 -0
- data/packages/gsutil/boto/tests/unit/provider/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/provider/test_provider.py +176 -0
- data/packages/gsutil/boto/tests/unit/rds/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/rds/test_connection.py +131 -0
- data/packages/gsutil/boto/tests/unit/s3/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/s3/test_cors_configuration.py +77 -0
- data/packages/gsutil/boto/tests/unit/s3/test_key.py +75 -0
- data/packages/gsutil/boto/tests/unit/s3/test_keyfile.py +101 -0
- data/packages/gsutil/boto/tests/unit/s3/test_lifecycle.py +97 -0
- data/packages/gsutil/boto/tests/unit/s3/test_tagging.py +47 -0
- data/packages/gsutil/boto/tests/unit/s3/test_uri.py +257 -0
- data/packages/gsutil/boto/tests/unit/s3/test_website.py +188 -0
- data/packages/gsutil/boto/tests/unit/sns/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/sns/test_connection.py +99 -0
- data/packages/gsutil/boto/tests/unit/sqs/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/sqs/test_connection.py +98 -0
- data/packages/gsutil/boto/tests/unit/sqs/test_queue.py +40 -0
- data/packages/gsutil/boto/tests/unit/sts/test_connection.py +74 -0
- data/packages/gsutil/boto/tests/unit/test_connection.py +60 -0
- data/packages/gsutil/boto/tests/unit/utils/test_utils.py +109 -0
- data/packages/gsutil/boto/tox.ini +8 -0
- data/packages/gsutil/gslib/README +5 -0
- data/packages/gsutil/gslib/__init__.py +22 -0
- data/packages/gsutil/gslib/__init__.pyc +0 -0
- data/packages/gsutil/gslib/addlhelp/__init__.py +15 -0
- data/packages/gsutil/gslib/addlhelp/acls.py +234 -0
- data/packages/gsutil/gslib/addlhelp/anon.py +57 -0
- data/packages/gsutil/gslib/addlhelp/command_opts.py +116 -0
- data/packages/gsutil/gslib/addlhelp/dev.py +139 -0
- data/packages/gsutil/gslib/addlhelp/metadata.py +186 -0
- data/packages/gsutil/gslib/addlhelp/naming.py +173 -0
- data/packages/gsutil/gslib/addlhelp/prod.py +160 -0
- data/packages/gsutil/gslib/addlhelp/projects.py +130 -0
- data/packages/gsutil/gslib/addlhelp/subdirs.py +110 -0
- data/packages/gsutil/gslib/addlhelp/support.py +86 -0
- data/packages/gsutil/gslib/addlhelp/versioning.py +242 -0
- data/packages/gsutil/gslib/addlhelp/wildcards.py +170 -0
- data/packages/gsutil/gslib/bucket_listing_ref.py +175 -0
- data/packages/gsutil/gslib/bucket_listing_ref.pyc +0 -0
- data/packages/gsutil/gslib/command.py +722 -0
- data/packages/gsutil/gslib/command.pyc +0 -0
- data/packages/gsutil/gslib/command_runner.py +101 -0
- data/packages/gsutil/gslib/command_runner.pyc +0 -0
- data/packages/gsutil/gslib/commands/__init__.py +15 -0
- data/packages/gsutil/gslib/commands/__init__.pyc +0 -0
- data/packages/gsutil/gslib/commands/cat.py +131 -0
- data/packages/gsutil/gslib/commands/cat.pyc +0 -0
- data/packages/gsutil/gslib/commands/chacl.py +532 -0
- data/packages/gsutil/gslib/commands/chacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/config.py +694 -0
- data/packages/gsutil/gslib/commands/config.pyc +0 -0
- data/packages/gsutil/gslib/commands/cp.py +1818 -0
- data/packages/gsutil/gslib/commands/cp.pyc +0 -0
- data/packages/gsutil/gslib/commands/disablelogging.py +101 -0
- data/packages/gsutil/gslib/commands/disablelogging.pyc +0 -0
- data/packages/gsutil/gslib/commands/enablelogging.py +149 -0
- data/packages/gsutil/gslib/commands/enablelogging.pyc +0 -0
- data/packages/gsutil/gslib/commands/getacl.py +82 -0
- data/packages/gsutil/gslib/commands/getacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/getcors.py +121 -0
- data/packages/gsutil/gslib/commands/getcors.pyc +0 -0
- data/packages/gsutil/gslib/commands/getdefacl.py +86 -0
- data/packages/gsutil/gslib/commands/getdefacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/getlogging.py +137 -0
- data/packages/gsutil/gslib/commands/getlogging.pyc +0 -0
- data/packages/gsutil/gslib/commands/getversioning.py +116 -0
- data/packages/gsutil/gslib/commands/getversioning.pyc +0 -0
- data/packages/gsutil/gslib/commands/getwebcfg.py +122 -0
- data/packages/gsutil/gslib/commands/getwebcfg.pyc +0 -0
- data/packages/gsutil/gslib/commands/help.py +218 -0
- data/packages/gsutil/gslib/commands/help.pyc +0 -0
- data/packages/gsutil/gslib/commands/ls.py +578 -0
- data/packages/gsutil/gslib/commands/ls.pyc +0 -0
- data/packages/gsutil/gslib/commands/mb.py +172 -0
- data/packages/gsutil/gslib/commands/mb.pyc +0 -0
- data/packages/gsutil/gslib/commands/mv.py +159 -0
- data/packages/gsutil/gslib/commands/mv.pyc +0 -0
- data/packages/gsutil/gslib/commands/perfdiag.py +903 -0
- data/packages/gsutil/gslib/commands/perfdiag.pyc +0 -0
- data/packages/gsutil/gslib/commands/rb.py +113 -0
- data/packages/gsutil/gslib/commands/rb.pyc +0 -0
- data/packages/gsutil/gslib/commands/rm.py +239 -0
- data/packages/gsutil/gslib/commands/rm.pyc +0 -0
- data/packages/gsutil/gslib/commands/setacl.py +138 -0
- data/packages/gsutil/gslib/commands/setacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/setcors.py +145 -0
- data/packages/gsutil/gslib/commands/setcors.pyc +0 -0
- data/packages/gsutil/gslib/commands/setdefacl.py +105 -0
- data/packages/gsutil/gslib/commands/setdefacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/setmeta.py +428 -0
- data/packages/gsutil/gslib/commands/setmeta.pyc +0 -0
- data/packages/gsutil/gslib/commands/setversioning.py +114 -0
- data/packages/gsutil/gslib/commands/setversioning.pyc +0 -0
- data/packages/gsutil/gslib/commands/setwebcfg.py +190 -0
- data/packages/gsutil/gslib/commands/setwebcfg.pyc +0 -0
- data/packages/gsutil/gslib/commands/test.py +228 -0
- data/packages/gsutil/gslib/commands/test.pyc +0 -0
- data/packages/gsutil/gslib/commands/update.py +305 -0
- data/packages/gsutil/gslib/commands/update.pyc +0 -0
- data/packages/gsutil/gslib/commands/version.py +150 -0
- data/packages/gsutil/gslib/commands/version.pyc +0 -0
- data/packages/gsutil/gslib/exception.py +76 -0
- data/packages/gsutil/gslib/exception.pyc +0 -0
- data/packages/gsutil/gslib/help_provider.py +81 -0
- data/packages/gsutil/gslib/help_provider.pyc +0 -0
- data/packages/gsutil/gslib/name_expansion.py +550 -0
- data/packages/gsutil/gslib/name_expansion.pyc +0 -0
- data/packages/gsutil/gslib/no_op_auth_plugin.py +30 -0
- data/packages/gsutil/gslib/plurality_checkable_iterator.py +56 -0
- data/packages/gsutil/gslib/plurality_checkable_iterator.pyc +0 -0
- data/packages/gsutil/gslib/project_id.py +67 -0
- data/packages/gsutil/gslib/project_id.pyc +0 -0
- data/packages/gsutil/gslib/storage_uri_builder.py +56 -0
- data/packages/gsutil/gslib/storage_uri_builder.pyc +0 -0
- data/packages/gsutil/gslib/tests/__init__.py +15 -0
- data/packages/gsutil/gslib/tests/__init__.pyc +0 -0
- data/packages/gsutil/gslib/tests/test_chacl.py +236 -0
- data/packages/gsutil/gslib/tests/test_cp.py +267 -0
- data/packages/gsutil/gslib/tests/test_data/test.gif +0 -0
- data/packages/gsutil/gslib/tests/test_data/test.mp3 +0 -0
- data/packages/gsutil/gslib/tests/test_ls.py +66 -0
- data/packages/gsutil/gslib/tests/test_mv.py +69 -0
- data/packages/gsutil/gslib/tests/test_naming.py +989 -0
- data/packages/gsutil/gslib/tests/test_perfdiag.py +41 -0
- data/packages/gsutil/gslib/tests/test_plurality_checkable_iterator.py +67 -0
- data/packages/gsutil/gslib/tests/test_rm.py +143 -0
- data/packages/gsutil/gslib/tests/test_setacl.py +152 -0
- data/packages/gsutil/gslib/tests/test_setcors.py +168 -0
- data/packages/gsutil/gslib/tests/test_setmeta.py +91 -0
- data/packages/gsutil/gslib/tests/test_setversioning.py +44 -0
- data/packages/gsutil/gslib/tests/test_setwebcfg.py +63 -0
- data/packages/gsutil/gslib/tests/test_thread_pool.py +92 -0
- data/packages/gsutil/gslib/tests/test_wildcard_iterator.py +364 -0
- data/packages/gsutil/gslib/tests/testcase/__init__.py +18 -0
- data/packages/gsutil/gslib/tests/testcase/base.py +89 -0
- data/packages/gsutil/gslib/tests/testcase/integration_testcase.py +197 -0
- data/packages/gsutil/gslib/tests/testcase/unit_testcase.py +230 -0
- data/packages/gsutil/gslib/tests/util.py +125 -0
- data/packages/gsutil/gslib/tests/util.pyc +0 -0
- data/packages/gsutil/gslib/thread_pool.py +79 -0
- data/packages/gsutil/gslib/thread_pool.pyc +0 -0
- data/packages/gsutil/gslib/util.py +151 -0
- data/packages/gsutil/gslib/util.pyc +0 -0
- data/packages/gsutil/gslib/wildcard_iterator.py +492 -0
- data/packages/gsutil/gslib/wildcard_iterator.pyc +0 -0
- data/packages/gsutil/gsutil +377 -0
- data/packages/gsutil/gsutil.spec.in +75 -0
- data/packages/gsutil/oauth2_plugin/__init__.py +22 -0
- data/packages/gsutil/oauth2_plugin/__init__.pyc +0 -0
- data/packages/gsutil/oauth2_plugin/oauth2_client.py +642 -0
- data/packages/gsutil/oauth2_plugin/oauth2_client.pyc +0 -0
- data/packages/gsutil/oauth2_plugin/oauth2_client_test.py +374 -0
- data/packages/gsutil/oauth2_plugin/oauth2_helper.py +110 -0
- data/packages/gsutil/oauth2_plugin/oauth2_helper.pyc +0 -0
- data/packages/gsutil/oauth2_plugin/oauth2_plugin.py +24 -0
- data/packages/gsutil/oauth2_plugin/oauth2_plugin.pyc +0 -0
- data/packages/gsutil/pkg_gen.sh +54 -0
- data/packages/gsutil/pkg_util.py +60 -0
- data/packages/gsutil/setup.py +141 -0
- data/packages/gsutil/third_party/__init__.py +0 -0
- data/packages/gsutil/third_party/__init__.pyc +0 -0
- data/packages/gsutil/third_party/fancy_urllib/README +21 -0
- data/packages/gsutil/third_party/fancy_urllib/__init__.py +398 -0
- data/packages/gsutil/third_party/fancy_urllib/__init__.pyc +0 -0
- data/tasks/rubygem.rake +3 -1
- metadata +770 -7
- metadata.gz.sig +0 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import boto
|
|
5
|
+
|
|
6
|
+
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'sphinx.ext.todo']
|
|
7
|
+
autoclass_content="both"
|
|
8
|
+
templates_path = ['_templates']
|
|
9
|
+
source_suffix = '.rst'
|
|
10
|
+
master_doc = 'index'
|
|
11
|
+
project = u'boto'
|
|
12
|
+
copyright = u'2009,2010, Mitch Garnaat'
|
|
13
|
+
version = boto.__version__
|
|
14
|
+
exclude_trees = []
|
|
15
|
+
pygments_style = 'sphinx'
|
|
16
|
+
html_theme = 'boto_theme'
|
|
17
|
+
html_theme_path = ["."]
|
|
18
|
+
html_static_path = ['_static']
|
|
19
|
+
htmlhelp_basename = 'botodoc'
|
|
20
|
+
latex_documents = [
|
|
21
|
+
('index', 'boto.tex', u'boto Documentation',
|
|
22
|
+
u'Mitch Garnaat', 'manual'),
|
|
23
|
+
]
|
|
24
|
+
intersphinx_mapping = {'http://docs.python.org/': None}
|
|
25
|
+
|
|
26
|
+
try:
|
|
27
|
+
release = os.environ.get('SVN_REVISION', 'HEAD')
|
|
28
|
+
print release
|
|
29
|
+
except Exception, e:
|
|
30
|
+
print e
|
|
31
|
+
|
|
32
|
+
html_title = "boto v%s" % version
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
====================
|
|
2
|
+
Contributing to Boto
|
|
3
|
+
====================
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
Setting Up a Development Environment
|
|
7
|
+
====================================
|
|
8
|
+
|
|
9
|
+
While not strictly required, it is highly recommended to do development
|
|
10
|
+
in a virtualenv. You can install virtualenv using pip::
|
|
11
|
+
|
|
12
|
+
$ pip install virtualenv
|
|
13
|
+
|
|
14
|
+
Once the package is installed, you'll have a ``virtualenv`` command you can
|
|
15
|
+
use to create a virtual environment::
|
|
16
|
+
|
|
17
|
+
$ virtualenv venv
|
|
18
|
+
|
|
19
|
+
You can then activate the virtualenv::
|
|
20
|
+
|
|
21
|
+
$ . venv/bin/activate
|
|
22
|
+
|
|
23
|
+
.. note::
|
|
24
|
+
|
|
25
|
+
You may also want to check out virtualenvwrapper_, which is a set of
|
|
26
|
+
extensions to virtualenv that makes it easy to manage multiple virtual
|
|
27
|
+
environments.
|
|
28
|
+
|
|
29
|
+
A requirements.txt is included with boto which contains all the additional
|
|
30
|
+
packages needed for boto development. You can install these packages by
|
|
31
|
+
running::
|
|
32
|
+
|
|
33
|
+
$ pip install -r requirements.txt
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
Running the Tests
|
|
37
|
+
=================
|
|
38
|
+
|
|
39
|
+
All of the tests for boto are under the ``tests/`` directory. The tests for
|
|
40
|
+
boto have been split into two main categories, unit and integration tests:
|
|
41
|
+
|
|
42
|
+
* **unit** - These are tests that do not talk to any AWS services. Anyone
|
|
43
|
+
should be able to run these tests without have any credentials
|
|
44
|
+
configured. These are the types of tests that could be run in something
|
|
45
|
+
like a public CI server. These tests tend to be fast.
|
|
46
|
+
|
|
47
|
+
* **integration** - These are tests that will talk to AWS services, and
|
|
48
|
+
will typically require a boto config file with valid credentials.
|
|
49
|
+
Due to the nature of these tests, they tend to take a while to run.
|
|
50
|
+
Also keep in mind anyone who runs these tests will incur any usage
|
|
51
|
+
fees associated with the various AWS services.
|
|
52
|
+
|
|
53
|
+
To run all the unit tests, cd to the ``tests/`` directory and run::
|
|
54
|
+
|
|
55
|
+
$ python test.py unit
|
|
56
|
+
|
|
57
|
+
You should see output like this::
|
|
58
|
+
|
|
59
|
+
$ python test.py unit
|
|
60
|
+
................................
|
|
61
|
+
----------------------------------------------------------------------
|
|
62
|
+
Ran 32 tests in 0.075s
|
|
63
|
+
|
|
64
|
+
OK
|
|
65
|
+
|
|
66
|
+
To run the integration tests, run::
|
|
67
|
+
|
|
68
|
+
$ python test.py integration
|
|
69
|
+
|
|
70
|
+
Note that running the integration tests may take a while.
|
|
71
|
+
|
|
72
|
+
Various integration tests have been tagged with service names to allow
|
|
73
|
+
you to easily run tests by service type. For example, to run the ec2
|
|
74
|
+
integration tests you can run::
|
|
75
|
+
|
|
76
|
+
$ python test.py -t ec2
|
|
77
|
+
|
|
78
|
+
You can specify the ``-t`` argument multiple times. For example, to
|
|
79
|
+
run the s3 and ec2 tests you can run::
|
|
80
|
+
|
|
81
|
+
$ python test.py -t ec2 -t s3
|
|
82
|
+
|
|
83
|
+
.. warning::
|
|
84
|
+
|
|
85
|
+
In the examples above no top level directory was specified. By default,
|
|
86
|
+
nose will assume the current working directory, so the above command is
|
|
87
|
+
equivalent to::
|
|
88
|
+
|
|
89
|
+
$ python test.py -t ec2 -t s3 .
|
|
90
|
+
|
|
91
|
+
Be sure that you are in the ``tests/`` directory when running the tests,
|
|
92
|
+
or explicitly specify the top level directory. For example, if you in the
|
|
93
|
+
root directory of the boto repo, you could run the ec2 and s3 tests by
|
|
94
|
+
running::
|
|
95
|
+
|
|
96
|
+
$ python tests/test.py -t ec2 -t s3 tests/
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
You can use nose's collect plugin to see what tests are associated with each
|
|
100
|
+
service tag::
|
|
101
|
+
|
|
102
|
+
$ python tests.py -t s3 -t ec2 --with-id --collect -v
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
Testing Details
|
|
106
|
+
---------------
|
|
107
|
+
|
|
108
|
+
The ``tests/test.py`` script is a lightweight wrapper around nose_. In
|
|
109
|
+
general, you should be able to run ``nosetests`` directly instead of
|
|
110
|
+
``tests/test.py``. The ``tests/unit`` and ``tests/integration`` args
|
|
111
|
+
in the commands above were referring to directories. The command line
|
|
112
|
+
arguments are forwarded to nose when you use ``tests/test.py``. For example,
|
|
113
|
+
you can run::
|
|
114
|
+
|
|
115
|
+
$ python tests/test.py -x -vv tests/unit/cloudformation
|
|
116
|
+
|
|
117
|
+
And the ``-x -vv tests/unit/cloudformation`` are forwarded to nose. See
|
|
118
|
+
the nose_ docs for the supported command line options, or run
|
|
119
|
+
``nosetests --help``.
|
|
120
|
+
|
|
121
|
+
The only thing that ``tests/test.py`` does before invoking nose is to
|
|
122
|
+
inject an argument that specifies that any testcase tagged with "notdefault"
|
|
123
|
+
should not be run. A testcase may be tagged with "notdefault" if the test
|
|
124
|
+
author does not want everyone to run the tests. In general, there shouldn't be
|
|
125
|
+
many of these tests, but some reasons a test may be tagged "notdefault"
|
|
126
|
+
include:
|
|
127
|
+
|
|
128
|
+
* An integration test that requires specific credentials.
|
|
129
|
+
* An interactive test (the S3 MFA tests require you to type in the S/N and
|
|
130
|
+
code).
|
|
131
|
+
|
|
132
|
+
Tagging is done using nose's tagging_ plugin. To summarize, you can tag a
|
|
133
|
+
specific testcase by setting an attribute on the object. Nose provides
|
|
134
|
+
an ``attr`` decorator for convenience::
|
|
135
|
+
|
|
136
|
+
from nose.plugins.attrib import attr
|
|
137
|
+
|
|
138
|
+
@attr('notdefault')
|
|
139
|
+
def test_s3_mfs():
|
|
140
|
+
pass
|
|
141
|
+
|
|
142
|
+
You can then run these tests be specifying::
|
|
143
|
+
|
|
144
|
+
nosetests -a 'notdefault'
|
|
145
|
+
|
|
146
|
+
Or you can exclude any tests tagged with 'notdefault' by running::
|
|
147
|
+
|
|
148
|
+
nosetests -a '!notdefault'
|
|
149
|
+
|
|
150
|
+
Conceptually, ``tests/test.py`` is injecting the "-a !notdefault" arg
|
|
151
|
+
into nosetests.
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
Testing Supported Python Versions
|
|
155
|
+
==================================
|
|
156
|
+
|
|
157
|
+
Boto supports python 2.6 and 2.7. An easy way to verify functionality
|
|
158
|
+
across multiple python versions is to use tox_. A tox.ini file is included
|
|
159
|
+
with boto. You can run tox with no args and it will automatically test
|
|
160
|
+
all supported python versions::
|
|
161
|
+
|
|
162
|
+
$ tox
|
|
163
|
+
GLOB sdist-make: boto/setup.py
|
|
164
|
+
py26 sdist-reinst: boto/.tox/dist/boto-2.4.1.zip
|
|
165
|
+
py26 runtests: commands[0]
|
|
166
|
+
................................
|
|
167
|
+
----------------------------------------------------------------------
|
|
168
|
+
Ran 32 tests in 0.089s
|
|
169
|
+
|
|
170
|
+
OK
|
|
171
|
+
py27 sdist-reinst: boto/.tox/dist/boto-2.4.1.zip
|
|
172
|
+
py27 runtests: commands[0]
|
|
173
|
+
................................
|
|
174
|
+
----------------------------------------------------------------------
|
|
175
|
+
Ran 32 tests in 0.087s
|
|
176
|
+
|
|
177
|
+
OK
|
|
178
|
+
____ summary ____
|
|
179
|
+
py26: commands succeeded
|
|
180
|
+
py27: commands succeeded
|
|
181
|
+
congratulations :)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
Writing Documentation
|
|
185
|
+
=====================
|
|
186
|
+
|
|
187
|
+
The boto docs use sphinx_ to generate documentation. All of the docs are
|
|
188
|
+
located in the ``docs/`` directory. To generate the html documentation, cd
|
|
189
|
+
into the docs directory and run ``make html``::
|
|
190
|
+
|
|
191
|
+
$ cd docs
|
|
192
|
+
$ make html
|
|
193
|
+
|
|
194
|
+
The generated documentation will be in the ``docs/build/html`` directory.
|
|
195
|
+
The source for the documentation is located in ``docs/source`` directory,
|
|
196
|
+
and uses `restructured text`_ for the markup language.
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
.. _nose: http://readthedocs.org/docs/nose/en/latest/
|
|
200
|
+
.. _tagging: http://nose.readthedocs.org/en/latest/plugins/attrib.html
|
|
201
|
+
.. _tox: http://tox.testrun.org/latest/
|
|
202
|
+
.. _virtualenvwrapper: http://www.doughellmann.com/projects/virtualenvwrapper/
|
|
203
|
+
.. _sphinx: http://sphinx.pocoo.org/
|
|
204
|
+
.. _restructured text: http://sphinx.pocoo.org/rest.html
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
.. _documentation:
|
|
2
|
+
|
|
3
|
+
=======================
|
|
4
|
+
About the Documentation
|
|
5
|
+
=======================
|
|
6
|
+
|
|
7
|
+
boto's documentation uses the Sphinx__ documentation system, which in turn is
|
|
8
|
+
based on docutils__. The basic idea is that lightly-formatted plain-text
|
|
9
|
+
documentation is transformed into HTML, PDF, and any other output format.
|
|
10
|
+
|
|
11
|
+
__ http://sphinx.pocoo.org/
|
|
12
|
+
__ http://docutils.sf.net/
|
|
13
|
+
|
|
14
|
+
To actually build the documentation locally, you'll currently need to install
|
|
15
|
+
Sphinx -- ``easy_install Sphinx`` should do the trick.
|
|
16
|
+
|
|
17
|
+
Then, building the html is easy; just ``make html`` from the ``docs`` directory.
|
|
18
|
+
|
|
19
|
+
To get started contributing, you'll want to read the `ReStructuredText
|
|
20
|
+
Primer`__. After that, you'll want to read about the `Sphinx-specific markup`__
|
|
21
|
+
that's used to manage metadata, indexing, and cross-references.
|
|
22
|
+
|
|
23
|
+
__ http://sphinx.pocoo.org/rest.html
|
|
24
|
+
__ http://sphinx.pocoo.org/markup/
|
|
25
|
+
|
|
26
|
+
The main thing to keep in mind as you write and edit docs is that the more
|
|
27
|
+
semantic markup you can add the better. So::
|
|
28
|
+
|
|
29
|
+
Import ``boto`` to your script...
|
|
30
|
+
|
|
31
|
+
Isn't nearly as helpful as::
|
|
32
|
+
|
|
33
|
+
Add :mod:`boto` to your script...
|
|
34
|
+
|
|
35
|
+
This is because Sphinx will generate a proper link for the latter, which greatly
|
|
36
|
+
helps readers. There's basically no limit to the amount of useful markup you can
|
|
37
|
+
add.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
The fabfile
|
|
41
|
+
-----------
|
|
42
|
+
|
|
43
|
+
There is a Fabric__ file that can be used to build and deploy the documentation
|
|
44
|
+
to a webserver that you ssh access to.
|
|
45
|
+
|
|
46
|
+
__ http://fabfile.org
|
|
47
|
+
|
|
48
|
+
To build and deploy::
|
|
49
|
+
|
|
50
|
+
cd docs/
|
|
51
|
+
fab deploy:remote_path='/var/www/folder/whatever' --hosts=user@host
|
|
52
|
+
|
|
53
|
+
This will get the latest code from subversion, add the revision number to the
|
|
54
|
+
docs conf.py file, call ``make html`` to build the documentation, then it will
|
|
55
|
+
tarball it up and scp up to the host you specified and untarball it in the
|
|
56
|
+
folder you specified creating a symbolic link from the untarballed versioned
|
|
57
|
+
folder to ``{remote_path}/boto-docs``.
|
|
58
|
+
|
|
59
|
+
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
.. dynamodb_tut:
|
|
2
|
+
|
|
3
|
+
============================================
|
|
4
|
+
An Introduction to boto's DynamoDB interface
|
|
5
|
+
============================================
|
|
6
|
+
|
|
7
|
+
This tutorial focuses on the boto interface to AWS' DynamoDB_. This tutorial
|
|
8
|
+
assumes that you have boto already downloaded and installed.
|
|
9
|
+
|
|
10
|
+
.. _DynamoDB: http://aws.amazon.com/dynamodb/
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
Creating a Connection
|
|
14
|
+
---------------------
|
|
15
|
+
|
|
16
|
+
The first step in accessing DynamoDB is to create a connection to the service.
|
|
17
|
+
To do so, the most straight forward way is the following::
|
|
18
|
+
|
|
19
|
+
>>> import boto
|
|
20
|
+
>>> conn = boto.connect_dynamodb(
|
|
21
|
+
aws_access_key_id='<YOUR_AWS_KEY_ID>',
|
|
22
|
+
aws_secret_access_key='<YOUR_AWS_SECRET_KEY>')
|
|
23
|
+
>>> conn
|
|
24
|
+
<boto.dynamodb.layer2.Layer2 object at 0x3fb3090>
|
|
25
|
+
|
|
26
|
+
Bear in mind that if you have your credentials in boto config in your home
|
|
27
|
+
directory, the two keyword arguments in the call above are not needed. More
|
|
28
|
+
details on configuration can be found in :doc:`boto_config_tut`.
|
|
29
|
+
|
|
30
|
+
The :py:func:`boto.connect_dynamodb` functions returns a
|
|
31
|
+
:py:class:`boto.dynamodb.layer2.Layer2` instance, which is a high-level API
|
|
32
|
+
for working with DynamoDB. Layer2 is a set of abstractions that sit atop
|
|
33
|
+
the lower level :py:class:`boto.dynamodb.layer1.Layer1` API, which closely
|
|
34
|
+
mirrors the Amazon DynamoDB API. For the purpose of this tutorial, we'll
|
|
35
|
+
just be covering Layer2.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
Listing Tables
|
|
39
|
+
--------------
|
|
40
|
+
|
|
41
|
+
Now that we have a DynamoDB connection object, we can then query for a list of
|
|
42
|
+
existing tables in that region::
|
|
43
|
+
|
|
44
|
+
>>> conn.list_tables()
|
|
45
|
+
['test-table', 'another-table']
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
Creating Tables
|
|
49
|
+
---------------
|
|
50
|
+
|
|
51
|
+
DynamoDB tables are created with the
|
|
52
|
+
:py:meth:`Layer2.create_table <boto.dynamodb.layer2.Layer2.create_table>`
|
|
53
|
+
method. While DynamoDB's items (a rough equivalent to a relational DB's row)
|
|
54
|
+
don't have a fixed schema, you do need to create a schema for the table's
|
|
55
|
+
hash key element, and the optional range key element. This is explained in
|
|
56
|
+
greater detail in DynamoDB's `Data Model`_ documentation.
|
|
57
|
+
|
|
58
|
+
We'll start by defining a schema that has a hash key and a range key that
|
|
59
|
+
are both keys::
|
|
60
|
+
|
|
61
|
+
>>> message_table_schema = conn.create_schema(
|
|
62
|
+
hash_key_name='forum_name',
|
|
63
|
+
hash_key_proto_value=str,
|
|
64
|
+
range_key_name='subject',
|
|
65
|
+
range_key_proto_value=str
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
The next few things to determine are table name and read/write throughput. We'll
|
|
69
|
+
defer explaining throughput to the DynamoDB's `Provisioned Throughput`_ docs.
|
|
70
|
+
|
|
71
|
+
We're now ready to create the table::
|
|
72
|
+
|
|
73
|
+
>>> table = conn.create_table(
|
|
74
|
+
name='messages',
|
|
75
|
+
schema=message_table_schema,
|
|
76
|
+
read_units=10,
|
|
77
|
+
write_units=10
|
|
78
|
+
)
|
|
79
|
+
>>> table
|
|
80
|
+
Table(messages)
|
|
81
|
+
|
|
82
|
+
This returns a :py:class:`boto.dynamodb.table.Table` instance, which provides
|
|
83
|
+
simple ways to create (put), update, and delete items.
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
Getting a Table
|
|
87
|
+
---------------
|
|
88
|
+
|
|
89
|
+
To retrieve an existing table, use
|
|
90
|
+
:py:meth:`Layer2.get_table <boto.dynamodb.layer2.Layer2.get_table>`::
|
|
91
|
+
|
|
92
|
+
>>> conn.list_tables()
|
|
93
|
+
['test-table', 'another-table', 'messages']
|
|
94
|
+
>>> table = conn.get_table('messages')
|
|
95
|
+
>>> table
|
|
96
|
+
Table(messages)
|
|
97
|
+
|
|
98
|
+
:py:meth:`Layer2.get_table <boto.dynamodb.layer2.Layer2.get_table>`, like
|
|
99
|
+
:py:meth:`Layer2.create_table <boto.dynamodb.layer2.Layer2.create_table>`,
|
|
100
|
+
returns a :py:class:`boto.dynamodb.table.Table` instance.
|
|
101
|
+
|
|
102
|
+
Keep in mind that :py:meth:`Layer2.get_table <boto.dynamodb.layer2.Layer2.get_table>`
|
|
103
|
+
will make an API call to retrieve various attributes of the table including the
|
|
104
|
+
creation time, the read and write capacity, and the table schema. If you
|
|
105
|
+
already know the schema, you can save an API call and create a
|
|
106
|
+
:py:class:`boto.dynamodb.table.Table` object without making any calls to
|
|
107
|
+
Amazon DynamoDB::
|
|
108
|
+
|
|
109
|
+
>>> table = conn.table_from_schema(
|
|
110
|
+
name='messages',
|
|
111
|
+
schema=message_table_schema)
|
|
112
|
+
|
|
113
|
+
If you do this, the following fields will have ``None`` values:
|
|
114
|
+
|
|
115
|
+
* create_time
|
|
116
|
+
* status
|
|
117
|
+
* read_units
|
|
118
|
+
* write_units
|
|
119
|
+
|
|
120
|
+
In addition, the ``item_count`` and ``size_bytes`` will be 0.
|
|
121
|
+
If you create a table object directly from a schema object and
|
|
122
|
+
decide later that you need to retrieve any of these additional
|
|
123
|
+
attributes, you can use the
|
|
124
|
+
:py:meth:`Table.refresh <boto.dynamodb.table.Table.refresh>` method::
|
|
125
|
+
|
|
126
|
+
>>> from boto.dynamodb.schema import Schema
|
|
127
|
+
>>> table = conn.table_from_schema(
|
|
128
|
+
name='messages',
|
|
129
|
+
schema=Schema.create(hash_key=('forum_name', 'S'),
|
|
130
|
+
range_key=('subject', 'S')))
|
|
131
|
+
>>> print table.write_units
|
|
132
|
+
None
|
|
133
|
+
>>> # Now we decide we need to know the write_units:
|
|
134
|
+
>>> table.refresh()
|
|
135
|
+
>>> print table.write_units
|
|
136
|
+
10
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
The recommended best practice is to retrieve a table object once and
|
|
140
|
+
use that object for the duration of your application. So, for example,
|
|
141
|
+
instead of this::
|
|
142
|
+
|
|
143
|
+
class Application(object):
|
|
144
|
+
def __init__(self, layer2):
|
|
145
|
+
self._layer2 = layer2
|
|
146
|
+
|
|
147
|
+
def retrieve_item(self, table_name, key):
|
|
148
|
+
return self._layer2.get_table(table_name).get_item(key)
|
|
149
|
+
|
|
150
|
+
You can do something like this instead::
|
|
151
|
+
|
|
152
|
+
class Application(object):
|
|
153
|
+
def __init__(self, layer2):
|
|
154
|
+
self._layer2 = layer2
|
|
155
|
+
self._tables_by_name = {}
|
|
156
|
+
|
|
157
|
+
def retrieve_item(self, table_name, key):
|
|
158
|
+
table = self._tables_by_name.get(table_name)
|
|
159
|
+
if table is None:
|
|
160
|
+
table = self._layer2.get_table(table_name)
|
|
161
|
+
self._tables_by_name[table_name] = table
|
|
162
|
+
return table.get_item(key)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
Describing Tables
|
|
166
|
+
-----------------
|
|
167
|
+
|
|
168
|
+
To get a complete description of a table, use
|
|
169
|
+
:py:meth:`Layer2.describe_table <boto.dynamodb.layer2.Layer2.describe_table>`::
|
|
170
|
+
|
|
171
|
+
>>> conn.list_tables()
|
|
172
|
+
['test-table', 'another-table', 'messages']
|
|
173
|
+
>>> conn.describe_table('messages')
|
|
174
|
+
{
|
|
175
|
+
'Table': {
|
|
176
|
+
'CreationDateTime': 1327117581.624,
|
|
177
|
+
'ItemCount': 0,
|
|
178
|
+
'KeySchema': {
|
|
179
|
+
'HashKeyElement': {
|
|
180
|
+
'AttributeName': 'forum_name',
|
|
181
|
+
'AttributeType': 'S'
|
|
182
|
+
},
|
|
183
|
+
'RangeKeyElement': {
|
|
184
|
+
'AttributeName': 'subject',
|
|
185
|
+
'AttributeType': 'S'
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
'ProvisionedThroughput': {
|
|
189
|
+
'ReadCapacityUnits': 10,
|
|
190
|
+
'WriteCapacityUnits': 10
|
|
191
|
+
},
|
|
192
|
+
'TableName': 'messages',
|
|
193
|
+
'TableSizeBytes': 0,
|
|
194
|
+
'TableStatus': 'ACTIVE'
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
Adding Items
|
|
200
|
+
------------
|
|
201
|
+
|
|
202
|
+
Continuing on with our previously created ``messages`` table, adding an::
|
|
203
|
+
|
|
204
|
+
>>> table = conn.get_table('messages')
|
|
205
|
+
>>> item_data = {
|
|
206
|
+
'Body': 'http://url_to_lolcat.gif',
|
|
207
|
+
'SentBy': 'User A',
|
|
208
|
+
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
|
209
|
+
}
|
|
210
|
+
>>> item = table.new_item(
|
|
211
|
+
# Our hash key is 'forum'
|
|
212
|
+
hash_key='LOLCat Forum',
|
|
213
|
+
# Our range key is 'subject'
|
|
214
|
+
range_key='Check this out!',
|
|
215
|
+
# This has the
|
|
216
|
+
attrs=item_data
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
The
|
|
220
|
+
:py:meth:`Table.new_item <boto.dynamodb.table.Table.new_item>` method creates
|
|
221
|
+
a new :py:class:`boto.dynamodb.item.Item` instance with your specified
|
|
222
|
+
hash key, range key, and attributes already set.
|
|
223
|
+
:py:class:`Item <boto.dynamodb.item.Item>` is a :py:class:`dict` sub-class,
|
|
224
|
+
meaning you can edit your data as such::
|
|
225
|
+
|
|
226
|
+
item['a_new_key'] = 'testing'
|
|
227
|
+
del item['a_new_key']
|
|
228
|
+
|
|
229
|
+
After you are happy with the contents of the item, use
|
|
230
|
+
:py:meth:`Item.put <boto.dynamodb.item.Item.put>` to commit it to DynamoDB::
|
|
231
|
+
|
|
232
|
+
>>> item.put()
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
Retrieving Items
|
|
236
|
+
----------------
|
|
237
|
+
|
|
238
|
+
Now, let's check if it got added correctly. Since DynamoDB works under an
|
|
239
|
+
'eventual consistency' mode, we need to specify that we wish a consistent read,
|
|
240
|
+
as follows::
|
|
241
|
+
|
|
242
|
+
>>> table = conn.get_table('messages')
|
|
243
|
+
>>> item = table.get_item(
|
|
244
|
+
# Your hash key was 'forum_name'
|
|
245
|
+
hash_key='LOLCat Forum',
|
|
246
|
+
# Your range key was 'subject'
|
|
247
|
+
range_key='Check this out!'
|
|
248
|
+
)
|
|
249
|
+
>>> item
|
|
250
|
+
{
|
|
251
|
+
# Note that this was your hash key attribute (forum_name)
|
|
252
|
+
'forum_name': 'LOLCat Forum',
|
|
253
|
+
# This is your range key attribute (subject)
|
|
254
|
+
'subject': 'Check this out!'
|
|
255
|
+
'Body': 'http://url_to_lolcat.gif',
|
|
256
|
+
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
|
257
|
+
'SentBy': 'User A',
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
Updating Items
|
|
262
|
+
--------------
|
|
263
|
+
|
|
264
|
+
To update an item's attributes, simply retrieve it, modify the value, then
|
|
265
|
+
:py:meth:`Item.put <boto.dynamodb.item.Item.put>` it again::
|
|
266
|
+
|
|
267
|
+
>>> table = conn.get_table('messages')
|
|
268
|
+
>>> item = table.get_item(
|
|
269
|
+
hash_key='LOLCat Forum',
|
|
270
|
+
range_key='Check this out!'
|
|
271
|
+
)
|
|
272
|
+
>>> item['SentBy'] = 'User B'
|
|
273
|
+
>>> item.put()
|
|
274
|
+
|
|
275
|
+
Working with Decimals
|
|
276
|
+
---------------------
|
|
277
|
+
|
|
278
|
+
To avoid the loss of precision, you can stipulate that the
|
|
279
|
+
``decimal.Decimal`` type be used for numeric values::
|
|
280
|
+
|
|
281
|
+
>>> import decimal
|
|
282
|
+
>>> conn.use_decimals()
|
|
283
|
+
>>> table = conn.get_table('messages')
|
|
284
|
+
>>> item = table.new_item(
|
|
285
|
+
hash_key='LOLCat Forum',
|
|
286
|
+
range_key='Check this out!'
|
|
287
|
+
)
|
|
288
|
+
>>> item['decimal_type'] = decimal.Decimal('1.12345678912345')
|
|
289
|
+
>>> item.put()
|
|
290
|
+
>>> print table.get_item('LOLCat Forum', 'Check this out!')
|
|
291
|
+
{u'forum_name': 'LOLCat Forum', u'decimal_type': Decimal('1.12345678912345'),
|
|
292
|
+
u'subject': 'Check this out!'}
|
|
293
|
+
|
|
294
|
+
You can enable the usage of ``decimal.Decimal`` by using either the ``use_decimals``
|
|
295
|
+
method, or by passing in the
|
|
296
|
+
:py:class:`Dynamizer <boto.dynamodb.types.Dynamizer>` class for
|
|
297
|
+
the ``dynamizer`` param::
|
|
298
|
+
|
|
299
|
+
>>> from boto.dynamodb.types import Dynamizer
|
|
300
|
+
>>> conn = boto.connect_dynamodb(dynamizer=Dynamizer)
|
|
301
|
+
|
|
302
|
+
This mechanism can also be used if you want to customize the encoding/decoding
|
|
303
|
+
process of DynamoDB types.
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
Deleting Items
|
|
307
|
+
--------------
|
|
308
|
+
|
|
309
|
+
To delete items, use the
|
|
310
|
+
:py:meth:`Item.delete <boto.dynamodb.item.Item.delete>` method::
|
|
311
|
+
|
|
312
|
+
>>> table = conn.get_table('messages')
|
|
313
|
+
>>> item = table.get_item(
|
|
314
|
+
hash_key='LOLCat Forum',
|
|
315
|
+
range_key='Check this out!'
|
|
316
|
+
)
|
|
317
|
+
>>> item.delete()
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
Deleting Tables
|
|
321
|
+
---------------
|
|
322
|
+
|
|
323
|
+
.. WARNING::
|
|
324
|
+
Deleting a table will also **permanently** delete all of its contents without prompt. Use carefully.
|
|
325
|
+
|
|
326
|
+
There are two easy ways to delete a table. Through your top-level
|
|
327
|
+
:py:class:`Layer2 <boto.dynamodb.layer2.Layer2>` object::
|
|
328
|
+
|
|
329
|
+
>>> conn.delete_table(table)
|
|
330
|
+
|
|
331
|
+
Or by getting the table, then using
|
|
332
|
+
:py:meth:`Table.delete <boto.dynamodb.table.Table.delete>`::
|
|
333
|
+
|
|
334
|
+
>>> table = conn.get_table('messages')
|
|
335
|
+
>>> table.delete()
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
.. _Data Model: http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/DataModel.html
|
|
339
|
+
.. _Provisioned Throughput: http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/ProvisionedThroughputIntro.html
|