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,27 @@
|
|
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
|
+
from boto.exception import BotoServerError
|
24
|
+
|
25
|
+
class DNSServerError(BotoServerError):
|
26
|
+
|
27
|
+
pass
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Copyright (c) 2010 Mitch Garnaat http://garnaat.org/
|
2
|
+
# Copyright (c) 2010, Eucalyptus Systems, Inc.
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
6
|
+
# copy of this software and associated documentation files (the
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
9
|
+
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
10
|
+
# persons to whom the Software is furnished to do so, subject to the fol-
|
11
|
+
# lowing conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included
|
14
|
+
# in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
17
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
18
|
+
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
19
|
+
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
22
|
+
# IN THE SOFTWARE.
|
23
|
+
#
|
24
|
+
|
25
|
+
class HostedZone(object):
|
26
|
+
|
27
|
+
def __init__(self, id=None, name=None, owner=None, version=None,
|
28
|
+
caller_reference=None, config=None):
|
29
|
+
self.id = id
|
30
|
+
self.name = name
|
31
|
+
self.owner = owner
|
32
|
+
self.version = version
|
33
|
+
self.caller_reference = caller_reference
|
34
|
+
self.config = config
|
35
|
+
|
36
|
+
def startElement(self, name, attrs, connection):
|
37
|
+
if name == 'Config':
|
38
|
+
self.config = Config()
|
39
|
+
return self.config
|
40
|
+
else:
|
41
|
+
return None
|
42
|
+
|
43
|
+
def endElement(self, name, value, connection):
|
44
|
+
if name == 'Id':
|
45
|
+
self.id = value
|
46
|
+
elif name == 'Name':
|
47
|
+
self.name = value
|
48
|
+
elif name == 'Owner':
|
49
|
+
self.owner = value
|
50
|
+
elif name == 'Version':
|
51
|
+
self.version = value
|
52
|
+
elif name == 'CallerReference':
|
53
|
+
self.caller_reference = value
|
54
|
+
else:
|
55
|
+
setattr(self, name, value)
|
56
|
+
|
@@ -0,0 +1,306 @@
|
|
1
|
+
# Copyright (c) 2010 Chris Moyer http://coredumped.org/
|
2
|
+
# Copyright (c) 2012 Mitch Garnaat http://garnaat.org/
|
3
|
+
# Copyright (c) 2012 Amazon.com, Inc. or its affiliates.
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
7
|
+
# copy of this software and associated documentation files (the
|
8
|
+
# "Software"), to deal in the Software without restriction, including
|
9
|
+
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
10
|
+
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
11
|
+
# persons to whom the Software is furnished to do so, subject to the fol-
|
12
|
+
# lowing conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be included
|
15
|
+
# in all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
18
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
19
|
+
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
20
|
+
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
21
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
23
|
+
# IN THE SOFTWARE.
|
24
|
+
|
25
|
+
RECORD_TYPES = ['A', 'AAAA', 'TXT', 'CNAME', 'MX', 'PTR', 'SRV', 'SPF']
|
26
|
+
|
27
|
+
from boto.resultset import ResultSet
|
28
|
+
class ResourceRecordSets(ResultSet):
|
29
|
+
"""
|
30
|
+
A list of resource records.
|
31
|
+
|
32
|
+
:ivar hosted_zone_id: The ID of the hosted zone.
|
33
|
+
:ivar comment: A comment that will be stored with the change.
|
34
|
+
:ivar changes: A list of changes.
|
35
|
+
"""
|
36
|
+
|
37
|
+
ChangeResourceRecordSetsBody = """<?xml version="1.0" encoding="UTF-8"?>
|
38
|
+
<ChangeResourceRecordSetsRequest xmlns="https://route53.amazonaws.com/doc/2012-02-29/">
|
39
|
+
<ChangeBatch>
|
40
|
+
<Comment>%(comment)s</Comment>
|
41
|
+
<Changes>%(changes)s</Changes>
|
42
|
+
</ChangeBatch>
|
43
|
+
</ChangeResourceRecordSetsRequest>"""
|
44
|
+
|
45
|
+
ChangeXML = """<Change>
|
46
|
+
<Action>%(action)s</Action>
|
47
|
+
%(record)s
|
48
|
+
</Change>"""
|
49
|
+
|
50
|
+
def __init__(self, connection=None, hosted_zone_id=None, comment=None):
|
51
|
+
self.connection = connection
|
52
|
+
self.hosted_zone_id = hosted_zone_id
|
53
|
+
self.comment = comment
|
54
|
+
self.changes = []
|
55
|
+
self.next_record_name = None
|
56
|
+
self.next_record_type = None
|
57
|
+
ResultSet.__init__(self, [('ResourceRecordSet', Record)])
|
58
|
+
|
59
|
+
def __repr__(self):
|
60
|
+
if self.changes:
|
61
|
+
record_list = ','.join([c.__repr__() for c in self.changes])
|
62
|
+
else:
|
63
|
+
record_list = ','.join([record.__repr__() for record in self])
|
64
|
+
return '<ResourceRecordSets:%s [%s]' % (self.hosted_zone_id,
|
65
|
+
record_list)
|
66
|
+
|
67
|
+
def add_change(self, action, name, type, ttl=600,
|
68
|
+
alias_hosted_zone_id=None, alias_dns_name=None, identifier=None,
|
69
|
+
weight=None, region=None):
|
70
|
+
"""
|
71
|
+
Add a change request to the set.
|
72
|
+
|
73
|
+
:type action: str
|
74
|
+
:param action: The action to perform ('CREATE'|'DELETE')
|
75
|
+
|
76
|
+
:type name: str
|
77
|
+
:param name: The name of the domain you want to perform the action on.
|
78
|
+
|
79
|
+
:type type: str
|
80
|
+
:param type: The DNS record type. Valid values are:
|
81
|
+
|
82
|
+
* A
|
83
|
+
* AAAA
|
84
|
+
* CNAME
|
85
|
+
* MX
|
86
|
+
* NS
|
87
|
+
* PTR
|
88
|
+
* SOA
|
89
|
+
* SPF
|
90
|
+
* SRV
|
91
|
+
* TXT
|
92
|
+
|
93
|
+
:type ttl: int
|
94
|
+
:param ttl: The resource record cache time to live (TTL), in seconds.
|
95
|
+
|
96
|
+
:type alias_hosted_zone_id: str
|
97
|
+
:param alias_dns_name: *Alias resource record sets only* The value
|
98
|
+
of the hosted zone ID, CanonicalHostedZoneNameId, for
|
99
|
+
the LoadBalancer.
|
100
|
+
|
101
|
+
:type alias_dns_name: str
|
102
|
+
:param alias_hosted_zone_id: *Alias resource record sets only*
|
103
|
+
Information about the domain to which you are redirecting traffic.
|
104
|
+
|
105
|
+
:type identifier: str
|
106
|
+
:param identifier: *Weighted and latency-based resource record sets
|
107
|
+
only* An identifier that differentiates among multiple resource
|
108
|
+
record sets that have the same combination of DNS name and type.
|
109
|
+
|
110
|
+
:type weight: int
|
111
|
+
:param weight: *Weighted resource record sets only* Among resource
|
112
|
+
record sets that have the same combination of DNS name and type,
|
113
|
+
a value that determines what portion of traffic for the current
|
114
|
+
resource record set is routed to the associated location
|
115
|
+
|
116
|
+
:type region: str
|
117
|
+
:param region: *Latency-based resource record sets only* Among resource
|
118
|
+
record sets that have the same combination of DNS name and type,
|
119
|
+
a value that determines which region this should be associated with
|
120
|
+
for the latency-based routing
|
121
|
+
"""
|
122
|
+
change = Record(name, type, ttl,
|
123
|
+
alias_hosted_zone_id=alias_hosted_zone_id,
|
124
|
+
alias_dns_name=alias_dns_name, identifier=identifier,
|
125
|
+
weight=weight, region=region)
|
126
|
+
self.changes.append([action, change])
|
127
|
+
return change
|
128
|
+
|
129
|
+
def add_change_record(self, action, change):
|
130
|
+
"""Add an existing record to a change set with the specified action"""
|
131
|
+
self.changes.append([action, change])
|
132
|
+
return
|
133
|
+
|
134
|
+
def to_xml(self):
|
135
|
+
"""Convert this ResourceRecordSet into XML
|
136
|
+
to be saved via the ChangeResourceRecordSetsRequest"""
|
137
|
+
changesXML = ""
|
138
|
+
for change in self.changes:
|
139
|
+
changeParams = {"action": change[0], "record": change[1].to_xml()}
|
140
|
+
changesXML += self.ChangeXML % changeParams
|
141
|
+
params = {"comment": self.comment, "changes": changesXML}
|
142
|
+
return self.ChangeResourceRecordSetsBody % params
|
143
|
+
|
144
|
+
def commit(self):
|
145
|
+
"""Commit this change"""
|
146
|
+
if not self.connection:
|
147
|
+
import boto
|
148
|
+
self.connection = boto.connect_route53()
|
149
|
+
return self.connection.change_rrsets(self.hosted_zone_id, self.to_xml())
|
150
|
+
|
151
|
+
def endElement(self, name, value, connection):
|
152
|
+
"""Overwritten to also add the NextRecordName and
|
153
|
+
NextRecordType to the base object"""
|
154
|
+
if name == 'NextRecordName':
|
155
|
+
self.next_record_name = value
|
156
|
+
elif name == 'NextRecordType':
|
157
|
+
self.next_record_type = value
|
158
|
+
else:
|
159
|
+
return ResultSet.endElement(self, name, value, connection)
|
160
|
+
|
161
|
+
def __iter__(self):
|
162
|
+
"""Override the next function to support paging"""
|
163
|
+
results = ResultSet.__iter__(self)
|
164
|
+
while results:
|
165
|
+
for obj in results:
|
166
|
+
yield obj
|
167
|
+
if self.is_truncated:
|
168
|
+
self.is_truncated = False
|
169
|
+
results = self.connection.get_all_rrsets(self.hosted_zone_id, name=self.next_record_name, type=self.next_record_type)
|
170
|
+
else:
|
171
|
+
results = None
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
class Record(object):
|
176
|
+
"""An individual ResourceRecordSet"""
|
177
|
+
|
178
|
+
XMLBody = """<ResourceRecordSet>
|
179
|
+
<Name>%(name)s</Name>
|
180
|
+
<Type>%(type)s</Type>
|
181
|
+
%(weight)s
|
182
|
+
%(body)s
|
183
|
+
</ResourceRecordSet>"""
|
184
|
+
|
185
|
+
WRRBody = """
|
186
|
+
<SetIdentifier>%(identifier)s</SetIdentifier>
|
187
|
+
<Weight>%(weight)s</Weight>
|
188
|
+
"""
|
189
|
+
|
190
|
+
RRRBody = """
|
191
|
+
<SetIdentifier>%(identifier)s</SetIdentifier>
|
192
|
+
<Region>%(region)s</Region>
|
193
|
+
"""
|
194
|
+
|
195
|
+
ResourceRecordsBody = """
|
196
|
+
<TTL>%(ttl)s</TTL>
|
197
|
+
<ResourceRecords>
|
198
|
+
%(records)s
|
199
|
+
</ResourceRecords>"""
|
200
|
+
|
201
|
+
ResourceRecordBody = """<ResourceRecord>
|
202
|
+
<Value>%s</Value>
|
203
|
+
</ResourceRecord>"""
|
204
|
+
|
205
|
+
AliasBody = """<AliasTarget>
|
206
|
+
<HostedZoneId>%s</HostedZoneId>
|
207
|
+
<DNSName>%s</DNSName>
|
208
|
+
</AliasTarget>"""
|
209
|
+
|
210
|
+
|
211
|
+
|
212
|
+
def __init__(self, name=None, type=None, ttl=600, resource_records=None,
|
213
|
+
alias_hosted_zone_id=None, alias_dns_name=None, identifier=None,
|
214
|
+
weight=None, region=None):
|
215
|
+
self.name = name
|
216
|
+
self.type = type
|
217
|
+
self.ttl = ttl
|
218
|
+
if resource_records == None:
|
219
|
+
resource_records = []
|
220
|
+
self.resource_records = resource_records
|
221
|
+
self.alias_hosted_zone_id = alias_hosted_zone_id
|
222
|
+
self.alias_dns_name = alias_dns_name
|
223
|
+
self.identifier = identifier
|
224
|
+
self.weight = weight
|
225
|
+
self.region = region
|
226
|
+
|
227
|
+
def __repr__(self):
|
228
|
+
return '<Record:%s:%s:%s>' % (self.name, self.type, self.to_print())
|
229
|
+
|
230
|
+
def add_value(self, value):
|
231
|
+
"""Add a resource record value"""
|
232
|
+
self.resource_records.append(value)
|
233
|
+
|
234
|
+
def set_alias(self, alias_hosted_zone_id, alias_dns_name):
|
235
|
+
"""Make this an alias resource record set"""
|
236
|
+
self.alias_hosted_zone_id = alias_hosted_zone_id
|
237
|
+
self.alias_dns_name = alias_dns_name
|
238
|
+
|
239
|
+
def to_xml(self):
|
240
|
+
"""Spit this resource record set out as XML"""
|
241
|
+
if self.alias_hosted_zone_id != None and self.alias_dns_name != None:
|
242
|
+
# Use alias
|
243
|
+
body = self.AliasBody % (self.alias_hosted_zone_id, self.alias_dns_name)
|
244
|
+
else:
|
245
|
+
# Use resource record(s)
|
246
|
+
records = ""
|
247
|
+
for r in self.resource_records:
|
248
|
+
records += self.ResourceRecordBody % r
|
249
|
+
body = self.ResourceRecordsBody % {
|
250
|
+
"ttl": self.ttl,
|
251
|
+
"records": records,
|
252
|
+
}
|
253
|
+
weight = ""
|
254
|
+
if self.identifier != None and self.weight != None:
|
255
|
+
weight = self.WRRBody % {"identifier": self.identifier, "weight":
|
256
|
+
self.weight}
|
257
|
+
elif self.identifier != None and self.region != None:
|
258
|
+
weight = self.RRRBody % {"identifier": self.identifier, "region":
|
259
|
+
self.region}
|
260
|
+
|
261
|
+
params = {
|
262
|
+
"name": self.name,
|
263
|
+
"type": self.type,
|
264
|
+
"weight": weight,
|
265
|
+
"body": body,
|
266
|
+
}
|
267
|
+
return self.XMLBody % params
|
268
|
+
|
269
|
+
def to_print(self):
|
270
|
+
rr = ""
|
271
|
+
if self.alias_hosted_zone_id != None and self.alias_dns_name != None:
|
272
|
+
# Show alias
|
273
|
+
rr = 'ALIAS ' + self.alias_hosted_zone_id + ' ' + self.alias_dns_name
|
274
|
+
else:
|
275
|
+
# Show resource record(s)
|
276
|
+
rr = ",".join(self.resource_records)
|
277
|
+
|
278
|
+
if self.identifier != None and self.weight != None:
|
279
|
+
rr += ' (WRR id=%s, w=%s)' % (self.identifier, self.weight)
|
280
|
+
elif self.identifier != None and self.region != None:
|
281
|
+
rr += ' (LBR id=%s, region=%s)' % (self.identifier, self.region)
|
282
|
+
|
283
|
+
return rr
|
284
|
+
|
285
|
+
def endElement(self, name, value, connection):
|
286
|
+
if name == 'Name':
|
287
|
+
self.name = value
|
288
|
+
elif name == 'Type':
|
289
|
+
self.type = value
|
290
|
+
elif name == 'TTL':
|
291
|
+
self.ttl = value
|
292
|
+
elif name == 'Value':
|
293
|
+
self.resource_records.append(value)
|
294
|
+
elif name == 'HostedZoneId':
|
295
|
+
self.alias_hosted_zone_id = value
|
296
|
+
elif name == 'DNSName':
|
297
|
+
self.alias_dns_name = value
|
298
|
+
elif name == 'SetIdentifier':
|
299
|
+
self.identifier = value
|
300
|
+
elif name == 'Weight':
|
301
|
+
self.weight = value
|
302
|
+
elif name == 'Region':
|
303
|
+
self.region = value
|
304
|
+
|
305
|
+
def startElement(self, name, attrs, connection):
|
306
|
+
return None
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright (c) 2011 Blue Pines Technologies LLC, Brad Carleton
|
2
|
+
# www.bluepines.org
|
3
|
+
# All rights reserved.
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
6
|
+
# copy of this software and associated documentation files (the
|
7
|
+
# "Software"), to deal in the Software without restriction, including
|
8
|
+
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
9
|
+
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
10
|
+
# persons to whom the Software is furnished to do so, subject to the fol-
|
11
|
+
# lowing conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included
|
14
|
+
# in all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
17
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
18
|
+
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
19
|
+
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
22
|
+
# IN THE SOFTWARE.
|
23
|
+
|
24
|
+
|
25
|
+
class Status(object):
|
26
|
+
def __init__(self, route53connection, change_dict):
|
27
|
+
self.route53connection = route53connection
|
28
|
+
for key in change_dict:
|
29
|
+
if key == 'Id':
|
30
|
+
self.__setattr__(key.lower(),
|
31
|
+
change_dict[key].replace('/change/', ''))
|
32
|
+
else:
|
33
|
+
self.__setattr__(key.lower(), change_dict[key])
|
34
|
+
|
35
|
+
def update(self):
|
36
|
+
""" Update the status of this request."""
|
37
|
+
status = self.route53connection.get_change(self.id)['GetChangeResponse']['ChangeInfo']['Status']
|
38
|
+
self.status = status
|
39
|
+
return status
|
40
|
+
|
41
|
+
def __repr__(self):
|
42
|
+
return '<Status:%s>' % self.status
|
@@ -0,0 +1,412 @@
|
|
1
|
+
# Copyright (c) 2011 Blue Pines Technologies LLC, Brad Carleton
|
2
|
+
# www.bluepines.org
|
3
|
+
# Copyright (c) 2012 42 Lines Inc., Jim Browne
|
4
|
+
# All rights reserved.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
7
|
+
# copy of this software and associated documentation files (the
|
8
|
+
# "Software"), to deal in the Software without restriction, including
|
9
|
+
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
10
|
+
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
11
|
+
# persons to whom the Software is furnished to do so, subject to the fol-
|
12
|
+
# lowing conditions:
|
13
|
+
#
|
14
|
+
# The above copyright notice and this permission notice shall be included
|
15
|
+
# in all copies or substantial portions of the Software.
|
16
|
+
#
|
17
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
18
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
19
|
+
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
20
|
+
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
21
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
23
|
+
# IN THE SOFTWARE.
|
24
|
+
|
25
|
+
default_ttl = 60
|
26
|
+
|
27
|
+
import copy
|
28
|
+
from boto.exception import TooManyRecordsException
|
29
|
+
from boto.route53.record import ResourceRecordSets
|
30
|
+
from boto.route53.status import Status
|
31
|
+
|
32
|
+
|
33
|
+
class Zone(object):
|
34
|
+
"""
|
35
|
+
A Route53 Zone.
|
36
|
+
|
37
|
+
:ivar Route53Connection route53connection
|
38
|
+
:ivar str Id: The ID of the hosted zone.
|
39
|
+
"""
|
40
|
+
def __init__(self, route53connection, zone_dict):
|
41
|
+
self.route53connection = route53connection
|
42
|
+
for key in zone_dict:
|
43
|
+
if key == 'Id':
|
44
|
+
self.id = zone_dict['Id'].replace('/hostedzone/', '')
|
45
|
+
else:
|
46
|
+
self.__setattr__(key.lower(), zone_dict[key])
|
47
|
+
|
48
|
+
def __repr__(self):
|
49
|
+
return '<Zone:%s>' % self.name
|
50
|
+
|
51
|
+
def _commit(self, changes):
|
52
|
+
"""
|
53
|
+
Commit a set of changes and return the ChangeInfo portion of
|
54
|
+
the response.
|
55
|
+
|
56
|
+
:type changes: ResourceRecordSets
|
57
|
+
:param changes: changes to be committed
|
58
|
+
"""
|
59
|
+
response = changes.commit()
|
60
|
+
return response['ChangeResourceRecordSetsResponse']['ChangeInfo']
|
61
|
+
|
62
|
+
def _new_record(self, changes, resource_type, name, value, ttl, identifier,
|
63
|
+
comment=""):
|
64
|
+
"""
|
65
|
+
Add a CREATE change record to an existing ResourceRecordSets
|
66
|
+
|
67
|
+
:type changes: ResourceRecordSets
|
68
|
+
:param changes: change set to append to
|
69
|
+
|
70
|
+
:type name: str
|
71
|
+
:param name: The name of the resource record you want to
|
72
|
+
perform the action on.
|
73
|
+
|
74
|
+
:type resource_type: str
|
75
|
+
:param resource_type: The DNS record type
|
76
|
+
|
77
|
+
:param value: Appropriate value for resource_type
|
78
|
+
|
79
|
+
:type ttl: int
|
80
|
+
:param ttl: The resource record cache time to live (TTL), in seconds.
|
81
|
+
|
82
|
+
:type identifier: tuple
|
83
|
+
:param identifier: A tuple for setting WRR or LBR attributes. Valid
|
84
|
+
forms are:
|
85
|
+
|
86
|
+
* (str, int): WRR record [e.g. ('foo',10)]
|
87
|
+
* (str, str): LBR record [e.g. ('foo','us-east-1')
|
88
|
+
|
89
|
+
:type comment: str
|
90
|
+
:param comment: A comment that will be stored with the change.
|
91
|
+
"""
|
92
|
+
weight = None
|
93
|
+
region = None
|
94
|
+
if identifier is not None:
|
95
|
+
try:
|
96
|
+
int(identifier[1])
|
97
|
+
weight = identifier[1]
|
98
|
+
identifier = identifier[0]
|
99
|
+
except:
|
100
|
+
region = identifier[1]
|
101
|
+
identifier = identifier[0]
|
102
|
+
change = changes.add_change("CREATE", name, resource_type, ttl,
|
103
|
+
identifier=identifier, weight=weight,
|
104
|
+
region=region)
|
105
|
+
if type(value) in [list, tuple, set]:
|
106
|
+
for record in value:
|
107
|
+
change.add_value(record)
|
108
|
+
else:
|
109
|
+
change.add_value(value)
|
110
|
+
|
111
|
+
def add_record(self, resource_type, name, value, ttl=60, identifier=None,
|
112
|
+
comment=""):
|
113
|
+
"""
|
114
|
+
Add a new record to this Zone. See _new_record for parameter
|
115
|
+
documentation. Returns a Status object.
|
116
|
+
"""
|
117
|
+
changes = ResourceRecordSets(self.route53connection, self.id, comment)
|
118
|
+
self._new_record(changes, resource_type, name, value, ttl, identifier,
|
119
|
+
comment)
|
120
|
+
return Status(self.route53connection, self._commit(changes))
|
121
|
+
|
122
|
+
def update_record(self, old_record, new_value, new_ttl=None,
|
123
|
+
new_identifier=None, comment=""):
|
124
|
+
"""
|
125
|
+
Update an existing record in this Zone. Returns a Status object.
|
126
|
+
|
127
|
+
:type old_record: ResourceRecord
|
128
|
+
:param old_record: A ResourceRecord (e.g. returned by find_records)
|
129
|
+
|
130
|
+
See _new_record for additional parameter documentation.
|
131
|
+
"""
|
132
|
+
new_ttl = new_ttl or default_ttl
|
133
|
+
record = copy.copy(old_record)
|
134
|
+
changes = ResourceRecordSets(self.route53connection, self.id, comment)
|
135
|
+
changes.add_change_record("DELETE", record)
|
136
|
+
self._new_record(changes, record.type, record.name,
|
137
|
+
new_value, new_ttl, new_identifier, comment)
|
138
|
+
return Status(self.route53connection, self._commit(changes))
|
139
|
+
|
140
|
+
def delete_record(self, record, comment=""):
|
141
|
+
"""
|
142
|
+
Delete one or more records from this Zone. Returns a Status object.
|
143
|
+
|
144
|
+
:param record: A ResourceRecord (e.g. returned by
|
145
|
+
find_records) or list, tuple, or set of ResourceRecords.
|
146
|
+
|
147
|
+
:type comment: str
|
148
|
+
:param comment: A comment that will be stored with the change.
|
149
|
+
"""
|
150
|
+
changes = ResourceRecordSets(self.route53connection, self.id, comment)
|
151
|
+
if type(record) in [list, tuple, set]:
|
152
|
+
for r in record:
|
153
|
+
changes.add_change_record("DELETE", r)
|
154
|
+
else:
|
155
|
+
changes.add_change_record("DELETE", record)
|
156
|
+
return Status(self.route53connection, self._commit(changes))
|
157
|
+
|
158
|
+
def add_cname(self, name, value, ttl=None, identifier=None, comment=""):
|
159
|
+
"""
|
160
|
+
Add a new CNAME record to this Zone. See _new_record for
|
161
|
+
parameter documentation. Returns a Status object.
|
162
|
+
"""
|
163
|
+
ttl = ttl or default_ttl
|
164
|
+
name = self.route53connection._make_qualified(name)
|
165
|
+
value = self.route53connection._make_qualified(value)
|
166
|
+
return self.add_record(resource_type='CNAME',
|
167
|
+
name=name,
|
168
|
+
value=value,
|
169
|
+
ttl=ttl,
|
170
|
+
identifier=identifier,
|
171
|
+
comment=comment)
|
172
|
+
|
173
|
+
def add_a(self, name, value, ttl=None, identifier=None, comment=""):
|
174
|
+
"""
|
175
|
+
Add a new A record to this Zone. See _new_record for
|
176
|
+
parameter documentation. Returns a Status object.
|
177
|
+
"""
|
178
|
+
ttl = ttl or default_ttl
|
179
|
+
name = self.route53connection._make_qualified(name)
|
180
|
+
return self.add_record(resource_type='A',
|
181
|
+
name=name,
|
182
|
+
value=value,
|
183
|
+
ttl=ttl,
|
184
|
+
identifier=identifier,
|
185
|
+
comment=comment)
|
186
|
+
|
187
|
+
def add_mx(self, name, records, ttl=None, identifier=None, comment=""):
|
188
|
+
"""
|
189
|
+
Add a new MX record to this Zone. See _new_record for
|
190
|
+
parameter documentation. Returns a Status object.
|
191
|
+
"""
|
192
|
+
ttl = ttl or default_ttl
|
193
|
+
records = self.route53connection._make_qualified(records)
|
194
|
+
return self.add_record(resource_type='MX',
|
195
|
+
name=name,
|
196
|
+
value=records,
|
197
|
+
ttl=ttl,
|
198
|
+
identifier=identifier,
|
199
|
+
comment=comment)
|
200
|
+
|
201
|
+
def find_records(self, name, type, desired=1, all=False, identifier=None):
|
202
|
+
"""
|
203
|
+
Search this Zone for records that match given parameters.
|
204
|
+
Returns None if no results, a ResourceRecord if one result, or
|
205
|
+
a ResourceRecordSets if more than one result.
|
206
|
+
|
207
|
+
:type name: str
|
208
|
+
:param name: The name of the records should match this parameter
|
209
|
+
|
210
|
+
:type type: str
|
211
|
+
:param type: The type of the records should match this parameter
|
212
|
+
|
213
|
+
:type desired: int
|
214
|
+
:param desired: The number of desired results. If the number of
|
215
|
+
matching records in the Zone exceeds the value of this parameter,
|
216
|
+
throw TooManyRecordsException
|
217
|
+
|
218
|
+
:type all: Boolean
|
219
|
+
:param all: If true return all records that match name, type, and
|
220
|
+
identifier parameters
|
221
|
+
|
222
|
+
:type identifier: Tuple
|
223
|
+
:param identifier: A tuple specifying WRR or LBR attributes. Valid
|
224
|
+
forms are:
|
225
|
+
|
226
|
+
* (str, int): WRR record [e.g. ('foo',10)]
|
227
|
+
* (str, str): LBR record [e.g. ('foo','us-east-1')
|
228
|
+
|
229
|
+
"""
|
230
|
+
name = self.route53connection._make_qualified(name)
|
231
|
+
returned = self.route53connection.get_all_rrsets(self.id, name=name,
|
232
|
+
type=type)
|
233
|
+
|
234
|
+
# name/type for get_all_rrsets sets the starting record; they
|
235
|
+
# are not a filter
|
236
|
+
results = [r for r in returned if r.name == name and r.type == type]
|
237
|
+
|
238
|
+
weight = None
|
239
|
+
region = None
|
240
|
+
if identifier is not None:
|
241
|
+
try:
|
242
|
+
int(identifier[1])
|
243
|
+
weight = identifier[1]
|
244
|
+
except:
|
245
|
+
region = identifier[1]
|
246
|
+
|
247
|
+
if weight is not None:
|
248
|
+
results = [r for r in results if (r.weight == weight and
|
249
|
+
r.identifier == identifier[0])]
|
250
|
+
if region is not None:
|
251
|
+
results = [r for r in results if (r.region == region and
|
252
|
+
r.identifier == identifier[0])]
|
253
|
+
|
254
|
+
if ((not all) and (len(results) > desired)):
|
255
|
+
message = "Search: name %s type %s" % (name, type)
|
256
|
+
message += "\nFound: "
|
257
|
+
message += ", ".join(["%s %s %s" % (r.name, r.type, r.to_print())
|
258
|
+
for r in results])
|
259
|
+
raise TooManyRecordsException(message)
|
260
|
+
elif len(results) > 1:
|
261
|
+
return results
|
262
|
+
elif len(results) == 1:
|
263
|
+
return results[0]
|
264
|
+
else:
|
265
|
+
return None
|
266
|
+
|
267
|
+
def get_cname(self, name, all=False):
|
268
|
+
"""
|
269
|
+
Search this Zone for CNAME records that match name.
|
270
|
+
|
271
|
+
Returns a ResourceRecord.
|
272
|
+
|
273
|
+
If there is more than one match return all as a
|
274
|
+
ResourceRecordSets if all is True, otherwise throws
|
275
|
+
TooManyRecordsException.
|
276
|
+
"""
|
277
|
+
return self.find_records(name, 'CNAME', all=all)
|
278
|
+
|
279
|
+
def get_a(self, name, all=False):
|
280
|
+
"""
|
281
|
+
Search this Zone for A records that match name.
|
282
|
+
|
283
|
+
Returns a ResourceRecord.
|
284
|
+
|
285
|
+
If there is more than one match return all as a
|
286
|
+
ResourceRecordSets if all is True, otherwise throws
|
287
|
+
TooManyRecordsException.
|
288
|
+
"""
|
289
|
+
return self.find_records(name, 'A', all=all)
|
290
|
+
|
291
|
+
def get_mx(self, name, all=False):
|
292
|
+
"""
|
293
|
+
Search this Zone for MX records that match name.
|
294
|
+
|
295
|
+
Returns a ResourceRecord.
|
296
|
+
|
297
|
+
If there is more than one match return all as a
|
298
|
+
ResourceRecordSets if all is True, otherwise throws
|
299
|
+
TooManyRecordsException.
|
300
|
+
"""
|
301
|
+
return self.find_records(name, 'MX', all=all)
|
302
|
+
|
303
|
+
def update_cname(self, name, value, ttl=None, identifier=None, comment=""):
|
304
|
+
"""
|
305
|
+
Update the given CNAME record in this Zone to a new value, ttl,
|
306
|
+
and identifier. Returns a Status object.
|
307
|
+
|
308
|
+
Will throw TooManyRecordsException is name, value does not match
|
309
|
+
a single record.
|
310
|
+
"""
|
311
|
+
name = self.route53connection._make_qualified(name)
|
312
|
+
value = self.route53connection._make_qualified(value)
|
313
|
+
old_record = self.get_cname(name)
|
314
|
+
ttl = ttl or old_record.ttl
|
315
|
+
return self.update_record(old_record,
|
316
|
+
new_value=value,
|
317
|
+
new_ttl=ttl,
|
318
|
+
new_identifier=identifier,
|
319
|
+
comment=comment)
|
320
|
+
|
321
|
+
def update_a(self, name, value, ttl=None, identifier=None, comment=""):
|
322
|
+
"""
|
323
|
+
Update the given A record in this Zone to a new value, ttl,
|
324
|
+
and identifier. Returns a Status object.
|
325
|
+
|
326
|
+
Will throw TooManyRecordsException is name, value does not match
|
327
|
+
a single record.
|
328
|
+
"""
|
329
|
+
name = self.route53connection._make_qualified(name)
|
330
|
+
old_record = self.get_a(name)
|
331
|
+
ttl = ttl or old_record.ttl
|
332
|
+
return self.update_record(old_record,
|
333
|
+
new_value=value,
|
334
|
+
new_ttl=ttl,
|
335
|
+
new_identifier=identifier,
|
336
|
+
comment=comment)
|
337
|
+
|
338
|
+
def update_mx(self, name, value, ttl=None, identifier=None, comment=""):
|
339
|
+
"""
|
340
|
+
Update the given MX record in this Zone to a new value, ttl,
|
341
|
+
and identifier. Returns a Status object.
|
342
|
+
|
343
|
+
Will throw TooManyRecordsException is name, value does not match
|
344
|
+
a single record.
|
345
|
+
"""
|
346
|
+
name = self.route53connection._make_qualified(name)
|
347
|
+
value = self.route53connection._make_qualified(value)
|
348
|
+
old_record = self.get_mx(name)
|
349
|
+
ttl = ttl or old_record.ttl
|
350
|
+
return self.update_record(old_record,
|
351
|
+
new_value=value,
|
352
|
+
new_ttl=ttl,
|
353
|
+
new_identifier=identifier,
|
354
|
+
comment=comment)
|
355
|
+
|
356
|
+
def delete_cname(self, name, identifier=None, all=False):
|
357
|
+
"""
|
358
|
+
Delete a CNAME record matching name and identifier from
|
359
|
+
this Zone. Returns a Status object.
|
360
|
+
|
361
|
+
If there is more than one match delete all matching records if
|
362
|
+
all is True, otherwise throws TooManyRecordsException.
|
363
|
+
"""
|
364
|
+
name = self.route53connection._make_qualified(name)
|
365
|
+
record = self.find_records(name, 'CNAME', identifier=identifier,
|
366
|
+
all=all)
|
367
|
+
return self.delete_record(record)
|
368
|
+
|
369
|
+
def delete_a(self, name, identifier=None, all=False):
|
370
|
+
"""
|
371
|
+
Delete an A record matching name and identifier from this
|
372
|
+
Zone. Returns a Status object.
|
373
|
+
|
374
|
+
If there is more than one match delete all matching records if
|
375
|
+
all is True, otherwise throws TooManyRecordsException.
|
376
|
+
"""
|
377
|
+
name = self.route53connection._make_qualified(name)
|
378
|
+
record = self.find_records(name, 'A', identifier=identifier,
|
379
|
+
all=all)
|
380
|
+
return self.delete_record(record)
|
381
|
+
|
382
|
+
def delete_mx(self, name, identifier=None, all=False):
|
383
|
+
"""
|
384
|
+
Delete an MX record matching name and identifier from this
|
385
|
+
Zone. Returns a Status object.
|
386
|
+
|
387
|
+
If there is more than one match delete all matching records if
|
388
|
+
all is True, otherwise throws TooManyRecordsException.
|
389
|
+
"""
|
390
|
+
name = self.route53connection._make_qualified(name)
|
391
|
+
record = self.find_records(name, 'MX', identifier=identifier,
|
392
|
+
all=all)
|
393
|
+
return self.delete_record(record)
|
394
|
+
|
395
|
+
def get_records(self):
|
396
|
+
"""
|
397
|
+
Return a ResourceRecordsSets for all of the records in this zone.
|
398
|
+
"""
|
399
|
+
return self.route53connection.get_all_rrsets(self.id)
|
400
|
+
|
401
|
+
def delete(self):
|
402
|
+
"""
|
403
|
+
Request that this zone be deleted by Amazon.
|
404
|
+
"""
|
405
|
+
self.route53connection.delete_hosted_zone(self.id)
|
406
|
+
|
407
|
+
def get_nameservers(self):
|
408
|
+
""" Get the list of nameservers for this zone."""
|
409
|
+
ns = self.find_records(self.name, 'NS')
|
410
|
+
if ns is not None:
|
411
|
+
ns = ns.resource_records
|
412
|
+
return ns
|