googlecloud 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/googlecloud.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,121 @@
|
|
1
|
+
import os
|
2
|
+
import urlparse
|
3
|
+
import boto
|
4
|
+
import boto.connection
|
5
|
+
import boto.jsonresponse
|
6
|
+
import boto.exception
|
7
|
+
import awsqueryrequest
|
8
|
+
|
9
|
+
class NoCredentialsError(boto.exception.BotoClientError):
|
10
|
+
|
11
|
+
def __init__(self):
|
12
|
+
s = 'Unable to find credentials'
|
13
|
+
boto.exception.BotoClientError.__init__(self, s)
|
14
|
+
|
15
|
+
class AWSQueryService(boto.connection.AWSQueryConnection):
|
16
|
+
|
17
|
+
Name = ''
|
18
|
+
Description = ''
|
19
|
+
APIVersion = ''
|
20
|
+
Authentication = 'sign-v2'
|
21
|
+
Path = '/'
|
22
|
+
Port = 443
|
23
|
+
Provider = 'aws'
|
24
|
+
EnvURL = 'AWS_URL'
|
25
|
+
|
26
|
+
Regions = []
|
27
|
+
|
28
|
+
def __init__(self, **args):
|
29
|
+
self.args = args
|
30
|
+
self.check_for_credential_file()
|
31
|
+
self.check_for_env_url()
|
32
|
+
if 'host' not in self.args:
|
33
|
+
if self.Regions:
|
34
|
+
region_name = self.args.get('region_name',
|
35
|
+
self.Regions[0]['name'])
|
36
|
+
for region in self.Regions:
|
37
|
+
if region['name'] == region_name:
|
38
|
+
self.args['host'] = region['endpoint']
|
39
|
+
if 'path' not in self.args:
|
40
|
+
self.args['path'] = self.Path
|
41
|
+
if 'port' not in self.args:
|
42
|
+
self.args['port'] = self.Port
|
43
|
+
try:
|
44
|
+
boto.connection.AWSQueryConnection.__init__(self, **self.args)
|
45
|
+
self.aws_response = None
|
46
|
+
except boto.exception.NoAuthHandlerFound:
|
47
|
+
raise NoCredentialsError()
|
48
|
+
|
49
|
+
def check_for_credential_file(self):
|
50
|
+
"""
|
51
|
+
Checks for the existance of an AWS credential file.
|
52
|
+
If the environment variable AWS_CREDENTIAL_FILE is
|
53
|
+
set and points to a file, that file will be read and
|
54
|
+
will be searched credentials.
|
55
|
+
Note that if credentials have been explicitelypassed
|
56
|
+
into the class constructor, those values always take
|
57
|
+
precedence.
|
58
|
+
"""
|
59
|
+
if 'AWS_CREDENTIAL_FILE' in os.environ:
|
60
|
+
path = os.environ['AWS_CREDENTIAL_FILE']
|
61
|
+
path = os.path.expanduser(path)
|
62
|
+
path = os.path.expandvars(path)
|
63
|
+
if os.path.isfile(path):
|
64
|
+
fp = open(path)
|
65
|
+
lines = fp.readlines()
|
66
|
+
fp.close()
|
67
|
+
for line in lines:
|
68
|
+
if line[0] != '#':
|
69
|
+
if '=' in line:
|
70
|
+
name, value = line.split('=', 1)
|
71
|
+
if name.strip() == 'AWSAccessKeyId':
|
72
|
+
if 'aws_access_key_id' not in self.args:
|
73
|
+
value = value.strip()
|
74
|
+
self.args['aws_access_key_id'] = value
|
75
|
+
elif name.strip() == 'AWSSecretKey':
|
76
|
+
if 'aws_secret_access_key' not in self.args:
|
77
|
+
value = value.strip()
|
78
|
+
self.args['aws_secret_access_key'] = value
|
79
|
+
else:
|
80
|
+
print 'Warning: unable to read AWS_CREDENTIAL_FILE'
|
81
|
+
|
82
|
+
def check_for_env_url(self):
|
83
|
+
"""
|
84
|
+
First checks to see if a url argument was explicitly passed
|
85
|
+
in. If so, that will be used. If not, it checks for the
|
86
|
+
existence of the environment variable specified in ENV_URL.
|
87
|
+
If this is set, it should contain a fully qualified URL to the
|
88
|
+
service you want to use.
|
89
|
+
Note that any values passed explicitly to the class constructor
|
90
|
+
will take precedence.
|
91
|
+
"""
|
92
|
+
url = self.args.get('url', None)
|
93
|
+
if url:
|
94
|
+
del self.args['url']
|
95
|
+
if not url and self.EnvURL in os.environ:
|
96
|
+
url = os.environ[self.EnvURL]
|
97
|
+
if url:
|
98
|
+
rslt = urlparse.urlparse(url)
|
99
|
+
if 'is_secure' not in self.args:
|
100
|
+
if rslt.scheme == 'https':
|
101
|
+
self.args['is_secure'] = True
|
102
|
+
else:
|
103
|
+
self.args['is_secure'] = False
|
104
|
+
|
105
|
+
host = rslt.netloc
|
106
|
+
port = None
|
107
|
+
l = host.split(':')
|
108
|
+
if len(l) > 1:
|
109
|
+
host = l[0]
|
110
|
+
port = int(l[1])
|
111
|
+
if 'host' not in self.args:
|
112
|
+
self.args['host'] = host
|
113
|
+
if port and 'port' not in self.args:
|
114
|
+
self.args['port'] = port
|
115
|
+
|
116
|
+
if rslt.path and 'path' not in self.args:
|
117
|
+
self.args['path'] = rslt.path
|
118
|
+
|
119
|
+
def _required_auth_capability(self):
|
120
|
+
return [self.Authentication]
|
121
|
+
|
@@ -0,0 +1,147 @@
|
|
1
|
+
# Copyright (c) 2010 Mitch Garnaat http://garnaat.org/
|
2
|
+
# Copyright (c) 2010, Eucalyptus Systems, Inc.
|
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
|
+
# IN THE SOFTWARE.
|
22
|
+
|
23
|
+
import os
|
24
|
+
|
25
|
+
class Converter(object):
|
26
|
+
|
27
|
+
@classmethod
|
28
|
+
def convert_string(cls, param, value):
|
29
|
+
# TODO: could do length validation, etc. here
|
30
|
+
if not isinstance(value, basestring):
|
31
|
+
raise ValueError
|
32
|
+
return value
|
33
|
+
|
34
|
+
@classmethod
|
35
|
+
def convert_integer(cls, param, value):
|
36
|
+
# TODO: could do range checking here
|
37
|
+
return int(value)
|
38
|
+
|
39
|
+
@classmethod
|
40
|
+
def convert_boolean(cls, param, value):
|
41
|
+
"""
|
42
|
+
For command line arguments, just the presence
|
43
|
+
of the option means True so just return True
|
44
|
+
"""
|
45
|
+
return True
|
46
|
+
|
47
|
+
@classmethod
|
48
|
+
def convert_file(cls, param, value):
|
49
|
+
if os.path.isfile(value):
|
50
|
+
return value
|
51
|
+
raise ValueError
|
52
|
+
|
53
|
+
@classmethod
|
54
|
+
def convert_dir(cls, param, value):
|
55
|
+
if os.path.isdir(value):
|
56
|
+
return value
|
57
|
+
raise ValueError
|
58
|
+
|
59
|
+
@classmethod
|
60
|
+
def convert(cls, param, value):
|
61
|
+
try:
|
62
|
+
if hasattr(cls, 'convert_'+param.ptype):
|
63
|
+
mthd = getattr(cls, 'convert_'+param.ptype)
|
64
|
+
else:
|
65
|
+
mthd = cls.convert_string
|
66
|
+
return mthd(param, value)
|
67
|
+
except:
|
68
|
+
raise ValidationException(param, '')
|
69
|
+
|
70
|
+
class Param(object):
|
71
|
+
|
72
|
+
def __init__(self, name=None, ptype='string', optional=True,
|
73
|
+
short_name=None, long_name=None, doc='',
|
74
|
+
metavar=None, cardinality=1, default=None,
|
75
|
+
choices=None, encoder=None, request_param=True):
|
76
|
+
self.name = name
|
77
|
+
self.ptype = ptype
|
78
|
+
self.optional = optional
|
79
|
+
self.short_name = short_name
|
80
|
+
self.long_name = long_name
|
81
|
+
self.doc = doc
|
82
|
+
self.metavar = metavar
|
83
|
+
self.cardinality = cardinality
|
84
|
+
self.default = default
|
85
|
+
self.choices = choices
|
86
|
+
self.encoder = encoder
|
87
|
+
self.request_param = request_param
|
88
|
+
|
89
|
+
@property
|
90
|
+
def optparse_long_name(self):
|
91
|
+
ln = None
|
92
|
+
if self.long_name:
|
93
|
+
ln = '--%s' % self.long_name
|
94
|
+
return ln
|
95
|
+
|
96
|
+
@property
|
97
|
+
def synopsis_long_name(self):
|
98
|
+
ln = None
|
99
|
+
if self.long_name:
|
100
|
+
ln = '--%s' % self.long_name
|
101
|
+
return ln
|
102
|
+
|
103
|
+
@property
|
104
|
+
def getopt_long_name(self):
|
105
|
+
ln = None
|
106
|
+
if self.long_name:
|
107
|
+
ln = '%s' % self.long_name
|
108
|
+
if self.ptype != 'boolean':
|
109
|
+
ln += '='
|
110
|
+
return ln
|
111
|
+
|
112
|
+
@property
|
113
|
+
def optparse_short_name(self):
|
114
|
+
sn = None
|
115
|
+
if self.short_name:
|
116
|
+
sn = '-%s' % self.short_name
|
117
|
+
return sn
|
118
|
+
|
119
|
+
@property
|
120
|
+
def synopsis_short_name(self):
|
121
|
+
sn = None
|
122
|
+
if self.short_name:
|
123
|
+
sn = '-%s' % self.short_name
|
124
|
+
return sn
|
125
|
+
|
126
|
+
@property
|
127
|
+
def getopt_short_name(self):
|
128
|
+
sn = None
|
129
|
+
if self.short_name:
|
130
|
+
sn = '%s' % self.short_name
|
131
|
+
if self.ptype != 'boolean':
|
132
|
+
sn += ':'
|
133
|
+
return sn
|
134
|
+
|
135
|
+
def convert(self, value):
|
136
|
+
"""
|
137
|
+
Convert a string value as received in the command line
|
138
|
+
tools and convert to the appropriate type of value.
|
139
|
+
Raise a ValidationError if the value can't be converted.
|
140
|
+
|
141
|
+
:type value: str
|
142
|
+
:param value: The value to convert. This should always
|
143
|
+
be a string.
|
144
|
+
"""
|
145
|
+
return Converter.convert(self, value)
|
146
|
+
|
147
|
+
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# Copyright (c) 2006-2012 Mitch Garnaat http://garnaat.org/
|
2
|
+
# Copyright (c) 2010, Eucalyptus Systems, Inc.
|
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
|
+
# IN THE SOFTWARE.
|
22
|
+
#
|
23
|
+
|
24
|
+
# this is here for backward compatibility
|
25
|
+
# originally, the Route53Connection class was defined here
|
26
|
+
from connection import Route53Connection
|
27
|
+
from boto.regioninfo import RegionInfo
|
28
|
+
|
29
|
+
|
30
|
+
class Route53RegionInfo(RegionInfo):
|
31
|
+
|
32
|
+
def connect(self, **kw_params):
|
33
|
+
"""
|
34
|
+
Connect to this Region's endpoint. Returns an connection
|
35
|
+
object pointing to the endpoint associated with this region.
|
36
|
+
You may pass any of the arguments accepted by the connection
|
37
|
+
class's constructor as keyword arguments and they will be
|
38
|
+
passed along to the connection object.
|
39
|
+
|
40
|
+
:rtype: Connection object
|
41
|
+
:return: The connection to this regions endpoint
|
42
|
+
"""
|
43
|
+
if self.connection_cls:
|
44
|
+
return self.connection_cls(host=self.endpoint, **kw_params)
|
45
|
+
|
46
|
+
|
47
|
+
def regions():
|
48
|
+
"""
|
49
|
+
Get all available regions for the Route53 service.
|
50
|
+
|
51
|
+
:rtype: list
|
52
|
+
:return: A list of :class:`boto.regioninfo.RegionInfo` instances
|
53
|
+
"""
|
54
|
+
return [Route53RegionInfo(name='universal',
|
55
|
+
endpoint='route53.amazonaws.com',
|
56
|
+
connection_cls=Route53Connection)
|
57
|
+
]
|
58
|
+
|
59
|
+
|
60
|
+
def connect_to_region(region_name, **kw_params):
|
61
|
+
"""
|
62
|
+
Given a valid region name, return a
|
63
|
+
:class:`boto.route53.connection.Route53Connection`.
|
64
|
+
|
65
|
+
:type: str
|
66
|
+
:param region_name: The name of the region to connect to.
|
67
|
+
|
68
|
+
:rtype: :class:`boto.route53.connection.Route53Connection` or ``None``
|
69
|
+
:return: A connection to the given region, or None if an invalid region
|
70
|
+
name is given
|
71
|
+
"""
|
72
|
+
for region in regions():
|
73
|
+
if region.name == region_name:
|
74
|
+
return region.connect(**kw_params)
|
75
|
+
return None
|
@@ -0,0 +1,403 @@
|
|
1
|
+
# Copyright (c) 2006-2010 Mitch Garnaat http://garnaat.org/
|
2
|
+
# Copyright (c) 2010, Eucalyptus Systems, Inc.
|
3
|
+
# Copyright (c) 2011 Blue Pines Technologies LLC, Brad Carleton
|
4
|
+
# www.bluepines.org
|
5
|
+
# Copyright (c) 2012 42 Lines Inc., Jim Browne
|
6
|
+
#
|
7
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
8
|
+
# copy of this software and associated documentation files (the
|
9
|
+
# "Software"), to deal in the Software without restriction, including
|
10
|
+
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
11
|
+
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
12
|
+
# persons to whom the Software is furnished to do so, subject to the fol-
|
13
|
+
# lowing conditions:
|
14
|
+
#
|
15
|
+
# The above copyright notice and this permission notice shall be included
|
16
|
+
# in all copies or substantial portions of the Software.
|
17
|
+
#
|
18
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
19
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
20
|
+
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
21
|
+
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
22
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
24
|
+
# IN THE SOFTWARE.
|
25
|
+
#
|
26
|
+
|
27
|
+
import xml.sax
|
28
|
+
import uuid
|
29
|
+
import urllib
|
30
|
+
import boto
|
31
|
+
from boto.connection import AWSAuthConnection
|
32
|
+
from boto import handler
|
33
|
+
from boto.route53.record import ResourceRecordSets
|
34
|
+
from boto.route53.zone import Zone
|
35
|
+
import boto.jsonresponse
|
36
|
+
import exception
|
37
|
+
|
38
|
+
HZXML = """<?xml version="1.0" encoding="UTF-8"?>
|
39
|
+
<CreateHostedZoneRequest xmlns="%(xmlns)s">
|
40
|
+
<Name>%(name)s</Name>
|
41
|
+
<CallerReference>%(caller_ref)s</CallerReference>
|
42
|
+
<HostedZoneConfig>
|
43
|
+
<Comment>%(comment)s</Comment>
|
44
|
+
</HostedZoneConfig>
|
45
|
+
</CreateHostedZoneRequest>"""
|
46
|
+
|
47
|
+
#boto.set_stream_logger('dns')
|
48
|
+
|
49
|
+
|
50
|
+
class Route53Connection(AWSAuthConnection):
|
51
|
+
DefaultHost = 'route53.amazonaws.com'
|
52
|
+
"""The default Route53 API endpoint to connect to."""
|
53
|
+
|
54
|
+
Version = '2012-02-29'
|
55
|
+
"""Route53 API version."""
|
56
|
+
|
57
|
+
XMLNameSpace = 'https://route53.amazonaws.com/doc/2012-02-29/'
|
58
|
+
"""XML schema for this Route53 API version."""
|
59
|
+
|
60
|
+
def __init__(self, aws_access_key_id=None, aws_secret_access_key=None,
|
61
|
+
port=None, proxy=None, proxy_port=None,
|
62
|
+
host=DefaultHost, debug=0, security_token=None,
|
63
|
+
validate_certs=True):
|
64
|
+
AWSAuthConnection.__init__(self, host,
|
65
|
+
aws_access_key_id, aws_secret_access_key,
|
66
|
+
True, port, proxy, proxy_port, debug=debug,
|
67
|
+
security_token=security_token,
|
68
|
+
validate_certs=validate_certs)
|
69
|
+
|
70
|
+
def _required_auth_capability(self):
|
71
|
+
return ['route53']
|
72
|
+
|
73
|
+
def make_request(self, action, path, headers=None, data='', params=None):
|
74
|
+
if params:
|
75
|
+
pairs = []
|
76
|
+
for key, val in params.iteritems():
|
77
|
+
if val is None:
|
78
|
+
continue
|
79
|
+
pairs.append(key + '=' + urllib.quote(str(val)))
|
80
|
+
path += '?' + '&'.join(pairs)
|
81
|
+
return AWSAuthConnection.make_request(self, action, path,
|
82
|
+
headers, data)
|
83
|
+
|
84
|
+
# Hosted Zones
|
85
|
+
|
86
|
+
def get_all_hosted_zones(self, start_marker=None, zone_list=None):
|
87
|
+
"""
|
88
|
+
Returns a Python data structure with information about all
|
89
|
+
Hosted Zones defined for the AWS account.
|
90
|
+
|
91
|
+
:param int start_marker: start marker to pass when fetching additional
|
92
|
+
results after a truncated list
|
93
|
+
:param list zone_list: a HostedZones list to prepend to results
|
94
|
+
"""
|
95
|
+
params = {}
|
96
|
+
if start_marker:
|
97
|
+
params = {'marker': start_marker}
|
98
|
+
response = self.make_request('GET', '/%s/hostedzone' % self.Version,
|
99
|
+
params=params)
|
100
|
+
body = response.read()
|
101
|
+
boto.log.debug(body)
|
102
|
+
if response.status >= 300:
|
103
|
+
raise exception.DNSServerError(response.status,
|
104
|
+
response.reason,
|
105
|
+
body)
|
106
|
+
e = boto.jsonresponse.Element(list_marker='HostedZones',
|
107
|
+
item_marker=('HostedZone',))
|
108
|
+
h = boto.jsonresponse.XmlHandler(e, None)
|
109
|
+
h.parse(body)
|
110
|
+
if zone_list:
|
111
|
+
e['ListHostedZonesResponse']['HostedZones'].extend(zone_list)
|
112
|
+
while 'NextMarker' in e['ListHostedZonesResponse']:
|
113
|
+
next_marker = e['ListHostedZonesResponse']['NextMarker']
|
114
|
+
zone_list = e['ListHostedZonesResponse']['HostedZones']
|
115
|
+
e = self.get_all_hosted_zones(next_marker, zone_list)
|
116
|
+
return e
|
117
|
+
|
118
|
+
def get_hosted_zone(self, hosted_zone_id):
|
119
|
+
"""
|
120
|
+
Get detailed information about a particular Hosted Zone.
|
121
|
+
|
122
|
+
:type hosted_zone_id: str
|
123
|
+
:param hosted_zone_id: The unique identifier for the Hosted Zone
|
124
|
+
|
125
|
+
"""
|
126
|
+
uri = '/%s/hostedzone/%s' % (self.Version, hosted_zone_id)
|
127
|
+
response = self.make_request('GET', uri)
|
128
|
+
body = response.read()
|
129
|
+
boto.log.debug(body)
|
130
|
+
if response.status >= 300:
|
131
|
+
raise exception.DNSServerError(response.status,
|
132
|
+
response.reason,
|
133
|
+
body)
|
134
|
+
e = boto.jsonresponse.Element(list_marker='NameServers',
|
135
|
+
item_marker=('NameServer',))
|
136
|
+
h = boto.jsonresponse.XmlHandler(e, None)
|
137
|
+
h.parse(body)
|
138
|
+
return e
|
139
|
+
|
140
|
+
def get_hosted_zone_by_name(self, hosted_zone_name):
|
141
|
+
"""
|
142
|
+
Get detailed information about a particular Hosted Zone.
|
143
|
+
|
144
|
+
:type hosted_zone_name: str
|
145
|
+
:param hosted_zone_name: The fully qualified domain name for the Hosted
|
146
|
+
Zone
|
147
|
+
|
148
|
+
"""
|
149
|
+
if hosted_zone_name[-1] != '.':
|
150
|
+
hosted_zone_name += '.'
|
151
|
+
all_hosted_zones = self.get_all_hosted_zones()
|
152
|
+
for zone in all_hosted_zones['ListHostedZonesResponse']['HostedZones']:
|
153
|
+
#check that they gave us the FQDN for their zone
|
154
|
+
if zone['Name'] == hosted_zone_name:
|
155
|
+
return self.get_hosted_zone(zone['Id'].split('/')[-1])
|
156
|
+
|
157
|
+
def create_hosted_zone(self, domain_name, caller_ref=None, comment=''):
|
158
|
+
"""
|
159
|
+
Create a new Hosted Zone. Returns a Python data structure with
|
160
|
+
information about the newly created Hosted Zone.
|
161
|
+
|
162
|
+
:type domain_name: str
|
163
|
+
:param domain_name: The name of the domain. This should be a
|
164
|
+
fully-specified domain, and should end with a final period
|
165
|
+
as the last label indication. If you omit the final period,
|
166
|
+
Amazon Route 53 assumes the domain is relative to the root.
|
167
|
+
This is the name you have registered with your DNS registrar.
|
168
|
+
It is also the name you will delegate from your registrar to
|
169
|
+
the Amazon Route 53 delegation servers returned in
|
170
|
+
response to this request.A list of strings with the image
|
171
|
+
IDs wanted.
|
172
|
+
|
173
|
+
:type caller_ref: str
|
174
|
+
:param caller_ref: A unique string that identifies the request
|
175
|
+
and that allows failed CreateHostedZone requests to be retried
|
176
|
+
without the risk of executing the operation twice. If you don't
|
177
|
+
provide a value for this, boto will generate a Type 4 UUID and
|
178
|
+
use that.
|
179
|
+
|
180
|
+
:type comment: str
|
181
|
+
:param comment: Any comments you want to include about the hosted
|
182
|
+
zone.
|
183
|
+
|
184
|
+
"""
|
185
|
+
if caller_ref is None:
|
186
|
+
caller_ref = str(uuid.uuid4())
|
187
|
+
params = {'name': domain_name,
|
188
|
+
'caller_ref': caller_ref,
|
189
|
+
'comment': comment,
|
190
|
+
'xmlns': self.XMLNameSpace}
|
191
|
+
xml_body = HZXML % params
|
192
|
+
uri = '/%s/hostedzone' % self.Version
|
193
|
+
response = self.make_request('POST', uri,
|
194
|
+
{'Content-Type': 'text/xml'}, xml_body)
|
195
|
+
body = response.read()
|
196
|
+
boto.log.debug(body)
|
197
|
+
if response.status == 201:
|
198
|
+
e = boto.jsonresponse.Element(list_marker='NameServers',
|
199
|
+
item_marker=('NameServer',))
|
200
|
+
h = boto.jsonresponse.XmlHandler(e, None)
|
201
|
+
h.parse(body)
|
202
|
+
return e
|
203
|
+
else:
|
204
|
+
raise exception.DNSServerError(response.status,
|
205
|
+
response.reason,
|
206
|
+
body)
|
207
|
+
|
208
|
+
def delete_hosted_zone(self, hosted_zone_id):
|
209
|
+
uri = '/%s/hostedzone/%s' % (self.Version, hosted_zone_id)
|
210
|
+
response = self.make_request('DELETE', uri)
|
211
|
+
body = response.read()
|
212
|
+
boto.log.debug(body)
|
213
|
+
if response.status not in (200, 204):
|
214
|
+
raise exception.DNSServerError(response.status,
|
215
|
+
response.reason,
|
216
|
+
body)
|
217
|
+
e = boto.jsonresponse.Element()
|
218
|
+
h = boto.jsonresponse.XmlHandler(e, None)
|
219
|
+
h.parse(body)
|
220
|
+
return e
|
221
|
+
|
222
|
+
# Resource Record Sets
|
223
|
+
|
224
|
+
def get_all_rrsets(self, hosted_zone_id, type=None,
|
225
|
+
name=None, identifier=None, maxitems=None):
|
226
|
+
"""
|
227
|
+
Retrieve the Resource Record Sets defined for this Hosted Zone.
|
228
|
+
Returns the raw XML data returned by the Route53 call.
|
229
|
+
|
230
|
+
:type hosted_zone_id: str
|
231
|
+
:param hosted_zone_id: The unique identifier for the Hosted Zone
|
232
|
+
|
233
|
+
:type type: str
|
234
|
+
:param type: The type of resource record set to begin the record
|
235
|
+
listing from. Valid choices are:
|
236
|
+
|
237
|
+
* A
|
238
|
+
* AAAA
|
239
|
+
* CNAME
|
240
|
+
* MX
|
241
|
+
* NS
|
242
|
+
* PTR
|
243
|
+
* SOA
|
244
|
+
* SPF
|
245
|
+
* SRV
|
246
|
+
* TXT
|
247
|
+
|
248
|
+
Valid values for weighted resource record sets:
|
249
|
+
|
250
|
+
* A
|
251
|
+
* AAAA
|
252
|
+
* CNAME
|
253
|
+
* TXT
|
254
|
+
|
255
|
+
Valid values for Zone Apex Aliases:
|
256
|
+
|
257
|
+
* A
|
258
|
+
* AAAA
|
259
|
+
|
260
|
+
:type name: str
|
261
|
+
:param name: The first name in the lexicographic ordering of domain
|
262
|
+
names to be retrieved
|
263
|
+
|
264
|
+
:type identifier: str
|
265
|
+
:param identifier: In a hosted zone that includes weighted resource
|
266
|
+
record sets (multiple resource record sets with the same DNS
|
267
|
+
name and type that are differentiated only by SetIdentifier),
|
268
|
+
if results were truncated for a given DNS name and type,
|
269
|
+
the value of SetIdentifier for the next resource record
|
270
|
+
set that has the current DNS name and type
|
271
|
+
|
272
|
+
:type maxitems: int
|
273
|
+
:param maxitems: The maximum number of records
|
274
|
+
|
275
|
+
"""
|
276
|
+
params = {'type': type, 'name': name,
|
277
|
+
'Identifier': identifier, 'maxitems': maxitems}
|
278
|
+
uri = '/%s/hostedzone/%s/rrset' % (self.Version, hosted_zone_id)
|
279
|
+
response = self.make_request('GET', uri, params=params)
|
280
|
+
body = response.read()
|
281
|
+
boto.log.debug(body)
|
282
|
+
if response.status >= 300:
|
283
|
+
raise exception.DNSServerError(response.status,
|
284
|
+
response.reason,
|
285
|
+
body)
|
286
|
+
rs = ResourceRecordSets(connection=self, hosted_zone_id=hosted_zone_id)
|
287
|
+
h = handler.XmlHandler(rs, self)
|
288
|
+
xml.sax.parseString(body, h)
|
289
|
+
return rs
|
290
|
+
|
291
|
+
def change_rrsets(self, hosted_zone_id, xml_body):
|
292
|
+
"""
|
293
|
+
Create or change the authoritative DNS information for this
|
294
|
+
Hosted Zone.
|
295
|
+
Returns a Python data structure with information about the set of
|
296
|
+
changes, including the Change ID.
|
297
|
+
|
298
|
+
:type hosted_zone_id: str
|
299
|
+
:param hosted_zone_id: The unique identifier for the Hosted Zone
|
300
|
+
|
301
|
+
:type xml_body: str
|
302
|
+
:param xml_body: The list of changes to be made, defined in the
|
303
|
+
XML schema defined by the Route53 service.
|
304
|
+
|
305
|
+
"""
|
306
|
+
uri = '/%s/hostedzone/%s/rrset' % (self.Version, hosted_zone_id)
|
307
|
+
response = self.make_request('POST', uri,
|
308
|
+
{'Content-Type': 'text/xml'},
|
309
|
+
xml_body)
|
310
|
+
body = response.read()
|
311
|
+
boto.log.debug(body)
|
312
|
+
if response.status >= 300:
|
313
|
+
raise exception.DNSServerError(response.status,
|
314
|
+
response.reason,
|
315
|
+
body)
|
316
|
+
e = boto.jsonresponse.Element()
|
317
|
+
h = boto.jsonresponse.XmlHandler(e, None)
|
318
|
+
h.parse(body)
|
319
|
+
return e
|
320
|
+
|
321
|
+
def get_change(self, change_id):
|
322
|
+
"""
|
323
|
+
Get information about a proposed set of changes, as submitted
|
324
|
+
by the change_rrsets method.
|
325
|
+
Returns a Python data structure with status information about the
|
326
|
+
changes.
|
327
|
+
|
328
|
+
:type change_id: str
|
329
|
+
:param change_id: The unique identifier for the set of changes.
|
330
|
+
This ID is returned in the response to the change_rrsets method.
|
331
|
+
|
332
|
+
"""
|
333
|
+
uri = '/%s/change/%s' % (self.Version, change_id)
|
334
|
+
response = self.make_request('GET', uri)
|
335
|
+
body = response.read()
|
336
|
+
boto.log.debug(body)
|
337
|
+
if response.status >= 300:
|
338
|
+
raise exception.DNSServerError(response.status,
|
339
|
+
response.reason,
|
340
|
+
body)
|
341
|
+
e = boto.jsonresponse.Element()
|
342
|
+
h = boto.jsonresponse.XmlHandler(e, None)
|
343
|
+
h.parse(body)
|
344
|
+
return e
|
345
|
+
|
346
|
+
def create_zone(self, name):
|
347
|
+
"""
|
348
|
+
Create a new Hosted Zone. Returns a Zone object for the newly
|
349
|
+
created Hosted Zone.
|
350
|
+
|
351
|
+
:type name: str
|
352
|
+
:param name: The name of the domain. This should be a
|
353
|
+
fully-specified domain, and should end with a final period
|
354
|
+
as the last label indication. If you omit the final period,
|
355
|
+
Amazon Route 53 assumes the domain is relative to the root.
|
356
|
+
This is the name you have registered with your DNS registrar.
|
357
|
+
It is also the name you will delegate from your registrar to
|
358
|
+
the Amazon Route 53 delegation servers returned in
|
359
|
+
response to this request.
|
360
|
+
"""
|
361
|
+
zone = self.create_hosted_zone(name)
|
362
|
+
return Zone(self, zone['CreateHostedZoneResponse']['HostedZone'])
|
363
|
+
|
364
|
+
def get_zone(self, name):
|
365
|
+
"""
|
366
|
+
Returns a Zone object for the specified Hosted Zone.
|
367
|
+
|
368
|
+
:param name: The name of the domain. This should be a
|
369
|
+
fully-specified domain, and should end with a final period
|
370
|
+
as the last label indication.
|
371
|
+
"""
|
372
|
+
name = self._make_qualified(name)
|
373
|
+
for zone in self.get_zones():
|
374
|
+
if name == zone.name:
|
375
|
+
return zone
|
376
|
+
|
377
|
+
def get_zones(self):
|
378
|
+
"""
|
379
|
+
Returns a list of Zone objects, one for each of the Hosted
|
380
|
+
Zones defined for the AWS account.
|
381
|
+
"""
|
382
|
+
zones = self.get_all_hosted_zones()
|
383
|
+
return [Zone(self, zone) for zone in
|
384
|
+
zones['ListHostedZonesResponse']['HostedZones']]
|
385
|
+
|
386
|
+
def _make_qualified(self, value):
|
387
|
+
"""
|
388
|
+
Ensure passed domain names end in a period (.) character.
|
389
|
+
This will usually make a domain fully qualified.
|
390
|
+
"""
|
391
|
+
if type(value) in [list, tuple, set]:
|
392
|
+
new_list = []
|
393
|
+
for record in value:
|
394
|
+
if record and not record[-1] == '.':
|
395
|
+
new_list.append("%s." % record)
|
396
|
+
else:
|
397
|
+
new_list.append(record)
|
398
|
+
return new_list
|
399
|
+
else:
|
400
|
+
value = value.strip()
|
401
|
+
if value and not value[-1] == '.':
|
402
|
+
value = "%s." % value
|
403
|
+
return value
|