gcloud 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data.tar.gz.sig +0 -0
- data/CHANGELOG +4 -0
- data/Makefile +4 -0
- data/Manifest +760 -1
- data/bin/gcloud +7 -0
- data/bin/{gcutil → gcutil.symlink} +0 -0
- data/bin/gsutil-symlink +377 -0
- data/gcloud.gemspec +5 -5
- data/packages/gsutil/CHECKSUM +1 -0
- data/packages/gsutil/COPYING +202 -0
- data/packages/gsutil/LICENSE.third_party +295 -0
- data/packages/gsutil/MANIFEST.in +5 -0
- data/packages/gsutil/README +38 -0
- data/packages/gsutil/README.pkg +49 -0
- data/packages/gsutil/ReleaseNotes.txt +780 -0
- data/packages/gsutil/VERSION +1 -0
- data/packages/gsutil/boto/Changelog.rst +35 -0
- data/packages/gsutil/boto/LICENSE +18 -0
- data/packages/gsutil/boto/MANIFEST.in +12 -0
- data/packages/gsutil/boto/README.rst +163 -0
- data/packages/gsutil/boto/bin/asadmin +290 -0
- data/packages/gsutil/boto/bin/bundle_image +27 -0
- data/packages/gsutil/boto/bin/cfadmin +108 -0
- data/packages/gsutil/boto/bin/cq +89 -0
- data/packages/gsutil/boto/bin/cwutil +140 -0
- data/packages/gsutil/boto/bin/elbadmin +284 -0
- data/packages/gsutil/boto/bin/fetch_file +43 -0
- data/packages/gsutil/boto/bin/glacier +154 -0
- data/packages/gsutil/boto/bin/instance_events +145 -0
- data/packages/gsutil/boto/bin/kill_instance +35 -0
- data/packages/gsutil/boto/bin/launch_instance +252 -0
- data/packages/gsutil/boto/bin/list_instances +90 -0
- data/packages/gsutil/boto/bin/lss3 +77 -0
- data/packages/gsutil/boto/bin/mturk +465 -0
- data/packages/gsutil/boto/bin/pyami_sendmail +52 -0
- data/packages/gsutil/boto/bin/route53 +205 -0
- data/packages/gsutil/boto/bin/s3put +374 -0
- data/packages/gsutil/boto/bin/sdbadmin +194 -0
- data/packages/gsutil/boto/bin/taskadmin +116 -0
- data/packages/gsutil/boto/boto/__init__.py +793 -0
- data/packages/gsutil/boto/boto/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/auth.py +682 -0
- data/packages/gsutil/boto/boto/auth.pyc +0 -0
- data/packages/gsutil/boto/boto/auth_handler.py +58 -0
- data/packages/gsutil/boto/boto/auth_handler.pyc +0 -0
- data/packages/gsutil/boto/boto/beanstalk/__init__.py +65 -0
- data/packages/gsutil/boto/boto/beanstalk/exception.py +64 -0
- data/packages/gsutil/boto/boto/beanstalk/layer1.py +1153 -0
- data/packages/gsutil/boto/boto/beanstalk/response.py +703 -0
- data/packages/gsutil/boto/boto/beanstalk/wrapper.py +29 -0
- data/packages/gsutil/boto/boto/cacerts/__init__.py +22 -0
- data/packages/gsutil/boto/boto/cacerts/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/cacerts/cacerts.txt +633 -0
- data/packages/gsutil/boto/boto/cloudformation/__init__.py +68 -0
- data/packages/gsutil/boto/boto/cloudformation/connection.py +364 -0
- data/packages/gsutil/boto/boto/cloudformation/stack.py +360 -0
- data/packages/gsutil/boto/boto/cloudformation/template.py +43 -0
- data/packages/gsutil/boto/boto/cloudfront/__init__.py +324 -0
- data/packages/gsutil/boto/boto/cloudfront/distribution.py +745 -0
- data/packages/gsutil/boto/boto/cloudfront/exception.py +26 -0
- data/packages/gsutil/boto/boto/cloudfront/identity.py +122 -0
- data/packages/gsutil/boto/boto/cloudfront/invalidation.py +216 -0
- data/packages/gsutil/boto/boto/cloudfront/logging.py +38 -0
- data/packages/gsutil/boto/boto/cloudfront/object.py +48 -0
- data/packages/gsutil/boto/boto/cloudfront/origin.py +150 -0
- data/packages/gsutil/boto/boto/cloudfront/signers.py +60 -0
- data/packages/gsutil/boto/boto/cloudsearch/__init__.py +45 -0
- data/packages/gsutil/boto/boto/cloudsearch/document.py +265 -0
- data/packages/gsutil/boto/boto/cloudsearch/domain.py +394 -0
- data/packages/gsutil/boto/boto/cloudsearch/layer1.py +738 -0
- data/packages/gsutil/boto/boto/cloudsearch/layer2.py +67 -0
- data/packages/gsutil/boto/boto/cloudsearch/optionstatus.py +248 -0
- data/packages/gsutil/boto/boto/cloudsearch/search.py +365 -0
- data/packages/gsutil/boto/boto/cloudsearch/sourceattribute.py +75 -0
- data/packages/gsutil/boto/boto/compat.py +28 -0
- data/packages/gsutil/boto/boto/compat.pyc +0 -0
- data/packages/gsutil/boto/boto/connection.py +1081 -0
- data/packages/gsutil/boto/boto/connection.pyc +0 -0
- data/packages/gsutil/boto/boto/contrib/__init__.py +22 -0
- data/packages/gsutil/boto/boto/contrib/ymlmessage.py +52 -0
- data/packages/gsutil/boto/boto/core/README +58 -0
- data/packages/gsutil/boto/boto/core/__init__.py +23 -0
- data/packages/gsutil/boto/boto/core/auth.py +78 -0
- data/packages/gsutil/boto/boto/core/credentials.py +154 -0
- data/packages/gsutil/boto/boto/core/dictresponse.py +178 -0
- data/packages/gsutil/boto/boto/core/service.py +67 -0
- data/packages/gsutil/boto/boto/datapipeline/__init__.py +0 -0
- data/packages/gsutil/boto/boto/datapipeline/exceptions.py +42 -0
- data/packages/gsutil/boto/boto/datapipeline/layer1.py +546 -0
- data/packages/gsutil/boto/boto/dynamodb/__init__.py +66 -0
- data/packages/gsutil/boto/boto/dynamodb/batch.py +262 -0
- data/packages/gsutil/boto/boto/dynamodb/condition.py +170 -0
- data/packages/gsutil/boto/boto/dynamodb/exceptions.py +64 -0
- data/packages/gsutil/boto/boto/dynamodb/item.py +196 -0
- data/packages/gsutil/boto/boto/dynamodb/layer1.py +575 -0
- data/packages/gsutil/boto/boto/dynamodb/layer2.py +798 -0
- data/packages/gsutil/boto/boto/dynamodb/schema.py +112 -0
- data/packages/gsutil/boto/boto/dynamodb/table.py +540 -0
- data/packages/gsutil/boto/boto/dynamodb/types.py +326 -0
- data/packages/gsutil/boto/boto/ec2/__init__.py +96 -0
- data/packages/gsutil/boto/boto/ec2/address.py +103 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/__init__.py +781 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/activity.py +74 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/group.py +337 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/instance.py +60 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/launchconfig.py +209 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/policy.py +166 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/request.py +38 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/scheduled.py +60 -0
- data/packages/gsutil/boto/boto/ec2/autoscale/tag.py +84 -0
- data/packages/gsutil/boto/boto/ec2/blockdevicemapping.py +141 -0
- data/packages/gsutil/boto/boto/ec2/bundleinstance.py +78 -0
- data/packages/gsutil/boto/boto/ec2/buyreservation.py +84 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/__init__.py +603 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/alarm.py +316 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/datapoint.py +40 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/dimension.py +38 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/listelement.py +31 -0
- data/packages/gsutil/boto/boto/ec2/cloudwatch/metric.py +175 -0
- data/packages/gsutil/boto/boto/ec2/connection.py +3409 -0
- data/packages/gsutil/boto/boto/ec2/ec2object.py +107 -0
- data/packages/gsutil/boto/boto/ec2/elb/__init__.py +553 -0
- data/packages/gsutil/boto/boto/ec2/elb/healthcheck.py +89 -0
- data/packages/gsutil/boto/boto/ec2/elb/instancestate.py +62 -0
- data/packages/gsutil/boto/boto/ec2/elb/listelement.py +36 -0
- data/packages/gsutil/boto/boto/ec2/elb/listener.py +75 -0
- data/packages/gsutil/boto/boto/ec2/elb/loadbalancer.py +324 -0
- data/packages/gsutil/boto/boto/ec2/elb/policies.py +89 -0
- data/packages/gsutil/boto/boto/ec2/elb/securitygroup.py +38 -0
- data/packages/gsutil/boto/boto/ec2/group.py +39 -0
- data/packages/gsutil/boto/boto/ec2/image.py +350 -0
- data/packages/gsutil/boto/boto/ec2/instance.py +661 -0
- data/packages/gsutil/boto/boto/ec2/instanceinfo.py +51 -0
- data/packages/gsutil/boto/boto/ec2/instancestatus.py +207 -0
- data/packages/gsutil/boto/boto/ec2/keypair.py +113 -0
- data/packages/gsutil/boto/boto/ec2/launchspecification.py +105 -0
- data/packages/gsutil/boto/boto/ec2/networkinterface.py +247 -0
- data/packages/gsutil/boto/boto/ec2/placementgroup.py +51 -0
- data/packages/gsutil/boto/boto/ec2/regioninfo.py +34 -0
- data/packages/gsutil/boto/boto/ec2/reservedinstance.py +227 -0
- data/packages/gsutil/boto/boto/ec2/securitygroup.py +357 -0
- data/packages/gsutil/boto/boto/ec2/snapshot.py +170 -0
- data/packages/gsutil/boto/boto/ec2/spotdatafeedsubscription.py +63 -0
- data/packages/gsutil/boto/boto/ec2/spotinstancerequest.py +188 -0
- data/packages/gsutil/boto/boto/ec2/spotpricehistory.py +55 -0
- data/packages/gsutil/boto/boto/ec2/tag.py +87 -0
- data/packages/gsutil/boto/boto/ec2/vmtype.py +58 -0
- data/packages/gsutil/boto/boto/ec2/volume.py +293 -0
- data/packages/gsutil/boto/boto/ec2/volumestatus.py +200 -0
- data/packages/gsutil/boto/boto/ec2/zone.py +80 -0
- data/packages/gsutil/boto/boto/ecs/__init__.py +90 -0
- data/packages/gsutil/boto/boto/ecs/item.py +153 -0
- data/packages/gsutil/boto/boto/elasticache/__init__.py +62 -0
- data/packages/gsutil/boto/boto/elasticache/layer1.py +1252 -0
- data/packages/gsutil/boto/boto/elastictranscoder/__init__.py +62 -0
- data/packages/gsutil/boto/boto/elastictranscoder/exceptions.py +46 -0
- data/packages/gsutil/boto/boto/elastictranscoder/layer1.py +509 -0
- data/packages/gsutil/boto/boto/emr/__init__.py +73 -0
- data/packages/gsutil/boto/boto/emr/bootstrap_action.py +44 -0
- data/packages/gsutil/boto/boto/emr/connection.py +531 -0
- data/packages/gsutil/boto/boto/emr/emrobject.py +176 -0
- data/packages/gsutil/boto/boto/emr/instance_group.py +43 -0
- data/packages/gsutil/boto/boto/emr/step.py +281 -0
- data/packages/gsutil/boto/boto/exception.py +476 -0
- data/packages/gsutil/boto/boto/exception.pyc +0 -0
- data/packages/gsutil/boto/boto/file/README +49 -0
- data/packages/gsutil/boto/boto/file/__init__.py +28 -0
- data/packages/gsutil/boto/boto/file/bucket.py +112 -0
- data/packages/gsutil/boto/boto/file/connection.py +33 -0
- data/packages/gsutil/boto/boto/file/key.py +199 -0
- data/packages/gsutil/boto/boto/file/simpleresultset.py +30 -0
- data/packages/gsutil/boto/boto/fps/__init__.py +21 -0
- data/packages/gsutil/boto/boto/fps/connection.py +369 -0
- data/packages/gsutil/boto/boto/fps/exception.py +344 -0
- data/packages/gsutil/boto/boto/fps/response.py +175 -0
- data/packages/gsutil/boto/boto/glacier/__init__.py +57 -0
- data/packages/gsutil/boto/boto/glacier/concurrent.py +409 -0
- data/packages/gsutil/boto/boto/glacier/exceptions.py +58 -0
- data/packages/gsutil/boto/boto/glacier/job.py +152 -0
- data/packages/gsutil/boto/boto/glacier/layer1.py +637 -0
- data/packages/gsutil/boto/boto/glacier/layer2.py +93 -0
- data/packages/gsutil/boto/boto/glacier/response.py +48 -0
- data/packages/gsutil/boto/boto/glacier/utils.py +163 -0
- data/packages/gsutil/boto/boto/glacier/vault.py +387 -0
- data/packages/gsutil/boto/boto/glacier/writer.py +242 -0
- data/packages/gsutil/boto/boto/gs/__init__.py +22 -0
- data/packages/gsutil/boto/boto/gs/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/acl.py +304 -0
- data/packages/gsutil/boto/boto/gs/acl.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/bucket.py +870 -0
- data/packages/gsutil/boto/boto/gs/bucket.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/bucketlistresultset.py +64 -0
- data/packages/gsutil/boto/boto/gs/bucketlistresultset.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/connection.py +103 -0
- data/packages/gsutil/boto/boto/gs/connection.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/cors.py +169 -0
- data/packages/gsutil/boto/boto/gs/cors.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/key.py +704 -0
- data/packages/gsutil/boto/boto/gs/key.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/resumable_upload_handler.py +659 -0
- data/packages/gsutil/boto/boto/gs/resumable_upload_handler.pyc +0 -0
- data/packages/gsutil/boto/boto/gs/user.py +54 -0
- data/packages/gsutil/boto/boto/gs/user.pyc +0 -0
- data/packages/gsutil/boto/boto/handler.py +44 -0
- data/packages/gsutil/boto/boto/handler.pyc +0 -0
- data/packages/gsutil/boto/boto/https_connection.py +124 -0
- data/packages/gsutil/boto/boto/https_connection.pyc +0 -0
- data/packages/gsutil/boto/boto/iam/__init__.py +74 -0
- data/packages/gsutil/boto/boto/iam/connection.py +1317 -0
- data/packages/gsutil/boto/boto/iam/summarymap.py +42 -0
- data/packages/gsutil/boto/boto/jsonresponse.py +163 -0
- data/packages/gsutil/boto/boto/jsonresponse.pyc +0 -0
- data/packages/gsutil/boto/boto/manage/__init__.py +23 -0
- data/packages/gsutil/boto/boto/manage/cmdshell.py +241 -0
- data/packages/gsutil/boto/boto/manage/propget.py +64 -0
- data/packages/gsutil/boto/boto/manage/server.py +556 -0
- data/packages/gsutil/boto/boto/manage/task.py +175 -0
- data/packages/gsutil/boto/boto/manage/test_manage.py +34 -0
- data/packages/gsutil/boto/boto/manage/volume.py +420 -0
- data/packages/gsutil/boto/boto/mashups/__init__.py +23 -0
- data/packages/gsutil/boto/boto/mashups/interactive.py +97 -0
- data/packages/gsutil/boto/boto/mashups/iobject.py +115 -0
- data/packages/gsutil/boto/boto/mashups/order.py +211 -0
- data/packages/gsutil/boto/boto/mashups/server.py +395 -0
- data/packages/gsutil/boto/boto/mturk/__init__.py +23 -0
- data/packages/gsutil/boto/boto/mturk/connection.py +1027 -0
- data/packages/gsutil/boto/boto/mturk/layoutparam.py +55 -0
- data/packages/gsutil/boto/boto/mturk/notification.py +103 -0
- data/packages/gsutil/boto/boto/mturk/price.py +48 -0
- data/packages/gsutil/boto/boto/mturk/qualification.py +137 -0
- data/packages/gsutil/boto/boto/mturk/question.py +455 -0
- data/packages/gsutil/boto/boto/mws/__init__.py +21 -0
- data/packages/gsutil/boto/boto/mws/connection.py +813 -0
- data/packages/gsutil/boto/boto/mws/exception.py +75 -0
- data/packages/gsutil/boto/boto/mws/response.py +655 -0
- data/packages/gsutil/boto/boto/plugin.py +90 -0
- data/packages/gsutil/boto/boto/plugin.pyc +0 -0
- data/packages/gsutil/boto/boto/provider.py +337 -0
- data/packages/gsutil/boto/boto/provider.pyc +0 -0
- data/packages/gsutil/boto/boto/pyami/__init__.py +22 -0
- data/packages/gsutil/boto/boto/pyami/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/pyami/bootstrap.py +134 -0
- data/packages/gsutil/boto/boto/pyami/config.py +229 -0
- data/packages/gsutil/boto/boto/pyami/config.pyc +0 -0
- data/packages/gsutil/boto/boto/pyami/copybot.cfg +60 -0
- data/packages/gsutil/boto/boto/pyami/copybot.py +97 -0
- data/packages/gsutil/boto/boto/pyami/helloworld.py +28 -0
- data/packages/gsutil/boto/boto/pyami/installers/__init__.py +64 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/__init__.py +22 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/apache.py +43 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/ebs.py +238 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/installer.py +96 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/mysql.py +109 -0
- data/packages/gsutil/boto/boto/pyami/installers/ubuntu/trac.py +139 -0
- data/packages/gsutil/boto/boto/pyami/launch_ami.py +178 -0
- data/packages/gsutil/boto/boto/pyami/scriptbase.py +44 -0
- data/packages/gsutil/boto/boto/pyami/startup.py +60 -0
- data/packages/gsutil/boto/boto/rds/__init__.py +1194 -0
- data/packages/gsutil/boto/boto/rds/dbinstance.py +357 -0
- data/packages/gsutil/boto/boto/rds/dbsecuritygroup.py +177 -0
- data/packages/gsutil/boto/boto/rds/dbsnapshot.py +108 -0
- data/packages/gsutil/boto/boto/rds/event.py +49 -0
- data/packages/gsutil/boto/boto/rds/parametergroup.py +201 -0
- data/packages/gsutil/boto/boto/rds/regioninfo.py +32 -0
- data/packages/gsutil/boto/boto/regioninfo.py +63 -0
- data/packages/gsutil/boto/boto/regioninfo.pyc +0 -0
- data/packages/gsutil/boto/boto/resultset.py +169 -0
- data/packages/gsutil/boto/boto/resultset.pyc +0 -0
- data/packages/gsutil/boto/boto/roboto/__init__.py +1 -0
- data/packages/gsutil/boto/boto/roboto/awsqueryrequest.py +504 -0
- data/packages/gsutil/boto/boto/roboto/awsqueryservice.py +121 -0
- data/packages/gsutil/boto/boto/roboto/param.py +147 -0
- data/packages/gsutil/boto/boto/route53/__init__.py +75 -0
- data/packages/gsutil/boto/boto/route53/connection.py +403 -0
- data/packages/gsutil/boto/boto/route53/exception.py +27 -0
- data/packages/gsutil/boto/boto/route53/hostedzone.py +56 -0
- data/packages/gsutil/boto/boto/route53/record.py +306 -0
- data/packages/gsutil/boto/boto/route53/status.py +42 -0
- data/packages/gsutil/boto/boto/route53/zone.py +412 -0
- data/packages/gsutil/boto/boto/s3/__init__.py +84 -0
- data/packages/gsutil/boto/boto/s3/__init__.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/acl.py +164 -0
- data/packages/gsutil/boto/boto/s3/acl.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/bucket.py +1634 -0
- data/packages/gsutil/boto/boto/s3/bucket.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/bucketlistresultset.py +139 -0
- data/packages/gsutil/boto/boto/s3/bucketlistresultset.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/bucketlogging.py +83 -0
- data/packages/gsutil/boto/boto/s3/bucketlogging.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/connection.py +540 -0
- data/packages/gsutil/boto/boto/s3/connection.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/cors.py +210 -0
- data/packages/gsutil/boto/boto/s3/cors.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/deletemarker.py +55 -0
- data/packages/gsutil/boto/boto/s3/deletemarker.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/key.py +1712 -0
- data/packages/gsutil/boto/boto/s3/key.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/keyfile.py +134 -0
- data/packages/gsutil/boto/boto/s3/keyfile.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/lifecycle.py +231 -0
- data/packages/gsutil/boto/boto/s3/lifecycle.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/multidelete.py +138 -0
- data/packages/gsutil/boto/boto/s3/multidelete.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/multipart.py +315 -0
- data/packages/gsutil/boto/boto/s3/multipart.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/prefix.py +42 -0
- data/packages/gsutil/boto/boto/s3/prefix.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/resumable_download_handler.py +339 -0
- data/packages/gsutil/boto/boto/s3/resumable_download_handler.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/tagging.py +71 -0
- data/packages/gsutil/boto/boto/s3/tagging.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/user.py +49 -0
- data/packages/gsutil/boto/boto/s3/user.pyc +0 -0
- data/packages/gsutil/boto/boto/s3/website.py +237 -0
- data/packages/gsutil/boto/boto/s3/website.pyc +0 -0
- data/packages/gsutil/boto/boto/sdb/__init__.py +67 -0
- data/packages/gsutil/boto/boto/sdb/connection.py +617 -0
- data/packages/gsutil/boto/boto/sdb/db/__init__.py +20 -0
- data/packages/gsutil/boto/boto/sdb/db/blob.py +75 -0
- data/packages/gsutil/boto/boto/sdb/db/key.py +59 -0
- data/packages/gsutil/boto/boto/sdb/db/manager/__init__.py +85 -0
- data/packages/gsutil/boto/boto/sdb/db/manager/sdbmanager.py +732 -0
- data/packages/gsutil/boto/boto/sdb/db/manager/xmlmanager.py +517 -0
- data/packages/gsutil/boto/boto/sdb/db/model.py +294 -0
- data/packages/gsutil/boto/boto/sdb/db/property.py +703 -0
- data/packages/gsutil/boto/boto/sdb/db/query.py +85 -0
- data/packages/gsutil/boto/boto/sdb/db/sequence.py +226 -0
- data/packages/gsutil/boto/boto/sdb/db/test_db.py +231 -0
- data/packages/gsutil/boto/boto/sdb/domain.py +377 -0
- data/packages/gsutil/boto/boto/sdb/item.py +181 -0
- data/packages/gsutil/boto/boto/sdb/queryresultset.py +92 -0
- data/packages/gsutil/boto/boto/sdb/regioninfo.py +32 -0
- data/packages/gsutil/boto/boto/services/__init__.py +23 -0
- data/packages/gsutil/boto/boto/services/bs.py +179 -0
- data/packages/gsutil/boto/boto/services/message.py +58 -0
- data/packages/gsutil/boto/boto/services/result.py +136 -0
- data/packages/gsutil/boto/boto/services/service.py +161 -0
- data/packages/gsutil/boto/boto/services/servicedef.py +91 -0
- data/packages/gsutil/boto/boto/services/sonofmmm.cfg +43 -0
- data/packages/gsutil/boto/boto/services/sonofmmm.py +81 -0
- data/packages/gsutil/boto/boto/services/submit.py +88 -0
- data/packages/gsutil/boto/boto/ses/__init__.py +54 -0
- data/packages/gsutil/boto/boto/ses/connection.py +521 -0
- data/packages/gsutil/boto/boto/ses/exceptions.py +77 -0
- data/packages/gsutil/boto/boto/sns/__init__.py +78 -0
- data/packages/gsutil/boto/boto/sns/connection.py +431 -0
- data/packages/gsutil/boto/boto/sqs/__init__.py +56 -0
- data/packages/gsutil/boto/boto/sqs/attributes.py +46 -0
- data/packages/gsutil/boto/boto/sqs/batchresults.py +95 -0
- data/packages/gsutil/boto/boto/sqs/connection.py +417 -0
- data/packages/gsutil/boto/boto/sqs/jsonmessage.py +43 -0
- data/packages/gsutil/boto/boto/sqs/message.py +253 -0
- data/packages/gsutil/boto/boto/sqs/queue.py +478 -0
- data/packages/gsutil/boto/boto/sqs/regioninfo.py +32 -0
- data/packages/gsutil/boto/boto/storage_uri.py +835 -0
- data/packages/gsutil/boto/boto/storage_uri.pyc +0 -0
- data/packages/gsutil/boto/boto/sts/__init__.py +55 -0
- data/packages/gsutil/boto/boto/sts/connection.py +207 -0
- data/packages/gsutil/boto/boto/sts/credentials.py +215 -0
- data/packages/gsutil/boto/boto/swf/__init__.py +60 -0
- data/packages/gsutil/boto/boto/swf/exceptions.py +44 -0
- data/packages/gsutil/boto/boto/swf/layer1.py +1512 -0
- data/packages/gsutil/boto/boto/swf/layer1_decisions.py +287 -0
- data/packages/gsutil/boto/boto/swf/layer2.py +342 -0
- data/packages/gsutil/boto/boto/utils.py +927 -0
- data/packages/gsutil/boto/boto/utils.pyc +0 -0
- data/packages/gsutil/boto/boto/vpc/__init__.py +910 -0
- data/packages/gsutil/boto/boto/vpc/customergateway.py +54 -0
- data/packages/gsutil/boto/boto/vpc/dhcpoptions.py +72 -0
- data/packages/gsutil/boto/boto/vpc/internetgateway.py +72 -0
- data/packages/gsutil/boto/boto/vpc/routetable.py +109 -0
- data/packages/gsutil/boto/boto/vpc/subnet.py +57 -0
- data/packages/gsutil/boto/boto/vpc/vpc.py +54 -0
- data/packages/gsutil/boto/boto/vpc/vpnconnection.py +60 -0
- data/packages/gsutil/boto/boto/vpc/vpngateway.py +83 -0
- data/packages/gsutil/boto/docs/BotoCheatSheet.pdf +0 -0
- data/packages/gsutil/boto/docs/Makefile +89 -0
- data/packages/gsutil/boto/docs/make.bat +113 -0
- data/packages/gsutil/boto/docs/source/_templates/layout.html +3 -0
- data/packages/gsutil/boto/docs/source/autoscale_tut.rst +220 -0
- data/packages/gsutil/boto/docs/source/boto_config_tut.rst +125 -0
- data/packages/gsutil/boto/docs/source/boto_theme/static/boto.css_t +239 -0
- data/packages/gsutil/boto/docs/source/boto_theme/static/pygments.css +61 -0
- data/packages/gsutil/boto/docs/source/boto_theme/theme.conf +3 -0
- data/packages/gsutil/boto/docs/source/cloudfront_tut.rst +196 -0
- data/packages/gsutil/boto/docs/source/cloudsearch_tut.rst +411 -0
- data/packages/gsutil/boto/docs/source/cloudwatch_tut.rst +116 -0
- data/packages/gsutil/boto/docs/source/conf.py +32 -0
- data/packages/gsutil/boto/docs/source/contributing.rst +204 -0
- data/packages/gsutil/boto/docs/source/documentation.rst +59 -0
- data/packages/gsutil/boto/docs/source/dynamodb_tut.rst +339 -0
- data/packages/gsutil/boto/docs/source/ec2_tut.rst +86 -0
- data/packages/gsutil/boto/docs/source/elb_tut.rst +257 -0
- data/packages/gsutil/boto/docs/source/emr_tut.rst +108 -0
- data/packages/gsutil/boto/docs/source/index.rst +146 -0
- data/packages/gsutil/boto/docs/source/rds_tut.rst +108 -0
- data/packages/gsutil/boto/docs/source/ref/autoscale.rst +62 -0
- data/packages/gsutil/boto/docs/source/ref/beanstalk.rst +26 -0
- data/packages/gsutil/boto/docs/source/ref/boto.rst +47 -0
- data/packages/gsutil/boto/docs/source/ref/cloudformation.rst +34 -0
- data/packages/gsutil/boto/docs/source/ref/cloudfront.rst +68 -0
- data/packages/gsutil/boto/docs/source/ref/cloudsearch.rst +59 -0
- data/packages/gsutil/boto/docs/source/ref/cloudwatch.rst +27 -0
- data/packages/gsutil/boto/docs/source/ref/contrib.rst +32 -0
- data/packages/gsutil/boto/docs/source/ref/datapipeline.rst +26 -0
- data/packages/gsutil/boto/docs/source/ref/dynamodb.rst +61 -0
- data/packages/gsutil/boto/docs/source/ref/ec2.rst +140 -0
- data/packages/gsutil/boto/docs/source/ref/ecs.rst +19 -0
- data/packages/gsutil/boto/docs/source/ref/elasticache.rst +19 -0
- data/packages/gsutil/boto/docs/source/ref/elastictranscoder.rst +26 -0
- data/packages/gsutil/boto/docs/source/ref/elb.rst +47 -0
- data/packages/gsutil/boto/docs/source/ref/emr.rst +34 -0
- data/packages/gsutil/boto/docs/source/ref/file.rst +34 -0
- data/packages/gsutil/boto/docs/source/ref/fps.rst +19 -0
- data/packages/gsutil/boto/docs/source/ref/glacier.rst +63 -0
- data/packages/gsutil/boto/docs/source/ref/gs.rst +72 -0
- data/packages/gsutil/boto/docs/source/ref/iam.rst +27 -0
- data/packages/gsutil/boto/docs/source/ref/index.rst +40 -0
- data/packages/gsutil/boto/docs/source/ref/manage.rst +47 -0
- data/packages/gsutil/boto/docs/source/ref/mturk.rst +54 -0
- data/packages/gsutil/boto/docs/source/ref/mws.rst +33 -0
- data/packages/gsutil/boto/docs/source/ref/pyami.rst +103 -0
- data/packages/gsutil/boto/docs/source/ref/rds.rst +47 -0
- data/packages/gsutil/boto/docs/source/ref/route53.rst +34 -0
- data/packages/gsutil/boto/docs/source/ref/s3.rst +111 -0
- data/packages/gsutil/boto/docs/source/ref/sdb.rst +45 -0
- data/packages/gsutil/boto/docs/source/ref/sdb_db.rst +83 -0
- data/packages/gsutil/boto/docs/source/ref/services.rst +61 -0
- data/packages/gsutil/boto/docs/source/ref/ses.rst +21 -0
- data/packages/gsutil/boto/docs/source/ref/sns.rst +17 -0
- data/packages/gsutil/boto/docs/source/ref/sqs.rst +61 -0
- data/packages/gsutil/boto/docs/source/ref/sts.rst +25 -0
- data/packages/gsutil/boto/docs/source/ref/swf.rst +22 -0
- data/packages/gsutil/boto/docs/source/ref/vpc.rst +54 -0
- data/packages/gsutil/boto/docs/source/s3_tut.rst +450 -0
- data/packages/gsutil/boto/docs/source/security_groups.rst +82 -0
- data/packages/gsutil/boto/docs/source/ses_tut.rst +171 -0
- data/packages/gsutil/boto/docs/source/simpledb_tut.rst +188 -0
- data/packages/gsutil/boto/docs/source/sqs_tut.rst +246 -0
- data/packages/gsutil/boto/docs/source/vpc_tut.rst +100 -0
- data/packages/gsutil/boto/pylintrc +305 -0
- data/packages/gsutil/boto/requirements.txt +10 -0
- data/packages/gsutil/boto/setup.py +89 -0
- data/packages/gsutil/boto/tests/__init__.py +20 -0
- data/packages/gsutil/boto/tests/db/test_lists.py +96 -0
- data/packages/gsutil/boto/tests/db/test_password.py +128 -0
- data/packages/gsutil/boto/tests/db/test_query.py +152 -0
- data/packages/gsutil/boto/tests/db/test_sequence.py +109 -0
- data/packages/gsutil/boto/tests/devpay/__init__.py +0 -0
- data/packages/gsutil/boto/tests/devpay/test_s3.py +181 -0
- data/packages/gsutil/boto/tests/fps/__init__.py +0 -0
- data/packages/gsutil/boto/tests/fps/test.py +100 -0
- data/packages/gsutil/boto/tests/fps/test_verify_signature.py +12 -0
- data/packages/gsutil/boto/tests/integration/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/beanstalk/test_wrapper.py +209 -0
- data/packages/gsutil/boto/tests/integration/cloudformation/__init__.py +21 -0
- data/packages/gsutil/boto/tests/integration/cloudformation/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/cloudformation/test_connection.py +110 -0
- data/packages/gsutil/boto/tests/integration/cloudsearch/__init__.py +21 -0
- data/packages/gsutil/boto/tests/integration/cloudsearch/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/datapipeline/test_layer1.py +122 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/test_layer1.py +266 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/test_layer2.py +484 -0
- data/packages/gsutil/boto/tests/integration/dynamodb/test_table.py +84 -0
- data/packages/gsutil/boto/tests/integration/ec2/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/ec2/autoscale/__init__.py +21 -0
- data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_connection.py +167 -0
- data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_connection.py +277 -0
- data/packages/gsutil/boto/tests/integration/ec2/elb/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/ec2/elb/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ec2/elb/test_connection.py +130 -0
- data/packages/gsutil/boto/tests/integration/ec2/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ec2/test_connection.py +192 -0
- data/packages/gsutil/boto/tests/integration/ec2/vpc/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/ec2/vpc/test_connection.py +95 -0
- data/packages/gsutil/boto/tests/integration/elasticache/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/elasticache/test_layer1.py +67 -0
- data/packages/gsutil/boto/tests/integration/elastictranscoder/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/elastictranscoder/test_cert_verification.py +35 -0
- data/packages/gsutil/boto/tests/integration/elastictranscoder/test_layer1.py +115 -0
- data/packages/gsutil/boto/tests/integration/emr/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/emr/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/glacier/__init__.py +22 -0
- data/packages/gsutil/boto/tests/integration/glacier/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/glacier/test_layer1.py +44 -0
- data/packages/gsutil/boto/tests/integration/glacier/test_layer2.py +45 -0
- data/packages/gsutil/boto/tests/integration/gs/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/gs/cb_test_harness.py +71 -0
- data/packages/gsutil/boto/tests/integration/gs/test_basic.py +379 -0
- data/packages/gsutil/boto/tests/integration/gs/test_generation_conditionals.py +399 -0
- data/packages/gsutil/boto/tests/integration/gs/test_resumable_downloads.py +358 -0
- data/packages/gsutil/boto/tests/integration/gs/test_resumable_uploads.py +525 -0
- data/packages/gsutil/boto/tests/integration/gs/test_storage_uri.py +125 -0
- data/packages/gsutil/boto/tests/integration/gs/test_versioning.py +268 -0
- data/packages/gsutil/boto/tests/integration/gs/testcase.py +116 -0
- data/packages/gsutil/boto/tests/integration/gs/util.py +63 -0
- data/packages/gsutil/boto/tests/integration/iam/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/iam/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/mws/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/mws/test.py +100 -0
- data/packages/gsutil/boto/tests/integration/rds/__init__.py +21 -0
- data/packages/gsutil/boto/tests/integration/rds/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/route53/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/route53/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/route53/test_zone.py +132 -0
- data/packages/gsutil/boto/tests/integration/s3/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/s3/mock_storage_service.py +589 -0
- data/packages/gsutil/boto/tests/integration/s3/other_cacerts.txt +70 -0
- data/packages/gsutil/boto/tests/integration/s3/test_bucket.py +263 -0
- data/packages/gsutil/boto/tests/integration/s3/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/s3/test_connection.py +245 -0
- data/packages/gsutil/boto/tests/integration/s3/test_cors.py +78 -0
- data/packages/gsutil/boto/tests/integration/s3/test_encryption.py +115 -0
- data/packages/gsutil/boto/tests/integration/s3/test_https_cert_validation.py +141 -0
- data/packages/gsutil/boto/tests/integration/s3/test_key.py +375 -0
- data/packages/gsutil/boto/tests/integration/s3/test_mfa.py +95 -0
- data/packages/gsutil/boto/tests/integration/s3/test_multidelete.py +181 -0
- data/packages/gsutil/boto/tests/integration/s3/test_multipart.py +139 -0
- data/packages/gsutil/boto/tests/integration/s3/test_pool.py +246 -0
- data/packages/gsutil/boto/tests/integration/s3/test_versioning.py +158 -0
- data/packages/gsutil/boto/tests/integration/sdb/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/sdb/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/sdb/test_connection.py +119 -0
- data/packages/gsutil/boto/tests/integration/ses/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/ses/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/ses/test_connection.py +38 -0
- data/packages/gsutil/boto/tests/integration/sns/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/sns/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/sqs/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/sqs/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/sqs/test_connection.py +217 -0
- data/packages/gsutil/boto/tests/integration/sts/__init__.py +20 -0
- data/packages/gsutil/boto/tests/integration/sts/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/sts/test_session_token.py +65 -0
- data/packages/gsutil/boto/tests/integration/swf/__init__.py +0 -0
- data/packages/gsutil/boto/tests/integration/swf/test_cert_verification.py +40 -0
- data/packages/gsutil/boto/tests/integration/swf/test_layer1.py +246 -0
- data/packages/gsutil/boto/tests/integration/swf/test_layer1_workflow_execution.py +173 -0
- data/packages/gsutil/boto/tests/mturk/__init__.py +0 -0
- data/packages/gsutil/boto/tests/mturk/_init_environment.py +28 -0
- data/packages/gsutil/boto/tests/mturk/all_tests.py +24 -0
- data/packages/gsutil/boto/tests/mturk/cleanup_tests.py +47 -0
- data/packages/gsutil/boto/tests/mturk/common.py +45 -0
- data/packages/gsutil/boto/tests/mturk/create_free_text_question_regex.doctest +100 -0
- data/packages/gsutil/boto/tests/mturk/create_hit.doctest +92 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_binary.doctest +94 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_external.py +21 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_from_hit_type.doctest +103 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_test.py +21 -0
- data/packages/gsutil/boto/tests/mturk/create_hit_with_qualifications.py +16 -0
- data/packages/gsutil/boto/tests/mturk/hit_persistence.py +27 -0
- data/packages/gsutil/boto/tests/mturk/mocks.py +11 -0
- data/packages/gsutil/boto/tests/mturk/reviewable_hits.doctest +129 -0
- data/packages/gsutil/boto/tests/mturk/run-doctest.py +13 -0
- data/packages/gsutil/boto/tests/mturk/search_hits.doctest +16 -0
- data/packages/gsutil/boto/tests/mturk/selenium_support.py +61 -0
- data/packages/gsutil/boto/tests/mturk/support.py +7 -0
- data/packages/gsutil/boto/tests/mturk/test_disable_hit.py +11 -0
- data/packages/gsutil/boto/tests/test.py +59 -0
- data/packages/gsutil/boto/tests/unit/__init__.py +79 -0
- data/packages/gsutil/boto/tests/unit/auth/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/auth/test_sigv4.py +73 -0
- data/packages/gsutil/boto/tests/unit/beanstalk/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/beanstalk/test_layer1.py +128 -0
- data/packages/gsutil/boto/tests/unit/cloudformation/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/cloudformation/test_connection.py +605 -0
- data/packages/gsutil/boto/tests/unit/cloudformation/test_stack.py +63 -0
- data/packages/gsutil/boto/tests/unit/cloudfront/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py +113 -0
- data/packages/gsutil/boto/tests/unit/cloudfront/test_signed_urls.py +354 -0
- data/packages/gsutil/boto/tests/unit/cloudsearch/__init__.py +1 -0
- data/packages/gsutil/boto/tests/unit/cloudsearch/test_connection.py +241 -0
- data/packages/gsutil/boto/tests/unit/cloudsearch/test_document.py +324 -0
- data/packages/gsutil/boto/tests/unit/cloudsearch/test_search.py +325 -0
- data/packages/gsutil/boto/tests/unit/dynamodb/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/dynamodb/test_batch.py +103 -0
- data/packages/gsutil/boto/tests/unit/dynamodb/test_layer2.py +119 -0
- data/packages/gsutil/boto/tests/unit/dynamodb/test_types.py +82 -0
- data/packages/gsutil/boto/tests/unit/ec2/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/ec2/autoscale/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/ec2/autoscale/test_group.py +162 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_address.py +39 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_blockdevicemapping.py +79 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_connection.py +480 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_instance.py +243 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_networkinterface.py +140 -0
- data/packages/gsutil/boto/tests/unit/ec2/test_volume.py +248 -0
- data/packages/gsutil/boto/tests/unit/emr/test_emr_responses.py +373 -0
- data/packages/gsutil/boto/tests/unit/glacier/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_concurrent.py +120 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_job.py +60 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_layer1.py +98 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_layer2.py +266 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_utils.py +116 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_vault.py +100 -0
- data/packages/gsutil/boto/tests/unit/glacier/test_writer.py +185 -0
- data/packages/gsutil/boto/tests/unit/provider/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/provider/test_provider.py +176 -0
- data/packages/gsutil/boto/tests/unit/rds/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/rds/test_connection.py +131 -0
- data/packages/gsutil/boto/tests/unit/s3/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/s3/test_cors_configuration.py +77 -0
- data/packages/gsutil/boto/tests/unit/s3/test_key.py +75 -0
- data/packages/gsutil/boto/tests/unit/s3/test_keyfile.py +101 -0
- data/packages/gsutil/boto/tests/unit/s3/test_lifecycle.py +97 -0
- data/packages/gsutil/boto/tests/unit/s3/test_tagging.py +47 -0
- data/packages/gsutil/boto/tests/unit/s3/test_uri.py +257 -0
- data/packages/gsutil/boto/tests/unit/s3/test_website.py +188 -0
- data/packages/gsutil/boto/tests/unit/sns/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/sns/test_connection.py +99 -0
- data/packages/gsutil/boto/tests/unit/sqs/__init__.py +0 -0
- data/packages/gsutil/boto/tests/unit/sqs/test_connection.py +98 -0
- data/packages/gsutil/boto/tests/unit/sqs/test_queue.py +40 -0
- data/packages/gsutil/boto/tests/unit/sts/test_connection.py +74 -0
- data/packages/gsutil/boto/tests/unit/test_connection.py +60 -0
- data/packages/gsutil/boto/tests/unit/utils/test_utils.py +109 -0
- data/packages/gsutil/boto/tox.ini +8 -0
- data/packages/gsutil/gslib/README +5 -0
- data/packages/gsutil/gslib/__init__.py +22 -0
- data/packages/gsutil/gslib/__init__.pyc +0 -0
- data/packages/gsutil/gslib/addlhelp/__init__.py +15 -0
- data/packages/gsutil/gslib/addlhelp/acls.py +234 -0
- data/packages/gsutil/gslib/addlhelp/anon.py +57 -0
- data/packages/gsutil/gslib/addlhelp/command_opts.py +116 -0
- data/packages/gsutil/gslib/addlhelp/dev.py +139 -0
- data/packages/gsutil/gslib/addlhelp/metadata.py +186 -0
- data/packages/gsutil/gslib/addlhelp/naming.py +173 -0
- data/packages/gsutil/gslib/addlhelp/prod.py +160 -0
- data/packages/gsutil/gslib/addlhelp/projects.py +130 -0
- data/packages/gsutil/gslib/addlhelp/subdirs.py +110 -0
- data/packages/gsutil/gslib/addlhelp/support.py +86 -0
- data/packages/gsutil/gslib/addlhelp/versioning.py +242 -0
- data/packages/gsutil/gslib/addlhelp/wildcards.py +170 -0
- data/packages/gsutil/gslib/bucket_listing_ref.py +175 -0
- data/packages/gsutil/gslib/bucket_listing_ref.pyc +0 -0
- data/packages/gsutil/gslib/command.py +722 -0
- data/packages/gsutil/gslib/command.pyc +0 -0
- data/packages/gsutil/gslib/command_runner.py +101 -0
- data/packages/gsutil/gslib/command_runner.pyc +0 -0
- data/packages/gsutil/gslib/commands/__init__.py +15 -0
- data/packages/gsutil/gslib/commands/__init__.pyc +0 -0
- data/packages/gsutil/gslib/commands/cat.py +131 -0
- data/packages/gsutil/gslib/commands/cat.pyc +0 -0
- data/packages/gsutil/gslib/commands/chacl.py +532 -0
- data/packages/gsutil/gslib/commands/chacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/config.py +694 -0
- data/packages/gsutil/gslib/commands/config.pyc +0 -0
- data/packages/gsutil/gslib/commands/cp.py +1818 -0
- data/packages/gsutil/gslib/commands/cp.pyc +0 -0
- data/packages/gsutil/gslib/commands/disablelogging.py +101 -0
- data/packages/gsutil/gslib/commands/disablelogging.pyc +0 -0
- data/packages/gsutil/gslib/commands/enablelogging.py +149 -0
- data/packages/gsutil/gslib/commands/enablelogging.pyc +0 -0
- data/packages/gsutil/gslib/commands/getacl.py +82 -0
- data/packages/gsutil/gslib/commands/getacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/getcors.py +121 -0
- data/packages/gsutil/gslib/commands/getcors.pyc +0 -0
- data/packages/gsutil/gslib/commands/getdefacl.py +86 -0
- data/packages/gsutil/gslib/commands/getdefacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/getlogging.py +137 -0
- data/packages/gsutil/gslib/commands/getlogging.pyc +0 -0
- data/packages/gsutil/gslib/commands/getversioning.py +116 -0
- data/packages/gsutil/gslib/commands/getversioning.pyc +0 -0
- data/packages/gsutil/gslib/commands/getwebcfg.py +122 -0
- data/packages/gsutil/gslib/commands/getwebcfg.pyc +0 -0
- data/packages/gsutil/gslib/commands/help.py +218 -0
- data/packages/gsutil/gslib/commands/help.pyc +0 -0
- data/packages/gsutil/gslib/commands/ls.py +578 -0
- data/packages/gsutil/gslib/commands/ls.pyc +0 -0
- data/packages/gsutil/gslib/commands/mb.py +172 -0
- data/packages/gsutil/gslib/commands/mb.pyc +0 -0
- data/packages/gsutil/gslib/commands/mv.py +159 -0
- data/packages/gsutil/gslib/commands/mv.pyc +0 -0
- data/packages/gsutil/gslib/commands/perfdiag.py +903 -0
- data/packages/gsutil/gslib/commands/perfdiag.pyc +0 -0
- data/packages/gsutil/gslib/commands/rb.py +113 -0
- data/packages/gsutil/gslib/commands/rb.pyc +0 -0
- data/packages/gsutil/gslib/commands/rm.py +239 -0
- data/packages/gsutil/gslib/commands/rm.pyc +0 -0
- data/packages/gsutil/gslib/commands/setacl.py +138 -0
- data/packages/gsutil/gslib/commands/setacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/setcors.py +145 -0
- data/packages/gsutil/gslib/commands/setcors.pyc +0 -0
- data/packages/gsutil/gslib/commands/setdefacl.py +105 -0
- data/packages/gsutil/gslib/commands/setdefacl.pyc +0 -0
- data/packages/gsutil/gslib/commands/setmeta.py +428 -0
- data/packages/gsutil/gslib/commands/setmeta.pyc +0 -0
- data/packages/gsutil/gslib/commands/setversioning.py +114 -0
- data/packages/gsutil/gslib/commands/setversioning.pyc +0 -0
- data/packages/gsutil/gslib/commands/setwebcfg.py +190 -0
- data/packages/gsutil/gslib/commands/setwebcfg.pyc +0 -0
- data/packages/gsutil/gslib/commands/test.py +228 -0
- data/packages/gsutil/gslib/commands/test.pyc +0 -0
- data/packages/gsutil/gslib/commands/update.py +305 -0
- data/packages/gsutil/gslib/commands/update.pyc +0 -0
- data/packages/gsutil/gslib/commands/version.py +150 -0
- data/packages/gsutil/gslib/commands/version.pyc +0 -0
- data/packages/gsutil/gslib/exception.py +76 -0
- data/packages/gsutil/gslib/exception.pyc +0 -0
- data/packages/gsutil/gslib/help_provider.py +81 -0
- data/packages/gsutil/gslib/help_provider.pyc +0 -0
- data/packages/gsutil/gslib/name_expansion.py +550 -0
- data/packages/gsutil/gslib/name_expansion.pyc +0 -0
- data/packages/gsutil/gslib/no_op_auth_plugin.py +30 -0
- data/packages/gsutil/gslib/plurality_checkable_iterator.py +56 -0
- data/packages/gsutil/gslib/plurality_checkable_iterator.pyc +0 -0
- data/packages/gsutil/gslib/project_id.py +67 -0
- data/packages/gsutil/gslib/project_id.pyc +0 -0
- data/packages/gsutil/gslib/storage_uri_builder.py +56 -0
- data/packages/gsutil/gslib/storage_uri_builder.pyc +0 -0
- data/packages/gsutil/gslib/tests/__init__.py +15 -0
- data/packages/gsutil/gslib/tests/__init__.pyc +0 -0
- data/packages/gsutil/gslib/tests/test_chacl.py +236 -0
- data/packages/gsutil/gslib/tests/test_cp.py +267 -0
- data/packages/gsutil/gslib/tests/test_data/test.gif +0 -0
- data/packages/gsutil/gslib/tests/test_data/test.mp3 +0 -0
- data/packages/gsutil/gslib/tests/test_ls.py +66 -0
- data/packages/gsutil/gslib/tests/test_mv.py +69 -0
- data/packages/gsutil/gslib/tests/test_naming.py +989 -0
- data/packages/gsutil/gslib/tests/test_perfdiag.py +41 -0
- data/packages/gsutil/gslib/tests/test_plurality_checkable_iterator.py +67 -0
- data/packages/gsutil/gslib/tests/test_rm.py +143 -0
- data/packages/gsutil/gslib/tests/test_setacl.py +152 -0
- data/packages/gsutil/gslib/tests/test_setcors.py +168 -0
- data/packages/gsutil/gslib/tests/test_setmeta.py +91 -0
- data/packages/gsutil/gslib/tests/test_setversioning.py +44 -0
- data/packages/gsutil/gslib/tests/test_setwebcfg.py +63 -0
- data/packages/gsutil/gslib/tests/test_thread_pool.py +92 -0
- data/packages/gsutil/gslib/tests/test_wildcard_iterator.py +364 -0
- data/packages/gsutil/gslib/tests/testcase/__init__.py +18 -0
- data/packages/gsutil/gslib/tests/testcase/base.py +89 -0
- data/packages/gsutil/gslib/tests/testcase/integration_testcase.py +197 -0
- data/packages/gsutil/gslib/tests/testcase/unit_testcase.py +230 -0
- data/packages/gsutil/gslib/tests/util.py +125 -0
- data/packages/gsutil/gslib/tests/util.pyc +0 -0
- data/packages/gsutil/gslib/thread_pool.py +79 -0
- data/packages/gsutil/gslib/thread_pool.pyc +0 -0
- data/packages/gsutil/gslib/util.py +151 -0
- data/packages/gsutil/gslib/util.pyc +0 -0
- data/packages/gsutil/gslib/wildcard_iterator.py +492 -0
- data/packages/gsutil/gslib/wildcard_iterator.pyc +0 -0
- data/packages/gsutil/gsutil +377 -0
- data/packages/gsutil/gsutil.spec.in +75 -0
- data/packages/gsutil/oauth2_plugin/__init__.py +22 -0
- data/packages/gsutil/oauth2_plugin/__init__.pyc +0 -0
- data/packages/gsutil/oauth2_plugin/oauth2_client.py +642 -0
- data/packages/gsutil/oauth2_plugin/oauth2_client.pyc +0 -0
- data/packages/gsutil/oauth2_plugin/oauth2_client_test.py +374 -0
- data/packages/gsutil/oauth2_plugin/oauth2_helper.py +110 -0
- data/packages/gsutil/oauth2_plugin/oauth2_helper.pyc +0 -0
- data/packages/gsutil/oauth2_plugin/oauth2_plugin.py +24 -0
- data/packages/gsutil/oauth2_plugin/oauth2_plugin.pyc +0 -0
- data/packages/gsutil/pkg_gen.sh +54 -0
- data/packages/gsutil/pkg_util.py +60 -0
- data/packages/gsutil/setup.py +141 -0
- data/packages/gsutil/third_party/__init__.py +0 -0
- data/packages/gsutil/third_party/__init__.pyc +0 -0
- data/packages/gsutil/third_party/fancy_urllib/README +21 -0
- data/packages/gsutil/third_party/fancy_urllib/__init__.py +398 -0
- data/packages/gsutil/third_party/fancy_urllib/__init__.pyc +0 -0
- data/tasks/rubygem.rake +3 -1
- metadata +770 -7
- metadata.gz.sig +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Certifcate Authority certificates for validating SSL connections.
|
|
2
|
+
#
|
|
3
|
+
# This file contains PEM format certificates generated from
|
|
4
|
+
# http://mxr.mozilla.org/seamonkey/source/security/nss/lib/ckfw/builtins/certdata.txt
|
|
5
|
+
#
|
|
6
|
+
# ***** BEGIN LICENSE BLOCK *****
|
|
7
|
+
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
8
|
+
#
|
|
9
|
+
# The contents of this file are subject to the Mozilla Public License Version
|
|
10
|
+
# 1.1 (the "License"); you may not use this file except in compliance with
|
|
11
|
+
# the License. You may obtain a copy of the License at
|
|
12
|
+
# http://www.mozilla.org/MPL/
|
|
13
|
+
#
|
|
14
|
+
# Software distributed under the License is distributed on an "AS IS" basis,
|
|
15
|
+
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
16
|
+
# for the specific language governing rights and limitations under the
|
|
17
|
+
# License.
|
|
18
|
+
#
|
|
19
|
+
# The Original Code is the Netscape security libraries.
|
|
20
|
+
#
|
|
21
|
+
# The Initial Developer of the Original Code is
|
|
22
|
+
# Netscape Communications Corporation.
|
|
23
|
+
# Portions created by the Initial Developer are Copyright (C) 1994-2000
|
|
24
|
+
# the Initial Developer. All Rights Reserved.
|
|
25
|
+
#
|
|
26
|
+
# Contributor(s):
|
|
27
|
+
#
|
|
28
|
+
# Alternatively, the contents of this file may be used under the terms of
|
|
29
|
+
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
30
|
+
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
31
|
+
# in which case the provisions of the GPL or the LGPL are applicable instead
|
|
32
|
+
# of those above. If you wish to allow use of your version of this file only
|
|
33
|
+
# under the terms of either the GPL or the LGPL, and not to allow others to
|
|
34
|
+
# use your version of this file under the terms of the MPL, indicate your
|
|
35
|
+
# decision by deleting the provisions above and replace them with the notice
|
|
36
|
+
# and other provisions required by the GPL or the LGPL. If you do not delete
|
|
37
|
+
# the provisions above, a recipient may use your version of this file under
|
|
38
|
+
# the terms of any one of the MPL, the GPL or the LGPL.
|
|
39
|
+
#
|
|
40
|
+
# ***** END LICENSE BLOCK *****
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
Comodo CA Limited, CN=Trusted Certificate Services
|
|
44
|
+
==================================================
|
|
45
|
+
|
|
46
|
+
-----BEGIN CERTIFICATE-----
|
|
47
|
+
MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
|
|
48
|
+
MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
|
|
49
|
+
GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
|
|
50
|
+
aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
|
|
51
|
+
MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
|
|
52
|
+
BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
|
|
53
|
+
VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
|
|
54
|
+
AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
|
|
55
|
+
fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
|
|
56
|
+
TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
|
|
57
|
+
fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
|
|
58
|
+
1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
|
|
59
|
+
kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
|
|
60
|
+
A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
|
|
61
|
+
VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
|
|
62
|
+
ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
|
|
63
|
+
dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
|
|
64
|
+
Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
|
|
65
|
+
HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
|
|
66
|
+
pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
|
|
67
|
+
jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
|
|
68
|
+
xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
|
|
69
|
+
dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
|
|
70
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2011 Mitch Garnaat http://garnaat.org/
|
|
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
|
+
"""
|
|
26
|
+
Some unit tests for the S3 Bucket
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
import unittest
|
|
30
|
+
import time
|
|
31
|
+
|
|
32
|
+
from boto.exception import S3ResponseError
|
|
33
|
+
from boto.s3.connection import S3Connection
|
|
34
|
+
from boto.s3.bucketlogging import BucketLogging
|
|
35
|
+
from boto.s3.lifecycle import Lifecycle
|
|
36
|
+
from boto.s3.lifecycle import Transition
|
|
37
|
+
from boto.s3.lifecycle import Rule
|
|
38
|
+
from boto.s3.acl import Grant
|
|
39
|
+
from boto.s3.tagging import Tags, TagSet
|
|
40
|
+
from boto.s3.lifecycle import Lifecycle, Expiration, Transition
|
|
41
|
+
from boto.s3.website import RedirectLocation
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class S3BucketTest (unittest.TestCase):
|
|
45
|
+
s3 = True
|
|
46
|
+
|
|
47
|
+
def setUp(self):
|
|
48
|
+
self.conn = S3Connection()
|
|
49
|
+
self.bucket_name = 'bucket-%d' % int(time.time())
|
|
50
|
+
self.bucket = self.conn.create_bucket(self.bucket_name)
|
|
51
|
+
|
|
52
|
+
def tearDown(self):
|
|
53
|
+
for key in self.bucket:
|
|
54
|
+
key.delete()
|
|
55
|
+
self.bucket.delete()
|
|
56
|
+
|
|
57
|
+
def test_next_marker(self):
|
|
58
|
+
expected = ["a/", "b", "c"]
|
|
59
|
+
for key_name in expected:
|
|
60
|
+
key = self.bucket.new_key(key_name)
|
|
61
|
+
key.set_contents_from_string(key_name)
|
|
62
|
+
|
|
63
|
+
# Normal list of first 2 keys will have
|
|
64
|
+
# no NextMarker set, so we use last key to iterate
|
|
65
|
+
# last element will be "b" so no issue.
|
|
66
|
+
rs = self.bucket.get_all_keys(max_keys=2)
|
|
67
|
+
for element in rs:
|
|
68
|
+
pass
|
|
69
|
+
self.assertEqual(element.name, "b")
|
|
70
|
+
self.assertEqual(rs.next_marker, None)
|
|
71
|
+
|
|
72
|
+
# list using delimiter of first 2 keys will have
|
|
73
|
+
# a NextMarker set (when truncated). As prefixes
|
|
74
|
+
# are grouped together at the end, we get "a/" as
|
|
75
|
+
# last element, but luckily we have next_marker.
|
|
76
|
+
rs = self.bucket.get_all_keys(max_keys=2, delimiter="/")
|
|
77
|
+
for element in rs:
|
|
78
|
+
pass
|
|
79
|
+
self.assertEqual(element.name, "a/")
|
|
80
|
+
self.assertEqual(rs.next_marker, "b")
|
|
81
|
+
|
|
82
|
+
# ensure bucket.list() still works by just
|
|
83
|
+
# popping elements off the front of expected.
|
|
84
|
+
rs = self.bucket.list()
|
|
85
|
+
for element in rs:
|
|
86
|
+
self.assertEqual(element.name, expected.pop(0))
|
|
87
|
+
self.assertEqual(expected, [])
|
|
88
|
+
|
|
89
|
+
def test_logging(self):
|
|
90
|
+
# use self.bucket as the target bucket so that teardown
|
|
91
|
+
# will delete any log files that make it into the bucket
|
|
92
|
+
# automatically and all we have to do is delete the
|
|
93
|
+
# source bucket.
|
|
94
|
+
sb_name = "src-" + self.bucket_name
|
|
95
|
+
sb = self.conn.create_bucket(sb_name)
|
|
96
|
+
# grant log write perms to target bucket using canned-acl
|
|
97
|
+
self.bucket.set_acl("log-delivery-write")
|
|
98
|
+
target_bucket = self.bucket_name
|
|
99
|
+
target_prefix = u"jp/ログ/"
|
|
100
|
+
# Check existing status is disabled
|
|
101
|
+
bls = sb.get_logging_status()
|
|
102
|
+
self.assertEqual(bls.target, None)
|
|
103
|
+
# Create a logging status and grant auth users READ PERM
|
|
104
|
+
authuri = "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"
|
|
105
|
+
authr = Grant(permission="READ", type="Group", uri=authuri)
|
|
106
|
+
sb.enable_logging(target_bucket, target_prefix=target_prefix, grants=[authr])
|
|
107
|
+
# Check the status and confirm its set.
|
|
108
|
+
bls = sb.get_logging_status()
|
|
109
|
+
self.assertEqual(bls.target, target_bucket)
|
|
110
|
+
self.assertEqual(bls.prefix, target_prefix)
|
|
111
|
+
self.assertEqual(len(bls.grants), 1)
|
|
112
|
+
self.assertEqual(bls.grants[0].type, "Group")
|
|
113
|
+
self.assertEqual(bls.grants[0].uri, authuri)
|
|
114
|
+
# finally delete the src bucket
|
|
115
|
+
sb.delete()
|
|
116
|
+
|
|
117
|
+
def test_tagging(self):
|
|
118
|
+
tagging = """
|
|
119
|
+
<Tagging>
|
|
120
|
+
<TagSet>
|
|
121
|
+
<Tag>
|
|
122
|
+
<Key>tagkey</Key>
|
|
123
|
+
<Value>tagvalue</Value>
|
|
124
|
+
</Tag>
|
|
125
|
+
</TagSet>
|
|
126
|
+
</Tagging>
|
|
127
|
+
"""
|
|
128
|
+
self.bucket.set_xml_tags(tagging)
|
|
129
|
+
response = self.bucket.get_tags()
|
|
130
|
+
self.assertEqual(response[0][0].key, 'tagkey')
|
|
131
|
+
self.assertEqual(response[0][0].value, 'tagvalue')
|
|
132
|
+
self.bucket.delete_tags()
|
|
133
|
+
try:
|
|
134
|
+
self.bucket.get_tags()
|
|
135
|
+
except S3ResponseError, e:
|
|
136
|
+
self.assertEqual(e.code, 'NoSuchTagSet')
|
|
137
|
+
except Exception, e:
|
|
138
|
+
self.fail("Wrong exception raised (expected S3ResponseError): %s"
|
|
139
|
+
% e)
|
|
140
|
+
else:
|
|
141
|
+
self.fail("Expected S3ResponseError, but no exception raised.")
|
|
142
|
+
|
|
143
|
+
def test_tagging_from_objects(self):
|
|
144
|
+
"""Create tags from python objects rather than raw xml."""
|
|
145
|
+
t = Tags()
|
|
146
|
+
tag_set = TagSet()
|
|
147
|
+
tag_set.add_tag('akey', 'avalue')
|
|
148
|
+
tag_set.add_tag('anotherkey', 'anothervalue')
|
|
149
|
+
t.add_tag_set(tag_set)
|
|
150
|
+
self.bucket.set_tags(t)
|
|
151
|
+
response = self.bucket.get_tags()
|
|
152
|
+
self.assertEqual(response[0][0].key, 'akey')
|
|
153
|
+
self.assertEqual(response[0][0].value, 'avalue')
|
|
154
|
+
self.assertEqual(response[0][1].key, 'anotherkey')
|
|
155
|
+
self.assertEqual(response[0][1].value, 'anothervalue')
|
|
156
|
+
|
|
157
|
+
def test_website_configuration(self):
|
|
158
|
+
response = self.bucket.configure_website('index.html')
|
|
159
|
+
self.assertTrue(response)
|
|
160
|
+
config = self.bucket.get_website_configuration()
|
|
161
|
+
self.assertEqual(config, {'WebsiteConfiguration':
|
|
162
|
+
{'IndexDocument': {'Suffix': 'index.html'}}})
|
|
163
|
+
config2, xml = self.bucket.get_website_configuration_with_xml()
|
|
164
|
+
self.assertEqual(config, config2)
|
|
165
|
+
self.assertTrue('<Suffix>index.html</Suffix>' in xml, xml)
|
|
166
|
+
|
|
167
|
+
def test_website_redirect_all_requests(self):
|
|
168
|
+
response = self.bucket.configure_website(
|
|
169
|
+
redirect_all_requests_to=RedirectLocation('example.com'))
|
|
170
|
+
config = self.bucket.get_website_configuration()
|
|
171
|
+
self.assertEqual(config, {
|
|
172
|
+
'WebsiteConfiguration': {
|
|
173
|
+
'RedirectAllRequestsTo': {
|
|
174
|
+
'HostName': 'example.com'}}})
|
|
175
|
+
|
|
176
|
+
# Can configure the protocol as well.
|
|
177
|
+
response = self.bucket.configure_website(
|
|
178
|
+
redirect_all_requests_to=RedirectLocation('example.com', 'https'))
|
|
179
|
+
config = self.bucket.get_website_configuration()
|
|
180
|
+
self.assertEqual(config, {
|
|
181
|
+
'WebsiteConfiguration': {'RedirectAllRequestsTo': {
|
|
182
|
+
'HostName': 'example.com',
|
|
183
|
+
'Protocol': 'https',
|
|
184
|
+
}}}
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
def test_lifecycle(self):
|
|
188
|
+
lifecycle = Lifecycle()
|
|
189
|
+
lifecycle.add_rule('myid', '', 'Enabled', 30)
|
|
190
|
+
self.assertTrue(self.bucket.configure_lifecycle(lifecycle))
|
|
191
|
+
response = self.bucket.get_lifecycle_config()
|
|
192
|
+
self.assertEqual(len(response), 1)
|
|
193
|
+
actual_lifecycle = response[0]
|
|
194
|
+
self.assertEqual(actual_lifecycle.id, 'myid')
|
|
195
|
+
self.assertEqual(actual_lifecycle.prefix, '')
|
|
196
|
+
self.assertEqual(actual_lifecycle.status, 'Enabled')
|
|
197
|
+
self.assertEqual(actual_lifecycle.transition, None)
|
|
198
|
+
|
|
199
|
+
def test_lifecycle_with_glacier_transition(self):
|
|
200
|
+
lifecycle = Lifecycle()
|
|
201
|
+
transition = Transition(days=30, storage_class='GLACIER')
|
|
202
|
+
rule = Rule('myid', prefix='', status='Enabled', expiration=None,
|
|
203
|
+
transition=transition)
|
|
204
|
+
lifecycle.append(rule)
|
|
205
|
+
self.assertTrue(self.bucket.configure_lifecycle(lifecycle))
|
|
206
|
+
response = self.bucket.get_lifecycle_config()
|
|
207
|
+
transition = response[0].transition
|
|
208
|
+
self.assertEqual(transition.days, 30)
|
|
209
|
+
self.assertEqual(transition.storage_class, 'GLACIER')
|
|
210
|
+
self.assertEqual(transition.date, None)
|
|
211
|
+
|
|
212
|
+
def test_lifecycle_multi(self):
|
|
213
|
+
date = '2022-10-12T00:00:00.000Z'
|
|
214
|
+
sc = 'GLACIER'
|
|
215
|
+
lifecycle = Lifecycle()
|
|
216
|
+
lifecycle.add_rule("1", "1/", "Enabled", 1)
|
|
217
|
+
lifecycle.add_rule("2", "2/", "Enabled", Expiration(days=2))
|
|
218
|
+
lifecycle.add_rule("3", "3/", "Enabled", Expiration(date=date))
|
|
219
|
+
lifecycle.add_rule("4", "4/", "Enabled", None,
|
|
220
|
+
Transition(days=4, storage_class=sc))
|
|
221
|
+
lifecycle.add_rule("5", "5/", "Enabled", None,
|
|
222
|
+
Transition(date=date, storage_class=sc))
|
|
223
|
+
# set the lifecycle
|
|
224
|
+
self.bucket.configure_lifecycle(lifecycle)
|
|
225
|
+
# read the lifecycle back
|
|
226
|
+
readlifecycle = self.bucket.get_lifecycle_config();
|
|
227
|
+
for rule in readlifecycle:
|
|
228
|
+
if rule.id == "1":
|
|
229
|
+
self.assertEqual(rule.prefix, "1/")
|
|
230
|
+
self.assertEqual(rule.expiration.days, 1)
|
|
231
|
+
elif rule.id == "2":
|
|
232
|
+
self.assertEqual(rule.prefix, "2/")
|
|
233
|
+
self.assertEqual(rule.expiration.days, 2)
|
|
234
|
+
elif rule.id == "3":
|
|
235
|
+
self.assertEqual(rule.prefix, "3/")
|
|
236
|
+
self.assertEqual(rule.expiration.date, date)
|
|
237
|
+
elif rule.id == "4":
|
|
238
|
+
self.assertEqual(rule.prefix, "4/")
|
|
239
|
+
self.assertEqual(rule.transition.days, 4)
|
|
240
|
+
self.assertEqual(rule.transition.storage_class, sc)
|
|
241
|
+
elif rule.id == "5":
|
|
242
|
+
self.assertEqual(rule.prefix, "5/")
|
|
243
|
+
self.assertEqual(rule.transition.date, date)
|
|
244
|
+
self.assertEqual(rule.transition.storage_class, sc)
|
|
245
|
+
else:
|
|
246
|
+
self.fail("unexpected id %s" % rule.id)
|
|
247
|
+
|
|
248
|
+
def test_lifecycle_jp(self):
|
|
249
|
+
# test lifecycle with Japanese prefix
|
|
250
|
+
name = "Japanese files"
|
|
251
|
+
prefix = u"日本語/"
|
|
252
|
+
days = 30
|
|
253
|
+
lifecycle = Lifecycle()
|
|
254
|
+
lifecycle.add_rule(name, prefix, "Enabled", days)
|
|
255
|
+
# set the lifecycle
|
|
256
|
+
self.bucket.configure_lifecycle(lifecycle)
|
|
257
|
+
# read the lifecycle back
|
|
258
|
+
readlifecycle = self.bucket.get_lifecycle_config();
|
|
259
|
+
for rule in readlifecycle:
|
|
260
|
+
self.assertEqual(rule.id, name)
|
|
261
|
+
self.assertEqual(rule.expiration.days, days)
|
|
262
|
+
#Note: Boto seems correct? AWS seems broken?
|
|
263
|
+
#self.assertEqual(rule.prefix, prefix)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright (c) 2012 Mitch Garnaat http://garnaat.org/
|
|
2
|
+
# Copyright (c) 2012 Amazon.com, Inc. or its affiliates.
|
|
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
|
+
Check that all of the certs on SQS endpoints validate.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
import unittest
|
|
29
|
+
import boto.s3
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class CertVerificationTest(unittest.TestCase):
|
|
33
|
+
|
|
34
|
+
s3 = True
|
|
35
|
+
ssl = True
|
|
36
|
+
|
|
37
|
+
def test_certs(self):
|
|
38
|
+
for region in boto.s3.regions():
|
|
39
|
+
c = region.connect()
|
|
40
|
+
c.get_all_buckets()
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Copyright (c) 2006-2011 Mitch Garnaat http://garnaat.org/
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
5
|
+
# copy of this software and associated documentation files (the
|
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish, dis-
|
|
8
|
+
# tribute, sublicense, and/or sell copies of the Software, and to permit
|
|
9
|
+
# persons to whom the Software is furnished to do so, subject to the fol-
|
|
10
|
+
# lowing conditions:
|
|
11
|
+
#
|
|
12
|
+
# The above copyright notice and this permission notice shall be included
|
|
13
|
+
# in all copies or substantial portions of the Software.
|
|
14
|
+
#
|
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
16
|
+
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
|
|
17
|
+
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
|
|
18
|
+
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
19
|
+
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
21
|
+
# IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
"""
|
|
24
|
+
Some unit tests for the S3Connection
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
import unittest
|
|
28
|
+
import time
|
|
29
|
+
import os
|
|
30
|
+
import urllib
|
|
31
|
+
import urlparse
|
|
32
|
+
import httplib
|
|
33
|
+
from boto.s3.connection import S3Connection
|
|
34
|
+
from boto.s3.bucket import Bucket
|
|
35
|
+
from boto.exception import S3PermissionsError, S3ResponseError
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class S3ConnectionTest (unittest.TestCase):
|
|
39
|
+
s3 = True
|
|
40
|
+
|
|
41
|
+
def test_1_basic(self):
|
|
42
|
+
print '--- running S3Connection tests ---'
|
|
43
|
+
c = S3Connection()
|
|
44
|
+
# create a new, empty bucket
|
|
45
|
+
bucket_name = 'test-%d' % int(time.time())
|
|
46
|
+
bucket = c.create_bucket(bucket_name)
|
|
47
|
+
# now try a get_bucket call and see if it's really there
|
|
48
|
+
bucket = c.get_bucket(bucket_name)
|
|
49
|
+
# test logging
|
|
50
|
+
logging_bucket = c.create_bucket(bucket_name + '-log')
|
|
51
|
+
logging_bucket.set_as_logging_target()
|
|
52
|
+
bucket.enable_logging(target_bucket=logging_bucket, target_prefix=bucket.name)
|
|
53
|
+
bucket.disable_logging()
|
|
54
|
+
c.delete_bucket(logging_bucket)
|
|
55
|
+
k = bucket.new_key('foobar')
|
|
56
|
+
s1 = 'This is a test of file upload and download'
|
|
57
|
+
s2 = 'This is a second string to test file upload and download'
|
|
58
|
+
k.set_contents_from_string(s1)
|
|
59
|
+
fp = open('foobar', 'wb')
|
|
60
|
+
# now get the contents from s3 to a local file
|
|
61
|
+
k.get_contents_to_file(fp)
|
|
62
|
+
fp.close()
|
|
63
|
+
fp = open('foobar')
|
|
64
|
+
# check to make sure content read from s3 is identical to original
|
|
65
|
+
assert s1 == fp.read(), 'corrupted file'
|
|
66
|
+
fp.close()
|
|
67
|
+
# test generated URLs
|
|
68
|
+
url = k.generate_url(3600)
|
|
69
|
+
file = urllib.urlopen(url)
|
|
70
|
+
assert s1 == file.read(), 'invalid URL %s' % url
|
|
71
|
+
url = k.generate_url(3600, force_http=True)
|
|
72
|
+
file = urllib.urlopen(url)
|
|
73
|
+
assert s1 == file.read(), 'invalid URL %s' % url
|
|
74
|
+
url = k.generate_url(3600, force_http=True, headers={'x-amz-x-token' : 'XYZ'})
|
|
75
|
+
file = urllib.urlopen(url)
|
|
76
|
+
assert s1 == file.read(), 'invalid URL %s' % url
|
|
77
|
+
rh = {'response-content-disposition': 'attachment; filename="foo.txt"'}
|
|
78
|
+
url = k.generate_url(60, response_headers=rh)
|
|
79
|
+
file = urllib.urlopen(url)
|
|
80
|
+
assert s1 == file.read(), 'invalid URL %s' % url
|
|
81
|
+
#test whether amperands and to-be-escaped characters work in header filename
|
|
82
|
+
rh = {'response-content-disposition': 'attachment; filename="foo&z%20ar&ar&zar&bar.txt"'}
|
|
83
|
+
url = k.generate_url(60, response_headers=rh, force_http=True)
|
|
84
|
+
file = urllib.urlopen(url)
|
|
85
|
+
assert s1 == file.read(), 'invalid URL %s' % url
|
|
86
|
+
# overwrite foobar contents with a PUT
|
|
87
|
+
url = k.generate_url(3600, 'PUT', force_http=True, policy='private', reduced_redundancy=True)
|
|
88
|
+
up = urlparse.urlsplit(url)
|
|
89
|
+
con = httplib.HTTPConnection(up.hostname, up.port)
|
|
90
|
+
con.request("PUT", up.path + '?' + up.query, body="hello there")
|
|
91
|
+
resp = con.getresponse()
|
|
92
|
+
assert 200 == resp.status
|
|
93
|
+
assert "hello there" == k.get_contents_as_string()
|
|
94
|
+
bucket.delete_key(k)
|
|
95
|
+
# test a few variations on get_all_keys - first load some data
|
|
96
|
+
# for the first one, let's override the content type
|
|
97
|
+
phony_mimetype = 'application/x-boto-test'
|
|
98
|
+
headers = {'Content-Type': phony_mimetype}
|
|
99
|
+
k.name = 'foo/bar'
|
|
100
|
+
k.set_contents_from_string(s1, headers)
|
|
101
|
+
k.name = 'foo/bas'
|
|
102
|
+
k.set_contents_from_filename('foobar')
|
|
103
|
+
k.name = 'foo/bat'
|
|
104
|
+
k.set_contents_from_string(s1)
|
|
105
|
+
k.name = 'fie/bar'
|
|
106
|
+
k.set_contents_from_string(s1)
|
|
107
|
+
k.name = 'fie/bas'
|
|
108
|
+
k.set_contents_from_string(s1)
|
|
109
|
+
k.name = 'fie/bat'
|
|
110
|
+
k.set_contents_from_string(s1)
|
|
111
|
+
# try resetting the contents to another value
|
|
112
|
+
md5 = k.md5
|
|
113
|
+
k.set_contents_from_string(s2)
|
|
114
|
+
assert k.md5 != md5
|
|
115
|
+
os.unlink('foobar')
|
|
116
|
+
all = bucket.get_all_keys()
|
|
117
|
+
assert len(all) == 6
|
|
118
|
+
rs = bucket.get_all_keys(prefix='foo')
|
|
119
|
+
assert len(rs) == 3
|
|
120
|
+
rs = bucket.get_all_keys(prefix='', delimiter='/')
|
|
121
|
+
assert len(rs) == 2
|
|
122
|
+
rs = bucket.get_all_keys(maxkeys=5)
|
|
123
|
+
assert len(rs) == 5
|
|
124
|
+
# test the lookup method
|
|
125
|
+
k = bucket.lookup('foo/bar')
|
|
126
|
+
assert isinstance(k, bucket.key_class)
|
|
127
|
+
assert k.content_type == phony_mimetype
|
|
128
|
+
k = bucket.lookup('notthere')
|
|
129
|
+
assert k == None
|
|
130
|
+
# try some metadata stuff
|
|
131
|
+
k = bucket.new_key('has_metadata')
|
|
132
|
+
mdkey1 = 'meta1'
|
|
133
|
+
mdval1 = 'This is the first metadata value'
|
|
134
|
+
k.set_metadata(mdkey1, mdval1)
|
|
135
|
+
mdkey2 = 'meta2'
|
|
136
|
+
mdval2 = 'This is the second metadata value'
|
|
137
|
+
k.set_metadata(mdkey2, mdval2)
|
|
138
|
+
# try a unicode metadata value
|
|
139
|
+
mdval3 = u'föö'
|
|
140
|
+
mdkey3 = 'meta3'
|
|
141
|
+
k.set_metadata(mdkey3, mdval3)
|
|
142
|
+
k.set_contents_from_string(s1)
|
|
143
|
+
k = bucket.lookup('has_metadata')
|
|
144
|
+
assert k.get_metadata(mdkey1) == mdval1
|
|
145
|
+
assert k.get_metadata(mdkey2) == mdval2
|
|
146
|
+
assert k.get_metadata(mdkey3) == mdval3
|
|
147
|
+
k = bucket.new_key('has_metadata')
|
|
148
|
+
k.get_contents_as_string()
|
|
149
|
+
assert k.get_metadata(mdkey1) == mdval1
|
|
150
|
+
assert k.get_metadata(mdkey2) == mdval2
|
|
151
|
+
assert k.get_metadata(mdkey3) == mdval3
|
|
152
|
+
bucket.delete_key(k)
|
|
153
|
+
# test list and iterator
|
|
154
|
+
rs1 = bucket.list()
|
|
155
|
+
num_iter = 0
|
|
156
|
+
for r in rs1:
|
|
157
|
+
num_iter = num_iter + 1
|
|
158
|
+
rs = bucket.get_all_keys()
|
|
159
|
+
num_keys = len(rs)
|
|
160
|
+
assert num_iter == num_keys
|
|
161
|
+
# try a key with a funny character
|
|
162
|
+
k = bucket.new_key('testnewline\n')
|
|
163
|
+
k.set_contents_from_string('This is a test')
|
|
164
|
+
rs = bucket.get_all_keys()
|
|
165
|
+
assert len(rs) == num_keys + 1
|
|
166
|
+
bucket.delete_key(k)
|
|
167
|
+
rs = bucket.get_all_keys()
|
|
168
|
+
assert len(rs) == num_keys
|
|
169
|
+
# try some acl stuff
|
|
170
|
+
bucket.set_acl('public-read')
|
|
171
|
+
policy = bucket.get_acl()
|
|
172
|
+
assert len(policy.acl.grants) == 2
|
|
173
|
+
bucket.set_acl('private')
|
|
174
|
+
policy = bucket.get_acl()
|
|
175
|
+
assert len(policy.acl.grants) == 1
|
|
176
|
+
k = bucket.lookup('foo/bar')
|
|
177
|
+
k.set_acl('public-read')
|
|
178
|
+
policy = k.get_acl()
|
|
179
|
+
assert len(policy.acl.grants) == 2
|
|
180
|
+
k.set_acl('private')
|
|
181
|
+
policy = k.get_acl()
|
|
182
|
+
assert len(policy.acl.grants) == 1
|
|
183
|
+
# try the convenience methods for grants
|
|
184
|
+
bucket.add_user_grant('FULL_CONTROL',
|
|
185
|
+
'c1e724fbfa0979a4448393c59a8c055011f739b6d102fb37a65f26414653cd67')
|
|
186
|
+
try:
|
|
187
|
+
bucket.add_email_grant('foobar', 'foo@bar.com')
|
|
188
|
+
except S3PermissionsError:
|
|
189
|
+
pass
|
|
190
|
+
# now try to create an RRS key
|
|
191
|
+
k = bucket.new_key('reduced_redundancy')
|
|
192
|
+
k.set_contents_from_string('This key has reduced redundancy',
|
|
193
|
+
reduced_redundancy=True)
|
|
194
|
+
|
|
195
|
+
# now try to inject a response header
|
|
196
|
+
data = k.get_contents_as_string(response_headers={'response-content-type' : 'foo/bar'})
|
|
197
|
+
assert k.content_type == 'foo/bar'
|
|
198
|
+
|
|
199
|
+
# now delete all keys in bucket
|
|
200
|
+
for k in bucket:
|
|
201
|
+
if k.name == 'reduced_redundancy':
|
|
202
|
+
assert k.storage_class == 'REDUCED_REDUNDANCY'
|
|
203
|
+
bucket.delete_key(k)
|
|
204
|
+
# now delete bucket
|
|
205
|
+
time.sleep(5)
|
|
206
|
+
c.delete_bucket(bucket)
|
|
207
|
+
print '--- tests completed ---'
|
|
208
|
+
|
|
209
|
+
def test_basic_anon(self):
|
|
210
|
+
auth_con = S3Connection()
|
|
211
|
+
# create a new, empty bucket
|
|
212
|
+
bucket_name = 'test-%d' % int(time.time())
|
|
213
|
+
auth_bucket = auth_con.create_bucket(bucket_name)
|
|
214
|
+
|
|
215
|
+
# try read the bucket anonymously
|
|
216
|
+
anon_con = S3Connection(anon=True)
|
|
217
|
+
anon_bucket = Bucket(anon_con, bucket_name)
|
|
218
|
+
try:
|
|
219
|
+
iter(anon_bucket.list()).next()
|
|
220
|
+
self.fail("anon bucket list should fail")
|
|
221
|
+
except S3ResponseError:
|
|
222
|
+
pass
|
|
223
|
+
|
|
224
|
+
# give bucket anon user access and anon read again
|
|
225
|
+
auth_bucket.set_acl('public-read')
|
|
226
|
+
try:
|
|
227
|
+
iter(anon_bucket.list()).next()
|
|
228
|
+
self.fail("not expecting contents")
|
|
229
|
+
except S3ResponseError, e:
|
|
230
|
+
self.fail("We should have public-read access, but received "
|
|
231
|
+
"an error: %s" % e)
|
|
232
|
+
except StopIteration:
|
|
233
|
+
pass
|
|
234
|
+
|
|
235
|
+
# cleanup
|
|
236
|
+
auth_con.delete_bucket(auth_bucket)
|
|
237
|
+
|
|
238
|
+
def test_error_code_populated(self):
|
|
239
|
+
c = S3Connection()
|
|
240
|
+
try:
|
|
241
|
+
c.create_bucket('bad$bucket$name')
|
|
242
|
+
except S3ResponseError, e:
|
|
243
|
+
self.assertEqual(e.error_code, 'InvalidBucketName')
|
|
244
|
+
else:
|
|
245
|
+
self.fail("S3ResponseError not raised.")
|