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,194 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright (c) 2009 Chris Moyer http://kopertop.blogspot.com/
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
5
|
+
# copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
|
8
|
+
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
|
9
|
+
# persons to whom the Software is furnished to do so, subject to the fol-
|
|
10
|
+
# lowing conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included
|
|
13
|
+
# in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
16
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
|
17
|
+
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
18
|
+
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
19
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
# Tools to dump and recover an SDB domain
|
|
24
|
+
#
|
|
25
|
+
VERSION = "%prog version 1.0"
|
|
26
|
+
import boto
|
|
27
|
+
import time
|
|
28
|
+
from boto import sdb
|
|
29
|
+
|
|
30
|
+
# Allow support for JSON
|
|
31
|
+
try:
|
|
32
|
+
import simplejson as json
|
|
33
|
+
except:
|
|
34
|
+
try:
|
|
35
|
+
import json
|
|
36
|
+
except:
|
|
37
|
+
json = False
|
|
38
|
+
|
|
39
|
+
def choice_input(options, default=None, title=None):
|
|
40
|
+
"""
|
|
41
|
+
Choice input
|
|
42
|
+
"""
|
|
43
|
+
if title == None:
|
|
44
|
+
title = "Please choose"
|
|
45
|
+
print title
|
|
46
|
+
objects = []
|
|
47
|
+
for n, obj in enumerate(options):
|
|
48
|
+
print "%s: %s" % (n, obj)
|
|
49
|
+
objects.append(obj)
|
|
50
|
+
choice = int(raw_input(">>> "))
|
|
51
|
+
try:
|
|
52
|
+
choice = objects[choice]
|
|
53
|
+
except:
|
|
54
|
+
choice = default
|
|
55
|
+
return choice
|
|
56
|
+
|
|
57
|
+
def confirm(message="Are you sure?"):
|
|
58
|
+
choice = raw_input("%s [yN] " % message)
|
|
59
|
+
return choice and len(choice) > 0 and choice[0].lower() == "y"
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def dump_db(domain, file_name, use_json=False):
|
|
63
|
+
"""
|
|
64
|
+
Dump SDB domain to file
|
|
65
|
+
"""
|
|
66
|
+
f = open(file_name, "w")
|
|
67
|
+
if use_json:
|
|
68
|
+
for item in domain:
|
|
69
|
+
data = {"name": item.name, "attributes": item}
|
|
70
|
+
print >> f, json.dumps(data)
|
|
71
|
+
else:
|
|
72
|
+
doc = domain.to_xml(f)
|
|
73
|
+
|
|
74
|
+
def empty_db(domain):
|
|
75
|
+
"""
|
|
76
|
+
Remove all entries from domain
|
|
77
|
+
"""
|
|
78
|
+
for item in domain:
|
|
79
|
+
item.delete()
|
|
80
|
+
|
|
81
|
+
def load_db(domain, file, use_json=False):
|
|
82
|
+
"""
|
|
83
|
+
Load a domain from a file, this doesn't overwrite any existing
|
|
84
|
+
data in the file so if you want to do a full recovery and restore
|
|
85
|
+
you need to call empty_db before calling this
|
|
86
|
+
|
|
87
|
+
:param domain: The SDB Domain object to load to
|
|
88
|
+
:param file: The File to load the DB from
|
|
89
|
+
"""
|
|
90
|
+
if use_json:
|
|
91
|
+
for line in file.readlines():
|
|
92
|
+
if line:
|
|
93
|
+
data = json.loads(line)
|
|
94
|
+
item = domain.new_item(data['name'])
|
|
95
|
+
item.update(data['attributes'])
|
|
96
|
+
item.save()
|
|
97
|
+
|
|
98
|
+
else:
|
|
99
|
+
domain.from_xml(file)
|
|
100
|
+
|
|
101
|
+
def create_db(domain_name, region_name):
|
|
102
|
+
"""Create a new DB
|
|
103
|
+
|
|
104
|
+
:param domain: Name of the domain to create
|
|
105
|
+
:type domain: str
|
|
106
|
+
"""
|
|
107
|
+
sdb = boto.sdb.connect_to_region(region_name)
|
|
108
|
+
return sdb.create_domain(domain_name)
|
|
109
|
+
|
|
110
|
+
if __name__ == "__main__":
|
|
111
|
+
from optparse import OptionParser
|
|
112
|
+
parser = OptionParser(version=VERSION, usage="Usage: %prog [--dump|--load|--empty|--list|-l] [options]")
|
|
113
|
+
|
|
114
|
+
# Commands
|
|
115
|
+
parser.add_option("--dump", help="Dump domain to file", dest="dump", default=False, action="store_true")
|
|
116
|
+
parser.add_option("--load", help="Load domain contents from file", dest="load", default=False, action="store_true")
|
|
117
|
+
parser.add_option("--empty", help="Empty all contents of domain", dest="empty", default=False, action="store_true")
|
|
118
|
+
parser.add_option("-l", "--list", help="List All domains", dest="list", default=False, action="store_true")
|
|
119
|
+
parser.add_option("-c", "--create", help="Create domain", dest="create", default=False, action="store_true")
|
|
120
|
+
|
|
121
|
+
parser.add_option("-a", "--all-domains", help="Operate on all domains", action="store_true", default=False, dest="all_domains")
|
|
122
|
+
if json:
|
|
123
|
+
parser.add_option("-j", "--use-json", help="Load/Store as JSON instead of XML", action="store_true", default=False, dest="json")
|
|
124
|
+
parser.add_option("-d", "--domain", help="Do functions on domain (may be more then one)", action="append", dest="domains")
|
|
125
|
+
parser.add_option("-f", "--file", help="Input/Output file we're operating on", dest="file_name")
|
|
126
|
+
parser.add_option("-r", "--region", help="Region (e.g. us-east-1[default] or eu-west-1)", default="us-east-1", dest="region_name")
|
|
127
|
+
(options, args) = parser.parse_args()
|
|
128
|
+
|
|
129
|
+
if options.create:
|
|
130
|
+
for domain_name in options.domains:
|
|
131
|
+
create_db(domain_name, options.region_name)
|
|
132
|
+
exit()
|
|
133
|
+
|
|
134
|
+
sdb = boto.sdb.connect_to_region(options.region_name)
|
|
135
|
+
if options.list:
|
|
136
|
+
for db in sdb.get_all_domains():
|
|
137
|
+
print db
|
|
138
|
+
exit()
|
|
139
|
+
|
|
140
|
+
if not options.dump and not options.load and not options.empty:
|
|
141
|
+
parser.print_help()
|
|
142
|
+
exit()
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
#
|
|
148
|
+
# Setup
|
|
149
|
+
#
|
|
150
|
+
if options.domains:
|
|
151
|
+
domains = []
|
|
152
|
+
for domain_name in options.domains:
|
|
153
|
+
domains.append(sdb.get_domain(domain_name))
|
|
154
|
+
elif options.all_domains:
|
|
155
|
+
domains = sdb.get_all_domains()
|
|
156
|
+
else:
|
|
157
|
+
domains = [choice_input(options=sdb.get_all_domains(), title="No domain specified, please choose one")]
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
#
|
|
161
|
+
# Execute the commands
|
|
162
|
+
#
|
|
163
|
+
stime = time.time()
|
|
164
|
+
if options.empty:
|
|
165
|
+
if confirm("WARNING!!! Are you sure you want to empty the following domains?: %s" % domains):
|
|
166
|
+
stime = time.time()
|
|
167
|
+
for domain in domains:
|
|
168
|
+
print "--------> Emptying %s <--------" % domain.name
|
|
169
|
+
empty_db(domain)
|
|
170
|
+
else:
|
|
171
|
+
print "Canceling operations"
|
|
172
|
+
exit()
|
|
173
|
+
|
|
174
|
+
if options.dump:
|
|
175
|
+
for domain in domains:
|
|
176
|
+
print "--------> Dumping %s <---------" % domain.name
|
|
177
|
+
if options.file_name:
|
|
178
|
+
file_name = options.file_name
|
|
179
|
+
else:
|
|
180
|
+
file_name = "%s.db" % domain.name
|
|
181
|
+
dump_db(domain, file_name, options.json)
|
|
182
|
+
|
|
183
|
+
if options.load:
|
|
184
|
+
for domain in domains:
|
|
185
|
+
print "---------> Loading %s <----------" % domain.name
|
|
186
|
+
if options.file_name:
|
|
187
|
+
file_name = options.file_name
|
|
188
|
+
else:
|
|
189
|
+
file_name = "%s.db" % domain.name
|
|
190
|
+
load_db(domain, open(file_name, "rb"), options.json)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
total_time = round(time.time() - stime, 2)
|
|
194
|
+
print "--------> Finished in %s <--------" % total_time
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright (c) 2009 Chris Moyer http://coredumped.org/
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
5
|
+
# copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
|
8
|
+
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
|
9
|
+
# persons to whom the Software is furnished to do so, subject to the fol-
|
|
10
|
+
# lowing conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included
|
|
13
|
+
# in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
16
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
|
17
|
+
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
18
|
+
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
19
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
# Task/Job Administration utility
|
|
24
|
+
#
|
|
25
|
+
VERSION="0.1"
|
|
26
|
+
__version__ = VERSION
|
|
27
|
+
usage = """%prog [options] [command]
|
|
28
|
+
Commands:
|
|
29
|
+
list|ls List all Tasks in SDB
|
|
30
|
+
delete <id> Delete Task with id <id>
|
|
31
|
+
get <name> Get Task <name>
|
|
32
|
+
create|mk <name> <hour> <command> Create a new Task <name> with command <command> running every <hour>
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
def list():
|
|
36
|
+
"""List all Tasks in SDB"""
|
|
37
|
+
from boto.manage.task import Task
|
|
38
|
+
print "%-8s %-40s %s" % ("Hour", "Name", "Command")
|
|
39
|
+
print "-"*100
|
|
40
|
+
for t in Task.all():
|
|
41
|
+
print "%-8s %-40s %s" % (t.hour, t.name, t.command)
|
|
42
|
+
|
|
43
|
+
def get(name):
|
|
44
|
+
"""Get a task
|
|
45
|
+
:param name: The name of the task to fetch
|
|
46
|
+
:type name: str
|
|
47
|
+
"""
|
|
48
|
+
from boto.manage.task import Task
|
|
49
|
+
q = Task.find()
|
|
50
|
+
q.filter("name like", "%s%%" % name)
|
|
51
|
+
for t in q:
|
|
52
|
+
print "="*80
|
|
53
|
+
print "| ", t.id
|
|
54
|
+
print "|%s" % ("-"*79)
|
|
55
|
+
print "| Name: ", t.name
|
|
56
|
+
print "| Hour: ", t.hour
|
|
57
|
+
print "| Command: ", t.command
|
|
58
|
+
if t.last_executed:
|
|
59
|
+
print "| Last Run: ", t.last_executed.ctime()
|
|
60
|
+
print "| Last Status: ", t.last_status
|
|
61
|
+
print "| Last Run Log: ", t.last_output
|
|
62
|
+
print "="*80
|
|
63
|
+
|
|
64
|
+
def delete(id):
|
|
65
|
+
from boto.manage.task import Task
|
|
66
|
+
t = Task.get_by_id(id)
|
|
67
|
+
print "Deleting task: %s" % t.name
|
|
68
|
+
if raw_input("Are you sure? ").lower() in ["y", "yes"]:
|
|
69
|
+
t.delete()
|
|
70
|
+
print "Deleted"
|
|
71
|
+
else:
|
|
72
|
+
print "Canceled"
|
|
73
|
+
|
|
74
|
+
def create(name, hour, command):
|
|
75
|
+
"""Create a new task
|
|
76
|
+
:param name: Name of the task to create
|
|
77
|
+
:type name: str
|
|
78
|
+
:param hour: What hour to run it at, "*" for every hour
|
|
79
|
+
:type hour: str
|
|
80
|
+
:param command: The command to execute
|
|
81
|
+
:type command: str
|
|
82
|
+
"""
|
|
83
|
+
from boto.manage.task import Task
|
|
84
|
+
t = Task()
|
|
85
|
+
t.name = name
|
|
86
|
+
t.hour = hour
|
|
87
|
+
t.command = command
|
|
88
|
+
t.put()
|
|
89
|
+
print "Created task: %s" % t.id
|
|
90
|
+
|
|
91
|
+
if __name__ == "__main__":
|
|
92
|
+
try:
|
|
93
|
+
import readline
|
|
94
|
+
except ImportError:
|
|
95
|
+
pass
|
|
96
|
+
import boto
|
|
97
|
+
import sys
|
|
98
|
+
from optparse import OptionParser
|
|
99
|
+
from boto.mashups.iobject import IObject
|
|
100
|
+
parser = OptionParser(version=__version__, usage=usage)
|
|
101
|
+
|
|
102
|
+
(options, args) = parser.parse_args()
|
|
103
|
+
|
|
104
|
+
if len(args) < 1:
|
|
105
|
+
parser.print_help()
|
|
106
|
+
sys.exit(1)
|
|
107
|
+
|
|
108
|
+
command = args[0].lower()
|
|
109
|
+
if command in ("ls", "list"):
|
|
110
|
+
list()
|
|
111
|
+
elif command == "get":
|
|
112
|
+
get(args[1])
|
|
113
|
+
elif command == "create":
|
|
114
|
+
create(args[1], args[2], args[3])
|
|
115
|
+
elif command == "delete":
|
|
116
|
+
delete(args[1])
|
|
@@ -0,0 +1,793 @@
|
|
|
1
|
+
# Copyright (c) 2006-2012 Mitch Garnaat http://garnaat.org/
|
|
2
|
+
# Copyright (c) 2010-2011, Eucalyptus Systems, Inc.
|
|
3
|
+
# Copyright (c) 2011, Nexenta Systems Inc.
|
|
4
|
+
# Copyright (c) 2012 Amazon.com, Inc. or its affiliates.
|
|
5
|
+
# Copyright (c) 2010, Google, Inc.
|
|
6
|
+
# All rights reserved.
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
9
|
+
# copy of this software and associated documentation files (the
|
|
10
|
+
# "Software"), to deal in the Software without restriction, including
|
|
11
|
+
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
|
12
|
+
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
|
13
|
+
# persons to whom the Software is furnished to do so, subject to the fol-
|
|
14
|
+
# lowing conditions:
|
|
15
|
+
#
|
|
16
|
+
# The above copyright notice and this permission notice shall be included
|
|
17
|
+
# in all copies or substantial portions of the Software.
|
|
18
|
+
#
|
|
19
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
20
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
|
21
|
+
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
22
|
+
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
23
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
24
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
25
|
+
# IN THE SOFTWARE.
|
|
26
|
+
#
|
|
27
|
+
from boto.pyami.config import Config, BotoConfigLocations
|
|
28
|
+
from boto.storage_uri import BucketStorageUri, FileStorageUri
|
|
29
|
+
import boto.plugin
|
|
30
|
+
import os
|
|
31
|
+
import platform
|
|
32
|
+
import re
|
|
33
|
+
import sys
|
|
34
|
+
import logging
|
|
35
|
+
import logging.config
|
|
36
|
+
import urlparse
|
|
37
|
+
from boto.exception import InvalidUriError
|
|
38
|
+
|
|
39
|
+
__version__ = '2.8.0-dev'
|
|
40
|
+
Version = __version__ # for backware compatibility
|
|
41
|
+
|
|
42
|
+
UserAgent = 'Boto/%s (%s)' % (__version__, sys.platform)
|
|
43
|
+
config = Config()
|
|
44
|
+
|
|
45
|
+
# Regex to disallow buckets violating charset or not [3..255] chars total.
|
|
46
|
+
BUCKET_NAME_RE = re.compile(r'^[a-z0-9][a-z0-9\._-]{1,253}[a-z0-9]$')
|
|
47
|
+
# Regex to disallow buckets with individual DNS labels longer than 63.
|
|
48
|
+
TOO_LONG_DNS_NAME_COMP = re.compile(r'[-_a-z0-9]{64}')
|
|
49
|
+
GENERATION_RE = re.compile(r'(?P<versionless_uri_str>.+)'
|
|
50
|
+
r'#(?P<generation>[0-9]+)$')
|
|
51
|
+
VERSION_RE = re.compile('(?P<versionless_uri_str>.+)#(?P<version_id>.+)$')
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def init_logging():
|
|
55
|
+
for file in BotoConfigLocations:
|
|
56
|
+
try:
|
|
57
|
+
logging.config.fileConfig(os.path.expanduser(file))
|
|
58
|
+
except:
|
|
59
|
+
pass
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class NullHandler(logging.Handler):
|
|
63
|
+
def emit(self, record):
|
|
64
|
+
pass
|
|
65
|
+
|
|
66
|
+
log = logging.getLogger('boto')
|
|
67
|
+
perflog = logging.getLogger('boto.perf')
|
|
68
|
+
log.addHandler(NullHandler())
|
|
69
|
+
perflog.addHandler(NullHandler())
|
|
70
|
+
init_logging()
|
|
71
|
+
|
|
72
|
+
# convenience function to set logging to a particular file
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def set_file_logger(name, filepath, level=logging.INFO, format_string=None):
|
|
76
|
+
global log
|
|
77
|
+
if not format_string:
|
|
78
|
+
format_string = "%(asctime)s %(name)s [%(levelname)s]:%(message)s"
|
|
79
|
+
logger = logging.getLogger(name)
|
|
80
|
+
logger.setLevel(level)
|
|
81
|
+
fh = logging.FileHandler(filepath)
|
|
82
|
+
fh.setLevel(level)
|
|
83
|
+
formatter = logging.Formatter(format_string)
|
|
84
|
+
fh.setFormatter(formatter)
|
|
85
|
+
logger.addHandler(fh)
|
|
86
|
+
log = logger
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def set_stream_logger(name, level=logging.DEBUG, format_string=None):
|
|
90
|
+
global log
|
|
91
|
+
if not format_string:
|
|
92
|
+
format_string = "%(asctime)s %(name)s [%(levelname)s]:%(message)s"
|
|
93
|
+
logger = logging.getLogger(name)
|
|
94
|
+
logger.setLevel(level)
|
|
95
|
+
fh = logging.StreamHandler()
|
|
96
|
+
fh.setLevel(level)
|
|
97
|
+
formatter = logging.Formatter(format_string)
|
|
98
|
+
fh.setFormatter(formatter)
|
|
99
|
+
logger.addHandler(fh)
|
|
100
|
+
log = logger
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def connect_sqs(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
104
|
+
"""
|
|
105
|
+
:type aws_access_key_id: string
|
|
106
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
107
|
+
|
|
108
|
+
:type aws_secret_access_key: string
|
|
109
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
110
|
+
|
|
111
|
+
:rtype: :class:`boto.sqs.connection.SQSConnection`
|
|
112
|
+
:return: A connection to Amazon's SQS
|
|
113
|
+
"""
|
|
114
|
+
from boto.sqs.connection import SQSConnection
|
|
115
|
+
return SQSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def connect_s3(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
119
|
+
"""
|
|
120
|
+
:type aws_access_key_id: string
|
|
121
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
122
|
+
|
|
123
|
+
:type aws_secret_access_key: string
|
|
124
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
125
|
+
|
|
126
|
+
:rtype: :class:`boto.s3.connection.S3Connection`
|
|
127
|
+
:return: A connection to Amazon's S3
|
|
128
|
+
"""
|
|
129
|
+
from boto.s3.connection import S3Connection
|
|
130
|
+
return S3Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def connect_gs(gs_access_key_id=None, gs_secret_access_key=None, **kwargs):
|
|
134
|
+
"""
|
|
135
|
+
@type gs_access_key_id: string
|
|
136
|
+
@param gs_access_key_id: Your Google Cloud Storage Access Key ID
|
|
137
|
+
|
|
138
|
+
@type gs_secret_access_key: string
|
|
139
|
+
@param gs_secret_access_key: Your Google Cloud Storage Secret Access Key
|
|
140
|
+
|
|
141
|
+
@rtype: L{GSConnection<boto.gs.connection.GSConnection>}
|
|
142
|
+
@return: A connection to Google's Storage service
|
|
143
|
+
"""
|
|
144
|
+
from boto.gs.connection import GSConnection
|
|
145
|
+
return GSConnection(gs_access_key_id, gs_secret_access_key, **kwargs)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def connect_ec2(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
149
|
+
"""
|
|
150
|
+
:type aws_access_key_id: string
|
|
151
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
152
|
+
|
|
153
|
+
:type aws_secret_access_key: string
|
|
154
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
155
|
+
|
|
156
|
+
:rtype: :class:`boto.ec2.connection.EC2Connection`
|
|
157
|
+
:return: A connection to Amazon's EC2
|
|
158
|
+
"""
|
|
159
|
+
from boto.ec2.connection import EC2Connection
|
|
160
|
+
return EC2Connection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def connect_elb(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
164
|
+
"""
|
|
165
|
+
:type aws_access_key_id: string
|
|
166
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
167
|
+
|
|
168
|
+
:type aws_secret_access_key: string
|
|
169
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
170
|
+
|
|
171
|
+
:rtype: :class:`boto.ec2.elb.ELBConnection`
|
|
172
|
+
:return: A connection to Amazon's Load Balancing Service
|
|
173
|
+
"""
|
|
174
|
+
from boto.ec2.elb import ELBConnection
|
|
175
|
+
return ELBConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
def connect_autoscale(aws_access_key_id=None, aws_secret_access_key=None,
|
|
179
|
+
**kwargs):
|
|
180
|
+
"""
|
|
181
|
+
:type aws_access_key_id: string
|
|
182
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
183
|
+
|
|
184
|
+
:type aws_secret_access_key: string
|
|
185
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
186
|
+
|
|
187
|
+
:rtype: :class:`boto.ec2.autoscale.AutoScaleConnection`
|
|
188
|
+
:return: A connection to Amazon's Auto Scaling Service
|
|
189
|
+
"""
|
|
190
|
+
from boto.ec2.autoscale import AutoScaleConnection
|
|
191
|
+
return AutoScaleConnection(aws_access_key_id, aws_secret_access_key,
|
|
192
|
+
**kwargs)
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def connect_cloudwatch(aws_access_key_id=None, aws_secret_access_key=None,
|
|
196
|
+
**kwargs):
|
|
197
|
+
"""
|
|
198
|
+
:type aws_access_key_id: string
|
|
199
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
200
|
+
|
|
201
|
+
:type aws_secret_access_key: string
|
|
202
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
203
|
+
|
|
204
|
+
:rtype: :class:`boto.ec2.cloudwatch.CloudWatchConnection`
|
|
205
|
+
:return: A connection to Amazon's EC2 Monitoring service
|
|
206
|
+
"""
|
|
207
|
+
from boto.ec2.cloudwatch import CloudWatchConnection
|
|
208
|
+
return CloudWatchConnection(aws_access_key_id, aws_secret_access_key,
|
|
209
|
+
**kwargs)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def connect_sdb(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
213
|
+
"""
|
|
214
|
+
:type aws_access_key_id: string
|
|
215
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
216
|
+
|
|
217
|
+
:type aws_secret_access_key: string
|
|
218
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
219
|
+
|
|
220
|
+
:rtype: :class:`boto.sdb.connection.SDBConnection`
|
|
221
|
+
:return: A connection to Amazon's SDB
|
|
222
|
+
"""
|
|
223
|
+
from boto.sdb.connection import SDBConnection
|
|
224
|
+
return SDBConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def connect_fps(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
228
|
+
"""
|
|
229
|
+
:type aws_access_key_id: string
|
|
230
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
231
|
+
|
|
232
|
+
:type aws_secret_access_key: string
|
|
233
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
234
|
+
|
|
235
|
+
:rtype: :class:`boto.fps.connection.FPSConnection`
|
|
236
|
+
:return: A connection to FPS
|
|
237
|
+
"""
|
|
238
|
+
from boto.fps.connection import FPSConnection
|
|
239
|
+
return FPSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
def connect_mturk(aws_access_key_id=None, aws_secret_access_key=None,
|
|
243
|
+
**kwargs):
|
|
244
|
+
"""
|
|
245
|
+
:type aws_access_key_id: string
|
|
246
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
247
|
+
|
|
248
|
+
:type aws_secret_access_key: string
|
|
249
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
250
|
+
|
|
251
|
+
:rtype: :class:`boto.mturk.connection.MTurkConnection`
|
|
252
|
+
:return: A connection to MTurk
|
|
253
|
+
"""
|
|
254
|
+
from boto.mturk.connection import MTurkConnection
|
|
255
|
+
return MTurkConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def connect_cloudfront(aws_access_key_id=None, aws_secret_access_key=None,
|
|
259
|
+
**kwargs):
|
|
260
|
+
"""
|
|
261
|
+
:type aws_access_key_id: string
|
|
262
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
263
|
+
|
|
264
|
+
:type aws_secret_access_key: string
|
|
265
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
266
|
+
|
|
267
|
+
:rtype: :class:`boto.fps.connection.FPSConnection`
|
|
268
|
+
:return: A connection to FPS
|
|
269
|
+
"""
|
|
270
|
+
from boto.cloudfront import CloudFrontConnection
|
|
271
|
+
return CloudFrontConnection(aws_access_key_id, aws_secret_access_key,
|
|
272
|
+
**kwargs)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def connect_vpc(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
276
|
+
"""
|
|
277
|
+
:type aws_access_key_id: string
|
|
278
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
279
|
+
|
|
280
|
+
:type aws_secret_access_key: string
|
|
281
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
282
|
+
|
|
283
|
+
:rtype: :class:`boto.vpc.VPCConnection`
|
|
284
|
+
:return: A connection to VPC
|
|
285
|
+
"""
|
|
286
|
+
from boto.vpc import VPCConnection
|
|
287
|
+
return VPCConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
def connect_rds(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
291
|
+
"""
|
|
292
|
+
:type aws_access_key_id: string
|
|
293
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
294
|
+
|
|
295
|
+
:type aws_secret_access_key: string
|
|
296
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
297
|
+
|
|
298
|
+
:rtype: :class:`boto.rds.RDSConnection`
|
|
299
|
+
:return: A connection to RDS
|
|
300
|
+
"""
|
|
301
|
+
from boto.rds import RDSConnection
|
|
302
|
+
return RDSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
def connect_emr(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
306
|
+
"""
|
|
307
|
+
:type aws_access_key_id: string
|
|
308
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
309
|
+
|
|
310
|
+
:type aws_secret_access_key: string
|
|
311
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
312
|
+
|
|
313
|
+
:rtype: :class:`boto.emr.EmrConnection`
|
|
314
|
+
:return: A connection to Elastic mapreduce
|
|
315
|
+
"""
|
|
316
|
+
from boto.emr import EmrConnection
|
|
317
|
+
return EmrConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
318
|
+
|
|
319
|
+
|
|
320
|
+
def connect_sns(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
321
|
+
"""
|
|
322
|
+
:type aws_access_key_id: string
|
|
323
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
324
|
+
|
|
325
|
+
:type aws_secret_access_key: string
|
|
326
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
327
|
+
|
|
328
|
+
:rtype: :class:`boto.sns.SNSConnection`
|
|
329
|
+
:return: A connection to Amazon's SNS
|
|
330
|
+
"""
|
|
331
|
+
from boto.sns import SNSConnection
|
|
332
|
+
return SNSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
def connect_iam(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
336
|
+
"""
|
|
337
|
+
:type aws_access_key_id: string
|
|
338
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
339
|
+
|
|
340
|
+
:type aws_secret_access_key: string
|
|
341
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
342
|
+
|
|
343
|
+
:rtype: :class:`boto.iam.IAMConnection`
|
|
344
|
+
:return: A connection to Amazon's IAM
|
|
345
|
+
"""
|
|
346
|
+
from boto.iam import IAMConnection
|
|
347
|
+
return IAMConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
def connect_route53(aws_access_key_id=None, aws_secret_access_key=None,
|
|
351
|
+
**kwargs):
|
|
352
|
+
"""
|
|
353
|
+
:type aws_access_key_id: string
|
|
354
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
355
|
+
|
|
356
|
+
:type aws_secret_access_key: string
|
|
357
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
358
|
+
|
|
359
|
+
:rtype: :class:`boto.dns.Route53Connection`
|
|
360
|
+
:return: A connection to Amazon's Route53 DNS Service
|
|
361
|
+
"""
|
|
362
|
+
from boto.route53 import Route53Connection
|
|
363
|
+
return Route53Connection(aws_access_key_id, aws_secret_access_key,
|
|
364
|
+
**kwargs)
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
def connect_cloudformation(aws_access_key_id=None, aws_secret_access_key=None,
|
|
368
|
+
**kwargs):
|
|
369
|
+
"""
|
|
370
|
+
:type aws_access_key_id: string
|
|
371
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
372
|
+
|
|
373
|
+
:type aws_secret_access_key: string
|
|
374
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
375
|
+
|
|
376
|
+
:rtype: :class:`boto.cloudformation.CloudFormationConnection`
|
|
377
|
+
:return: A connection to Amazon's CloudFormation Service
|
|
378
|
+
"""
|
|
379
|
+
from boto.cloudformation import CloudFormationConnection
|
|
380
|
+
return CloudFormationConnection(aws_access_key_id, aws_secret_access_key,
|
|
381
|
+
**kwargs)
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
def connect_euca(host=None, aws_access_key_id=None, aws_secret_access_key=None,
|
|
385
|
+
port=8773, path='/services/Eucalyptus', is_secure=False,
|
|
386
|
+
**kwargs):
|
|
387
|
+
"""
|
|
388
|
+
Connect to a Eucalyptus service.
|
|
389
|
+
|
|
390
|
+
:type host: string
|
|
391
|
+
:param host: the host name or ip address of the Eucalyptus server
|
|
392
|
+
|
|
393
|
+
:type aws_access_key_id: string
|
|
394
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
395
|
+
|
|
396
|
+
:type aws_secret_access_key: string
|
|
397
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
398
|
+
|
|
399
|
+
:rtype: :class:`boto.ec2.connection.EC2Connection`
|
|
400
|
+
:return: A connection to Eucalyptus server
|
|
401
|
+
"""
|
|
402
|
+
from boto.ec2 import EC2Connection
|
|
403
|
+
from boto.ec2.regioninfo import RegionInfo
|
|
404
|
+
|
|
405
|
+
# Check for values in boto config, if not supplied as args
|
|
406
|
+
if not aws_access_key_id:
|
|
407
|
+
aws_access_key_id = config.get('Credentials',
|
|
408
|
+
'euca_access_key_id',
|
|
409
|
+
None)
|
|
410
|
+
if not aws_secret_access_key:
|
|
411
|
+
aws_secret_access_key = config.get('Credentials',
|
|
412
|
+
'euca_secret_access_key',
|
|
413
|
+
None)
|
|
414
|
+
if not host:
|
|
415
|
+
host = config.get('Boto', 'eucalyptus_host', None)
|
|
416
|
+
|
|
417
|
+
reg = RegionInfo(name='eucalyptus', endpoint=host)
|
|
418
|
+
return EC2Connection(aws_access_key_id, aws_secret_access_key,
|
|
419
|
+
region=reg, port=port, path=path,
|
|
420
|
+
is_secure=is_secure, **kwargs)
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
def connect_glacier(aws_access_key_id=None, aws_secret_access_key=None,
|
|
424
|
+
**kwargs):
|
|
425
|
+
"""
|
|
426
|
+
:type aws_access_key_id: string
|
|
427
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
428
|
+
|
|
429
|
+
:type aws_secret_access_key: string
|
|
430
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
431
|
+
|
|
432
|
+
:rtype: :class:`boto.glacier.layer2.Layer2`
|
|
433
|
+
:return: A connection to Amazon's Glacier Service
|
|
434
|
+
"""
|
|
435
|
+
from boto.glacier.layer2 import Layer2
|
|
436
|
+
return Layer2(aws_access_key_id, aws_secret_access_key,
|
|
437
|
+
**kwargs)
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def connect_ec2_endpoint(url, aws_access_key_id=None,
|
|
441
|
+
aws_secret_access_key=None,
|
|
442
|
+
**kwargs):
|
|
443
|
+
"""
|
|
444
|
+
Connect to an EC2 Api endpoint. Additional arguments are passed
|
|
445
|
+
through to connect_ec2.
|
|
446
|
+
|
|
447
|
+
:type url: string
|
|
448
|
+
:param url: A url for the ec2 api endpoint to connect to
|
|
449
|
+
|
|
450
|
+
:type aws_access_key_id: string
|
|
451
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
452
|
+
|
|
453
|
+
:type aws_secret_access_key: string
|
|
454
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
455
|
+
|
|
456
|
+
:rtype: :class:`boto.ec2.connection.EC2Connection`
|
|
457
|
+
:return: A connection to Eucalyptus server
|
|
458
|
+
"""
|
|
459
|
+
from boto.ec2.regioninfo import RegionInfo
|
|
460
|
+
|
|
461
|
+
purl = urlparse.urlparse(url)
|
|
462
|
+
kwargs['port'] = purl.port
|
|
463
|
+
kwargs['host'] = purl.hostname
|
|
464
|
+
kwargs['path'] = purl.path
|
|
465
|
+
if not 'is_secure' in kwargs:
|
|
466
|
+
kwargs['is_secure'] = (purl.scheme == "https")
|
|
467
|
+
|
|
468
|
+
kwargs['region'] = RegionInfo(name=purl.hostname,
|
|
469
|
+
endpoint=purl.hostname)
|
|
470
|
+
kwargs['aws_access_key_id'] = aws_access_key_id
|
|
471
|
+
kwargs['aws_secret_access_key'] = aws_secret_access_key
|
|
472
|
+
|
|
473
|
+
return(connect_ec2(**kwargs))
|
|
474
|
+
|
|
475
|
+
|
|
476
|
+
def connect_walrus(host=None, aws_access_key_id=None,
|
|
477
|
+
aws_secret_access_key=None,
|
|
478
|
+
port=8773, path='/services/Walrus', is_secure=False,
|
|
479
|
+
**kwargs):
|
|
480
|
+
"""
|
|
481
|
+
Connect to a Walrus service.
|
|
482
|
+
|
|
483
|
+
:type host: string
|
|
484
|
+
:param host: the host name or ip address of the Walrus server
|
|
485
|
+
|
|
486
|
+
:type aws_access_key_id: string
|
|
487
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
488
|
+
|
|
489
|
+
:type aws_secret_access_key: string
|
|
490
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
491
|
+
|
|
492
|
+
:rtype: :class:`boto.s3.connection.S3Connection`
|
|
493
|
+
:return: A connection to Walrus
|
|
494
|
+
"""
|
|
495
|
+
from boto.s3.connection import S3Connection
|
|
496
|
+
from boto.s3.connection import OrdinaryCallingFormat
|
|
497
|
+
|
|
498
|
+
# Check for values in boto config, if not supplied as args
|
|
499
|
+
if not aws_access_key_id:
|
|
500
|
+
aws_access_key_id = config.get('Credentials',
|
|
501
|
+
'euca_access_key_id',
|
|
502
|
+
None)
|
|
503
|
+
if not aws_secret_access_key:
|
|
504
|
+
aws_secret_access_key = config.get('Credentials',
|
|
505
|
+
'euca_secret_access_key',
|
|
506
|
+
None)
|
|
507
|
+
if not host:
|
|
508
|
+
host = config.get('Boto', 'walrus_host', None)
|
|
509
|
+
|
|
510
|
+
return S3Connection(aws_access_key_id, aws_secret_access_key,
|
|
511
|
+
host=host, port=port, path=path,
|
|
512
|
+
calling_format=OrdinaryCallingFormat(),
|
|
513
|
+
is_secure=is_secure, **kwargs)
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
def connect_ses(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
517
|
+
"""
|
|
518
|
+
:type aws_access_key_id: string
|
|
519
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
520
|
+
|
|
521
|
+
:type aws_secret_access_key: string
|
|
522
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
523
|
+
|
|
524
|
+
:rtype: :class:`boto.ses.SESConnection`
|
|
525
|
+
:return: A connection to Amazon's SES
|
|
526
|
+
"""
|
|
527
|
+
from boto.ses import SESConnection
|
|
528
|
+
return SESConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
529
|
+
|
|
530
|
+
|
|
531
|
+
def connect_sts(aws_access_key_id=None, aws_secret_access_key=None, **kwargs):
|
|
532
|
+
"""
|
|
533
|
+
:type aws_access_key_id: string
|
|
534
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
535
|
+
|
|
536
|
+
:type aws_secret_access_key: string
|
|
537
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
538
|
+
|
|
539
|
+
:rtype: :class:`boto.sts.STSConnection`
|
|
540
|
+
:return: A connection to Amazon's STS
|
|
541
|
+
"""
|
|
542
|
+
from boto.sts import STSConnection
|
|
543
|
+
return STSConnection(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
544
|
+
|
|
545
|
+
|
|
546
|
+
def connect_ia(ia_access_key_id=None, ia_secret_access_key=None,
|
|
547
|
+
is_secure=False, **kwargs):
|
|
548
|
+
"""
|
|
549
|
+
Connect to the Internet Archive via their S3-like API.
|
|
550
|
+
|
|
551
|
+
:type ia_access_key_id: string
|
|
552
|
+
:param ia_access_key_id: Your IA Access Key ID. This will also look
|
|
553
|
+
in your boto config file for an entry in the Credentials
|
|
554
|
+
section called "ia_access_key_id"
|
|
555
|
+
|
|
556
|
+
:type ia_secret_access_key: string
|
|
557
|
+
:param ia_secret_access_key: Your IA Secret Access Key. This will also
|
|
558
|
+
look in your boto config file for an entry in the Credentials
|
|
559
|
+
section called "ia_secret_access_key"
|
|
560
|
+
|
|
561
|
+
:rtype: :class:`boto.s3.connection.S3Connection`
|
|
562
|
+
:return: A connection to the Internet Archive
|
|
563
|
+
"""
|
|
564
|
+
from boto.s3.connection import S3Connection
|
|
565
|
+
from boto.s3.connection import OrdinaryCallingFormat
|
|
566
|
+
|
|
567
|
+
access_key = config.get('Credentials', 'ia_access_key_id',
|
|
568
|
+
ia_access_key_id)
|
|
569
|
+
secret_key = config.get('Credentials', 'ia_secret_access_key',
|
|
570
|
+
ia_secret_access_key)
|
|
571
|
+
|
|
572
|
+
return S3Connection(access_key, secret_key,
|
|
573
|
+
host='s3.us.archive.org',
|
|
574
|
+
calling_format=OrdinaryCallingFormat(),
|
|
575
|
+
is_secure=is_secure, **kwargs)
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
def connect_dynamodb(aws_access_key_id=None,
|
|
579
|
+
aws_secret_access_key=None,
|
|
580
|
+
**kwargs):
|
|
581
|
+
"""
|
|
582
|
+
:type aws_access_key_id: string
|
|
583
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
584
|
+
|
|
585
|
+
:type aws_secret_access_key: string
|
|
586
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
587
|
+
|
|
588
|
+
:rtype: :class:`boto.dynamodb.layer2.Layer2`
|
|
589
|
+
:return: A connection to the Layer2 interface for DynamoDB.
|
|
590
|
+
"""
|
|
591
|
+
from boto.dynamodb.layer2 import Layer2
|
|
592
|
+
return Layer2(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
def connect_swf(aws_access_key_id=None,
|
|
596
|
+
aws_secret_access_key=None,
|
|
597
|
+
**kwargs):
|
|
598
|
+
"""
|
|
599
|
+
:type aws_access_key_id: string
|
|
600
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
601
|
+
|
|
602
|
+
:type aws_secret_access_key: string
|
|
603
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
604
|
+
|
|
605
|
+
:rtype: :class:`boto.swf.layer1.Layer1`
|
|
606
|
+
:return: A connection to the Layer1 interface for SWF.
|
|
607
|
+
"""
|
|
608
|
+
from boto.swf.layer1 import Layer1
|
|
609
|
+
return Layer1(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
def connect_cloudsearch(aws_access_key_id=None,
|
|
613
|
+
aws_secret_access_key=None,
|
|
614
|
+
**kwargs):
|
|
615
|
+
"""
|
|
616
|
+
:type aws_access_key_id: string
|
|
617
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
618
|
+
|
|
619
|
+
:type aws_secret_access_key: string
|
|
620
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
621
|
+
|
|
622
|
+
:rtype: :class:`boto.ec2.autoscale.CloudSearchConnection`
|
|
623
|
+
:return: A connection to Amazon's CloudSearch service
|
|
624
|
+
"""
|
|
625
|
+
from boto.cloudsearch.layer2 import Layer2
|
|
626
|
+
return Layer2(aws_access_key_id, aws_secret_access_key,
|
|
627
|
+
**kwargs)
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
def connect_beanstalk(aws_access_key_id=None,
|
|
631
|
+
aws_secret_access_key=None,
|
|
632
|
+
**kwargs):
|
|
633
|
+
"""
|
|
634
|
+
:type aws_access_key_id: string
|
|
635
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
636
|
+
|
|
637
|
+
:type aws_secret_access_key: string
|
|
638
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
639
|
+
|
|
640
|
+
:rtype: :class:`boto.beanstalk.layer1.Layer1`
|
|
641
|
+
:return: A connection to Amazon's Elastic Beanstalk service
|
|
642
|
+
"""
|
|
643
|
+
from boto.beanstalk.layer1 import Layer1
|
|
644
|
+
return Layer1(aws_access_key_id, aws_secret_access_key, **kwargs)
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
def connect_elastictranscoder(aws_access_key_id=None,
|
|
648
|
+
aws_secret_access_key=None,
|
|
649
|
+
**kwargs):
|
|
650
|
+
"""
|
|
651
|
+
:type aws_access_key_id: string
|
|
652
|
+
:param aws_access_key_id: Your AWS Access Key ID
|
|
653
|
+
|
|
654
|
+
:type aws_secret_access_key: string
|
|
655
|
+
:param aws_secret_access_key: Your AWS Secret Access Key
|
|
656
|
+
|
|
657
|
+
:rtype: :class:`boto.ets.layer1.ElasticTranscoderConnection`
|
|
658
|
+
:return: A connection to Amazon's Elastic Transcoder service
|
|
659
|
+
"""
|
|
660
|
+
from boto.elastictranscoder.layer1 import ElasticTranscoderConnection
|
|
661
|
+
return ElasticTranscoderConnection(
|
|
662
|
+
aws_access_key_id=aws_access_key_id,
|
|
663
|
+
aws_secret_access_key=aws_secret_access_key,
|
|
664
|
+
**kwargs)
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
def storage_uri(uri_str, default_scheme='file', debug=0, validate=True,
|
|
668
|
+
bucket_storage_uri_class=BucketStorageUri,
|
|
669
|
+
suppress_consec_slashes=True, is_latest=False):
|
|
670
|
+
"""
|
|
671
|
+
Instantiate a StorageUri from a URI string.
|
|
672
|
+
|
|
673
|
+
:type uri_str: string
|
|
674
|
+
:param uri_str: URI naming bucket + optional object.
|
|
675
|
+
:type default_scheme: string
|
|
676
|
+
:param default_scheme: default scheme for scheme-less URIs.
|
|
677
|
+
:type debug: int
|
|
678
|
+
:param debug: debug level to pass in to boto connection (range 0..2).
|
|
679
|
+
:type validate: bool
|
|
680
|
+
:param validate: whether to check for bucket name validity.
|
|
681
|
+
:type bucket_storage_uri_class: BucketStorageUri interface.
|
|
682
|
+
:param bucket_storage_uri_class: Allows mocking for unit tests.
|
|
683
|
+
:param suppress_consec_slashes: If provided, controls whether
|
|
684
|
+
consecutive slashes will be suppressed in key paths.
|
|
685
|
+
:type is_latest: bool
|
|
686
|
+
:param is_latest: whether this versioned object represents the
|
|
687
|
+
current version.
|
|
688
|
+
|
|
689
|
+
We allow validate to be disabled to allow caller
|
|
690
|
+
to implement bucket-level wildcarding (outside the boto library;
|
|
691
|
+
see gsutil).
|
|
692
|
+
|
|
693
|
+
:rtype: :class:`boto.StorageUri` subclass
|
|
694
|
+
:return: StorageUri subclass for given URI.
|
|
695
|
+
|
|
696
|
+
``uri_str`` must be one of the following formats:
|
|
697
|
+
|
|
698
|
+
* gs://bucket/name
|
|
699
|
+
* gs://bucket/name#ver
|
|
700
|
+
* s3://bucket/name
|
|
701
|
+
* gs://bucket
|
|
702
|
+
* s3://bucket
|
|
703
|
+
* filename (which could be a Unix path like /a/b/c or a Windows path like
|
|
704
|
+
C:\a\b\c)
|
|
705
|
+
|
|
706
|
+
The last example uses the default scheme ('file', unless overridden).
|
|
707
|
+
"""
|
|
708
|
+
version_id = None
|
|
709
|
+
generation = None
|
|
710
|
+
|
|
711
|
+
# Manually parse URI components instead of using urlparse.urlparse because
|
|
712
|
+
# what we're calling URIs don't really fit the standard syntax for URIs
|
|
713
|
+
# (the latter includes an optional host/net location part).
|
|
714
|
+
end_scheme_idx = uri_str.find('://')
|
|
715
|
+
if end_scheme_idx == -1:
|
|
716
|
+
# Check for common error: user specifies gs:bucket instead
|
|
717
|
+
# of gs://bucket. Some URI parsers allow this, but it can cause
|
|
718
|
+
# confusion for callers, so we don't.
|
|
719
|
+
colon_pos = uri_str.find(':')
|
|
720
|
+
if colon_pos != -1:
|
|
721
|
+
# Allow Windows path names including drive letter (C: etc.)
|
|
722
|
+
drive_char = uri_str[0].lower()
|
|
723
|
+
if not (platform.system().lower().startswith('windows')
|
|
724
|
+
and colon_pos == 1
|
|
725
|
+
and drive_char >= 'a' and drive_char <= 'z'):
|
|
726
|
+
raise InvalidUriError('"%s" contains ":" instead of "://"' %
|
|
727
|
+
uri_str)
|
|
728
|
+
scheme = default_scheme.lower()
|
|
729
|
+
path = uri_str
|
|
730
|
+
else:
|
|
731
|
+
scheme = uri_str[0:end_scheme_idx].lower()
|
|
732
|
+
path = uri_str[end_scheme_idx + 3:]
|
|
733
|
+
|
|
734
|
+
if scheme not in ['file', 's3', 'gs']:
|
|
735
|
+
raise InvalidUriError('Unrecognized scheme "%s"' % scheme)
|
|
736
|
+
if scheme == 'file':
|
|
737
|
+
# For file URIs we have no bucket name, and use the complete path
|
|
738
|
+
# (minus 'file://') as the object name.
|
|
739
|
+
is_stream = False
|
|
740
|
+
if path == '-':
|
|
741
|
+
is_stream = True
|
|
742
|
+
return FileStorageUri(path, debug, is_stream)
|
|
743
|
+
else:
|
|
744
|
+
path_parts = path.split('/', 1)
|
|
745
|
+
bucket_name = path_parts[0]
|
|
746
|
+
object_name = ''
|
|
747
|
+
# If validate enabled, ensure the bucket name is valid, to avoid
|
|
748
|
+
# possibly confusing other parts of the code. (For example if we didn't
|
|
749
|
+
# catch bucket names containing ':', when a user tried to connect to
|
|
750
|
+
# the server with that name they might get a confusing error about
|
|
751
|
+
# non-integer port numbers.)
|
|
752
|
+
if (validate and bucket_name and
|
|
753
|
+
(not BUCKET_NAME_RE.match(bucket_name)
|
|
754
|
+
or TOO_LONG_DNS_NAME_COMP.search(bucket_name))):
|
|
755
|
+
raise InvalidUriError('Invalid bucket name in URI "%s"' % uri_str)
|
|
756
|
+
if scheme == 'gs':
|
|
757
|
+
match = GENERATION_RE.search(path)
|
|
758
|
+
if match:
|
|
759
|
+
md = match.groupdict()
|
|
760
|
+
versionless_uri_str = md['versionless_uri_str']
|
|
761
|
+
path_parts = versionless_uri_str.split('/', 1)
|
|
762
|
+
generation = int(md['generation'])
|
|
763
|
+
elif scheme == 's3':
|
|
764
|
+
match = VERSION_RE.search(path)
|
|
765
|
+
if match:
|
|
766
|
+
md = match.groupdict()
|
|
767
|
+
versionless_uri_str = md['versionless_uri_str']
|
|
768
|
+
path_parts = versionless_uri_str.split('/', 1)
|
|
769
|
+
version_id = md['version_id']
|
|
770
|
+
else:
|
|
771
|
+
raise InvalidUriError('Unrecognized scheme "%s"' % scheme)
|
|
772
|
+
if len(path_parts) > 1:
|
|
773
|
+
object_name = path_parts[1]
|
|
774
|
+
return bucket_storage_uri_class(
|
|
775
|
+
scheme, bucket_name, object_name, debug,
|
|
776
|
+
suppress_consec_slashes=suppress_consec_slashes,
|
|
777
|
+
version_id=version_id, generation=generation, is_latest=is_latest)
|
|
778
|
+
|
|
779
|
+
|
|
780
|
+
def storage_uri_for_key(key):
|
|
781
|
+
"""Returns a StorageUri for the given key.
|
|
782
|
+
|
|
783
|
+
:type key: :class:`boto.s3.key.Key` or subclass
|
|
784
|
+
:param key: URI naming bucket + optional object.
|
|
785
|
+
"""
|
|
786
|
+
if not isinstance(key, boto.s3.key.Key):
|
|
787
|
+
raise InvalidUriError('Requested key (%s) is not a subclass of '
|
|
788
|
+
'boto.s3.key.Key' % str(type(key)))
|
|
789
|
+
prov_name = key.bucket.connection.provider.get_provider_name()
|
|
790
|
+
uri_str = '%s://%s/%s' % (prov_name, key.bucket.name, key.name)
|
|
791
|
+
return storage_uri(uri_str)
|
|
792
|
+
|
|
793
|
+
boto.plugin.load_plugins(config)
|