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.
Files changed (768) hide show
  1. data.tar.gz.sig +0 -0
  2. data/CHANGELOG +4 -0
  3. data/Makefile +4 -0
  4. data/Manifest +760 -1
  5. data/bin/gcloud +7 -0
  6. data/bin/{gcutil → gcutil.symlink} +0 -0
  7. data/bin/gsutil-symlink +377 -0
  8. data/gcloud.gemspec +5 -5
  9. data/packages/gsutil/CHECKSUM +1 -0
  10. data/packages/gsutil/COPYING +202 -0
  11. data/packages/gsutil/LICENSE.third_party +295 -0
  12. data/packages/gsutil/MANIFEST.in +5 -0
  13. data/packages/gsutil/README +38 -0
  14. data/packages/gsutil/README.pkg +49 -0
  15. data/packages/gsutil/ReleaseNotes.txt +780 -0
  16. data/packages/gsutil/VERSION +1 -0
  17. data/packages/gsutil/boto/Changelog.rst +35 -0
  18. data/packages/gsutil/boto/LICENSE +18 -0
  19. data/packages/gsutil/boto/MANIFEST.in +12 -0
  20. data/packages/gsutil/boto/README.rst +163 -0
  21. data/packages/gsutil/boto/bin/asadmin +290 -0
  22. data/packages/gsutil/boto/bin/bundle_image +27 -0
  23. data/packages/gsutil/boto/bin/cfadmin +108 -0
  24. data/packages/gsutil/boto/bin/cq +89 -0
  25. data/packages/gsutil/boto/bin/cwutil +140 -0
  26. data/packages/gsutil/boto/bin/elbadmin +284 -0
  27. data/packages/gsutil/boto/bin/fetch_file +43 -0
  28. data/packages/gsutil/boto/bin/glacier +154 -0
  29. data/packages/gsutil/boto/bin/instance_events +145 -0
  30. data/packages/gsutil/boto/bin/kill_instance +35 -0
  31. data/packages/gsutil/boto/bin/launch_instance +252 -0
  32. data/packages/gsutil/boto/bin/list_instances +90 -0
  33. data/packages/gsutil/boto/bin/lss3 +77 -0
  34. data/packages/gsutil/boto/bin/mturk +465 -0
  35. data/packages/gsutil/boto/bin/pyami_sendmail +52 -0
  36. data/packages/gsutil/boto/bin/route53 +205 -0
  37. data/packages/gsutil/boto/bin/s3put +374 -0
  38. data/packages/gsutil/boto/bin/sdbadmin +194 -0
  39. data/packages/gsutil/boto/bin/taskadmin +116 -0
  40. data/packages/gsutil/boto/boto/__init__.py +793 -0
  41. data/packages/gsutil/boto/boto/__init__.pyc +0 -0
  42. data/packages/gsutil/boto/boto/auth.py +682 -0
  43. data/packages/gsutil/boto/boto/auth.pyc +0 -0
  44. data/packages/gsutil/boto/boto/auth_handler.py +58 -0
  45. data/packages/gsutil/boto/boto/auth_handler.pyc +0 -0
  46. data/packages/gsutil/boto/boto/beanstalk/__init__.py +65 -0
  47. data/packages/gsutil/boto/boto/beanstalk/exception.py +64 -0
  48. data/packages/gsutil/boto/boto/beanstalk/layer1.py +1153 -0
  49. data/packages/gsutil/boto/boto/beanstalk/response.py +703 -0
  50. data/packages/gsutil/boto/boto/beanstalk/wrapper.py +29 -0
  51. data/packages/gsutil/boto/boto/cacerts/__init__.py +22 -0
  52. data/packages/gsutil/boto/boto/cacerts/__init__.pyc +0 -0
  53. data/packages/gsutil/boto/boto/cacerts/cacerts.txt +633 -0
  54. data/packages/gsutil/boto/boto/cloudformation/__init__.py +68 -0
  55. data/packages/gsutil/boto/boto/cloudformation/connection.py +364 -0
  56. data/packages/gsutil/boto/boto/cloudformation/stack.py +360 -0
  57. data/packages/gsutil/boto/boto/cloudformation/template.py +43 -0
  58. data/packages/gsutil/boto/boto/cloudfront/__init__.py +324 -0
  59. data/packages/gsutil/boto/boto/cloudfront/distribution.py +745 -0
  60. data/packages/gsutil/boto/boto/cloudfront/exception.py +26 -0
  61. data/packages/gsutil/boto/boto/cloudfront/identity.py +122 -0
  62. data/packages/gsutil/boto/boto/cloudfront/invalidation.py +216 -0
  63. data/packages/gsutil/boto/boto/cloudfront/logging.py +38 -0
  64. data/packages/gsutil/boto/boto/cloudfront/object.py +48 -0
  65. data/packages/gsutil/boto/boto/cloudfront/origin.py +150 -0
  66. data/packages/gsutil/boto/boto/cloudfront/signers.py +60 -0
  67. data/packages/gsutil/boto/boto/cloudsearch/__init__.py +45 -0
  68. data/packages/gsutil/boto/boto/cloudsearch/document.py +265 -0
  69. data/packages/gsutil/boto/boto/cloudsearch/domain.py +394 -0
  70. data/packages/gsutil/boto/boto/cloudsearch/layer1.py +738 -0
  71. data/packages/gsutil/boto/boto/cloudsearch/layer2.py +67 -0
  72. data/packages/gsutil/boto/boto/cloudsearch/optionstatus.py +248 -0
  73. data/packages/gsutil/boto/boto/cloudsearch/search.py +365 -0
  74. data/packages/gsutil/boto/boto/cloudsearch/sourceattribute.py +75 -0
  75. data/packages/gsutil/boto/boto/compat.py +28 -0
  76. data/packages/gsutil/boto/boto/compat.pyc +0 -0
  77. data/packages/gsutil/boto/boto/connection.py +1081 -0
  78. data/packages/gsutil/boto/boto/connection.pyc +0 -0
  79. data/packages/gsutil/boto/boto/contrib/__init__.py +22 -0
  80. data/packages/gsutil/boto/boto/contrib/ymlmessage.py +52 -0
  81. data/packages/gsutil/boto/boto/core/README +58 -0
  82. data/packages/gsutil/boto/boto/core/__init__.py +23 -0
  83. data/packages/gsutil/boto/boto/core/auth.py +78 -0
  84. data/packages/gsutil/boto/boto/core/credentials.py +154 -0
  85. data/packages/gsutil/boto/boto/core/dictresponse.py +178 -0
  86. data/packages/gsutil/boto/boto/core/service.py +67 -0
  87. data/packages/gsutil/boto/boto/datapipeline/__init__.py +0 -0
  88. data/packages/gsutil/boto/boto/datapipeline/exceptions.py +42 -0
  89. data/packages/gsutil/boto/boto/datapipeline/layer1.py +546 -0
  90. data/packages/gsutil/boto/boto/dynamodb/__init__.py +66 -0
  91. data/packages/gsutil/boto/boto/dynamodb/batch.py +262 -0
  92. data/packages/gsutil/boto/boto/dynamodb/condition.py +170 -0
  93. data/packages/gsutil/boto/boto/dynamodb/exceptions.py +64 -0
  94. data/packages/gsutil/boto/boto/dynamodb/item.py +196 -0
  95. data/packages/gsutil/boto/boto/dynamodb/layer1.py +575 -0
  96. data/packages/gsutil/boto/boto/dynamodb/layer2.py +798 -0
  97. data/packages/gsutil/boto/boto/dynamodb/schema.py +112 -0
  98. data/packages/gsutil/boto/boto/dynamodb/table.py +540 -0
  99. data/packages/gsutil/boto/boto/dynamodb/types.py +326 -0
  100. data/packages/gsutil/boto/boto/ec2/__init__.py +96 -0
  101. data/packages/gsutil/boto/boto/ec2/address.py +103 -0
  102. data/packages/gsutil/boto/boto/ec2/autoscale/__init__.py +781 -0
  103. data/packages/gsutil/boto/boto/ec2/autoscale/activity.py +74 -0
  104. data/packages/gsutil/boto/boto/ec2/autoscale/group.py +337 -0
  105. data/packages/gsutil/boto/boto/ec2/autoscale/instance.py +60 -0
  106. data/packages/gsutil/boto/boto/ec2/autoscale/launchconfig.py +209 -0
  107. data/packages/gsutil/boto/boto/ec2/autoscale/policy.py +166 -0
  108. data/packages/gsutil/boto/boto/ec2/autoscale/request.py +38 -0
  109. data/packages/gsutil/boto/boto/ec2/autoscale/scheduled.py +60 -0
  110. data/packages/gsutil/boto/boto/ec2/autoscale/tag.py +84 -0
  111. data/packages/gsutil/boto/boto/ec2/blockdevicemapping.py +141 -0
  112. data/packages/gsutil/boto/boto/ec2/bundleinstance.py +78 -0
  113. data/packages/gsutil/boto/boto/ec2/buyreservation.py +84 -0
  114. data/packages/gsutil/boto/boto/ec2/cloudwatch/__init__.py +603 -0
  115. data/packages/gsutil/boto/boto/ec2/cloudwatch/alarm.py +316 -0
  116. data/packages/gsutil/boto/boto/ec2/cloudwatch/datapoint.py +40 -0
  117. data/packages/gsutil/boto/boto/ec2/cloudwatch/dimension.py +38 -0
  118. data/packages/gsutil/boto/boto/ec2/cloudwatch/listelement.py +31 -0
  119. data/packages/gsutil/boto/boto/ec2/cloudwatch/metric.py +175 -0
  120. data/packages/gsutil/boto/boto/ec2/connection.py +3409 -0
  121. data/packages/gsutil/boto/boto/ec2/ec2object.py +107 -0
  122. data/packages/gsutil/boto/boto/ec2/elb/__init__.py +553 -0
  123. data/packages/gsutil/boto/boto/ec2/elb/healthcheck.py +89 -0
  124. data/packages/gsutil/boto/boto/ec2/elb/instancestate.py +62 -0
  125. data/packages/gsutil/boto/boto/ec2/elb/listelement.py +36 -0
  126. data/packages/gsutil/boto/boto/ec2/elb/listener.py +75 -0
  127. data/packages/gsutil/boto/boto/ec2/elb/loadbalancer.py +324 -0
  128. data/packages/gsutil/boto/boto/ec2/elb/policies.py +89 -0
  129. data/packages/gsutil/boto/boto/ec2/elb/securitygroup.py +38 -0
  130. data/packages/gsutil/boto/boto/ec2/group.py +39 -0
  131. data/packages/gsutil/boto/boto/ec2/image.py +350 -0
  132. data/packages/gsutil/boto/boto/ec2/instance.py +661 -0
  133. data/packages/gsutil/boto/boto/ec2/instanceinfo.py +51 -0
  134. data/packages/gsutil/boto/boto/ec2/instancestatus.py +207 -0
  135. data/packages/gsutil/boto/boto/ec2/keypair.py +113 -0
  136. data/packages/gsutil/boto/boto/ec2/launchspecification.py +105 -0
  137. data/packages/gsutil/boto/boto/ec2/networkinterface.py +247 -0
  138. data/packages/gsutil/boto/boto/ec2/placementgroup.py +51 -0
  139. data/packages/gsutil/boto/boto/ec2/regioninfo.py +34 -0
  140. data/packages/gsutil/boto/boto/ec2/reservedinstance.py +227 -0
  141. data/packages/gsutil/boto/boto/ec2/securitygroup.py +357 -0
  142. data/packages/gsutil/boto/boto/ec2/snapshot.py +170 -0
  143. data/packages/gsutil/boto/boto/ec2/spotdatafeedsubscription.py +63 -0
  144. data/packages/gsutil/boto/boto/ec2/spotinstancerequest.py +188 -0
  145. data/packages/gsutil/boto/boto/ec2/spotpricehistory.py +55 -0
  146. data/packages/gsutil/boto/boto/ec2/tag.py +87 -0
  147. data/packages/gsutil/boto/boto/ec2/vmtype.py +58 -0
  148. data/packages/gsutil/boto/boto/ec2/volume.py +293 -0
  149. data/packages/gsutil/boto/boto/ec2/volumestatus.py +200 -0
  150. data/packages/gsutil/boto/boto/ec2/zone.py +80 -0
  151. data/packages/gsutil/boto/boto/ecs/__init__.py +90 -0
  152. data/packages/gsutil/boto/boto/ecs/item.py +153 -0
  153. data/packages/gsutil/boto/boto/elasticache/__init__.py +62 -0
  154. data/packages/gsutil/boto/boto/elasticache/layer1.py +1252 -0
  155. data/packages/gsutil/boto/boto/elastictranscoder/__init__.py +62 -0
  156. data/packages/gsutil/boto/boto/elastictranscoder/exceptions.py +46 -0
  157. data/packages/gsutil/boto/boto/elastictranscoder/layer1.py +509 -0
  158. data/packages/gsutil/boto/boto/emr/__init__.py +73 -0
  159. data/packages/gsutil/boto/boto/emr/bootstrap_action.py +44 -0
  160. data/packages/gsutil/boto/boto/emr/connection.py +531 -0
  161. data/packages/gsutil/boto/boto/emr/emrobject.py +176 -0
  162. data/packages/gsutil/boto/boto/emr/instance_group.py +43 -0
  163. data/packages/gsutil/boto/boto/emr/step.py +281 -0
  164. data/packages/gsutil/boto/boto/exception.py +476 -0
  165. data/packages/gsutil/boto/boto/exception.pyc +0 -0
  166. data/packages/gsutil/boto/boto/file/README +49 -0
  167. data/packages/gsutil/boto/boto/file/__init__.py +28 -0
  168. data/packages/gsutil/boto/boto/file/bucket.py +112 -0
  169. data/packages/gsutil/boto/boto/file/connection.py +33 -0
  170. data/packages/gsutil/boto/boto/file/key.py +199 -0
  171. data/packages/gsutil/boto/boto/file/simpleresultset.py +30 -0
  172. data/packages/gsutil/boto/boto/fps/__init__.py +21 -0
  173. data/packages/gsutil/boto/boto/fps/connection.py +369 -0
  174. data/packages/gsutil/boto/boto/fps/exception.py +344 -0
  175. data/packages/gsutil/boto/boto/fps/response.py +175 -0
  176. data/packages/gsutil/boto/boto/glacier/__init__.py +57 -0
  177. data/packages/gsutil/boto/boto/glacier/concurrent.py +409 -0
  178. data/packages/gsutil/boto/boto/glacier/exceptions.py +58 -0
  179. data/packages/gsutil/boto/boto/glacier/job.py +152 -0
  180. data/packages/gsutil/boto/boto/glacier/layer1.py +637 -0
  181. data/packages/gsutil/boto/boto/glacier/layer2.py +93 -0
  182. data/packages/gsutil/boto/boto/glacier/response.py +48 -0
  183. data/packages/gsutil/boto/boto/glacier/utils.py +163 -0
  184. data/packages/gsutil/boto/boto/glacier/vault.py +387 -0
  185. data/packages/gsutil/boto/boto/glacier/writer.py +242 -0
  186. data/packages/gsutil/boto/boto/gs/__init__.py +22 -0
  187. data/packages/gsutil/boto/boto/gs/__init__.pyc +0 -0
  188. data/packages/gsutil/boto/boto/gs/acl.py +304 -0
  189. data/packages/gsutil/boto/boto/gs/acl.pyc +0 -0
  190. data/packages/gsutil/boto/boto/gs/bucket.py +870 -0
  191. data/packages/gsutil/boto/boto/gs/bucket.pyc +0 -0
  192. data/packages/gsutil/boto/boto/gs/bucketlistresultset.py +64 -0
  193. data/packages/gsutil/boto/boto/gs/bucketlistresultset.pyc +0 -0
  194. data/packages/gsutil/boto/boto/gs/connection.py +103 -0
  195. data/packages/gsutil/boto/boto/gs/connection.pyc +0 -0
  196. data/packages/gsutil/boto/boto/gs/cors.py +169 -0
  197. data/packages/gsutil/boto/boto/gs/cors.pyc +0 -0
  198. data/packages/gsutil/boto/boto/gs/key.py +704 -0
  199. data/packages/gsutil/boto/boto/gs/key.pyc +0 -0
  200. data/packages/gsutil/boto/boto/gs/resumable_upload_handler.py +659 -0
  201. data/packages/gsutil/boto/boto/gs/resumable_upload_handler.pyc +0 -0
  202. data/packages/gsutil/boto/boto/gs/user.py +54 -0
  203. data/packages/gsutil/boto/boto/gs/user.pyc +0 -0
  204. data/packages/gsutil/boto/boto/handler.py +44 -0
  205. data/packages/gsutil/boto/boto/handler.pyc +0 -0
  206. data/packages/gsutil/boto/boto/https_connection.py +124 -0
  207. data/packages/gsutil/boto/boto/https_connection.pyc +0 -0
  208. data/packages/gsutil/boto/boto/iam/__init__.py +74 -0
  209. data/packages/gsutil/boto/boto/iam/connection.py +1317 -0
  210. data/packages/gsutil/boto/boto/iam/summarymap.py +42 -0
  211. data/packages/gsutil/boto/boto/jsonresponse.py +163 -0
  212. data/packages/gsutil/boto/boto/jsonresponse.pyc +0 -0
  213. data/packages/gsutil/boto/boto/manage/__init__.py +23 -0
  214. data/packages/gsutil/boto/boto/manage/cmdshell.py +241 -0
  215. data/packages/gsutil/boto/boto/manage/propget.py +64 -0
  216. data/packages/gsutil/boto/boto/manage/server.py +556 -0
  217. data/packages/gsutil/boto/boto/manage/task.py +175 -0
  218. data/packages/gsutil/boto/boto/manage/test_manage.py +34 -0
  219. data/packages/gsutil/boto/boto/manage/volume.py +420 -0
  220. data/packages/gsutil/boto/boto/mashups/__init__.py +23 -0
  221. data/packages/gsutil/boto/boto/mashups/interactive.py +97 -0
  222. data/packages/gsutil/boto/boto/mashups/iobject.py +115 -0
  223. data/packages/gsutil/boto/boto/mashups/order.py +211 -0
  224. data/packages/gsutil/boto/boto/mashups/server.py +395 -0
  225. data/packages/gsutil/boto/boto/mturk/__init__.py +23 -0
  226. data/packages/gsutil/boto/boto/mturk/connection.py +1027 -0
  227. data/packages/gsutil/boto/boto/mturk/layoutparam.py +55 -0
  228. data/packages/gsutil/boto/boto/mturk/notification.py +103 -0
  229. data/packages/gsutil/boto/boto/mturk/price.py +48 -0
  230. data/packages/gsutil/boto/boto/mturk/qualification.py +137 -0
  231. data/packages/gsutil/boto/boto/mturk/question.py +455 -0
  232. data/packages/gsutil/boto/boto/mws/__init__.py +21 -0
  233. data/packages/gsutil/boto/boto/mws/connection.py +813 -0
  234. data/packages/gsutil/boto/boto/mws/exception.py +75 -0
  235. data/packages/gsutil/boto/boto/mws/response.py +655 -0
  236. data/packages/gsutil/boto/boto/plugin.py +90 -0
  237. data/packages/gsutil/boto/boto/plugin.pyc +0 -0
  238. data/packages/gsutil/boto/boto/provider.py +337 -0
  239. data/packages/gsutil/boto/boto/provider.pyc +0 -0
  240. data/packages/gsutil/boto/boto/pyami/__init__.py +22 -0
  241. data/packages/gsutil/boto/boto/pyami/__init__.pyc +0 -0
  242. data/packages/gsutil/boto/boto/pyami/bootstrap.py +134 -0
  243. data/packages/gsutil/boto/boto/pyami/config.py +229 -0
  244. data/packages/gsutil/boto/boto/pyami/config.pyc +0 -0
  245. data/packages/gsutil/boto/boto/pyami/copybot.cfg +60 -0
  246. data/packages/gsutil/boto/boto/pyami/copybot.py +97 -0
  247. data/packages/gsutil/boto/boto/pyami/helloworld.py +28 -0
  248. data/packages/gsutil/boto/boto/pyami/installers/__init__.py +64 -0
  249. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/__init__.py +22 -0
  250. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/apache.py +43 -0
  251. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/ebs.py +238 -0
  252. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/installer.py +96 -0
  253. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/mysql.py +109 -0
  254. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/trac.py +139 -0
  255. data/packages/gsutil/boto/boto/pyami/launch_ami.py +178 -0
  256. data/packages/gsutil/boto/boto/pyami/scriptbase.py +44 -0
  257. data/packages/gsutil/boto/boto/pyami/startup.py +60 -0
  258. data/packages/gsutil/boto/boto/rds/__init__.py +1194 -0
  259. data/packages/gsutil/boto/boto/rds/dbinstance.py +357 -0
  260. data/packages/gsutil/boto/boto/rds/dbsecuritygroup.py +177 -0
  261. data/packages/gsutil/boto/boto/rds/dbsnapshot.py +108 -0
  262. data/packages/gsutil/boto/boto/rds/event.py +49 -0
  263. data/packages/gsutil/boto/boto/rds/parametergroup.py +201 -0
  264. data/packages/gsutil/boto/boto/rds/regioninfo.py +32 -0
  265. data/packages/gsutil/boto/boto/regioninfo.py +63 -0
  266. data/packages/gsutil/boto/boto/regioninfo.pyc +0 -0
  267. data/packages/gsutil/boto/boto/resultset.py +169 -0
  268. data/packages/gsutil/boto/boto/resultset.pyc +0 -0
  269. data/packages/gsutil/boto/boto/roboto/__init__.py +1 -0
  270. data/packages/gsutil/boto/boto/roboto/awsqueryrequest.py +504 -0
  271. data/packages/gsutil/boto/boto/roboto/awsqueryservice.py +121 -0
  272. data/packages/gsutil/boto/boto/roboto/param.py +147 -0
  273. data/packages/gsutil/boto/boto/route53/__init__.py +75 -0
  274. data/packages/gsutil/boto/boto/route53/connection.py +403 -0
  275. data/packages/gsutil/boto/boto/route53/exception.py +27 -0
  276. data/packages/gsutil/boto/boto/route53/hostedzone.py +56 -0
  277. data/packages/gsutil/boto/boto/route53/record.py +306 -0
  278. data/packages/gsutil/boto/boto/route53/status.py +42 -0
  279. data/packages/gsutil/boto/boto/route53/zone.py +412 -0
  280. data/packages/gsutil/boto/boto/s3/__init__.py +84 -0
  281. data/packages/gsutil/boto/boto/s3/__init__.pyc +0 -0
  282. data/packages/gsutil/boto/boto/s3/acl.py +164 -0
  283. data/packages/gsutil/boto/boto/s3/acl.pyc +0 -0
  284. data/packages/gsutil/boto/boto/s3/bucket.py +1634 -0
  285. data/packages/gsutil/boto/boto/s3/bucket.pyc +0 -0
  286. data/packages/gsutil/boto/boto/s3/bucketlistresultset.py +139 -0
  287. data/packages/gsutil/boto/boto/s3/bucketlistresultset.pyc +0 -0
  288. data/packages/gsutil/boto/boto/s3/bucketlogging.py +83 -0
  289. data/packages/gsutil/boto/boto/s3/bucketlogging.pyc +0 -0
  290. data/packages/gsutil/boto/boto/s3/connection.py +540 -0
  291. data/packages/gsutil/boto/boto/s3/connection.pyc +0 -0
  292. data/packages/gsutil/boto/boto/s3/cors.py +210 -0
  293. data/packages/gsutil/boto/boto/s3/cors.pyc +0 -0
  294. data/packages/gsutil/boto/boto/s3/deletemarker.py +55 -0
  295. data/packages/gsutil/boto/boto/s3/deletemarker.pyc +0 -0
  296. data/packages/gsutil/boto/boto/s3/key.py +1712 -0
  297. data/packages/gsutil/boto/boto/s3/key.pyc +0 -0
  298. data/packages/gsutil/boto/boto/s3/keyfile.py +134 -0
  299. data/packages/gsutil/boto/boto/s3/keyfile.pyc +0 -0
  300. data/packages/gsutil/boto/boto/s3/lifecycle.py +231 -0
  301. data/packages/gsutil/boto/boto/s3/lifecycle.pyc +0 -0
  302. data/packages/gsutil/boto/boto/s3/multidelete.py +138 -0
  303. data/packages/gsutil/boto/boto/s3/multidelete.pyc +0 -0
  304. data/packages/gsutil/boto/boto/s3/multipart.py +315 -0
  305. data/packages/gsutil/boto/boto/s3/multipart.pyc +0 -0
  306. data/packages/gsutil/boto/boto/s3/prefix.py +42 -0
  307. data/packages/gsutil/boto/boto/s3/prefix.pyc +0 -0
  308. data/packages/gsutil/boto/boto/s3/resumable_download_handler.py +339 -0
  309. data/packages/gsutil/boto/boto/s3/resumable_download_handler.pyc +0 -0
  310. data/packages/gsutil/boto/boto/s3/tagging.py +71 -0
  311. data/packages/gsutil/boto/boto/s3/tagging.pyc +0 -0
  312. data/packages/gsutil/boto/boto/s3/user.py +49 -0
  313. data/packages/gsutil/boto/boto/s3/user.pyc +0 -0
  314. data/packages/gsutil/boto/boto/s3/website.py +237 -0
  315. data/packages/gsutil/boto/boto/s3/website.pyc +0 -0
  316. data/packages/gsutil/boto/boto/sdb/__init__.py +67 -0
  317. data/packages/gsutil/boto/boto/sdb/connection.py +617 -0
  318. data/packages/gsutil/boto/boto/sdb/db/__init__.py +20 -0
  319. data/packages/gsutil/boto/boto/sdb/db/blob.py +75 -0
  320. data/packages/gsutil/boto/boto/sdb/db/key.py +59 -0
  321. data/packages/gsutil/boto/boto/sdb/db/manager/__init__.py +85 -0
  322. data/packages/gsutil/boto/boto/sdb/db/manager/sdbmanager.py +732 -0
  323. data/packages/gsutil/boto/boto/sdb/db/manager/xmlmanager.py +517 -0
  324. data/packages/gsutil/boto/boto/sdb/db/model.py +294 -0
  325. data/packages/gsutil/boto/boto/sdb/db/property.py +703 -0
  326. data/packages/gsutil/boto/boto/sdb/db/query.py +85 -0
  327. data/packages/gsutil/boto/boto/sdb/db/sequence.py +226 -0
  328. data/packages/gsutil/boto/boto/sdb/db/test_db.py +231 -0
  329. data/packages/gsutil/boto/boto/sdb/domain.py +377 -0
  330. data/packages/gsutil/boto/boto/sdb/item.py +181 -0
  331. data/packages/gsutil/boto/boto/sdb/queryresultset.py +92 -0
  332. data/packages/gsutil/boto/boto/sdb/regioninfo.py +32 -0
  333. data/packages/gsutil/boto/boto/services/__init__.py +23 -0
  334. data/packages/gsutil/boto/boto/services/bs.py +179 -0
  335. data/packages/gsutil/boto/boto/services/message.py +58 -0
  336. data/packages/gsutil/boto/boto/services/result.py +136 -0
  337. data/packages/gsutil/boto/boto/services/service.py +161 -0
  338. data/packages/gsutil/boto/boto/services/servicedef.py +91 -0
  339. data/packages/gsutil/boto/boto/services/sonofmmm.cfg +43 -0
  340. data/packages/gsutil/boto/boto/services/sonofmmm.py +81 -0
  341. data/packages/gsutil/boto/boto/services/submit.py +88 -0
  342. data/packages/gsutil/boto/boto/ses/__init__.py +54 -0
  343. data/packages/gsutil/boto/boto/ses/connection.py +521 -0
  344. data/packages/gsutil/boto/boto/ses/exceptions.py +77 -0
  345. data/packages/gsutil/boto/boto/sns/__init__.py +78 -0
  346. data/packages/gsutil/boto/boto/sns/connection.py +431 -0
  347. data/packages/gsutil/boto/boto/sqs/__init__.py +56 -0
  348. data/packages/gsutil/boto/boto/sqs/attributes.py +46 -0
  349. data/packages/gsutil/boto/boto/sqs/batchresults.py +95 -0
  350. data/packages/gsutil/boto/boto/sqs/connection.py +417 -0
  351. data/packages/gsutil/boto/boto/sqs/jsonmessage.py +43 -0
  352. data/packages/gsutil/boto/boto/sqs/message.py +253 -0
  353. data/packages/gsutil/boto/boto/sqs/queue.py +478 -0
  354. data/packages/gsutil/boto/boto/sqs/regioninfo.py +32 -0
  355. data/packages/gsutil/boto/boto/storage_uri.py +835 -0
  356. data/packages/gsutil/boto/boto/storage_uri.pyc +0 -0
  357. data/packages/gsutil/boto/boto/sts/__init__.py +55 -0
  358. data/packages/gsutil/boto/boto/sts/connection.py +207 -0
  359. data/packages/gsutil/boto/boto/sts/credentials.py +215 -0
  360. data/packages/gsutil/boto/boto/swf/__init__.py +60 -0
  361. data/packages/gsutil/boto/boto/swf/exceptions.py +44 -0
  362. data/packages/gsutil/boto/boto/swf/layer1.py +1512 -0
  363. data/packages/gsutil/boto/boto/swf/layer1_decisions.py +287 -0
  364. data/packages/gsutil/boto/boto/swf/layer2.py +342 -0
  365. data/packages/gsutil/boto/boto/utils.py +927 -0
  366. data/packages/gsutil/boto/boto/utils.pyc +0 -0
  367. data/packages/gsutil/boto/boto/vpc/__init__.py +910 -0
  368. data/packages/gsutil/boto/boto/vpc/customergateway.py +54 -0
  369. data/packages/gsutil/boto/boto/vpc/dhcpoptions.py +72 -0
  370. data/packages/gsutil/boto/boto/vpc/internetgateway.py +72 -0
  371. data/packages/gsutil/boto/boto/vpc/routetable.py +109 -0
  372. data/packages/gsutil/boto/boto/vpc/subnet.py +57 -0
  373. data/packages/gsutil/boto/boto/vpc/vpc.py +54 -0
  374. data/packages/gsutil/boto/boto/vpc/vpnconnection.py +60 -0
  375. data/packages/gsutil/boto/boto/vpc/vpngateway.py +83 -0
  376. data/packages/gsutil/boto/docs/BotoCheatSheet.pdf +0 -0
  377. data/packages/gsutil/boto/docs/Makefile +89 -0
  378. data/packages/gsutil/boto/docs/make.bat +113 -0
  379. data/packages/gsutil/boto/docs/source/_templates/layout.html +3 -0
  380. data/packages/gsutil/boto/docs/source/autoscale_tut.rst +220 -0
  381. data/packages/gsutil/boto/docs/source/boto_config_tut.rst +125 -0
  382. data/packages/gsutil/boto/docs/source/boto_theme/static/boto.css_t +239 -0
  383. data/packages/gsutil/boto/docs/source/boto_theme/static/pygments.css +61 -0
  384. data/packages/gsutil/boto/docs/source/boto_theme/theme.conf +3 -0
  385. data/packages/gsutil/boto/docs/source/cloudfront_tut.rst +196 -0
  386. data/packages/gsutil/boto/docs/source/cloudsearch_tut.rst +411 -0
  387. data/packages/gsutil/boto/docs/source/cloudwatch_tut.rst +116 -0
  388. data/packages/gsutil/boto/docs/source/conf.py +32 -0
  389. data/packages/gsutil/boto/docs/source/contributing.rst +204 -0
  390. data/packages/gsutil/boto/docs/source/documentation.rst +59 -0
  391. data/packages/gsutil/boto/docs/source/dynamodb_tut.rst +339 -0
  392. data/packages/gsutil/boto/docs/source/ec2_tut.rst +86 -0
  393. data/packages/gsutil/boto/docs/source/elb_tut.rst +257 -0
  394. data/packages/gsutil/boto/docs/source/emr_tut.rst +108 -0
  395. data/packages/gsutil/boto/docs/source/index.rst +146 -0
  396. data/packages/gsutil/boto/docs/source/rds_tut.rst +108 -0
  397. data/packages/gsutil/boto/docs/source/ref/autoscale.rst +62 -0
  398. data/packages/gsutil/boto/docs/source/ref/beanstalk.rst +26 -0
  399. data/packages/gsutil/boto/docs/source/ref/boto.rst +47 -0
  400. data/packages/gsutil/boto/docs/source/ref/cloudformation.rst +34 -0
  401. data/packages/gsutil/boto/docs/source/ref/cloudfront.rst +68 -0
  402. data/packages/gsutil/boto/docs/source/ref/cloudsearch.rst +59 -0
  403. data/packages/gsutil/boto/docs/source/ref/cloudwatch.rst +27 -0
  404. data/packages/gsutil/boto/docs/source/ref/contrib.rst +32 -0
  405. data/packages/gsutil/boto/docs/source/ref/datapipeline.rst +26 -0
  406. data/packages/gsutil/boto/docs/source/ref/dynamodb.rst +61 -0
  407. data/packages/gsutil/boto/docs/source/ref/ec2.rst +140 -0
  408. data/packages/gsutil/boto/docs/source/ref/ecs.rst +19 -0
  409. data/packages/gsutil/boto/docs/source/ref/elasticache.rst +19 -0
  410. data/packages/gsutil/boto/docs/source/ref/elastictranscoder.rst +26 -0
  411. data/packages/gsutil/boto/docs/source/ref/elb.rst +47 -0
  412. data/packages/gsutil/boto/docs/source/ref/emr.rst +34 -0
  413. data/packages/gsutil/boto/docs/source/ref/file.rst +34 -0
  414. data/packages/gsutil/boto/docs/source/ref/fps.rst +19 -0
  415. data/packages/gsutil/boto/docs/source/ref/glacier.rst +63 -0
  416. data/packages/gsutil/boto/docs/source/ref/gs.rst +72 -0
  417. data/packages/gsutil/boto/docs/source/ref/iam.rst +27 -0
  418. data/packages/gsutil/boto/docs/source/ref/index.rst +40 -0
  419. data/packages/gsutil/boto/docs/source/ref/manage.rst +47 -0
  420. data/packages/gsutil/boto/docs/source/ref/mturk.rst +54 -0
  421. data/packages/gsutil/boto/docs/source/ref/mws.rst +33 -0
  422. data/packages/gsutil/boto/docs/source/ref/pyami.rst +103 -0
  423. data/packages/gsutil/boto/docs/source/ref/rds.rst +47 -0
  424. data/packages/gsutil/boto/docs/source/ref/route53.rst +34 -0
  425. data/packages/gsutil/boto/docs/source/ref/s3.rst +111 -0
  426. data/packages/gsutil/boto/docs/source/ref/sdb.rst +45 -0
  427. data/packages/gsutil/boto/docs/source/ref/sdb_db.rst +83 -0
  428. data/packages/gsutil/boto/docs/source/ref/services.rst +61 -0
  429. data/packages/gsutil/boto/docs/source/ref/ses.rst +21 -0
  430. data/packages/gsutil/boto/docs/source/ref/sns.rst +17 -0
  431. data/packages/gsutil/boto/docs/source/ref/sqs.rst +61 -0
  432. data/packages/gsutil/boto/docs/source/ref/sts.rst +25 -0
  433. data/packages/gsutil/boto/docs/source/ref/swf.rst +22 -0
  434. data/packages/gsutil/boto/docs/source/ref/vpc.rst +54 -0
  435. data/packages/gsutil/boto/docs/source/s3_tut.rst +450 -0
  436. data/packages/gsutil/boto/docs/source/security_groups.rst +82 -0
  437. data/packages/gsutil/boto/docs/source/ses_tut.rst +171 -0
  438. data/packages/gsutil/boto/docs/source/simpledb_tut.rst +188 -0
  439. data/packages/gsutil/boto/docs/source/sqs_tut.rst +246 -0
  440. data/packages/gsutil/boto/docs/source/vpc_tut.rst +100 -0
  441. data/packages/gsutil/boto/pylintrc +305 -0
  442. data/packages/gsutil/boto/requirements.txt +10 -0
  443. data/packages/gsutil/boto/setup.py +89 -0
  444. data/packages/gsutil/boto/tests/__init__.py +20 -0
  445. data/packages/gsutil/boto/tests/db/test_lists.py +96 -0
  446. data/packages/gsutil/boto/tests/db/test_password.py +128 -0
  447. data/packages/gsutil/boto/tests/db/test_query.py +152 -0
  448. data/packages/gsutil/boto/tests/db/test_sequence.py +109 -0
  449. data/packages/gsutil/boto/tests/devpay/__init__.py +0 -0
  450. data/packages/gsutil/boto/tests/devpay/test_s3.py +181 -0
  451. data/packages/gsutil/boto/tests/fps/__init__.py +0 -0
  452. data/packages/gsutil/boto/tests/fps/test.py +100 -0
  453. data/packages/gsutil/boto/tests/fps/test_verify_signature.py +12 -0
  454. data/packages/gsutil/boto/tests/integration/__init__.py +0 -0
  455. data/packages/gsutil/boto/tests/integration/beanstalk/test_wrapper.py +209 -0
  456. data/packages/gsutil/boto/tests/integration/cloudformation/__init__.py +21 -0
  457. data/packages/gsutil/boto/tests/integration/cloudformation/test_cert_verification.py +40 -0
  458. data/packages/gsutil/boto/tests/integration/cloudformation/test_connection.py +110 -0
  459. data/packages/gsutil/boto/tests/integration/cloudsearch/__init__.py +21 -0
  460. data/packages/gsutil/boto/tests/integration/cloudsearch/test_cert_verification.py +40 -0
  461. data/packages/gsutil/boto/tests/integration/datapipeline/test_layer1.py +122 -0
  462. data/packages/gsutil/boto/tests/integration/dynamodb/__init__.py +20 -0
  463. data/packages/gsutil/boto/tests/integration/dynamodb/test_cert_verification.py +40 -0
  464. data/packages/gsutil/boto/tests/integration/dynamodb/test_layer1.py +266 -0
  465. data/packages/gsutil/boto/tests/integration/dynamodb/test_layer2.py +484 -0
  466. data/packages/gsutil/boto/tests/integration/dynamodb/test_table.py +84 -0
  467. data/packages/gsutil/boto/tests/integration/ec2/__init__.py +20 -0
  468. data/packages/gsutil/boto/tests/integration/ec2/autoscale/__init__.py +21 -0
  469. data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_cert_verification.py +40 -0
  470. data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_connection.py +167 -0
  471. data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/__init__.py +20 -0
  472. data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_cert_verification.py +40 -0
  473. data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_connection.py +277 -0
  474. data/packages/gsutil/boto/tests/integration/ec2/elb/__init__.py +20 -0
  475. data/packages/gsutil/boto/tests/integration/ec2/elb/test_cert_verification.py +40 -0
  476. data/packages/gsutil/boto/tests/integration/ec2/elb/test_connection.py +130 -0
  477. data/packages/gsutil/boto/tests/integration/ec2/test_cert_verification.py +40 -0
  478. data/packages/gsutil/boto/tests/integration/ec2/test_connection.py +192 -0
  479. data/packages/gsutil/boto/tests/integration/ec2/vpc/__init__.py +0 -0
  480. data/packages/gsutil/boto/tests/integration/ec2/vpc/test_connection.py +95 -0
  481. data/packages/gsutil/boto/tests/integration/elasticache/__init__.py +0 -0
  482. data/packages/gsutil/boto/tests/integration/elasticache/test_layer1.py +67 -0
  483. data/packages/gsutil/boto/tests/integration/elastictranscoder/__init__.py +0 -0
  484. data/packages/gsutil/boto/tests/integration/elastictranscoder/test_cert_verification.py +35 -0
  485. data/packages/gsutil/boto/tests/integration/elastictranscoder/test_layer1.py +115 -0
  486. data/packages/gsutil/boto/tests/integration/emr/__init__.py +20 -0
  487. data/packages/gsutil/boto/tests/integration/emr/test_cert_verification.py +40 -0
  488. data/packages/gsutil/boto/tests/integration/glacier/__init__.py +22 -0
  489. data/packages/gsutil/boto/tests/integration/glacier/test_cert_verification.py +40 -0
  490. data/packages/gsutil/boto/tests/integration/glacier/test_layer1.py +44 -0
  491. data/packages/gsutil/boto/tests/integration/glacier/test_layer2.py +45 -0
  492. data/packages/gsutil/boto/tests/integration/gs/__init__.py +0 -0
  493. data/packages/gsutil/boto/tests/integration/gs/cb_test_harness.py +71 -0
  494. data/packages/gsutil/boto/tests/integration/gs/test_basic.py +379 -0
  495. data/packages/gsutil/boto/tests/integration/gs/test_generation_conditionals.py +399 -0
  496. data/packages/gsutil/boto/tests/integration/gs/test_resumable_downloads.py +358 -0
  497. data/packages/gsutil/boto/tests/integration/gs/test_resumable_uploads.py +525 -0
  498. data/packages/gsutil/boto/tests/integration/gs/test_storage_uri.py +125 -0
  499. data/packages/gsutil/boto/tests/integration/gs/test_versioning.py +268 -0
  500. data/packages/gsutil/boto/tests/integration/gs/testcase.py +116 -0
  501. data/packages/gsutil/boto/tests/integration/gs/util.py +63 -0
  502. data/packages/gsutil/boto/tests/integration/iam/__init__.py +20 -0
  503. data/packages/gsutil/boto/tests/integration/iam/test_cert_verification.py +40 -0
  504. data/packages/gsutil/boto/tests/integration/mws/__init__.py +0 -0
  505. data/packages/gsutil/boto/tests/integration/mws/test.py +100 -0
  506. data/packages/gsutil/boto/tests/integration/rds/__init__.py +21 -0
  507. data/packages/gsutil/boto/tests/integration/rds/test_cert_verification.py +40 -0
  508. data/packages/gsutil/boto/tests/integration/route53/__init__.py +20 -0
  509. data/packages/gsutil/boto/tests/integration/route53/test_cert_verification.py +40 -0
  510. data/packages/gsutil/boto/tests/integration/route53/test_zone.py +132 -0
  511. data/packages/gsutil/boto/tests/integration/s3/__init__.py +20 -0
  512. data/packages/gsutil/boto/tests/integration/s3/mock_storage_service.py +589 -0
  513. data/packages/gsutil/boto/tests/integration/s3/other_cacerts.txt +70 -0
  514. data/packages/gsutil/boto/tests/integration/s3/test_bucket.py +263 -0
  515. data/packages/gsutil/boto/tests/integration/s3/test_cert_verification.py +40 -0
  516. data/packages/gsutil/boto/tests/integration/s3/test_connection.py +245 -0
  517. data/packages/gsutil/boto/tests/integration/s3/test_cors.py +78 -0
  518. data/packages/gsutil/boto/tests/integration/s3/test_encryption.py +115 -0
  519. data/packages/gsutil/boto/tests/integration/s3/test_https_cert_validation.py +141 -0
  520. data/packages/gsutil/boto/tests/integration/s3/test_key.py +375 -0
  521. data/packages/gsutil/boto/tests/integration/s3/test_mfa.py +95 -0
  522. data/packages/gsutil/boto/tests/integration/s3/test_multidelete.py +181 -0
  523. data/packages/gsutil/boto/tests/integration/s3/test_multipart.py +139 -0
  524. data/packages/gsutil/boto/tests/integration/s3/test_pool.py +246 -0
  525. data/packages/gsutil/boto/tests/integration/s3/test_versioning.py +158 -0
  526. data/packages/gsutil/boto/tests/integration/sdb/__init__.py +20 -0
  527. data/packages/gsutil/boto/tests/integration/sdb/test_cert_verification.py +40 -0
  528. data/packages/gsutil/boto/tests/integration/sdb/test_connection.py +119 -0
  529. data/packages/gsutil/boto/tests/integration/ses/__init__.py +0 -0
  530. data/packages/gsutil/boto/tests/integration/ses/test_cert_verification.py +40 -0
  531. data/packages/gsutil/boto/tests/integration/ses/test_connection.py +38 -0
  532. data/packages/gsutil/boto/tests/integration/sns/__init__.py +20 -0
  533. data/packages/gsutil/boto/tests/integration/sns/test_cert_verification.py +40 -0
  534. data/packages/gsutil/boto/tests/integration/sqs/__init__.py +20 -0
  535. data/packages/gsutil/boto/tests/integration/sqs/test_cert_verification.py +40 -0
  536. data/packages/gsutil/boto/tests/integration/sqs/test_connection.py +217 -0
  537. data/packages/gsutil/boto/tests/integration/sts/__init__.py +20 -0
  538. data/packages/gsutil/boto/tests/integration/sts/test_cert_verification.py +40 -0
  539. data/packages/gsutil/boto/tests/integration/sts/test_session_token.py +65 -0
  540. data/packages/gsutil/boto/tests/integration/swf/__init__.py +0 -0
  541. data/packages/gsutil/boto/tests/integration/swf/test_cert_verification.py +40 -0
  542. data/packages/gsutil/boto/tests/integration/swf/test_layer1.py +246 -0
  543. data/packages/gsutil/boto/tests/integration/swf/test_layer1_workflow_execution.py +173 -0
  544. data/packages/gsutil/boto/tests/mturk/__init__.py +0 -0
  545. data/packages/gsutil/boto/tests/mturk/_init_environment.py +28 -0
  546. data/packages/gsutil/boto/tests/mturk/all_tests.py +24 -0
  547. data/packages/gsutil/boto/tests/mturk/cleanup_tests.py +47 -0
  548. data/packages/gsutil/boto/tests/mturk/common.py +45 -0
  549. data/packages/gsutil/boto/tests/mturk/create_free_text_question_regex.doctest +100 -0
  550. data/packages/gsutil/boto/tests/mturk/create_hit.doctest +92 -0
  551. data/packages/gsutil/boto/tests/mturk/create_hit_binary.doctest +94 -0
  552. data/packages/gsutil/boto/tests/mturk/create_hit_external.py +21 -0
  553. data/packages/gsutil/boto/tests/mturk/create_hit_from_hit_type.doctest +103 -0
  554. data/packages/gsutil/boto/tests/mturk/create_hit_test.py +21 -0
  555. data/packages/gsutil/boto/tests/mturk/create_hit_with_qualifications.py +16 -0
  556. data/packages/gsutil/boto/tests/mturk/hit_persistence.py +27 -0
  557. data/packages/gsutil/boto/tests/mturk/mocks.py +11 -0
  558. data/packages/gsutil/boto/tests/mturk/reviewable_hits.doctest +129 -0
  559. data/packages/gsutil/boto/tests/mturk/run-doctest.py +13 -0
  560. data/packages/gsutil/boto/tests/mturk/search_hits.doctest +16 -0
  561. data/packages/gsutil/boto/tests/mturk/selenium_support.py +61 -0
  562. data/packages/gsutil/boto/tests/mturk/support.py +7 -0
  563. data/packages/gsutil/boto/tests/mturk/test_disable_hit.py +11 -0
  564. data/packages/gsutil/boto/tests/test.py +59 -0
  565. data/packages/gsutil/boto/tests/unit/__init__.py +79 -0
  566. data/packages/gsutil/boto/tests/unit/auth/__init__.py +0 -0
  567. data/packages/gsutil/boto/tests/unit/auth/test_sigv4.py +73 -0
  568. data/packages/gsutil/boto/tests/unit/beanstalk/__init__.py +0 -0
  569. data/packages/gsutil/boto/tests/unit/beanstalk/test_layer1.py +128 -0
  570. data/packages/gsutil/boto/tests/unit/cloudformation/__init__.py +0 -0
  571. data/packages/gsutil/boto/tests/unit/cloudformation/test_connection.py +605 -0
  572. data/packages/gsutil/boto/tests/unit/cloudformation/test_stack.py +63 -0
  573. data/packages/gsutil/boto/tests/unit/cloudfront/__init__.py +0 -0
  574. data/packages/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py +113 -0
  575. data/packages/gsutil/boto/tests/unit/cloudfront/test_signed_urls.py +354 -0
  576. data/packages/gsutil/boto/tests/unit/cloudsearch/__init__.py +1 -0
  577. data/packages/gsutil/boto/tests/unit/cloudsearch/test_connection.py +241 -0
  578. data/packages/gsutil/boto/tests/unit/cloudsearch/test_document.py +324 -0
  579. data/packages/gsutil/boto/tests/unit/cloudsearch/test_search.py +325 -0
  580. data/packages/gsutil/boto/tests/unit/dynamodb/__init__.py +0 -0
  581. data/packages/gsutil/boto/tests/unit/dynamodb/test_batch.py +103 -0
  582. data/packages/gsutil/boto/tests/unit/dynamodb/test_layer2.py +119 -0
  583. data/packages/gsutil/boto/tests/unit/dynamodb/test_types.py +82 -0
  584. data/packages/gsutil/boto/tests/unit/ec2/__init__.py +0 -0
  585. data/packages/gsutil/boto/tests/unit/ec2/autoscale/__init__.py +0 -0
  586. data/packages/gsutil/boto/tests/unit/ec2/autoscale/test_group.py +162 -0
  587. data/packages/gsutil/boto/tests/unit/ec2/test_address.py +39 -0
  588. data/packages/gsutil/boto/tests/unit/ec2/test_blockdevicemapping.py +79 -0
  589. data/packages/gsutil/boto/tests/unit/ec2/test_connection.py +480 -0
  590. data/packages/gsutil/boto/tests/unit/ec2/test_instance.py +243 -0
  591. data/packages/gsutil/boto/tests/unit/ec2/test_networkinterface.py +140 -0
  592. data/packages/gsutil/boto/tests/unit/ec2/test_volume.py +248 -0
  593. data/packages/gsutil/boto/tests/unit/emr/test_emr_responses.py +373 -0
  594. data/packages/gsutil/boto/tests/unit/glacier/__init__.py +0 -0
  595. data/packages/gsutil/boto/tests/unit/glacier/test_concurrent.py +120 -0
  596. data/packages/gsutil/boto/tests/unit/glacier/test_job.py +60 -0
  597. data/packages/gsutil/boto/tests/unit/glacier/test_layer1.py +98 -0
  598. data/packages/gsutil/boto/tests/unit/glacier/test_layer2.py +266 -0
  599. data/packages/gsutil/boto/tests/unit/glacier/test_utils.py +116 -0
  600. data/packages/gsutil/boto/tests/unit/glacier/test_vault.py +100 -0
  601. data/packages/gsutil/boto/tests/unit/glacier/test_writer.py +185 -0
  602. data/packages/gsutil/boto/tests/unit/provider/__init__.py +0 -0
  603. data/packages/gsutil/boto/tests/unit/provider/test_provider.py +176 -0
  604. data/packages/gsutil/boto/tests/unit/rds/__init__.py +0 -0
  605. data/packages/gsutil/boto/tests/unit/rds/test_connection.py +131 -0
  606. data/packages/gsutil/boto/tests/unit/s3/__init__.py +0 -0
  607. data/packages/gsutil/boto/tests/unit/s3/test_cors_configuration.py +77 -0
  608. data/packages/gsutil/boto/tests/unit/s3/test_key.py +75 -0
  609. data/packages/gsutil/boto/tests/unit/s3/test_keyfile.py +101 -0
  610. data/packages/gsutil/boto/tests/unit/s3/test_lifecycle.py +97 -0
  611. data/packages/gsutil/boto/tests/unit/s3/test_tagging.py +47 -0
  612. data/packages/gsutil/boto/tests/unit/s3/test_uri.py +257 -0
  613. data/packages/gsutil/boto/tests/unit/s3/test_website.py +188 -0
  614. data/packages/gsutil/boto/tests/unit/sns/__init__.py +0 -0
  615. data/packages/gsutil/boto/tests/unit/sns/test_connection.py +99 -0
  616. data/packages/gsutil/boto/tests/unit/sqs/__init__.py +0 -0
  617. data/packages/gsutil/boto/tests/unit/sqs/test_connection.py +98 -0
  618. data/packages/gsutil/boto/tests/unit/sqs/test_queue.py +40 -0
  619. data/packages/gsutil/boto/tests/unit/sts/test_connection.py +74 -0
  620. data/packages/gsutil/boto/tests/unit/test_connection.py +60 -0
  621. data/packages/gsutil/boto/tests/unit/utils/test_utils.py +109 -0
  622. data/packages/gsutil/boto/tox.ini +8 -0
  623. data/packages/gsutil/gslib/README +5 -0
  624. data/packages/gsutil/gslib/__init__.py +22 -0
  625. data/packages/gsutil/gslib/__init__.pyc +0 -0
  626. data/packages/gsutil/gslib/addlhelp/__init__.py +15 -0
  627. data/packages/gsutil/gslib/addlhelp/acls.py +234 -0
  628. data/packages/gsutil/gslib/addlhelp/anon.py +57 -0
  629. data/packages/gsutil/gslib/addlhelp/command_opts.py +116 -0
  630. data/packages/gsutil/gslib/addlhelp/dev.py +139 -0
  631. data/packages/gsutil/gslib/addlhelp/metadata.py +186 -0
  632. data/packages/gsutil/gslib/addlhelp/naming.py +173 -0
  633. data/packages/gsutil/gslib/addlhelp/prod.py +160 -0
  634. data/packages/gsutil/gslib/addlhelp/projects.py +130 -0
  635. data/packages/gsutil/gslib/addlhelp/subdirs.py +110 -0
  636. data/packages/gsutil/gslib/addlhelp/support.py +86 -0
  637. data/packages/gsutil/gslib/addlhelp/versioning.py +242 -0
  638. data/packages/gsutil/gslib/addlhelp/wildcards.py +170 -0
  639. data/packages/gsutil/gslib/bucket_listing_ref.py +175 -0
  640. data/packages/gsutil/gslib/bucket_listing_ref.pyc +0 -0
  641. data/packages/gsutil/gslib/command.py +722 -0
  642. data/packages/gsutil/gslib/command.pyc +0 -0
  643. data/packages/gsutil/gslib/command_runner.py +101 -0
  644. data/packages/gsutil/gslib/command_runner.pyc +0 -0
  645. data/packages/gsutil/gslib/commands/__init__.py +15 -0
  646. data/packages/gsutil/gslib/commands/__init__.pyc +0 -0
  647. data/packages/gsutil/gslib/commands/cat.py +131 -0
  648. data/packages/gsutil/gslib/commands/cat.pyc +0 -0
  649. data/packages/gsutil/gslib/commands/chacl.py +532 -0
  650. data/packages/gsutil/gslib/commands/chacl.pyc +0 -0
  651. data/packages/gsutil/gslib/commands/config.py +694 -0
  652. data/packages/gsutil/gslib/commands/config.pyc +0 -0
  653. data/packages/gsutil/gslib/commands/cp.py +1818 -0
  654. data/packages/gsutil/gslib/commands/cp.pyc +0 -0
  655. data/packages/gsutil/gslib/commands/disablelogging.py +101 -0
  656. data/packages/gsutil/gslib/commands/disablelogging.pyc +0 -0
  657. data/packages/gsutil/gslib/commands/enablelogging.py +149 -0
  658. data/packages/gsutil/gslib/commands/enablelogging.pyc +0 -0
  659. data/packages/gsutil/gslib/commands/getacl.py +82 -0
  660. data/packages/gsutil/gslib/commands/getacl.pyc +0 -0
  661. data/packages/gsutil/gslib/commands/getcors.py +121 -0
  662. data/packages/gsutil/gslib/commands/getcors.pyc +0 -0
  663. data/packages/gsutil/gslib/commands/getdefacl.py +86 -0
  664. data/packages/gsutil/gslib/commands/getdefacl.pyc +0 -0
  665. data/packages/gsutil/gslib/commands/getlogging.py +137 -0
  666. data/packages/gsutil/gslib/commands/getlogging.pyc +0 -0
  667. data/packages/gsutil/gslib/commands/getversioning.py +116 -0
  668. data/packages/gsutil/gslib/commands/getversioning.pyc +0 -0
  669. data/packages/gsutil/gslib/commands/getwebcfg.py +122 -0
  670. data/packages/gsutil/gslib/commands/getwebcfg.pyc +0 -0
  671. data/packages/gsutil/gslib/commands/help.py +218 -0
  672. data/packages/gsutil/gslib/commands/help.pyc +0 -0
  673. data/packages/gsutil/gslib/commands/ls.py +578 -0
  674. data/packages/gsutil/gslib/commands/ls.pyc +0 -0
  675. data/packages/gsutil/gslib/commands/mb.py +172 -0
  676. data/packages/gsutil/gslib/commands/mb.pyc +0 -0
  677. data/packages/gsutil/gslib/commands/mv.py +159 -0
  678. data/packages/gsutil/gslib/commands/mv.pyc +0 -0
  679. data/packages/gsutil/gslib/commands/perfdiag.py +903 -0
  680. data/packages/gsutil/gslib/commands/perfdiag.pyc +0 -0
  681. data/packages/gsutil/gslib/commands/rb.py +113 -0
  682. data/packages/gsutil/gslib/commands/rb.pyc +0 -0
  683. data/packages/gsutil/gslib/commands/rm.py +239 -0
  684. data/packages/gsutil/gslib/commands/rm.pyc +0 -0
  685. data/packages/gsutil/gslib/commands/setacl.py +138 -0
  686. data/packages/gsutil/gslib/commands/setacl.pyc +0 -0
  687. data/packages/gsutil/gslib/commands/setcors.py +145 -0
  688. data/packages/gsutil/gslib/commands/setcors.pyc +0 -0
  689. data/packages/gsutil/gslib/commands/setdefacl.py +105 -0
  690. data/packages/gsutil/gslib/commands/setdefacl.pyc +0 -0
  691. data/packages/gsutil/gslib/commands/setmeta.py +428 -0
  692. data/packages/gsutil/gslib/commands/setmeta.pyc +0 -0
  693. data/packages/gsutil/gslib/commands/setversioning.py +114 -0
  694. data/packages/gsutil/gslib/commands/setversioning.pyc +0 -0
  695. data/packages/gsutil/gslib/commands/setwebcfg.py +190 -0
  696. data/packages/gsutil/gslib/commands/setwebcfg.pyc +0 -0
  697. data/packages/gsutil/gslib/commands/test.py +228 -0
  698. data/packages/gsutil/gslib/commands/test.pyc +0 -0
  699. data/packages/gsutil/gslib/commands/update.py +305 -0
  700. data/packages/gsutil/gslib/commands/update.pyc +0 -0
  701. data/packages/gsutil/gslib/commands/version.py +150 -0
  702. data/packages/gsutil/gslib/commands/version.pyc +0 -0
  703. data/packages/gsutil/gslib/exception.py +76 -0
  704. data/packages/gsutil/gslib/exception.pyc +0 -0
  705. data/packages/gsutil/gslib/help_provider.py +81 -0
  706. data/packages/gsutil/gslib/help_provider.pyc +0 -0
  707. data/packages/gsutil/gslib/name_expansion.py +550 -0
  708. data/packages/gsutil/gslib/name_expansion.pyc +0 -0
  709. data/packages/gsutil/gslib/no_op_auth_plugin.py +30 -0
  710. data/packages/gsutil/gslib/plurality_checkable_iterator.py +56 -0
  711. data/packages/gsutil/gslib/plurality_checkable_iterator.pyc +0 -0
  712. data/packages/gsutil/gslib/project_id.py +67 -0
  713. data/packages/gsutil/gslib/project_id.pyc +0 -0
  714. data/packages/gsutil/gslib/storage_uri_builder.py +56 -0
  715. data/packages/gsutil/gslib/storage_uri_builder.pyc +0 -0
  716. data/packages/gsutil/gslib/tests/__init__.py +15 -0
  717. data/packages/gsutil/gslib/tests/__init__.pyc +0 -0
  718. data/packages/gsutil/gslib/tests/test_chacl.py +236 -0
  719. data/packages/gsutil/gslib/tests/test_cp.py +267 -0
  720. data/packages/gsutil/gslib/tests/test_data/test.gif +0 -0
  721. data/packages/gsutil/gslib/tests/test_data/test.mp3 +0 -0
  722. data/packages/gsutil/gslib/tests/test_ls.py +66 -0
  723. data/packages/gsutil/gslib/tests/test_mv.py +69 -0
  724. data/packages/gsutil/gslib/tests/test_naming.py +989 -0
  725. data/packages/gsutil/gslib/tests/test_perfdiag.py +41 -0
  726. data/packages/gsutil/gslib/tests/test_plurality_checkable_iterator.py +67 -0
  727. data/packages/gsutil/gslib/tests/test_rm.py +143 -0
  728. data/packages/gsutil/gslib/tests/test_setacl.py +152 -0
  729. data/packages/gsutil/gslib/tests/test_setcors.py +168 -0
  730. data/packages/gsutil/gslib/tests/test_setmeta.py +91 -0
  731. data/packages/gsutil/gslib/tests/test_setversioning.py +44 -0
  732. data/packages/gsutil/gslib/tests/test_setwebcfg.py +63 -0
  733. data/packages/gsutil/gslib/tests/test_thread_pool.py +92 -0
  734. data/packages/gsutil/gslib/tests/test_wildcard_iterator.py +364 -0
  735. data/packages/gsutil/gslib/tests/testcase/__init__.py +18 -0
  736. data/packages/gsutil/gslib/tests/testcase/base.py +89 -0
  737. data/packages/gsutil/gslib/tests/testcase/integration_testcase.py +197 -0
  738. data/packages/gsutil/gslib/tests/testcase/unit_testcase.py +230 -0
  739. data/packages/gsutil/gslib/tests/util.py +125 -0
  740. data/packages/gsutil/gslib/tests/util.pyc +0 -0
  741. data/packages/gsutil/gslib/thread_pool.py +79 -0
  742. data/packages/gsutil/gslib/thread_pool.pyc +0 -0
  743. data/packages/gsutil/gslib/util.py +151 -0
  744. data/packages/gsutil/gslib/util.pyc +0 -0
  745. data/packages/gsutil/gslib/wildcard_iterator.py +492 -0
  746. data/packages/gsutil/gslib/wildcard_iterator.pyc +0 -0
  747. data/packages/gsutil/gsutil +377 -0
  748. data/packages/gsutil/gsutil.spec.in +75 -0
  749. data/packages/gsutil/oauth2_plugin/__init__.py +22 -0
  750. data/packages/gsutil/oauth2_plugin/__init__.pyc +0 -0
  751. data/packages/gsutil/oauth2_plugin/oauth2_client.py +642 -0
  752. data/packages/gsutil/oauth2_plugin/oauth2_client.pyc +0 -0
  753. data/packages/gsutil/oauth2_plugin/oauth2_client_test.py +374 -0
  754. data/packages/gsutil/oauth2_plugin/oauth2_helper.py +110 -0
  755. data/packages/gsutil/oauth2_plugin/oauth2_helper.pyc +0 -0
  756. data/packages/gsutil/oauth2_plugin/oauth2_plugin.py +24 -0
  757. data/packages/gsutil/oauth2_plugin/oauth2_plugin.pyc +0 -0
  758. data/packages/gsutil/pkg_gen.sh +54 -0
  759. data/packages/gsutil/pkg_util.py +60 -0
  760. data/packages/gsutil/setup.py +141 -0
  761. data/packages/gsutil/third_party/__init__.py +0 -0
  762. data/packages/gsutil/third_party/__init__.pyc +0 -0
  763. data/packages/gsutil/third_party/fancy_urllib/README +21 -0
  764. data/packages/gsutil/third_party/fancy_urllib/__init__.py +398 -0
  765. data/packages/gsutil/third_party/fancy_urllib/__init__.pyc +0 -0
  766. data/tasks/rubygem.rake +3 -1
  767. metadata +770 -7
  768. metadata.gz.sig +0 -0
@@ -0,0 +1,798 @@
1
+ # Copyright (c) 2011 Mitch Garnaat http://garnaat.org/
2
+ # Copyright (c) 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved
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.dynamodb.layer1 import Layer1
24
+ from boto.dynamodb.table import Table
25
+ from boto.dynamodb.schema import Schema
26
+ from boto.dynamodb.item import Item
27
+ from boto.dynamodb.batch import BatchList, BatchWriteList
28
+ from boto.dynamodb.types import get_dynamodb_type, Dynamizer, \
29
+ LossyFloatDynamizer
30
+
31
+
32
+ class TableGenerator:
33
+ """
34
+ This is an object that wraps up the table_generator function.
35
+ The only real reason to have this is that we want to be able
36
+ to accumulate and return the ConsumedCapacityUnits element that
37
+ is part of each response.
38
+
39
+ :ivar last_evaluated_key: A sequence representing the key(s)
40
+ of the item last evaluated, or None if no additional
41
+ results are available.
42
+
43
+ :ivar remaining: The remaining quantity of results requested.
44
+
45
+ :ivar table: The table to which the call was made.
46
+ """
47
+
48
+ def __init__(self, table, callable, remaining, item_class, kwargs):
49
+ self.table = table
50
+ self.callable = callable
51
+ self.remaining = -1 if remaining is None else remaining
52
+ self.item_class = item_class
53
+ self.kwargs = kwargs
54
+ self._consumed_units = 0.0
55
+ self.last_evaluated_key = None
56
+ self._count = 0
57
+ self._scanned_count = 0
58
+ self._response = None
59
+
60
+ @property
61
+ def count(self):
62
+ """
63
+ The total number of items retrieved thus far. This value changes with
64
+ iteration and even when issuing a call with count=True, it is necessary
65
+ to complete the iteration to assert an accurate count value.
66
+ """
67
+ self.response
68
+ return self._count
69
+
70
+ @property
71
+ def scanned_count(self):
72
+ """
73
+ As above, but representing the total number of items scanned by
74
+ DynamoDB, without regard to any filters.
75
+ """
76
+ self.response
77
+ return self._scanned_count
78
+
79
+ @property
80
+ def consumed_units(self):
81
+ """
82
+ Returns a float representing the ConsumedCapacityUnits accumulated.
83
+ """
84
+ self.response
85
+ return self._consumed_units
86
+
87
+ @property
88
+ def response(self):
89
+ """
90
+ The current response to the call from DynamoDB.
91
+ """
92
+ return self.next_response() if self._response is None else self._response
93
+
94
+ def next_response(self):
95
+ """
96
+ Issue a call and return the result. You can invoke this method
97
+ while iterating over the TableGenerator in order to skip to the
98
+ next "page" of results.
99
+ """
100
+ # preserve any existing limit in case the user alters self.remaining
101
+ limit = self.kwargs.get('limit')
102
+ if self.remaining > 0 and limit is None or limit > self.remaining:
103
+ self.kwargs['limit'] = self.remaining
104
+ self._response = self.callable(**self.kwargs)
105
+ self.kwargs['limit'] = limit
106
+ self._consumed_units += self._response.get('ConsumedCapacityUnits', 0.0)
107
+ self._count += self._response.get('Count', 0)
108
+ self._scanned_count += self._response.get('ScannedCount', 0)
109
+ # at the expense of a possibly gratuitous dynamize, ensure that
110
+ # early generator termination won't result in bad LEK values
111
+ if 'LastEvaluatedKey' in self._response:
112
+ lek = self._response['LastEvaluatedKey']
113
+ esk = self.table.layer2.dynamize_last_evaluated_key(lek)
114
+ self.kwargs['exclusive_start_key'] = esk
115
+ lektuple = (lek['HashKeyElement'],)
116
+ if 'RangeKeyElement' in lek:
117
+ lektuple += (lek['RangeKeyElement'],)
118
+ self.last_evaluated_key = lektuple
119
+ else:
120
+ self.last_evaluated_key = None
121
+ return self._response
122
+
123
+ def __iter__(self):
124
+ while self.remaining != 0:
125
+ response = self.response
126
+ for item in response.get('Items', []):
127
+ self.remaining -= 1
128
+ yield self.item_class(self.table, attrs=item)
129
+ if self.remaining == 0:
130
+ break
131
+ if response is not self._response:
132
+ break
133
+ else:
134
+ if self.last_evaluated_key is not None:
135
+ self.next_response()
136
+ continue
137
+ break
138
+ if response is not self._response:
139
+ continue
140
+ break
141
+
142
+
143
+ class Layer2(object):
144
+
145
+ def __init__(self, aws_access_key_id=None, aws_secret_access_key=None,
146
+ is_secure=True, port=None, proxy=None, proxy_port=None,
147
+ debug=0, security_token=None, region=None,
148
+ validate_certs=True, dynamizer=LossyFloatDynamizer):
149
+ self.layer1 = Layer1(aws_access_key_id, aws_secret_access_key,
150
+ is_secure, port, proxy, proxy_port,
151
+ debug, security_token, region,
152
+ validate_certs=validate_certs)
153
+ self.dynamizer = dynamizer()
154
+
155
+ def use_decimals(self):
156
+ """
157
+ Use the ``decimal.Decimal`` type for encoding/decoding numeric types.
158
+
159
+ By default, ints/floats are used to represent numeric types
160
+ ('N', 'NS') received from DynamoDB. Using the ``Decimal``
161
+ type is recommended to prevent loss of precision.
162
+
163
+ """
164
+ # Eventually this should be made the default dynamizer.
165
+ self.dynamizer = Dynamizer()
166
+
167
+ def dynamize_attribute_updates(self, pending_updates):
168
+ """
169
+ Convert a set of pending item updates into the structure
170
+ required by Layer1.
171
+ """
172
+ d = {}
173
+ for attr_name in pending_updates:
174
+ action, value = pending_updates[attr_name]
175
+ if value is None:
176
+ # DELETE without an attribute value
177
+ d[attr_name] = {"Action": action}
178
+ else:
179
+ d[attr_name] = {"Action": action,
180
+ "Value": self.dynamizer.encode(value)}
181
+ return d
182
+
183
+ def dynamize_item(self, item):
184
+ d = {}
185
+ for attr_name in item:
186
+ d[attr_name] = self.dynamizer.encode(item[attr_name])
187
+ return d
188
+
189
+ def dynamize_range_key_condition(self, range_key_condition):
190
+ """
191
+ Convert a layer2 range_key_condition parameter into the
192
+ structure required by Layer1.
193
+ """
194
+ return range_key_condition.to_dict()
195
+
196
+ def dynamize_scan_filter(self, scan_filter):
197
+ """
198
+ Convert a layer2 scan_filter parameter into the
199
+ structure required by Layer1.
200
+ """
201
+ d = None
202
+ if scan_filter:
203
+ d = {}
204
+ for attr_name in scan_filter:
205
+ condition = scan_filter[attr_name]
206
+ d[attr_name] = condition.to_dict()
207
+ return d
208
+
209
+ def dynamize_expected_value(self, expected_value):
210
+ """
211
+ Convert an expected_value parameter into the data structure
212
+ required for Layer1.
213
+ """
214
+ d = None
215
+ if expected_value:
216
+ d = {}
217
+ for attr_name in expected_value:
218
+ attr_value = expected_value[attr_name]
219
+ if attr_value is True:
220
+ attr_value = {'Exists': True}
221
+ elif attr_value is False:
222
+ attr_value = {'Exists': False}
223
+ else:
224
+ val = self.dynamizer.encode(expected_value[attr_name])
225
+ attr_value = {'Value': val}
226
+ d[attr_name] = attr_value
227
+ return d
228
+
229
+ def dynamize_last_evaluated_key(self, last_evaluated_key):
230
+ """
231
+ Convert a last_evaluated_key parameter into the data structure
232
+ required for Layer1.
233
+ """
234
+ d = None
235
+ if last_evaluated_key:
236
+ hash_key = last_evaluated_key['HashKeyElement']
237
+ d = {'HashKeyElement': self.dynamizer.encode(hash_key)}
238
+ if 'RangeKeyElement' in last_evaluated_key:
239
+ range_key = last_evaluated_key['RangeKeyElement']
240
+ d['RangeKeyElement'] = self.dynamizer.encode(range_key)
241
+ return d
242
+
243
+ def build_key_from_values(self, schema, hash_key, range_key=None):
244
+ """
245
+ Build a Key structure to be used for accessing items
246
+ in Amazon DynamoDB. This method takes the supplied hash_key
247
+ and optional range_key and validates them against the
248
+ schema. If there is a mismatch, a TypeError is raised.
249
+ Otherwise, a Python dict version of a Amazon DynamoDB Key
250
+ data structure is returned.
251
+
252
+ :type hash_key: int|float|str|unicode|Binary
253
+ :param hash_key: The hash key of the item you are looking for.
254
+ The type of the hash key should match the type defined in
255
+ the schema.
256
+
257
+ :type range_key: int|float|str|unicode|Binary
258
+ :param range_key: The range key of the item your are looking for.
259
+ This should be supplied only if the schema requires a
260
+ range key. The type of the range key should match the
261
+ type defined in the schema.
262
+ """
263
+ dynamodb_key = {}
264
+ dynamodb_value = self.dynamizer.encode(hash_key)
265
+ if dynamodb_value.keys()[0] != schema.hash_key_type:
266
+ msg = 'Hashkey must be of type: %s' % schema.hash_key_type
267
+ raise TypeError(msg)
268
+ dynamodb_key['HashKeyElement'] = dynamodb_value
269
+ if range_key is not None:
270
+ dynamodb_value = self.dynamizer.encode(range_key)
271
+ if dynamodb_value.keys()[0] != schema.range_key_type:
272
+ msg = 'RangeKey must be of type: %s' % schema.range_key_type
273
+ raise TypeError(msg)
274
+ dynamodb_key['RangeKeyElement'] = dynamodb_value
275
+ return dynamodb_key
276
+
277
+ def new_batch_list(self):
278
+ """
279
+ Return a new, empty :class:`boto.dynamodb.batch.BatchList`
280
+ object.
281
+ """
282
+ return BatchList(self)
283
+
284
+ def new_batch_write_list(self):
285
+ """
286
+ Return a new, empty :class:`boto.dynamodb.batch.BatchWriteList`
287
+ object.
288
+ """
289
+ return BatchWriteList(self)
290
+
291
+ def list_tables(self, limit=None):
292
+ """
293
+ Return a list of the names of all tables associated with the
294
+ current account and region.
295
+
296
+ :type limit: int
297
+ :param limit: The maximum number of tables to return.
298
+ """
299
+ tables = []
300
+ start_table = None
301
+ while not limit or len(tables) < limit:
302
+ this_round_limit = None
303
+ if limit:
304
+ this_round_limit = limit - len(tables)
305
+ this_round_limit = min(this_round_limit, 100)
306
+ result = self.layer1.list_tables(limit=this_round_limit, start_table=start_table)
307
+ tables.extend(result.get('TableNames', []))
308
+ start_table = result.get('LastEvaluatedTableName', None)
309
+ if not start_table:
310
+ break
311
+ return tables
312
+
313
+ def describe_table(self, name):
314
+ """
315
+ Retrieve information about an existing table.
316
+
317
+ :type name: str
318
+ :param name: The name of the desired table.
319
+
320
+ """
321
+ return self.layer1.describe_table(name)
322
+
323
+ def table_from_schema(self, name, schema):
324
+ """
325
+ Create a Table object from a schema.
326
+
327
+ This method will create a Table object without
328
+ making any API calls. If you know the name and schema
329
+ of the table, you can use this method instead of
330
+ ``get_table``.
331
+
332
+ Example usage::
333
+
334
+ table = layer2.table_from_schema(
335
+ 'tablename',
336
+ Schema.create(hash_key=('foo', 'N')))
337
+
338
+ :type name: str
339
+ :param name: The name of the table.
340
+
341
+ :type schema: :class:`boto.dynamodb.schema.Schema`
342
+ :param schema: The schema associated with the table.
343
+
344
+ :rtype: :class:`boto.dynamodb.table.Table`
345
+ :return: A Table object representing the table.
346
+
347
+ """
348
+ return Table.create_from_schema(self, name, schema)
349
+
350
+ def get_table(self, name):
351
+ """
352
+ Retrieve the Table object for an existing table.
353
+
354
+ :type name: str
355
+ :param name: The name of the desired table.
356
+
357
+ :rtype: :class:`boto.dynamodb.table.Table`
358
+ :return: A Table object representing the table.
359
+ """
360
+ response = self.layer1.describe_table(name)
361
+ return Table(self, response)
362
+
363
+ lookup = get_table
364
+
365
+ def create_table(self, name, schema, read_units, write_units):
366
+ """
367
+ Create a new Amazon DynamoDB table.
368
+
369
+ :type name: str
370
+ :param name: The name of the desired table.
371
+
372
+ :type schema: :class:`boto.dynamodb.schema.Schema`
373
+ :param schema: The Schema object that defines the schema used
374
+ by this table.
375
+
376
+ :type read_units: int
377
+ :param read_units: The value for ReadCapacityUnits.
378
+
379
+ :type write_units: int
380
+ :param write_units: The value for WriteCapacityUnits.
381
+
382
+ :rtype: :class:`boto.dynamodb.table.Table`
383
+ :return: A Table object representing the new Amazon DynamoDB table.
384
+ """
385
+ response = self.layer1.create_table(name, schema.dict,
386
+ {'ReadCapacityUnits': read_units,
387
+ 'WriteCapacityUnits': write_units})
388
+ return Table(self, response)
389
+
390
+ def update_throughput(self, table, read_units, write_units):
391
+ """
392
+ Update the ProvisionedThroughput for the Amazon DynamoDB Table.
393
+
394
+ :type table: :class:`boto.dynamodb.table.Table`
395
+ :param table: The Table object whose throughput is being updated.
396
+
397
+ :type read_units: int
398
+ :param read_units: The new value for ReadCapacityUnits.
399
+
400
+ :type write_units: int
401
+ :param write_units: The new value for WriteCapacityUnits.
402
+ """
403
+ response = self.layer1.update_table(table.name,
404
+ {'ReadCapacityUnits': read_units,
405
+ 'WriteCapacityUnits': write_units})
406
+ table.update_from_response(response)
407
+
408
+ def delete_table(self, table):
409
+ """
410
+ Delete this table and all items in it. After calling this
411
+ the Table objects status attribute will be set to 'DELETING'.
412
+
413
+ :type table: :class:`boto.dynamodb.table.Table`
414
+ :param table: The Table object that is being deleted.
415
+ """
416
+ response = self.layer1.delete_table(table.name)
417
+ table.update_from_response(response)
418
+
419
+ def create_schema(self, hash_key_name, hash_key_proto_value,
420
+ range_key_name=None, range_key_proto_value=None):
421
+ """
422
+ Create a Schema object used when creating a Table.
423
+
424
+ :type hash_key_name: str
425
+ :param hash_key_name: The name of the HashKey for the schema.
426
+
427
+ :type hash_key_proto_value: int|long|float|str|unicode|Binary
428
+ :param hash_key_proto_value: A sample or prototype of the type
429
+ of value you want to use for the HashKey. Alternatively,
430
+ you can also just pass in the Python type (e.g. int, float, etc.).
431
+
432
+ :type range_key_name: str
433
+ :param range_key_name: The name of the RangeKey for the schema.
434
+ This parameter is optional.
435
+
436
+ :type range_key_proto_value: int|long|float|str|unicode|Binary
437
+ :param range_key_proto_value: A sample or prototype of the type
438
+ of value you want to use for the RangeKey. Alternatively,
439
+ you can also pass in the Python type (e.g. int, float, etc.)
440
+ This parameter is optional.
441
+ """
442
+ hash_key = (hash_key_name, get_dynamodb_type(hash_key_proto_value))
443
+ if range_key_name and range_key_proto_value is not None:
444
+ range_key = (range_key_name,
445
+ get_dynamodb_type(range_key_proto_value))
446
+ else:
447
+ range_key = None
448
+ return Schema.create(hash_key, range_key)
449
+
450
+ def get_item(self, table, hash_key, range_key=None,
451
+ attributes_to_get=None, consistent_read=False,
452
+ item_class=Item):
453
+ """
454
+ Retrieve an existing item from the table.
455
+
456
+ :type table: :class:`boto.dynamodb.table.Table`
457
+ :param table: The Table object from which the item is retrieved.
458
+
459
+ :type hash_key: int|long|float|str|unicode|Binary
460
+ :param hash_key: The HashKey of the requested item. The
461
+ type of the value must match the type defined in the
462
+ schema for the table.
463
+
464
+ :type range_key: int|long|float|str|unicode|Binary
465
+ :param range_key: The optional RangeKey of the requested item.
466
+ The type of the value must match the type defined in the
467
+ schema for the table.
468
+
469
+ :type attributes_to_get: list
470
+ :param attributes_to_get: A list of attribute names.
471
+ If supplied, only the specified attribute names will
472
+ be returned. Otherwise, all attributes will be returned.
473
+
474
+ :type consistent_read: bool
475
+ :param consistent_read: If True, a consistent read
476
+ request is issued. Otherwise, an eventually consistent
477
+ request is issued.
478
+
479
+ :type item_class: Class
480
+ :param item_class: Allows you to override the class used
481
+ to generate the items. This should be a subclass of
482
+ :class:`boto.dynamodb.item.Item`
483
+ """
484
+ key = self.build_key_from_values(table.schema, hash_key, range_key)
485
+ response = self.layer1.get_item(table.name, key,
486
+ attributes_to_get, consistent_read,
487
+ object_hook=self.dynamizer.decode)
488
+ item = item_class(table, hash_key, range_key, response['Item'])
489
+ if 'ConsumedCapacityUnits' in response:
490
+ item.consumed_units = response['ConsumedCapacityUnits']
491
+ return item
492
+
493
+ def batch_get_item(self, batch_list):
494
+ """
495
+ Return a set of attributes for a multiple items in
496
+ multiple tables using their primary keys.
497
+
498
+ :type batch_list: :class:`boto.dynamodb.batch.BatchList`
499
+ :param batch_list: A BatchList object which consists of a
500
+ list of :class:`boto.dynamoddb.batch.Batch` objects.
501
+ Each Batch object contains the information about one
502
+ batch of objects that you wish to retrieve in this
503
+ request.
504
+ """
505
+ request_items = batch_list.to_dict()
506
+ return self.layer1.batch_get_item(request_items,
507
+ object_hook=self.dynamizer.decode)
508
+
509
+ def batch_write_item(self, batch_list):
510
+ """
511
+ Performs multiple Puts and Deletes in one batch.
512
+
513
+ :type batch_list: :class:`boto.dynamodb.batch.BatchWriteList`
514
+ :param batch_list: A BatchWriteList object which consists of a
515
+ list of :class:`boto.dynamoddb.batch.BatchWrite` objects.
516
+ Each Batch object contains the information about one
517
+ batch of objects that you wish to put or delete.
518
+ """
519
+ request_items = batch_list.to_dict()
520
+ return self.layer1.batch_write_item(request_items,
521
+ object_hook=self.dynamizer.decode)
522
+
523
+ def put_item(self, item, expected_value=None, return_values=None):
524
+ """
525
+ Store a new item or completely replace an existing item
526
+ in Amazon DynamoDB.
527
+
528
+ :type item: :class:`boto.dynamodb.item.Item`
529
+ :param item: The Item to write to Amazon DynamoDB.
530
+
531
+ :type expected_value: dict
532
+ :param expected_value: A dictionary of name/value pairs that you expect.
533
+ This dictionary should have name/value pairs where the name
534
+ is the name of the attribute and the value is either the value
535
+ you are expecting or False if you expect the attribute not to
536
+ exist.
537
+
538
+ :type return_values: str
539
+ :param return_values: Controls the return of attribute
540
+ name-value pairs before then were changed. Possible
541
+ values are: None or 'ALL_OLD'. If 'ALL_OLD' is
542
+ specified and the item is overwritten, the content
543
+ of the old item is returned.
544
+ """
545
+ expected_value = self.dynamize_expected_value(expected_value)
546
+ response = self.layer1.put_item(item.table.name,
547
+ self.dynamize_item(item),
548
+ expected_value, return_values,
549
+ object_hook=self.dynamizer.decode)
550
+ if 'ConsumedCapacityUnits' in response:
551
+ item.consumed_units = response['ConsumedCapacityUnits']
552
+ return response
553
+
554
+ def update_item(self, item, expected_value=None, return_values=None):
555
+ """
556
+ Commit pending item updates to Amazon DynamoDB.
557
+
558
+ :type item: :class:`boto.dynamodb.item.Item`
559
+ :param item: The Item to update in Amazon DynamoDB. It is expected
560
+ that you would have called the add_attribute, put_attribute
561
+ and/or delete_attribute methods on this Item prior to calling
562
+ this method. Those queued changes are what will be updated.
563
+
564
+ :type expected_value: dict
565
+ :param expected_value: A dictionary of name/value pairs that you
566
+ expect. This dictionary should have name/value pairs where the
567
+ name is the name of the attribute and the value is either the
568
+ value you are expecting or False if you expect the attribute
569
+ not to exist.
570
+
571
+ :type return_values: str
572
+ :param return_values: Controls the return of attribute name/value pairs
573
+ before they were updated. Possible values are: None, 'ALL_OLD',
574
+ 'UPDATED_OLD', 'ALL_NEW' or 'UPDATED_NEW'. If 'ALL_OLD' is
575
+ specified and the item is overwritten, the content of the old item
576
+ is returned. If 'ALL_NEW' is specified, then all the attributes of
577
+ the new version of the item are returned. If 'UPDATED_NEW' is
578
+ specified, the new versions of only the updated attributes are
579
+ returned.
580
+
581
+ """
582
+ expected_value = self.dynamize_expected_value(expected_value)
583
+ key = self.build_key_from_values(item.table.schema,
584
+ item.hash_key, item.range_key)
585
+ attr_updates = self.dynamize_attribute_updates(item._updates)
586
+
587
+ response = self.layer1.update_item(item.table.name, key,
588
+ attr_updates,
589
+ expected_value, return_values,
590
+ object_hook=self.dynamizer.decode)
591
+ item._updates.clear()
592
+ if 'ConsumedCapacityUnits' in response:
593
+ item.consumed_units = response['ConsumedCapacityUnits']
594
+ return response
595
+
596
+ def delete_item(self, item, expected_value=None, return_values=None):
597
+ """
598
+ Delete the item from Amazon DynamoDB.
599
+
600
+ :type item: :class:`boto.dynamodb.item.Item`
601
+ :param item: The Item to delete from Amazon DynamoDB.
602
+
603
+ :type expected_value: dict
604
+ :param expected_value: A dictionary of name/value pairs that you expect.
605
+ This dictionary should have name/value pairs where the name
606
+ is the name of the attribute and the value is either the value
607
+ you are expecting or False if you expect the attribute not to
608
+ exist.
609
+
610
+ :type return_values: str
611
+ :param return_values: Controls the return of attribute
612
+ name-value pairs before then were changed. Possible
613
+ values are: None or 'ALL_OLD'. If 'ALL_OLD' is
614
+ specified and the item is overwritten, the content
615
+ of the old item is returned.
616
+ """
617
+ expected_value = self.dynamize_expected_value(expected_value)
618
+ key = self.build_key_from_values(item.table.schema,
619
+ item.hash_key, item.range_key)
620
+ return self.layer1.delete_item(item.table.name, key,
621
+ expected=expected_value,
622
+ return_values=return_values,
623
+ object_hook=self.dynamizer.decode)
624
+
625
+ def query(self, table, hash_key, range_key_condition=None,
626
+ attributes_to_get=None, request_limit=None,
627
+ max_results=None, consistent_read=False,
628
+ scan_index_forward=True, exclusive_start_key=None,
629
+ item_class=Item, count=False):
630
+ """
631
+ Perform a query on the table.
632
+
633
+ :type table: :class:`boto.dynamodb.table.Table`
634
+ :param table: The Table object that is being queried.
635
+
636
+ :type hash_key: int|long|float|str|unicode|Binary
637
+ :param hash_key: The HashKey of the requested item. The
638
+ type of the value must match the type defined in the
639
+ schema for the table.
640
+
641
+ :type range_key_condition: :class:`boto.dynamodb.condition.Condition`
642
+ :param range_key_condition: A Condition object.
643
+ Condition object can be one of the following types:
644
+
645
+ EQ|LE|LT|GE|GT|BEGINS_WITH|BETWEEN
646
+
647
+ The only condition which expects or will accept two
648
+ values is 'BETWEEN', otherwise a single value should
649
+ be passed to the Condition constructor.
650
+
651
+ :type attributes_to_get: list
652
+ :param attributes_to_get: A list of attribute names.
653
+ If supplied, only the specified attribute names will
654
+ be returned. Otherwise, all attributes will be returned.
655
+
656
+ :type request_limit: int
657
+ :param request_limit: The maximum number of items to retrieve
658
+ from Amazon DynamoDB on each request. You may want to set
659
+ a specific request_limit based on the provisioned throughput
660
+ of your table. The default behavior is to retrieve as many
661
+ results as possible per request.
662
+
663
+ :type max_results: int
664
+ :param max_results: The maximum number of results that will
665
+ be retrieved from Amazon DynamoDB in total. For example,
666
+ if you only wanted to see the first 100 results from the
667
+ query, regardless of how many were actually available, you
668
+ could set max_results to 100 and the generator returned
669
+ from the query method will only yeild 100 results max.
670
+
671
+ :type consistent_read: bool
672
+ :param consistent_read: If True, a consistent read
673
+ request is issued. Otherwise, an eventually consistent
674
+ request is issued.
675
+
676
+ :type scan_index_forward: bool
677
+ :param scan_index_forward: Specified forward or backward
678
+ traversal of the index. Default is forward (True).
679
+
680
+ :type count: bool
681
+ :param count: If True, Amazon DynamoDB returns a total
682
+ number of items for the Query operation, even if the
683
+ operation has no matching items for the assigned filter.
684
+
685
+ :type exclusive_start_key: list or tuple
686
+ :param exclusive_start_key: Primary key of the item from
687
+ which to continue an earlier query. This would be
688
+ provided as the LastEvaluatedKey in that query.
689
+
690
+ :type item_class: Class
691
+ :param item_class: Allows you to override the class used
692
+ to generate the items. This should be a subclass of
693
+ :class:`boto.dynamodb.item.Item`
694
+
695
+ :rtype: :class:`boto.dynamodb.layer2.TableGenerator`
696
+ """
697
+ if range_key_condition:
698
+ rkc = self.dynamize_range_key_condition(range_key_condition)
699
+ else:
700
+ rkc = None
701
+ if exclusive_start_key:
702
+ esk = self.build_key_from_values(table.schema,
703
+ *exclusive_start_key)
704
+ else:
705
+ esk = None
706
+ kwargs = {'table_name': table.name,
707
+ 'hash_key_value': self.dynamizer.encode(hash_key),
708
+ 'range_key_conditions': rkc,
709
+ 'attributes_to_get': attributes_to_get,
710
+ 'limit': request_limit,
711
+ 'count': count,
712
+ 'consistent_read': consistent_read,
713
+ 'scan_index_forward': scan_index_forward,
714
+ 'exclusive_start_key': esk,
715
+ 'object_hook': self.dynamizer.decode}
716
+ return TableGenerator(table, self.layer1.query,
717
+ max_results, item_class, kwargs)
718
+
719
+ def scan(self, table, scan_filter=None,
720
+ attributes_to_get=None, request_limit=None, max_results=None,
721
+ exclusive_start_key=None, item_class=Item, count=False):
722
+ """
723
+ Perform a scan of DynamoDB.
724
+
725
+ :type table: :class:`boto.dynamodb.table.Table`
726
+ :param table: The Table object that is being scanned.
727
+
728
+ :type scan_filter: A dict
729
+ :param scan_filter: A dictionary where the key is the
730
+ attribute name and the value is a
731
+ :class:`boto.dynamodb.condition.Condition` object.
732
+ Valid Condition objects include:
733
+
734
+ * EQ - equal (1)
735
+ * NE - not equal (1)
736
+ * LE - less than or equal (1)
737
+ * LT - less than (1)
738
+ * GE - greater than or equal (1)
739
+ * GT - greater than (1)
740
+ * NOT_NULL - attribute exists (0, use None)
741
+ * NULL - attribute does not exist (0, use None)
742
+ * CONTAINS - substring or value in list (1)
743
+ * NOT_CONTAINS - absence of substring or value in list (1)
744
+ * BEGINS_WITH - substring prefix (1)
745
+ * IN - exact match in list (N)
746
+ * BETWEEN - >= first value, <= second value (2)
747
+
748
+ :type attributes_to_get: list
749
+ :param attributes_to_get: A list of attribute names.
750
+ If supplied, only the specified attribute names will
751
+ be returned. Otherwise, all attributes will be returned.
752
+
753
+ :type request_limit: int
754
+ :param request_limit: The maximum number of items to retrieve
755
+ from Amazon DynamoDB on each request. You may want to set
756
+ a specific request_limit based on the provisioned throughput
757
+ of your table. The default behavior is to retrieve as many
758
+ results as possible per request.
759
+
760
+ :type max_results: int
761
+ :param max_results: The maximum number of results that will
762
+ be retrieved from Amazon DynamoDB in total. For example,
763
+ if you only wanted to see the first 100 results from the
764
+ query, regardless of how many were actually available, you
765
+ could set max_results to 100 and the generator returned
766
+ from the query method will only yeild 100 results max.
767
+
768
+ :type count: bool
769
+ :param count: If True, Amazon DynamoDB returns a total
770
+ number of items for the Scan operation, even if the
771
+ operation has no matching items for the assigned filter.
772
+
773
+ :type exclusive_start_key: list or tuple
774
+ :param exclusive_start_key: Primary key of the item from
775
+ which to continue an earlier query. This would be
776
+ provided as the LastEvaluatedKey in that query.
777
+
778
+ :type item_class: Class
779
+ :param item_class: Allows you to override the class used
780
+ to generate the items. This should be a subclass of
781
+ :class:`boto.dynamodb.item.Item`
782
+
783
+ :rtype: :class:`boto.dynamodb.layer2.TableGenerator`
784
+ """
785
+ if exclusive_start_key:
786
+ esk = self.build_key_from_values(table.schema,
787
+ *exclusive_start_key)
788
+ else:
789
+ esk = None
790
+ kwargs = {'table_name': table.name,
791
+ 'scan_filter': self.dynamize_scan_filter(scan_filter),
792
+ 'attributes_to_get': attributes_to_get,
793
+ 'limit': request_limit,
794
+ 'count': count,
795
+ 'exclusive_start_key': esk,
796
+ 'object_hook': self.dynamizer.decode}
797
+ return TableGenerator(table, self.layer1.scan,
798
+ max_results, item_class, kwargs)