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,84 @@
1
+ # Copyright (c) 2012 Mitch Garnaat http://garnaat.org/
2
+ # Copyright (c) 2012 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
+
24
+ class Tag(object):
25
+ """
26
+ A name/value tag on an AutoScalingGroup resource.
27
+
28
+ :ivar key: The key of the tag.
29
+ :ivar value: The value of the tag.
30
+ :ivar propagate_at_launch: Boolean value which specifies whether the
31
+ new tag will be applied to instances launched after the tag is created.
32
+ :ivar resource_id: The name of the autoscaling group.
33
+ :ivar resource_type: The only supported resource type at this time
34
+ is "auto-scaling-group".
35
+ """
36
+
37
+ def __init__(self, connection=None, key=None, value=None,
38
+ propagate_at_launch=False, resource_id=None,
39
+ resource_type='auto-scaling-group'):
40
+ self.connection = connection
41
+ self.key = key
42
+ self.value = value
43
+ self.propagate_at_launch = propagate_at_launch
44
+ self.resource_id = resource_id
45
+ self.resource_type = resource_type
46
+
47
+ def __repr__(self):
48
+ return 'Tag(%s=%s)' % (self.key, self.value)
49
+
50
+ def startElement(self, name, attrs, connection):
51
+ pass
52
+
53
+ def endElement(self, name, value, connection):
54
+ if name == 'Key':
55
+ self.key = value
56
+ elif name == 'Value':
57
+ self.value = value
58
+ elif name == 'PropogateAtLaunch':
59
+ if value.lower() == 'true':
60
+ self.propogate_at_launch = True
61
+ else:
62
+ self.propogate_at_launch = False
63
+ elif name == 'ResourceId':
64
+ self.resource_id = value
65
+ elif name == 'ResourceType':
66
+ self.resource_type = value
67
+
68
+ def build_params(self, params, i):
69
+ """
70
+ Populates a dictionary with the name/value pairs necessary
71
+ to identify this Tag in a request.
72
+ """
73
+ prefix = 'Tags.member.%d.' % i
74
+ params[prefix + 'ResourceId'] = self.resource_id
75
+ params[prefix + 'ResourceType'] = self.resource_type
76
+ params[prefix + 'Key'] = self.key
77
+ params[prefix + 'Value'] = self.value
78
+ if self.propagate_at_launch:
79
+ params[prefix + 'PropagateAtLaunch'] = 'true'
80
+ else:
81
+ params[prefix + 'PropagateAtLaunch'] = 'false'
82
+
83
+ def delete(self):
84
+ return self.connection.delete_tags([self])
@@ -0,0 +1,141 @@
1
+ # Copyright (c) 2009-2012 Mitch Garnaat http://garnaat.org/
2
+ # Copyright (c) 2012 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
+
24
+
25
+ class BlockDeviceType(object):
26
+ """
27
+ Represents parameters for a block device.
28
+ """
29
+
30
+ def __init__(self,
31
+ connection=None,
32
+ ephemeral_name=None,
33
+ no_device=False,
34
+ volume_id=None,
35
+ snapshot_id=None,
36
+ status=None,
37
+ attach_time=None,
38
+ delete_on_termination=False,
39
+ size=None,
40
+ volume_type=None,
41
+ iops=None):
42
+ self.connection = connection
43
+ self.ephemeral_name = ephemeral_name
44
+ self.no_device = no_device
45
+ self.volume_id = volume_id
46
+ self.snapshot_id = snapshot_id
47
+ self.status = status
48
+ self.attach_time = attach_time
49
+ self.delete_on_termination = delete_on_termination
50
+ self.size = size
51
+ self.volume_type = volume_type
52
+ self.iops = iops
53
+
54
+ def startElement(self, name, attrs, connection):
55
+ pass
56
+
57
+ def endElement(self, name, value, connection):
58
+ if name == 'volumeId':
59
+ self.volume_id = value
60
+ elif name == 'virtualName':
61
+ self.ephemeral_name = value
62
+ elif name == 'NoDevice':
63
+ self.no_device = (value == 'true')
64
+ elif name == 'snapshotId':
65
+ self.snapshot_id = value
66
+ elif name == 'volumeSize':
67
+ self.size = int(value)
68
+ elif name == 'status':
69
+ self.status = value
70
+ elif name == 'attachTime':
71
+ self.attach_time = value
72
+ elif name == 'deleteOnTermination':
73
+ self.delete_on_termination = (value == 'true')
74
+ elif name == 'volumeType':
75
+ self.volume_type = value
76
+ elif name == 'iops':
77
+ self.iops = int(value)
78
+ else:
79
+ setattr(self, name, value)
80
+
81
+ # for backwards compatibility
82
+ EBSBlockDeviceType = BlockDeviceType
83
+
84
+
85
+ class BlockDeviceMapping(dict):
86
+ """
87
+ Represents a collection of BlockDeviceTypes when creating ec2 instances.
88
+
89
+ Example:
90
+ dev_sda1 = BlockDeviceType()
91
+ dev_sda1.size = 100 # change root volume to 100GB instead of default
92
+ bdm = BlockDeviceMapping()
93
+ bdm['/dev/sda1'] = dev_sda1
94
+ reservation = image.run(..., block_device_map=bdm, ...)
95
+ """
96
+
97
+ def __init__(self, connection=None):
98
+ """
99
+ :type connection: :class:`boto.ec2.EC2Connection`
100
+ :param connection: Optional connection.
101
+ """
102
+ dict.__init__(self)
103
+ self.connection = connection
104
+ self.current_name = None
105
+ self.current_value = None
106
+
107
+ def startElement(self, name, attrs, connection):
108
+ if name == 'ebs' or name == 'virtualName':
109
+ self.current_value = BlockDeviceType(self)
110
+ return self.current_value
111
+
112
+ def endElement(self, name, value, connection):
113
+ if name == 'device' or name == 'deviceName':
114
+ self.current_name = value
115
+ elif name == 'item':
116
+ self[self.current_name] = self.current_value
117
+
118
+ def build_list_params(self, params, prefix=''):
119
+ i = 1
120
+ for dev_name in self:
121
+ pre = '%sBlockDeviceMapping.%d' % (prefix, i)
122
+ params['%s.DeviceName' % pre] = dev_name
123
+ block_dev = self[dev_name]
124
+ if block_dev.ephemeral_name:
125
+ params['%s.VirtualName' % pre] = block_dev.ephemeral_name
126
+ else:
127
+ if block_dev.no_device:
128
+ params['%s.Ebs.NoDevice' % pre] = 'true'
129
+ if block_dev.snapshot_id:
130
+ params['%s.Ebs.SnapshotId' % pre] = block_dev.snapshot_id
131
+ if block_dev.size:
132
+ params['%s.Ebs.VolumeSize' % pre] = block_dev.size
133
+ if block_dev.delete_on_termination:
134
+ params['%s.Ebs.DeleteOnTermination' % pre] = 'true'
135
+ else:
136
+ params['%s.Ebs.DeleteOnTermination' % pre] = 'false'
137
+ if block_dev.volume_type:
138
+ params['%s.Ebs.VolumeType' % pre] = block_dev.volume_type
139
+ if block_dev.iops is not None:
140
+ params['%s.Ebs.Iops' % pre] = block_dev.iops
141
+ i += 1
@@ -0,0 +1,78 @@
1
+ # Copyright (c) 2010 Mitch Garnaat http://garnaat.org/
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a
4
+ # copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish, dis-
7
+ # tribute, sublicense, and/or sell copies of the Software, and to permit
8
+ # persons to whom the Software is furnished to do so, subject to the fol-
9
+ # lowing conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included
12
+ # in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
+ # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
16
+ # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
17
+ # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20
+ # IN THE SOFTWARE.
21
+
22
+ """
23
+ Represents an EC2 Bundle Task
24
+ """
25
+
26
+ from boto.ec2.ec2object import EC2Object
27
+
28
+ class BundleInstanceTask(EC2Object):
29
+
30
+ def __init__(self, connection=None):
31
+ EC2Object.__init__(self, connection)
32
+ self.id = None
33
+ self.instance_id = None
34
+ self.progress = None
35
+ self.start_time = None
36
+ self.state = None
37
+ self.bucket = None
38
+ self.prefix = None
39
+ self.upload_policy = None
40
+ self.upload_policy_signature = None
41
+ self.update_time = None
42
+ self.code = None
43
+ self.message = None
44
+
45
+ def __repr__(self):
46
+ return 'BundleInstanceTask:%s' % self.id
47
+
48
+ def startElement(self, name, attrs, connection):
49
+ return None
50
+
51
+ def endElement(self, name, value, connection):
52
+ if name == 'bundleId':
53
+ self.id = value
54
+ elif name == 'instanceId':
55
+ self.instance_id = value
56
+ elif name == 'progress':
57
+ self.progress = value
58
+ elif name == 'startTime':
59
+ self.start_time = value
60
+ elif name == 'state':
61
+ self.state = value
62
+ elif name == 'bucket':
63
+ self.bucket = value
64
+ elif name == 'prefix':
65
+ self.prefix = value
66
+ elif name == 'uploadPolicy':
67
+ self.upload_policy = value
68
+ elif name == 'uploadPolicySignature':
69
+ self.upload_policy_signature = value
70
+ elif name == 'updateTime':
71
+ self.update_time = value
72
+ elif name == 'code':
73
+ self.code = value
74
+ elif name == 'message':
75
+ self.message = value
76
+ else:
77
+ setattr(self, name, value)
78
+
@@ -0,0 +1,84 @@
1
+ # Copyright (c) 2006-2009 Mitch Garnaat http://garnaat.org/
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a
4
+ # copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish, dis-
7
+ # tribute, sublicense, and/or sell copies of the Software, and to permit
8
+ # persons to whom the Software is furnished to do so, subject to the fol-
9
+ # lowing conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included
12
+ # in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
+ # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
16
+ # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
17
+ # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20
+ # IN THE SOFTWARE.
21
+
22
+ import boto.ec2
23
+ from boto.sdb.db.property import StringProperty, IntegerProperty
24
+ from boto.manage import propget
25
+
26
+ InstanceTypes = ['m1.small', 'm1.large', 'm1.xlarge',
27
+ 'c1.medium', 'c1.xlarge', 'm2.xlarge',
28
+ 'm2.2xlarge', 'm2.4xlarge', 'cc1.4xlarge',
29
+ 't1.micro']
30
+
31
+ class BuyReservation(object):
32
+
33
+ def get_region(self, params):
34
+ if not params.get('region', None):
35
+ prop = StringProperty(name='region', verbose_name='EC2 Region',
36
+ choices=boto.ec2.regions)
37
+ params['region'] = propget.get(prop, choices=boto.ec2.regions)
38
+
39
+ def get_instance_type(self, params):
40
+ if not params.get('instance_type', None):
41
+ prop = StringProperty(name='instance_type', verbose_name='Instance Type',
42
+ choices=InstanceTypes)
43
+ params['instance_type'] = propget.get(prop)
44
+
45
+ def get_quantity(self, params):
46
+ if not params.get('quantity', None):
47
+ prop = IntegerProperty(name='quantity', verbose_name='Number of Instances')
48
+ params['quantity'] = propget.get(prop)
49
+
50
+ def get_zone(self, params):
51
+ if not params.get('zone', None):
52
+ prop = StringProperty(name='zone', verbose_name='EC2 Availability Zone',
53
+ choices=self.ec2.get_all_zones)
54
+ params['zone'] = propget.get(prop)
55
+
56
+ def get(self, params):
57
+ self.get_region(params)
58
+ self.ec2 = params['region'].connect()
59
+ self.get_instance_type(params)
60
+ self.get_zone(params)
61
+ self.get_quantity(params)
62
+
63
+ if __name__ == "__main__":
64
+ obj = BuyReservation()
65
+ params = {}
66
+ obj.get(params)
67
+ offerings = obj.ec2.get_all_reserved_instances_offerings(instance_type=params['instance_type'],
68
+ availability_zone=params['zone'].name)
69
+ print '\nThe following Reserved Instances Offerings are available:\n'
70
+ for offering in offerings:
71
+ offering.describe()
72
+ prop = StringProperty(name='offering', verbose_name='Offering',
73
+ choices=offerings)
74
+ offering = propget.get(prop)
75
+ print '\nYou have chosen this offering:'
76
+ offering.describe()
77
+ unit_price = float(offering.fixed_price)
78
+ total_price = unit_price * params['quantity']
79
+ print '!!! You are about to purchase %d of these offerings for a total of $%.2f !!!' % (params['quantity'], total_price)
80
+ answer = raw_input('Are you sure you want to do this? If so, enter YES: ')
81
+ if answer.strip().lower() == 'yes':
82
+ offering.purchase(params['quantity'])
83
+ else:
84
+ print 'Purchase cancelled'
@@ -0,0 +1,603 @@
1
+ # Copyright (c) 2006-2011 Mitch Garnaat http://garnaat.org/
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a
4
+ # copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish, dis-
7
+ # tribute, sublicense, and/or sell copies of the Software, and to permit
8
+ # persons to whom the Software is furnished to do so, subject to the fol-
9
+ # lowing conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included
12
+ # in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15
+ # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
16
+ # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
17
+ # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18
+ # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20
+ # IN THE SOFTWARE.
21
+ #
22
+ """
23
+ This module provides an interface to the Elastic Compute Cloud (EC2)
24
+ CloudWatch service from AWS.
25
+ """
26
+ from boto.compat import json
27
+ from boto.connection import AWSQueryConnection
28
+ from boto.ec2.cloudwatch.metric import Metric
29
+ from boto.ec2.cloudwatch.alarm import MetricAlarm, MetricAlarms, AlarmHistoryItem
30
+ from boto.ec2.cloudwatch.datapoint import Datapoint
31
+ from boto.regioninfo import RegionInfo
32
+ import boto
33
+
34
+ RegionData = {
35
+ 'us-east-1': 'monitoring.us-east-1.amazonaws.com',
36
+ 'us-west-1': 'monitoring.us-west-1.amazonaws.com',
37
+ 'us-west-2': 'monitoring.us-west-2.amazonaws.com',
38
+ 'sa-east-1': 'monitoring.sa-east-1.amazonaws.com',
39
+ 'eu-west-1': 'monitoring.eu-west-1.amazonaws.com',
40
+ 'ap-northeast-1': 'monitoring.ap-northeast-1.amazonaws.com',
41
+ 'ap-southeast-1': 'monitoring.ap-southeast-1.amazonaws.com',
42
+ 'ap-southeast-2': 'monitoring.ap-southeast-2.amazonaws.com',
43
+ }
44
+
45
+
46
+ def regions():
47
+ """
48
+ Get all available regions for the CloudWatch service.
49
+
50
+ :rtype: list
51
+ :return: A list of :class:`boto.RegionInfo` instances
52
+ """
53
+ regions = []
54
+ for region_name in RegionData:
55
+ region = RegionInfo(name=region_name,
56
+ endpoint=RegionData[region_name],
57
+ connection_cls=CloudWatchConnection)
58
+ regions.append(region)
59
+ return regions
60
+
61
+
62
+ def connect_to_region(region_name, **kw_params):
63
+ """
64
+ Given a valid region name, return a
65
+ :class:`boto.ec2.cloudwatch.CloudWatchConnection`.
66
+
67
+ :param str region_name: The name of the region to connect to.
68
+
69
+ :rtype: :class:`boto.ec2.CloudWatchConnection` or ``None``
70
+ :return: A connection to the given region, or None if an invalid region
71
+ name is given
72
+ """
73
+ for region in regions():
74
+ if region.name == region_name:
75
+ return region.connect(**kw_params)
76
+ return None
77
+
78
+
79
+ class CloudWatchConnection(AWSQueryConnection):
80
+
81
+ APIVersion = boto.config.get('Boto', 'cloudwatch_version', '2010-08-01')
82
+ DefaultRegionName = boto.config.get('Boto', 'cloudwatch_region_name',
83
+ 'us-east-1')
84
+ DefaultRegionEndpoint = boto.config.get('Boto',
85
+ 'cloudwatch_region_endpoint',
86
+ 'monitoring.us-east-1.amazonaws.com')
87
+
88
+ def __init__(self, aws_access_key_id=None, aws_secret_access_key=None,
89
+ is_secure=True, port=None, proxy=None, proxy_port=None,
90
+ proxy_user=None, proxy_pass=None, debug=0,
91
+ https_connection_factory=None, region=None, path='/',
92
+ security_token=None, validate_certs=True):
93
+ """
94
+ Init method to create a new connection to EC2 Monitoring Service.
95
+
96
+ B{Note:} The host argument is overridden by the host specified in the
97
+ boto configuration file.
98
+ """
99
+ if not region:
100
+ region = RegionInfo(self, self.DefaultRegionName,
101
+ self.DefaultRegionEndpoint)
102
+ self.region = region
103
+
104
+ # Ugly hack to get around both a bug in Python and a
105
+ # misconfigured SSL cert for the eu-west-1 endpoint
106
+ if self.region.name == 'eu-west-1':
107
+ validate_certs = False
108
+
109
+ AWSQueryConnection.__init__(self, aws_access_key_id,
110
+ aws_secret_access_key,
111
+ is_secure, port, proxy, proxy_port,
112
+ proxy_user, proxy_pass,
113
+ self.region.endpoint, debug,
114
+ https_connection_factory, path,
115
+ security_token,
116
+ validate_certs=validate_certs)
117
+
118
+ def _required_auth_capability(self):
119
+ return ['ec2']
120
+
121
+ def build_dimension_param(self, dimension, params):
122
+ prefix = 'Dimensions.member'
123
+ i = 0
124
+ for dim_name in dimension:
125
+ dim_value = dimension[dim_name]
126
+ if dim_value:
127
+ if isinstance(dim_value, basestring):
128
+ dim_value = [dim_value]
129
+ for value in dim_value:
130
+ params['%s.%d.Name' % (prefix, i+1)] = dim_name
131
+ params['%s.%d.Value' % (prefix, i+1)] = value
132
+ i += 1
133
+ else:
134
+ params['%s.%d.Name' % (prefix, i+1)] = dim_name
135
+ i += 1
136
+
137
+ def build_list_params(self, params, items, label):
138
+ if isinstance(items, basestring):
139
+ items = [items]
140
+ for index, item in enumerate(items):
141
+ i = index + 1
142
+ if isinstance(item, dict):
143
+ for k, v in item.iteritems():
144
+ params[label % (i, 'Name')] = k
145
+ if v is not None:
146
+ params[label % (i, 'Value')] = v
147
+ else:
148
+ params[label % i] = item
149
+
150
+ def build_put_params(self, params, name, value=None, timestamp=None,
151
+ unit=None, dimensions=None, statistics=None):
152
+ args = (name, value, unit, dimensions, statistics, timestamp)
153
+ length = max(map(lambda a: len(a) if isinstance(a, list) else 1, args))
154
+
155
+ def aslist(a):
156
+ if isinstance(a, list):
157
+ if len(a) != length:
158
+ raise Exception('Must specify equal number of elements; expected %d.' % length)
159
+ return a
160
+ return [a] * length
161
+
162
+ for index, (n, v, u, d, s, t) in enumerate(zip(*map(aslist, args))):
163
+ metric_data = {'MetricName': n}
164
+
165
+ if timestamp:
166
+ metric_data['Timestamp'] = t.isoformat()
167
+
168
+ if unit:
169
+ metric_data['Unit'] = u
170
+
171
+ if dimensions:
172
+ self.build_dimension_param(d, metric_data)
173
+
174
+ if statistics:
175
+ metric_data['StatisticValues.Maximum'] = s['maximum']
176
+ metric_data['StatisticValues.Minimum'] = s['minimum']
177
+ metric_data['StatisticValues.SampleCount'] = s['samplecount']
178
+ metric_data['StatisticValues.Sum'] = s['sum']
179
+ if value != None:
180
+ msg = 'You supplied a value and statistics for a metric.'
181
+ msg += 'Posting statistics and not value.'
182
+ boto.log.warn(msg)
183
+ elif value != None:
184
+ metric_data['Value'] = v
185
+ else:
186
+ raise Exception('Must specify a value or statistics to put.')
187
+
188
+ for key, value in metric_data.iteritems():
189
+ params['MetricData.member.%d.%s' % (index + 1, key)] = value
190
+
191
+ def get_metric_statistics(self, period, start_time, end_time, metric_name,
192
+ namespace, statistics, dimensions=None,
193
+ unit=None):
194
+ """
195
+ Get time-series data for one or more statistics of a given metric.
196
+
197
+ :type period: integer
198
+ :param period: The granularity, in seconds, of the returned datapoints.
199
+ Period must be at least 60 seconds and must be a multiple
200
+ of 60. The default value is 60.
201
+
202
+ :type start_time: datetime
203
+ :param start_time: The time stamp to use for determining the
204
+ first datapoint to return. The value specified is
205
+ inclusive; results include datapoints with the time stamp
206
+ specified.
207
+
208
+ :type end_time: datetime
209
+ :param end_time: The time stamp to use for determining the
210
+ last datapoint to return. The value specified is
211
+ exclusive; results will include datapoints up to the time
212
+ stamp specified.
213
+
214
+ :type metric_name: string
215
+ :param metric_name: The metric name.
216
+
217
+ :type namespace: string
218
+ :param namespace: The metric's namespace.
219
+
220
+ :type statistics: list
221
+ :param statistics: A list of statistics names Valid values:
222
+ Average | Sum | SampleCount | Maximum | Minimum
223
+
224
+ :type dimensions: dict
225
+ :param dimensions: A dictionary of dimension key/values where
226
+ the key is the dimension name and the value
227
+ is either a scalar value or an iterator
228
+ of values to be associated with that
229
+ dimension.
230
+
231
+ :type unit: string
232
+ :param unit: The unit for the metric. Value values are:
233
+ Seconds | Microseconds | Milliseconds | Bytes | Kilobytes |
234
+ Megabytes | Gigabytes | Terabytes | Bits | Kilobits |
235
+ Megabits | Gigabits | Terabits | Percent | Count |
236
+ Bytes/Second | Kilobytes/Second | Megabytes/Second |
237
+ Gigabytes/Second | Terabytes/Second | Bits/Second |
238
+ Kilobits/Second | Megabits/Second | Gigabits/Second |
239
+ Terabits/Second | Count/Second | None
240
+
241
+ :rtype: list
242
+ """
243
+ params = {'Period': period,
244
+ 'MetricName': metric_name,
245
+ 'Namespace': namespace,
246
+ 'StartTime': start_time.isoformat(),
247
+ 'EndTime': end_time.isoformat()}
248
+ self.build_list_params(params, statistics, 'Statistics.member.%d')
249
+ if dimensions:
250
+ self.build_dimension_param(dimensions, params)
251
+ if unit:
252
+ params['Unit'] = unit
253
+ return self.get_list('GetMetricStatistics', params,
254
+ [('member', Datapoint)])
255
+
256
+ def list_metrics(self, next_token=None, dimensions=None,
257
+ metric_name=None, namespace=None):
258
+ """
259
+ Returns a list of the valid metrics for which there is recorded
260
+ data available.
261
+
262
+ :type next_token: str
263
+ :param next_token: A maximum of 500 metrics will be returned
264
+ at one time. If more results are available, the ResultSet
265
+ returned will contain a non-Null next_token attribute.
266
+ Passing that token as a parameter to list_metrics will
267
+ retrieve the next page of metrics.
268
+
269
+ :type dimensions: dict
270
+ :param dimensions: A dictionary containing name/value
271
+ pairs that will be used to filter the results. The key in
272
+ the dictionary is the name of a Dimension. The value in
273
+ the dictionary is either a scalar value of that Dimension
274
+ name that you want to filter on, a list of values to
275
+ filter on or None if you want all metrics with that
276
+ Dimension name.
277
+
278
+ :type metric_name: str
279
+ :param metric_name: The name of the Metric to filter against. If None,
280
+ all Metric names will be returned.
281
+
282
+ :type namespace: str
283
+ :param namespace: A Metric namespace to filter against (e.g. AWS/EC2).
284
+ If None, Metrics from all namespaces will be returned.
285
+ """
286
+ params = {}
287
+ if next_token:
288
+ params['NextToken'] = next_token
289
+ if dimensions:
290
+ self.build_dimension_param(dimensions, params)
291
+ if metric_name:
292
+ params['MetricName'] = metric_name
293
+ if namespace:
294
+ params['Namespace'] = namespace
295
+
296
+ return self.get_list('ListMetrics', params, [('member', Metric)])
297
+
298
+ def put_metric_data(self, namespace, name, value=None, timestamp=None,
299
+ unit=None, dimensions=None, statistics=None):
300
+ """
301
+ Publishes metric data points to Amazon CloudWatch. Amazon Cloudwatch
302
+ associates the data points with the specified metric. If the specified
303
+ metric does not exist, Amazon CloudWatch creates the metric. If a list
304
+ is specified for some, but not all, of the arguments, the remaining
305
+ arguments are repeated a corresponding number of times.
306
+
307
+ :type namespace: str
308
+ :param namespace: The namespace of the metric.
309
+
310
+ :type name: str or list
311
+ :param name: The name of the metric.
312
+
313
+ :type value: float or list
314
+ :param value: The value for the metric.
315
+
316
+ :type timestamp: datetime or list
317
+ :param timestamp: The time stamp used for the metric. If not specified,
318
+ the default value is set to the time the metric data was received.
319
+
320
+ :type unit: string or list
321
+ :param unit: The unit of the metric. Valid Values: Seconds |
322
+ Microseconds | Milliseconds | Bytes | Kilobytes |
323
+ Megabytes | Gigabytes | Terabytes | Bits | Kilobits |
324
+ Megabits | Gigabits | Terabits | Percent | Count |
325
+ Bytes/Second | Kilobytes/Second | Megabytes/Second |
326
+ Gigabytes/Second | Terabytes/Second | Bits/Second |
327
+ Kilobits/Second | Megabits/Second | Gigabits/Second |
328
+ Terabits/Second | Count/Second | None
329
+
330
+ :type dimensions: dict
331
+ :param dimensions: Add extra name value pairs to associate
332
+ with the metric, i.e.:
333
+ {'name1': value1, 'name2': (value2, value3)}
334
+
335
+ :type statistics: dict or list
336
+ :param statistics: Use a statistic set instead of a value, for example::
337
+
338
+ {'maximum': 30, 'minimum': 1, 'samplecount': 100, 'sum': 10000}
339
+ """
340
+ params = {'Namespace': namespace}
341
+ self.build_put_params(params, name, value=value, timestamp=timestamp,
342
+ unit=unit, dimensions=dimensions, statistics=statistics)
343
+
344
+ return self.get_status('PutMetricData', params, verb="POST")
345
+
346
+ def describe_alarms(self, action_prefix=None, alarm_name_prefix=None,
347
+ alarm_names=None, max_records=None, state_value=None,
348
+ next_token=None):
349
+ """
350
+ Retrieves alarms with the specified names. If no name is specified, all
351
+ alarms for the user are returned. Alarms can be retrieved by using only
352
+ a prefix for the alarm name, the alarm state, or a prefix for any
353
+ action.
354
+
355
+ :type action_prefix: string
356
+ :param action_name: The action name prefix.
357
+
358
+ :type alarm_name_prefix: string
359
+ :param alarm_name_prefix: The alarm name prefix. AlarmNames cannot
360
+ be specified if this parameter is specified.
361
+
362
+ :type alarm_names: list
363
+ :param alarm_names: A list of alarm names to retrieve information for.
364
+
365
+ :type max_records: int
366
+ :param max_records: The maximum number of alarm descriptions
367
+ to retrieve.
368
+
369
+ :type state_value: string
370
+ :param state_value: The state value to be used in matching alarms.
371
+
372
+ :type next_token: string
373
+ :param next_token: The token returned by a previous call to
374
+ indicate that there is more data.
375
+
376
+ :rtype list
377
+ """
378
+ params = {}
379
+ if action_prefix:
380
+ params['ActionPrefix'] = action_prefix
381
+ if alarm_name_prefix:
382
+ params['AlarmNamePrefix'] = alarm_name_prefix
383
+ elif alarm_names:
384
+ self.build_list_params(params, alarm_names, 'AlarmNames.member.%s')
385
+ if max_records:
386
+ params['MaxRecords'] = max_records
387
+ if next_token:
388
+ params['NextToken'] = next_token
389
+ if state_value:
390
+ params['StateValue'] = state_value
391
+
392
+ result = self.get_list('DescribeAlarms', params,
393
+ [('MetricAlarms', MetricAlarms)])
394
+ ret = result[0]
395
+ ret.next_token = result.next_token
396
+ return ret
397
+
398
+ def describe_alarm_history(self, alarm_name=None,
399
+ start_date=None, end_date=None,
400
+ max_records=None, history_item_type=None,
401
+ next_token=None):
402
+ """
403
+ Retrieves history for the specified alarm. Filter alarms by date range
404
+ or item type. If an alarm name is not specified, Amazon CloudWatch
405
+ returns histories for all of the owner's alarms.
406
+
407
+ Amazon CloudWatch retains the history of deleted alarms for a period of
408
+ six weeks. If an alarm has been deleted, its history can still be
409
+ queried.
410
+
411
+ :type alarm_name: string
412
+ :param alarm_name: The name of the alarm.
413
+
414
+ :type start_date: datetime
415
+ :param start_date: The starting date to retrieve alarm history.
416
+
417
+ :type end_date: datetime
418
+ :param end_date: The starting date to retrieve alarm history.
419
+
420
+ :type history_item_type: string
421
+ :param history_item_type: The type of alarm histories to retreive
422
+ (ConfigurationUpdate | StateUpdate | Action)
423
+
424
+ :type max_records: int
425
+ :param max_records: The maximum number of alarm descriptions
426
+ to retrieve.
427
+
428
+ :type next_token: string
429
+ :param next_token: The token returned by a previous call to indicate
430
+ that there is more data.
431
+
432
+ :rtype list
433
+ """
434
+ params = {}
435
+ if alarm_name:
436
+ params['AlarmName'] = alarm_name
437
+ if start_date:
438
+ params['StartDate'] = start_date.isoformat()
439
+ if end_date:
440
+ params['EndDate'] = end_date.isoformat()
441
+ if history_item_type:
442
+ params['HistoryItemType'] = history_item_type
443
+ if max_records:
444
+ params['MaxRecords'] = max_records
445
+ if next_token:
446
+ params['NextToken'] = next_token
447
+ return self.get_list('DescribeAlarmHistory', params,
448
+ [('member', AlarmHistoryItem)])
449
+
450
+ def describe_alarms_for_metric(self, metric_name, namespace, period=None,
451
+ statistic=None, dimensions=None, unit=None):
452
+ """
453
+ Retrieves all alarms for a single metric. Specify a statistic, period,
454
+ or unit to filter the set of alarms further.
455
+
456
+ :type metric_name: string
457
+ :param metric_name: The name of the metric
458
+
459
+ :type namespace: string
460
+ :param namespace: The namespace of the metric.
461
+
462
+ :type period: int
463
+ :param period: The period in seconds over which the statistic
464
+ is applied.
465
+
466
+ :type statistic: string
467
+ :param statistic: The statistic for the metric.
468
+
469
+ :param dimension_filters: A dictionary containing name/value
470
+ pairs that will be used to filter the results. The key in
471
+ the dictionary is the name of a Dimension. The value in
472
+ the dictionary is either a scalar value of that Dimension
473
+ name that you want to filter on, a list of values to
474
+ filter on or None if you want all metrics with that
475
+ Dimension name.
476
+
477
+ :type unit: string
478
+
479
+ :rtype list
480
+ """
481
+ params = {'MetricName': metric_name,
482
+ 'Namespace': namespace}
483
+ if period:
484
+ params['Period'] = period
485
+ if statistic:
486
+ params['Statistic'] = statistic
487
+ if dimensions:
488
+ self.build_dimension_param(dimensions, params)
489
+ if unit:
490
+ params['Unit'] = unit
491
+ return self.get_list('DescribeAlarmsForMetric', params,
492
+ [('member', MetricAlarm)])
493
+
494
+ def put_metric_alarm(self, alarm):
495
+ """
496
+ Creates or updates an alarm and associates it with the specified Amazon
497
+ CloudWatch metric. Optionally, this operation can associate one or more
498
+ Amazon Simple Notification Service resources with the alarm.
499
+
500
+ When this operation creates an alarm, the alarm state is immediately
501
+ set to INSUFFICIENT_DATA. The alarm is evaluated and its StateValue is
502
+ set appropriately. Any actions associated with the StateValue is then
503
+ executed.
504
+
505
+ When updating an existing alarm, its StateValue is left unchanged.
506
+
507
+ :type alarm: boto.ec2.cloudwatch.alarm.MetricAlarm
508
+ :param alarm: MetricAlarm object.
509
+ """
510
+ params = {
511
+ 'AlarmName': alarm.name,
512
+ 'MetricName': alarm.metric,
513
+ 'Namespace': alarm.namespace,
514
+ 'Statistic': alarm.statistic,
515
+ 'ComparisonOperator': alarm.comparison,
516
+ 'Threshold': alarm.threshold,
517
+ 'EvaluationPeriods': alarm.evaluation_periods,
518
+ 'Period': alarm.period,
519
+ }
520
+ if alarm.actions_enabled is not None:
521
+ params['ActionsEnabled'] = alarm.actions_enabled
522
+ if alarm.alarm_actions:
523
+ self.build_list_params(params, alarm.alarm_actions,
524
+ 'AlarmActions.member.%s')
525
+ if alarm.description:
526
+ params['AlarmDescription'] = alarm.description
527
+ if alarm.dimensions:
528
+ self.build_dimension_param(alarm.dimensions, params)
529
+ if alarm.insufficient_data_actions:
530
+ self.build_list_params(params, alarm.insufficient_data_actions,
531
+ 'InsufficientDataActions.member.%s')
532
+ if alarm.ok_actions:
533
+ self.build_list_params(params, alarm.ok_actions,
534
+ 'OKActions.member.%s')
535
+ if alarm.unit:
536
+ params['Unit'] = alarm.unit
537
+ alarm.connection = self
538
+ return self.get_status('PutMetricAlarm', params)
539
+ create_alarm = put_metric_alarm
540
+ update_alarm = put_metric_alarm
541
+
542
+ def delete_alarms(self, alarms):
543
+ """
544
+ Deletes all specified alarms. In the event of an error, no
545
+ alarms are deleted.
546
+
547
+ :type alarms: list
548
+ :param alarms: List of alarm names.
549
+ """
550
+ params = {}
551
+ self.build_list_params(params, alarms, 'AlarmNames.member.%s')
552
+ return self.get_status('DeleteAlarms', params)
553
+
554
+ def set_alarm_state(self, alarm_name, state_reason, state_value,
555
+ state_reason_data=None):
556
+ """
557
+ Temporarily sets the state of an alarm. When the updated StateValue
558
+ differs from the previous value, the action configured for the
559
+ appropriate state is invoked. This is not a permanent change. The next
560
+ periodic alarm check (in about a minute) will set the alarm to its
561
+ actual state.
562
+
563
+ :type alarm_name: string
564
+ :param alarm_name: Descriptive name for alarm.
565
+
566
+ :type state_reason: string
567
+ :param state_reason: Human readable reason.
568
+
569
+ :type state_value: string
570
+ :param state_value: OK | ALARM | INSUFFICIENT_DATA
571
+
572
+ :type state_reason_data: string
573
+ :param state_reason_data: Reason string (will be jsonified).
574
+ """
575
+ params = {'AlarmName': alarm_name,
576
+ 'StateReason': state_reason,
577
+ 'StateValue': state_value}
578
+ if state_reason_data:
579
+ params['StateReasonData'] = json.dumps(state_reason_data)
580
+
581
+ return self.get_status('SetAlarmState', params)
582
+
583
+ def enable_alarm_actions(self, alarm_names):
584
+ """
585
+ Enables actions for the specified alarms.
586
+
587
+ :type alarms: list
588
+ :param alarms: List of alarm names.
589
+ """
590
+ params = {}
591
+ self.build_list_params(params, alarm_names, 'AlarmNames.member.%s')
592
+ return self.get_status('EnableAlarmActions', params)
593
+
594
+ def disable_alarm_actions(self, alarm_names):
595
+ """
596
+ Disables actions for the specified alarms.
597
+
598
+ :type alarms: list
599
+ :param alarms: List of alarm names.
600
+ """
601
+ params = {}
602
+ self.build_list_params(params, alarm_names, 'AlarmNames.member.%s')
603
+ return self.get_status('DisableAlarmActions', params)