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,80 @@
1
+ # Copyright (c) 2006-2008 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 Availability Zone
24
+ """
25
+ from boto.ec2.ec2object import EC2Object
26
+
27
+ class MessageSet(list):
28
+ """
29
+ A list object that contains messages associated with
30
+ an availability zone.
31
+ """
32
+
33
+ def startElement(self, name, attrs, connection):
34
+ return None
35
+
36
+ def endElement(self, name, value, connection):
37
+ if name == 'message':
38
+ self.append(value)
39
+ else:
40
+ setattr(self, name, value)
41
+
42
+ class Zone(EC2Object):
43
+ """
44
+ Represents an Availability Zone.
45
+
46
+ :ivar name: The name of the zone.
47
+ :ivar state: The current state of the zone.
48
+ :ivar region_name: The name of the region the zone is associated with.
49
+ :ivar messages: A list of messages related to the zone.
50
+ """
51
+
52
+ def __init__(self, connection=None):
53
+ EC2Object.__init__(self, connection)
54
+ self.name = None
55
+ self.state = None
56
+ self.region_name = None
57
+ self.messages = None
58
+
59
+ def __repr__(self):
60
+ return 'Zone:%s' % self.name
61
+
62
+ def startElement(self, name, attrs, connection):
63
+ if name == 'messageSet':
64
+ self.messages = MessageSet()
65
+ return self.messages
66
+ return None
67
+
68
+ def endElement(self, name, value, connection):
69
+ if name == 'zoneName':
70
+ self.name = value
71
+ elif name == 'zoneState':
72
+ self.state = value
73
+ elif name == 'regionName':
74
+ self.region_name = value
75
+ else:
76
+ setattr(self, name, value)
77
+
78
+
79
+
80
+
@@ -0,0 +1,90 @@
1
+ # Copyright (c) 2010 Chris Moyer http://coredumped.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
23
+ from boto.connection import AWSQueryConnection, AWSAuthConnection
24
+ import time
25
+ import urllib
26
+ import xml.sax
27
+ from boto.ecs.item import ItemSet
28
+ from boto import handler
29
+
30
+ class ECSConnection(AWSQueryConnection):
31
+ """
32
+ ECommerce Connection
33
+
34
+ For more information on how to use this module see:
35
+
36
+ http://blog.coredumped.org/2010/09/search-for-books-on-amazon-using-boto.html
37
+ """
38
+
39
+ APIVersion = '2010-11-01'
40
+
41
+ def __init__(self, aws_access_key_id=None, aws_secret_access_key=None,
42
+ is_secure=True, port=None, proxy=None, proxy_port=None,
43
+ proxy_user=None, proxy_pass=None, host='ecs.amazonaws.com',
44
+ debug=0, https_connection_factory=None, path='/'):
45
+ AWSQueryConnection.__init__(self, aws_access_key_id, aws_secret_access_key,
46
+ is_secure, port, proxy, proxy_port, proxy_user, proxy_pass,
47
+ host, debug, https_connection_factory, path)
48
+
49
+ def _required_auth_capability(self):
50
+ return ['ecs']
51
+
52
+ def get_response(self, action, params, page=0, itemSet=None):
53
+ """
54
+ Utility method to handle calls to ECS and parsing of responses.
55
+ """
56
+ params['Service'] = "AWSECommerceService"
57
+ params['Operation'] = action
58
+ if page:
59
+ params['ItemPage'] = page
60
+ response = self.make_request(None, params, "/onca/xml")
61
+ body = response.read()
62
+ boto.log.debug(body)
63
+
64
+ if response.status != 200:
65
+ boto.log.error('%s %s' % (response.status, response.reason))
66
+ boto.log.error('%s' % body)
67
+ raise self.ResponseError(response.status, response.reason, body)
68
+
69
+ if itemSet == None:
70
+ rs = ItemSet(self, action, params, page)
71
+ else:
72
+ rs = itemSet
73
+ h = handler.XmlHandler(rs, self)
74
+ xml.sax.parseString(body, h)
75
+ return rs
76
+
77
+ #
78
+ # Group methods
79
+ #
80
+
81
+ def item_search(self, search_index, **params):
82
+ """
83
+ Returns items that satisfy the search criteria, including one or more search
84
+ indices.
85
+
86
+ For a full list of search terms,
87
+ :see: http://docs.amazonwebservices.com/AWSECommerceService/2010-09-01/DG/index.html?ItemSearch.html
88
+ """
89
+ params['SearchIndex'] = search_index
90
+ return self.get_response('ItemSearch', params)
@@ -0,0 +1,153 @@
1
+ # Copyright (c) 2010 Chris Moyer http://coredumped.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
+ import xml.sax
24
+ import cgi
25
+ from StringIO import StringIO
26
+
27
+ class ResponseGroup(xml.sax.ContentHandler):
28
+ """A Generic "Response Group", which can
29
+ be anything from the entire list of Items to
30
+ specific response elements within an item"""
31
+
32
+ def __init__(self, connection=None, nodename=None):
33
+ """Initialize this Item"""
34
+ self._connection = connection
35
+ self._nodename = nodename
36
+ self._nodepath = []
37
+ self._curobj = None
38
+ self._xml = StringIO()
39
+
40
+ def __repr__(self):
41
+ return '<%s: %s>' % (self.__class__.__name__, self.__dict__)
42
+
43
+ #
44
+ # Attribute Functions
45
+ #
46
+ def get(self, name):
47
+ return self.__dict__.get(name)
48
+
49
+ def set(self, name, value):
50
+ self.__dict__[name] = value
51
+
52
+ def to_xml(self):
53
+ return "<%s>%s</%s>" % (self._nodename, self._xml.getvalue(), self._nodename)
54
+
55
+ #
56
+ # XML Parser functions
57
+ #
58
+ def startElement(self, name, attrs, connection):
59
+ self._xml.write("<%s>" % name)
60
+ self._nodepath.append(name)
61
+ if len(self._nodepath) == 1:
62
+ obj = ResponseGroup(self._connection)
63
+ self.set(name, obj)
64
+ self._curobj = obj
65
+ elif self._curobj:
66
+ self._curobj.startElement(name, attrs, connection)
67
+ return None
68
+
69
+ def endElement(self, name, value, connection):
70
+ self._xml.write("%s</%s>" % (cgi.escape(value).replace("&amp;amp;", "&amp;"), name))
71
+ if len(self._nodepath) == 0:
72
+ return
73
+ obj = None
74
+ curval = self.get(name)
75
+ if len(self._nodepath) == 1:
76
+ if value or not curval:
77
+ self.set(name, value)
78
+ if self._curobj:
79
+ self._curobj = None
80
+ #elif len(self._nodepath) == 2:
81
+ #self._curobj = None
82
+ elif self._curobj:
83
+ self._curobj.endElement(name, value, connection)
84
+ self._nodepath.pop()
85
+ return None
86
+
87
+
88
+ class Item(ResponseGroup):
89
+ """A single Item"""
90
+
91
+ def __init__(self, connection=None):
92
+ """Initialize this Item"""
93
+ ResponseGroup.__init__(self, connection, "Item")
94
+
95
+ class ItemSet(ResponseGroup):
96
+ """A special ResponseGroup that has built-in paging, and
97
+ only creates new Items on the "Item" tag"""
98
+
99
+ def __init__(self, connection, action, params, page=0):
100
+ ResponseGroup.__init__(self, connection, "Items")
101
+ self.objs = []
102
+ self.iter = None
103
+ self.page = page
104
+ self.action = action
105
+ self.params = params
106
+ self.curItem = None
107
+ self.total_results = 0
108
+ self.total_pages = 0
109
+
110
+ def startElement(self, name, attrs, connection):
111
+ if name == "Item":
112
+ self.curItem = Item(self._connection)
113
+ elif self.curItem != None:
114
+ self.curItem.startElement(name, attrs, connection)
115
+ return None
116
+
117
+ def endElement(self, name, value, connection):
118
+ if name == 'TotalResults':
119
+ self.total_results = value
120
+ elif name == 'TotalPages':
121
+ self.total_pages = value
122
+ elif name == "Item":
123
+ self.objs.append(self.curItem)
124
+ self._xml.write(self.curItem.to_xml())
125
+ self.curItem = None
126
+ elif self.curItem != None:
127
+ self.curItem.endElement(name, value, connection)
128
+ return None
129
+
130
+ def next(self):
131
+ """Special paging functionality"""
132
+ if self.iter == None:
133
+ self.iter = iter(self.objs)
134
+ try:
135
+ return self.iter.next()
136
+ except StopIteration:
137
+ self.iter = None
138
+ self.objs = []
139
+ if int(self.page) < int(self.total_pages):
140
+ self.page += 1
141
+ self._connection.get_response(self.action, self.params, self.page, self)
142
+ return self.next()
143
+ else:
144
+ raise
145
+
146
+ def __iter__(self):
147
+ return self
148
+
149
+ def to_xml(self):
150
+ """Override to first fetch everything"""
151
+ for item in self:
152
+ pass
153
+ return ResponseGroup.to_xml(self)
@@ -0,0 +1,62 @@
1
+ # Copyright (c) 2013 Amazon.com, Inc. or its affiliates.
2
+ # 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.regioninfo import RegionInfo
24
+
25
+
26
+ def regions():
27
+ """
28
+ Get all available regions for the AWS Elastic Beanstalk service.
29
+
30
+ :rtype: list
31
+ :return: A list of :class:`boto.regioninfo.RegionInfo`
32
+ """
33
+ from boto.elasticache.layer1 import ElastiCacheConnection
34
+ return [RegionInfo(name='us-east-1',
35
+ endpoint='elasticache.us-east-1.amazonaws.com',
36
+ connection_cls=ElastiCacheConnection),
37
+ RegionInfo(name='us-west-1',
38
+ endpoint='elasticache.us-west-1.amazonaws.com',
39
+ connection_cls=ElastiCacheConnection),
40
+ RegionInfo(name='us-west-2',
41
+ endpoint='elasticache.us-west-2.amazonaws.com',
42
+ connection_cls=ElastiCacheConnection),
43
+ RegionInfo(name='eu-west-1',
44
+ endpoint='elasticache.eu-west-1.amazonaws.com',
45
+ connection_cls=ElastiCacheConnection),
46
+ RegionInfo(name='ap-northeast-1',
47
+ endpoint='elasticache.ap-northeast-1.amazonaws.com',
48
+ connection_cls=ElastiCacheConnection),
49
+ RegionInfo(name='ap-southeast-1',
50
+ endpoint='elasticache.ap-southeast-1.amazonaws.com',
51
+ connection_cls=ElastiCacheConnection),
52
+ RegionInfo(name='sa-east-1',
53
+ endpoint='elasticache.sa-east-1.amazonaws.com',
54
+ connection_cls=ElastiCacheConnection),
55
+ ]
56
+
57
+
58
+ def connect_to_region(region_name, **kw_params):
59
+ for region in regions():
60
+ if region.name == region_name:
61
+ return region.connect(**kw_params)
62
+ return None
@@ -0,0 +1,1252 @@
1
+ # Copyright (c) 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved
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
+ import json
24
+ import boto
25
+ from boto.connection import AWSQueryConnection
26
+ from boto.regioninfo import RegionInfo
27
+
28
+
29
+ class ElastiCacheConnection(AWSQueryConnection):
30
+ """
31
+ Amazon ElastiCache
32
+ Amazon ElastiCache is a web service that makes it easier to set
33
+ up, operate, and scale a distributed cache in the cloud.
34
+
35
+ With Amazon ElastiCache, customers gain all of the benefits of a
36
+ high-performance, in-memory cache with far less of the
37
+ administrative burden of launching and managing a distributed
38
+ cache. The service makes set-up, scaling, and cluster failure
39
+ handling much simpler than in a self-managed cache deployment.
40
+
41
+ In addition, through integration with Amazon CloudWatch, customers
42
+ get enhanced visibility into the key performance statistics
43
+ associated with their cache and can receive alarms if a part of
44
+ their cache runs hot.
45
+ """
46
+ APIVersion = "2012-11-15"
47
+ DefaultRegionName = "us-east-1"
48
+ DefaultRegionEndpoint = "elasticache.us-east-1.amazonaws.com"
49
+
50
+ def __init__(self, **kwargs):
51
+ region = kwargs.get('region')
52
+ if not region:
53
+ region = RegionInfo(self, self.DefaultRegionName,
54
+ self.DefaultRegionEndpoint)
55
+ else:
56
+ del kwargs['region']
57
+ kwargs['host'] = region.endpoint
58
+ AWSQueryConnection.__init__(self, **kwargs)
59
+ self.region = region
60
+
61
+
62
+ def _required_auth_capability(self):
63
+ return ['sign-v2']
64
+
65
+ def authorize_cache_security_group_ingress(self,
66
+ cache_security_group_name,
67
+ ec2_security_group_name,
68
+ ec2_security_group_owner_id):
69
+ """
70
+ Authorizes ingress to a CacheSecurityGroup using EC2 Security
71
+ Groups as authorization (therefore the application using the
72
+ cache must be running on EC2 clusters). This API requires the
73
+ following parameters: EC2SecurityGroupName and
74
+ EC2SecurityGroupOwnerId.
75
+ You cannot authorize ingress from an EC2 security group in one
76
+ Region to an Amazon Cache Cluster in another.
77
+
78
+ :type cache_security_group_name: string
79
+ :param cache_security_group_name: The name of the Cache Security Group
80
+ to authorize.
81
+
82
+ :type ec2_security_group_name: string
83
+ :param ec2_security_group_name: Name of the EC2 Security Group to
84
+ include in the authorization.
85
+
86
+ :type ec2_security_group_owner_id: string
87
+ :param ec2_security_group_owner_id: AWS Account Number of the owner of
88
+ the security group specified in the EC2SecurityGroupName parameter.
89
+ The AWS Access Key ID is not an acceptable value.
90
+
91
+ """
92
+ params = {
93
+ 'CacheSecurityGroupName': cache_security_group_name,
94
+ 'EC2SecurityGroupName': ec2_security_group_name,
95
+ 'EC2SecurityGroupOwnerId': ec2_security_group_owner_id,
96
+ }
97
+ return self._make_request(
98
+ action='AuthorizeCacheSecurityGroupIngress',
99
+ verb='POST',
100
+ path='/', params=params)
101
+
102
+ def create_cache_cluster(self, cache_cluster_id, num_cache_nodes,
103
+ cache_node_type, engine, engine_version=None,
104
+ cache_parameter_group_name=None,
105
+ cache_subnet_group_name=None,
106
+ cache_security_group_names=None,
107
+ security_group_ids=None,
108
+ preferred_availability_zone=None,
109
+ preferred_maintenance_window=None, port=None,
110
+ notification_topic_arn=None,
111
+ auto_minor_version_upgrade=None):
112
+ """
113
+ Creates a new Cache Cluster.
114
+
115
+ :type cache_cluster_id: string
116
+ :param cache_cluster_id: The Cache Cluster identifier. This parameter
117
+ is stored as a lowercase string.
118
+
119
+ :type num_cache_nodes: integer
120
+ :param num_cache_nodes: The number of Cache Nodes the Cache Cluster
121
+ should have.
122
+
123
+ :type cache_node_type: string
124
+ :param cache_node_type: The compute and memory capacity of nodes in a
125
+ Cache Cluster.
126
+
127
+ :type engine: string
128
+ :param engine: The name of the cache engine to be used for this Cache
129
+ Cluster. Currently, memcached is the only cache engine supported
130
+ by the service.
131
+
132
+ :type engine_version: string
133
+ :param engine_version: The version of the cache engine to be used for
134
+ this cluster.
135
+
136
+ :type cache_parameter_group_name: string
137
+ :param cache_parameter_group_name: The name of the cache parameter
138
+ group to associate with this Cache cluster. If this argument is
139
+ omitted, the default CacheParameterGroup for the specified engine
140
+ will be used.
141
+
142
+ :type cache_subnet_group_name: string
143
+ :param cache_subnet_group_name: The name of the Cache Subnet Group to
144
+ be used for the Cache Cluster. Use this parameter only when you
145
+ are creating a cluster in an Amazon Virtual Private Cloud (VPC).
146
+
147
+ :type cache_security_group_names: list
148
+ :param cache_security_group_names: A list of Cache Security Group Names
149
+ to associate with this Cache Cluster. Use this parameter only when
150
+ you are creating a cluster outside of an Amazon Virtual Private
151
+ Cloud (VPC).
152
+
153
+ :type security_group_ids: list
154
+ :param security_group_ids: Specifies the VPC Security Groups associated
155
+ with the Cache Cluster. Use this parameter only when you are
156
+ creating a cluster in an Amazon Virtual Private Cloud (VPC).
157
+
158
+ :type preferred_availability_zone: string
159
+ :param preferred_availability_zone: The EC2 Availability Zone that the
160
+ Cache Cluster will be created in. All cache nodes belonging to a
161
+ cache cluster are placed in the preferred availability zone.
162
+ Default: System chosen (random) availability zone.
163
+
164
+ :type preferred_maintenance_window: string
165
+ :param preferred_maintenance_window: The weekly time range (in UTC)
166
+ during which system maintenance can occur. Example:
167
+ `sun:05:00-sun:09:00`
168
+
169
+ :type port: integer
170
+ :param port: The port number on which each of the Cache Nodes will
171
+ accept connections.
172
+
173
+ :type notification_topic_arn: string
174
+ :param notification_topic_arn: The Amazon Resource Name (ARN) of the
175
+ Amazon Simple Notification Service (SNS) topic to which
176
+ notifications will be sent. The Amazon SNS topic owner must be the
177
+ same as the Cache Cluster owner.
178
+
179
+ :type auto_minor_version_upgrade: boolean
180
+ :param auto_minor_version_upgrade: Indicates that minor engine upgrades
181
+ will be applied automatically to the Cache Cluster during the
182
+ maintenance window. Default: `True`
183
+
184
+ """
185
+ params = {
186
+ 'CacheClusterId': cache_cluster_id,
187
+ 'NumCacheNodes': num_cache_nodes,
188
+ 'CacheNodeType': cache_node_type,
189
+ 'Engine': engine,
190
+ }
191
+ if engine_version is not None:
192
+ params['EngineVersion'] = engine_version
193
+ if cache_parameter_group_name is not None:
194
+ params['CacheParameterGroupName'] = cache_parameter_group_name
195
+ if cache_subnet_group_name is not None:
196
+ params['CacheSubnetGroupName'] = cache_subnet_group_name
197
+ if cache_security_group_names is not None:
198
+ self.build_list_params(params,
199
+ cache_security_group_names,
200
+ 'CacheSecurityGroupNames.member')
201
+ if security_group_ids is not None:
202
+ self.build_list_params(params,
203
+ security_group_ids,
204
+ 'SecurityGroupIds.member')
205
+ if preferred_availability_zone is not None:
206
+ params['PreferredAvailabilityZone'] = preferred_availability_zone
207
+ if preferred_maintenance_window is not None:
208
+ params['PreferredMaintenanceWindow'] = preferred_maintenance_window
209
+ if port is not None:
210
+ params['Port'] = port
211
+ if notification_topic_arn is not None:
212
+ params['NotificationTopicArn'] = notification_topic_arn
213
+ if auto_minor_version_upgrade is not None:
214
+ params['AutoMinorVersionUpgrade'] = str(
215
+ auto_minor_version_upgrade).lower()
216
+ return self._make_request(
217
+ action='CreateCacheCluster',
218
+ verb='POST',
219
+ path='/', params=params)
220
+
221
+ def create_cache_parameter_group(self, cache_parameter_group_name,
222
+ cache_parameter_group_family,
223
+ description):
224
+ """
225
+ Creates a new Cache Parameter Group. Cache Parameter groups
226
+ control the parameters for a Cache Cluster.
227
+
228
+ :type cache_parameter_group_name: string
229
+ :param cache_parameter_group_name: The name of the Cache Parameter
230
+ Group.
231
+
232
+ :type cache_parameter_group_family: string
233
+ :param cache_parameter_group_family: The name of the Cache Parameter
234
+ Group Family the Cache Parameter Group can be used with.
235
+ Currently, memcached1.4 is the only cache parameter group family
236
+ supported by the service.
237
+
238
+ :type description: string
239
+ :param description: The description for the Cache Parameter Group.
240
+
241
+ """
242
+ params = {
243
+ 'CacheParameterGroupName': cache_parameter_group_name,
244
+ 'CacheParameterGroupFamily': cache_parameter_group_family,
245
+ 'Description': description,
246
+ }
247
+ return self._make_request(
248
+ action='CreateCacheParameterGroup',
249
+ verb='POST',
250
+ path='/', params=params)
251
+
252
+ def create_cache_security_group(self, cache_security_group_name,
253
+ description):
254
+ """
255
+ Creates a new Cache Security Group. Cache Security groups
256
+ control access to one or more Cache Clusters.
257
+
258
+ Only use cache security groups when you are creating a cluster
259
+ outside of an Amazon Virtual Private Cloud (VPC). Inside of a
260
+ VPC, use VPC security groups.
261
+
262
+ :type cache_security_group_name: string
263
+ :param cache_security_group_name: The name for the Cache Security
264
+ Group. This value is stored as a lowercase string. Constraints:
265
+ Must contain no more than 255 alphanumeric characters. Must not be
266
+ "Default". Example: `mysecuritygroup`
267
+
268
+ :type description: string
269
+ :param description: The description for the Cache Security Group.
270
+
271
+ """
272
+ params = {
273
+ 'CacheSecurityGroupName': cache_security_group_name,
274
+ 'Description': description,
275
+ }
276
+ return self._make_request(
277
+ action='CreateCacheSecurityGroup',
278
+ verb='POST',
279
+ path='/', params=params)
280
+
281
+ def create_cache_subnet_group(self, cache_subnet_group_name,
282
+ cache_subnet_group_description, subnet_ids):
283
+ """
284
+ Creates a new Cache Subnet Group.
285
+
286
+ :type cache_subnet_group_name: string
287
+ :param cache_subnet_group_name: The name for the Cache Subnet Group.
288
+ This value is stored as a lowercase string. Constraints: Must
289
+ contain no more than 255 alphanumeric characters or hyphens.
290
+ Example: `mysubnetgroup`
291
+
292
+ :type cache_subnet_group_description: string
293
+ :param cache_subnet_group_description: The description for the Cache
294
+ Subnet Group.
295
+
296
+ :type subnet_ids: list
297
+ :param subnet_ids: The EC2 Subnet IDs for the Cache Subnet Group.
298
+
299
+ """
300
+ params = {
301
+ 'CacheSubnetGroupName': cache_subnet_group_name,
302
+ 'CacheSubnetGroupDescription': cache_subnet_group_description,
303
+ }
304
+ self.build_list_params(params,
305
+ subnet_ids,
306
+ 'SubnetIds.member')
307
+ return self._make_request(
308
+ action='CreateCacheSubnetGroup',
309
+ verb='POST',
310
+ path='/', params=params)
311
+
312
+ def delete_cache_cluster(self, cache_cluster_id):
313
+ """
314
+ Deletes a previously provisioned Cache Cluster. A successful
315
+ response from the web service indicates the request was
316
+ received correctly. This action cannot be canceled or
317
+ reverted. DeleteCacheCluster deletes all associated Cache
318
+ Nodes, node endpoints and the Cache Cluster itself.
319
+
320
+ :type cache_cluster_id: string
321
+ :param cache_cluster_id: The Cache Cluster identifier for the Cache
322
+ Cluster to be deleted. This parameter isn't case sensitive.
323
+
324
+ """
325
+ params = {'CacheClusterId': cache_cluster_id, }
326
+ return self._make_request(
327
+ action='DeleteCacheCluster',
328
+ verb='POST',
329
+ path='/', params=params)
330
+
331
+ def delete_cache_parameter_group(self, cache_parameter_group_name):
332
+ """
333
+ Deletes the specified CacheParameterGroup. The
334
+ CacheParameterGroup cannot be deleted if it is associated with
335
+ any cache clusters.
336
+
337
+ :type cache_parameter_group_name: string
338
+ :param cache_parameter_group_name: The name of the Cache Parameter
339
+ Group to delete. The specified cache security group must not be
340
+ associated with any Cache clusters.
341
+
342
+ """
343
+ params = {
344
+ 'CacheParameterGroupName': cache_parameter_group_name,
345
+ }
346
+ return self._make_request(
347
+ action='DeleteCacheParameterGroup',
348
+ verb='POST',
349
+ path='/', params=params)
350
+
351
+ def delete_cache_security_group(self, cache_security_group_name):
352
+ """
353
+ Deletes a Cache Security Group.
354
+ The specified Cache Security Group must not be associated with
355
+ any Cache Clusters.
356
+
357
+ :type cache_security_group_name: string
358
+ :param cache_security_group_name: The name of the Cache Security Group
359
+ to delete. You cannot delete the default security group.
360
+
361
+ """
362
+ params = {
363
+ 'CacheSecurityGroupName': cache_security_group_name,
364
+ }
365
+ return self._make_request(
366
+ action='DeleteCacheSecurityGroup',
367
+ verb='POST',
368
+ path='/', params=params)
369
+
370
+ def delete_cache_subnet_group(self, cache_subnet_group_name):
371
+ """
372
+ Deletes a Cache Subnet Group.
373
+ The specified Cache Subnet Group must not be associated with
374
+ any Cache Clusters.
375
+
376
+ :type cache_subnet_group_name: string
377
+ :param cache_subnet_group_name: The name of the Cache Subnet Group to
378
+ delete. Constraints: Must contain no more than 255 alphanumeric
379
+ characters or hyphens.
380
+
381
+ """
382
+ params = {'CacheSubnetGroupName': cache_subnet_group_name, }
383
+ return self._make_request(
384
+ action='DeleteCacheSubnetGroup',
385
+ verb='POST',
386
+ path='/', params=params)
387
+
388
+ def describe_cache_clusters(self, cache_cluster_id=None,
389
+ max_records=None, marker=None,
390
+ show_cache_node_info=None):
391
+ """
392
+ Returns information about all provisioned Cache Clusters if no
393
+ Cache Cluster identifier is specified, or about a specific
394
+ Cache Cluster if a Cache Cluster identifier is supplied.
395
+
396
+ Cluster information will be returned by default. An optional
397
+ ShowDetails flag can be used to retrieve detailed information
398
+ about the Cache Nodes associated with the Cache Cluster.
399
+ Details include the DNS address and port for the Cache Node
400
+ endpoint.
401
+
402
+ If the cluster is in the CREATING state, only cluster level
403
+ information will be displayed until all of the nodes are
404
+ successfully provisioned.
405
+
406
+ If the cluster is in the DELETING state, only cluster level
407
+ information will be displayed.
408
+
409
+ While adding Cache Nodes, node endpoint information and
410
+ creation time for the additional nodes will not be displayed
411
+ until they are completely provisioned. The cluster lifecycle
412
+ tells the customer when new nodes are AVAILABLE.
413
+
414
+ While removing existing Cache Nodes from an cluster, endpoint
415
+ information for the removed nodes will not be displayed.
416
+
417
+ DescribeCacheClusters supports pagination.
418
+
419
+ :type cache_cluster_id: string
420
+ :param cache_cluster_id: The user-supplied cluster identifier. If this
421
+ parameter is specified, only information about that specific Cache
422
+ Cluster is returned. This parameter isn't case sensitive.
423
+
424
+ :type max_records: integer
425
+ :param max_records: The maximum number of records to include in the
426
+ response. If more records exist than the specified MaxRecords
427
+ value, a marker is included in the response so that the remaining
428
+ results may be retrieved.
429
+
430
+ :type marker: string
431
+ :param marker: An optional marker provided in the previous
432
+ DescribeCacheClusters request. If this parameter is specified, the
433
+ response includes only records beyond the marker, up to the value
434
+ specified by MaxRecords .
435
+
436
+ :type show_cache_node_info: boolean
437
+ :param show_cache_node_info: An optional flag that can be included in
438
+ the DescribeCacheCluster request to retrieve Cache Nodes
439
+ information.
440
+
441
+ """
442
+ params = {}
443
+ if cache_cluster_id is not None:
444
+ params['CacheClusterId'] = cache_cluster_id
445
+ if max_records is not None:
446
+ params['MaxRecords'] = max_records
447
+ if marker is not None:
448
+ params['Marker'] = marker
449
+ if show_cache_node_info is not None:
450
+ params['ShowCacheNodeInfo'] = str(
451
+ show_cache_node_info).lower()
452
+ return self._make_request(
453
+ action='DescribeCacheClusters',
454
+ verb='POST',
455
+ path='/', params=params)
456
+
457
+ def describe_cache_engine_versions(self, engine=None,
458
+ engine_version=None,
459
+ cache_parameter_group_family=None,
460
+ max_records=None, marker=None,
461
+ default_only=None):
462
+ """
463
+ Returns a list of the available cache engines and their
464
+ versions.
465
+
466
+ :type engine: string
467
+ :param engine: The cache engine to return.
468
+
469
+ :type engine_version: string
470
+ :param engine_version: The cache engine version to return. Example:
471
+ `1.4.14`
472
+
473
+ :type cache_parameter_group_family: string
474
+ :param cache_parameter_group_family: The name of a specific Cache
475
+ Parameter Group family to return details for. Constraints: +
476
+ Must be 1 to 255 alphanumeric characters + First character must be
477
+ a letter + Cannot end with a hyphen or contain two consecutive
478
+ hyphens
479
+
480
+ :type max_records: integer
481
+ :param max_records: The maximum number of records to include in the
482
+ response. If more records exist than the specified MaxRecords
483
+ value, a marker is included in the response so that the remaining
484
+ results may be retrieved.
485
+
486
+ :type marker: string
487
+ :param marker: An optional marker provided in the previous
488
+ DescribeCacheParameterGroups request. If this parameter is
489
+ specified, the response includes only records beyond the marker, up
490
+ to the value specified by MaxRecords .
491
+
492
+ :type default_only: boolean
493
+ :param default_only: Indicates that only the default version of the
494
+ specified engine or engine and major version combination is
495
+ returned.
496
+
497
+ """
498
+ params = {}
499
+ if engine is not None:
500
+ params['Engine'] = engine
501
+ if engine_version is not None:
502
+ params['EngineVersion'] = engine_version
503
+ if cache_parameter_group_family is not None:
504
+ params['CacheParameterGroupFamily'] = cache_parameter_group_family
505
+ if max_records is not None:
506
+ params['MaxRecords'] = max_records
507
+ if marker is not None:
508
+ params['Marker'] = marker
509
+ if default_only is not None:
510
+ params['DefaultOnly'] = str(
511
+ default_only).lower()
512
+ return self._make_request(
513
+ action='DescribeCacheEngineVersions',
514
+ verb='POST',
515
+ path='/', params=params)
516
+
517
+ def describe_cache_parameter_groups(self,
518
+ cache_parameter_group_name=None,
519
+ max_records=None, marker=None):
520
+ """
521
+ Returns a list of CacheParameterGroup descriptions. If a
522
+ CacheParameterGroupName is specified, the list will contain
523
+ only the descriptions of the specified CacheParameterGroup.
524
+
525
+ :type cache_parameter_group_name: string
526
+ :param cache_parameter_group_name: The name of a specific cache
527
+ parameter group to return details for.
528
+
529
+ :type max_records: integer
530
+ :param max_records: The maximum number of records to include in the
531
+ response. If more records exist than the specified MaxRecords
532
+ value, a marker is included in the response so that the remaining
533
+ results may be retrieved.
534
+
535
+ :type marker: string
536
+ :param marker: An optional marker provided in the previous
537
+ DescribeCacheParameterGroups request. If this parameter is
538
+ specified, the response includes only records beyond the marker, up
539
+ to the value specified by MaxRecords .
540
+
541
+ """
542
+ params = {}
543
+ if cache_parameter_group_name is not None:
544
+ params['CacheParameterGroupName'] = cache_parameter_group_name
545
+ if max_records is not None:
546
+ params['MaxRecords'] = max_records
547
+ if marker is not None:
548
+ params['Marker'] = marker
549
+ return self._make_request(
550
+ action='DescribeCacheParameterGroups',
551
+ verb='POST',
552
+ path='/', params=params)
553
+
554
+ def describe_cache_parameters(self, cache_parameter_group_name,
555
+ source=None, max_records=None, marker=None):
556
+ """
557
+ Returns the detailed parameter list for a particular
558
+ CacheParameterGroup.
559
+
560
+ :type cache_parameter_group_name: string
561
+ :param cache_parameter_group_name: The name of a specific cache
562
+ parameter group to return details for.
563
+
564
+ :type source: string
565
+ :param source: The parameter types to return. Valid values: `user` |
566
+ `system` | `engine-default`
567
+
568
+ :type max_records: integer
569
+ :param max_records: The maximum number of records to include in the
570
+ response. If more records exist than the specified MaxRecords
571
+ value, a marker is included in the response so that the remaining
572
+ results may be retrieved.
573
+
574
+ :type marker: string
575
+ :param marker: An optional marker provided in the previous
576
+ DescribeCacheClusters request. If this parameter is specified, the
577
+ response includes only records beyond the marker, up to the value
578
+ specified by MaxRecords .
579
+
580
+ """
581
+ params = {
582
+ 'CacheParameterGroupName': cache_parameter_group_name,
583
+ }
584
+ if source is not None:
585
+ params['Source'] = source
586
+ if max_records is not None:
587
+ params['MaxRecords'] = max_records
588
+ if marker is not None:
589
+ params['Marker'] = marker
590
+ return self._make_request(
591
+ action='DescribeCacheParameters',
592
+ verb='POST',
593
+ path='/', params=params)
594
+
595
+ def describe_cache_security_groups(self, cache_security_group_name=None,
596
+ max_records=None, marker=None):
597
+ """
598
+ Returns a list of CacheSecurityGroup descriptions. If a
599
+ CacheSecurityGroupName is specified, the list will contain
600
+ only the description of the specified CacheSecurityGroup.
601
+
602
+ :type cache_security_group_name: string
603
+ :param cache_security_group_name: The name of the Cache Security Group
604
+ to return details for.
605
+
606
+ :type max_records: integer
607
+ :param max_records: The maximum number of records to include in the
608
+ response. If more records exist than the specified MaxRecords
609
+ value, a marker is included in the response so that the remaining
610
+ results may be retrieved.
611
+
612
+ :type marker: string
613
+ :param marker: An optional marker provided in the previous
614
+ DescribeCacheClusters request. If this parameter is specified, the
615
+ response includes only records beyond the marker, up to the value
616
+ specified by MaxRecords .
617
+
618
+ """
619
+ params = {}
620
+ if cache_security_group_name is not None:
621
+ params['CacheSecurityGroupName'] = cache_security_group_name
622
+ if max_records is not None:
623
+ params['MaxRecords'] = max_records
624
+ if marker is not None:
625
+ params['Marker'] = marker
626
+ return self._make_request(
627
+ action='DescribeCacheSecurityGroups',
628
+ verb='POST',
629
+ path='/', params=params)
630
+
631
+ def describe_cache_subnet_groups(self, cache_subnet_group_name=None,
632
+ max_records=None, marker=None):
633
+ """
634
+ Returns a list of CacheSubnetGroup descriptions. If a
635
+ CacheSubnetGroupName is specified, the list will contain only
636
+ the description of the specified Cache Subnet Group.
637
+
638
+ :type cache_subnet_group_name: string
639
+ :param cache_subnet_group_name: The name of the Cache Subnet Group to
640
+ return details for.
641
+
642
+ :type max_records: integer
643
+ :param max_records: The maximum number of records to include in the
644
+ response. If more records exist than the specified `MaxRecords`
645
+ value, a marker is included in the response so that the remaining
646
+ results may be retrieved. Default: 100 Constraints: minimum 20,
647
+ maximum 100
648
+
649
+ :type marker: string
650
+ :param marker: An optional marker provided in the previous
651
+ DescribeCacheSubnetGroups request. If this parameter is specified,
652
+ the response includes only records beyond the marker, up to the
653
+ value specified by `MaxRecords`.
654
+
655
+ """
656
+ params = {}
657
+ if cache_subnet_group_name is not None:
658
+ params['CacheSubnetGroupName'] = cache_subnet_group_name
659
+ if max_records is not None:
660
+ params['MaxRecords'] = max_records
661
+ if marker is not None:
662
+ params['Marker'] = marker
663
+ return self._make_request(
664
+ action='DescribeCacheSubnetGroups',
665
+ verb='POST',
666
+ path='/', params=params)
667
+
668
+ def describe_engine_default_parameters(self,
669
+ cache_parameter_group_family,
670
+ max_records=None, marker=None):
671
+ """
672
+ Returns the default engine and system parameter information
673
+ for the specified cache engine.
674
+
675
+ :type cache_parameter_group_family: string
676
+ :param cache_parameter_group_family: The name of the Cache Parameter
677
+ Group Family. Currently, memcached1.4 is the only cache parameter
678
+ group family supported by the service.
679
+
680
+ :type max_records: integer
681
+ :param max_records: The maximum number of records to include in the
682
+ response. If more records exist than the specified MaxRecords
683
+ value, a marker is included in the response so that the remaining
684
+ results may be retrieved.
685
+
686
+ :type marker: string
687
+ :param marker: An optional marker provided in the previous
688
+ DescribeCacheClusters request. If this parameter is specified, the
689
+ response includes only records beyond the marker, up to the value
690
+ specified by MaxRecords .
691
+
692
+ """
693
+ params = {
694
+ 'CacheParameterGroupFamily': cache_parameter_group_family,
695
+ }
696
+ if max_records is not None:
697
+ params['MaxRecords'] = max_records
698
+ if marker is not None:
699
+ params['Marker'] = marker
700
+ return self._make_request(
701
+ action='DescribeEngineDefaultParameters',
702
+ verb='POST',
703
+ path='/', params=params)
704
+
705
+ def describe_events(self, source_identifier=None, source_type=None,
706
+ start_time=None, end_time=None, duration=None,
707
+ max_records=None, marker=None):
708
+ """
709
+ Returns events related to Cache Clusters, Cache Security
710
+ Groups, and Cache Parameter Groups for the past 14 days.
711
+ Events specific to a particular Cache Cluster, Cache Security
712
+ Group, or Cache Parameter Group can be obtained by providing
713
+ the name as a parameter. By default, the past hour of events
714
+ are returned.
715
+
716
+ :type source_identifier: string
717
+ :param source_identifier: The identifier of the event source for which
718
+ events will be returned. If not specified, then all sources are
719
+ included in the response.
720
+
721
+ :type source_type: string
722
+ :param source_type: The event source to retrieve events for. If no
723
+ value is specified, all events are returned.
724
+
725
+ :type start_time: string
726
+ :param start_time: The beginning of the time interval to retrieve
727
+ events for, specified in ISO 8601 format.
728
+
729
+ :type end_time: string
730
+ :param end_time: The end of the time interval for which to retrieve
731
+ events, specified in ISO 8601 format.
732
+
733
+ :type duration: integer
734
+ :param duration: The number of minutes to retrieve events for.
735
+
736
+ :type max_records: integer
737
+ :param max_records: The maximum number of records to include in the
738
+ response. If more records exist than the specified MaxRecords
739
+ value, a marker is included in the response so that the remaining
740
+ results may be retrieved.
741
+
742
+ :type marker: string
743
+ :param marker: An optional marker provided in the previous
744
+ DescribeCacheClusters request. If this parameter is specified, the
745
+ response includes only records beyond the marker, up to the value
746
+ specified by MaxRecords .
747
+
748
+ """
749
+ params = {}
750
+ if source_identifier is not None:
751
+ params['SourceIdentifier'] = source_identifier
752
+ if source_type is not None:
753
+ params['SourceType'] = source_type
754
+ if start_time is not None:
755
+ params['StartTime'] = start_time
756
+ if end_time is not None:
757
+ params['EndTime'] = end_time
758
+ if duration is not None:
759
+ params['Duration'] = duration
760
+ if max_records is not None:
761
+ params['MaxRecords'] = max_records
762
+ if marker is not None:
763
+ params['Marker'] = marker
764
+ return self._make_request(
765
+ action='DescribeEvents',
766
+ verb='POST',
767
+ path='/', params=params)
768
+
769
+ def describe_reserved_cache_nodes(self, reserved_cache_node_id=None,
770
+ reserved_cache_nodes_offering_id=None,
771
+ cache_node_type=None, duration=None,
772
+ product_description=None,
773
+ offering_type=None, max_records=None,
774
+ marker=None):
775
+ """
776
+ Returns information about reserved Cache Nodes for this
777
+ account, or about a specified reserved Cache Node.
778
+
779
+ :type reserved_cache_node_id: string
780
+ :param reserved_cache_node_id: The reserved Cache Node identifier
781
+ filter value. Specify this parameter to show only the reservation
782
+ that matches the specified reservation ID.
783
+
784
+ :type reserved_cache_nodes_offering_id: string
785
+ :param reserved_cache_nodes_offering_id: The offering identifier filter
786
+ value. Specify this parameter to show only purchased reservations
787
+ matching the specified offering identifier.
788
+
789
+ :type cache_node_type: string
790
+ :param cache_node_type: The Cache Node type filter value. Specify this
791
+ parameter to show only those reservations matching the specified
792
+ Cache Nodes type.
793
+
794
+ :type duration: string
795
+ :param duration: The duration filter value, specified in years or
796
+ seconds. Specify this parameter to show only reservations for this
797
+ duration. Valid Values: `1 | 3 | 31536000 | 94608000`
798
+
799
+ :type product_description: string
800
+ :param product_description: The product description filter value.
801
+ Specify this parameter to show only those reservations matching the
802
+ specified product description.
803
+
804
+ :type offering_type: string
805
+ :param offering_type: The offering type filter value. Specify this
806
+ parameter to show only the available offerings matching the
807
+ specified offering type. Valid Values: `"Light Utilization" |
808
+ "Medium Utilization" | "Heavy Utilization"`
809
+
810
+ :type max_records: integer
811
+ :param max_records: The maximum number of records to include in the
812
+ response. If more than the `MaxRecords` value is available, a
813
+ marker is included in the response so that the following results
814
+ can be retrieved. Default: 100 Constraints: minimum 20, maximum
815
+ 100
816
+
817
+ :type marker: string
818
+ :param marker: The marker provided in the previous request. If this
819
+ parameter is specified, the response includes records beyond the
820
+ marker only, up to `MaxRecords`.
821
+
822
+ """
823
+ params = {}
824
+ if reserved_cache_node_id is not None:
825
+ params['ReservedCacheNodeId'] = reserved_cache_node_id
826
+ if reserved_cache_nodes_offering_id is not None:
827
+ params['ReservedCacheNodesOfferingId'] = reserved_cache_nodes_offering_id
828
+ if cache_node_type is not None:
829
+ params['CacheNodeType'] = cache_node_type
830
+ if duration is not None:
831
+ params['Duration'] = duration
832
+ if product_description is not None:
833
+ params['ProductDescription'] = product_description
834
+ if offering_type is not None:
835
+ params['OfferingType'] = offering_type
836
+ if max_records is not None:
837
+ params['MaxRecords'] = max_records
838
+ if marker is not None:
839
+ params['Marker'] = marker
840
+ return self._make_request(
841
+ action='DescribeReservedCacheNodes',
842
+ verb='POST',
843
+ path='/', params=params)
844
+
845
+ def describe_reserved_cache_nodes_offerings(self,
846
+ reserved_cache_nodes_offering_id=None,
847
+ cache_node_type=None,
848
+ duration=None,
849
+ product_description=None,
850
+ offering_type=None,
851
+ max_records=None,
852
+ marker=None):
853
+ """
854
+ Lists available reserved Cache Node offerings.
855
+
856
+ :type reserved_cache_nodes_offering_id: string
857
+ :param reserved_cache_nodes_offering_id: The offering identifier filter
858
+ value. Specify this parameter to show only the available offering
859
+ that matches the specified reservation identifier. Example:
860
+ `438012d3-4052-4cc7-b2e3-8d3372e0e706`
861
+
862
+ :type cache_node_type: string
863
+ :param cache_node_type: The Cache Node type filter value. Specify this
864
+ parameter to show only the available offerings matching the
865
+ specified Cache Node type.
866
+
867
+ :type duration: string
868
+ :param duration: Duration filter value, specified in years or seconds.
869
+ Specify this parameter to show only reservations for this duration.
870
+ Valid Values: `1 | 3 | 31536000 | 94608000`
871
+
872
+ :type product_description: string
873
+ :param product_description: Product description filter value. Specify
874
+ this parameter to show only the available offerings matching the
875
+ specified product description.
876
+
877
+ :type offering_type: string
878
+ :param offering_type: The offering type filter value. Specify this
879
+ parameter to show only the available offerings matching the
880
+ specified offering type. Valid Values: `"Light Utilization" |
881
+ "Medium Utilization" | "Heavy Utilization"`
882
+
883
+ :type max_records: integer
884
+ :param max_records: The maximum number of records to include in the
885
+ response. If more than the `MaxRecords` value is available, a
886
+ marker is included in the response so that the following results
887
+ can be retrieved. Default: 100 Constraints: minimum 20, maximum
888
+ 100
889
+
890
+ :type marker: string
891
+ :param marker: The marker provided in the previous request. If this
892
+ parameter is specified, the response includes records beyond the
893
+ marker only, up to `MaxRecords`.
894
+
895
+ """
896
+ params = {}
897
+ if reserved_cache_nodes_offering_id is not None:
898
+ params['ReservedCacheNodesOfferingId'] = reserved_cache_nodes_offering_id
899
+ if cache_node_type is not None:
900
+ params['CacheNodeType'] = cache_node_type
901
+ if duration is not None:
902
+ params['Duration'] = duration
903
+ if product_description is not None:
904
+ params['ProductDescription'] = product_description
905
+ if offering_type is not None:
906
+ params['OfferingType'] = offering_type
907
+ if max_records is not None:
908
+ params['MaxRecords'] = max_records
909
+ if marker is not None:
910
+ params['Marker'] = marker
911
+ return self._make_request(
912
+ action='DescribeReservedCacheNodesOfferings',
913
+ verb='POST',
914
+ path='/', params=params)
915
+
916
+ def modify_cache_cluster(self, cache_cluster_id, num_cache_nodes=None,
917
+ cache_node_ids_to_remove=None,
918
+ cache_security_group_names=None,
919
+ security_group_ids=None,
920
+ preferred_maintenance_window=None,
921
+ notification_topic_arn=None,
922
+ cache_parameter_group_name=None,
923
+ notification_topic_status=None,
924
+ apply_immediately=None, engine_version=None,
925
+ auto_minor_version_upgrade=None):
926
+ """
927
+ Modifies the Cache Cluster settings. You can change one or
928
+ more Cache Cluster configuration parameters by specifying the
929
+ parameters and the new values in the request.
930
+
931
+ :type cache_cluster_id: string
932
+ :param cache_cluster_id: The Cache Cluster identifier. This value is
933
+ stored as a lowercase string.
934
+
935
+ :type num_cache_nodes: integer
936
+ :param num_cache_nodes: The number of Cache Nodes the Cache Cluster
937
+ should have. If NumCacheNodes is greater than the existing number
938
+ of Cache Nodes, Cache Nodes will be added. If NumCacheNodes is less
939
+ than the existing number of Cache Nodes, Cache Nodes will be
940
+ removed. When removing Cache Nodes, the Ids of the specific Cache
941
+ Nodes to be removed must be supplied using the CacheNodeIdsToRemove
942
+ parameter.
943
+
944
+ :type cache_node_ids_to_remove: list
945
+ :param cache_node_ids_to_remove: The list of Cache Node IDs to be
946
+ removed. This parameter is only valid when NumCacheNodes is less
947
+ than the existing number of Cache Nodes. The number of Cache Node
948
+ Ids supplied in this parameter must match the difference between
949
+ the existing number of Cache Nodes in the cluster and the new
950
+ NumCacheNodes requested.
951
+
952
+ :type cache_security_group_names: list
953
+ :param cache_security_group_names: A list of Cache Security Group Names
954
+ to authorize on this Cache Cluster. This change is asynchronously
955
+ applied as soon as possible. This parameter can be used only with
956
+ clusters that are created outside of an Amazon Virtual Private
957
+ Cloud (VPC). Constraints: Must contain no more than 255
958
+ alphanumeric characters. Must not be "Default".
959
+
960
+ :type security_group_ids: list
961
+ :param security_group_ids: Specifies the VPC Security Groups associated
962
+ with the Cache Cluster. This parameter can be used only with
963
+ clusters that are created in an Amazon Virtual Private Cloud (VPC).
964
+
965
+ :type preferred_maintenance_window: string
966
+ :param preferred_maintenance_window: The weekly time range (in UTC)
967
+ during which system maintenance can occur, which may result in an
968
+ outage. This change is made immediately. If moving this window to
969
+ the current time, there must be at least 120 minutes between the
970
+ current time and end of the window to ensure pending changes are
971
+ applied.
972
+
973
+ :type notification_topic_arn: string
974
+ :param notification_topic_arn: The Amazon Resource Name (ARN) of the
975
+ SNS topic to which notifications will be sent. The SNS topic owner
976
+ must be same as the Cache Cluster owner.
977
+
978
+ :type cache_parameter_group_name: string
979
+ :param cache_parameter_group_name: The name of the Cache Parameter
980
+ Group to apply to this Cache Cluster. This change is asynchronously
981
+ applied as soon as possible for parameters when the
982
+ ApplyImmediately parameter is specified as true for this request.
983
+
984
+ :type notification_topic_status: string
985
+ :param notification_topic_status: The status of the Amazon SNS
986
+ notification topic. The value can be active or inactive .
987
+ Notifications are sent only if the status is active .
988
+
989
+ :type apply_immediately: boolean
990
+ :param apply_immediately: Specifies whether or not the modifications in
991
+ this request and any pending modifications are asynchronously
992
+ applied as soon as possible, regardless of the
993
+ PreferredMaintenanceWindow setting for the Cache Cluster. If this
994
+ parameter is passed as `False`, changes to the Cache Cluster are
995
+ applied on the next maintenance reboot, or the next failure reboot,
996
+ whichever occurs first. Default: `False`
997
+
998
+ :type engine_version: string
999
+ :param engine_version: The version of the cache engine to upgrade this
1000
+ cluster to.
1001
+
1002
+ :type auto_minor_version_upgrade: boolean
1003
+ :param auto_minor_version_upgrade: Indicates that minor engine upgrades
1004
+ will be applied automatically to the Cache Cluster during the
1005
+ maintenance window. Default: `True`
1006
+
1007
+ """
1008
+ params = {'CacheClusterId': cache_cluster_id, }
1009
+ if num_cache_nodes is not None:
1010
+ params['NumCacheNodes'] = num_cache_nodes
1011
+ if cache_node_ids_to_remove is not None:
1012
+ self.build_list_params(params,
1013
+ cache_node_ids_to_remove,
1014
+ 'CacheNodeIdsToRemove.member')
1015
+ if cache_security_group_names is not None:
1016
+ self.build_list_params(params,
1017
+ cache_security_group_names,
1018
+ 'CacheSecurityGroupNames.member')
1019
+ if security_group_ids is not None:
1020
+ self.build_list_params(params,
1021
+ security_group_ids,
1022
+ 'SecurityGroupIds.member')
1023
+ if preferred_maintenance_window is not None:
1024
+ params['PreferredMaintenanceWindow'] = preferred_maintenance_window
1025
+ if notification_topic_arn is not None:
1026
+ params['NotificationTopicArn'] = notification_topic_arn
1027
+ if cache_parameter_group_name is not None:
1028
+ params['CacheParameterGroupName'] = cache_parameter_group_name
1029
+ if notification_topic_status is not None:
1030
+ params['NotificationTopicStatus'] = notification_topic_status
1031
+ if apply_immediately is not None:
1032
+ params['ApplyImmediately'] = str(
1033
+ apply_immediately).lower()
1034
+ if engine_version is not None:
1035
+ params['EngineVersion'] = engine_version
1036
+ if auto_minor_version_upgrade is not None:
1037
+ params['AutoMinorVersionUpgrade'] = str(
1038
+ auto_minor_version_upgrade).lower()
1039
+ return self._make_request(
1040
+ action='ModifyCacheCluster',
1041
+ verb='POST',
1042
+ path='/', params=params)
1043
+
1044
+ def modify_cache_parameter_group(self, cache_parameter_group_name,
1045
+ parameter_name_values):
1046
+ """
1047
+ Modifies the parameters of a CacheParameterGroup. To modify
1048
+ more than one parameter, submit a list of ParameterName and
1049
+ ParameterValue parameters. A maximum of 20 parameters can be
1050
+ modified in a single request.
1051
+
1052
+ :type cache_parameter_group_name: string
1053
+ :param cache_parameter_group_name: The name of the cache parameter
1054
+ group to modify.
1055
+
1056
+ :type parameter_name_values: list
1057
+ :param parameter_name_values: An array of parameter names and values
1058
+ for the parameter update. At least one parameter name and value
1059
+ must be supplied; subsequent arguments are optional. A maximum of
1060
+ 20 parameters may be modified in a single request.
1061
+
1062
+ """
1063
+ params = {
1064
+ 'CacheParameterGroupName': cache_parameter_group_name,
1065
+ }
1066
+ self.build_complex_list_params(
1067
+ params, parameter_name_values,
1068
+ 'ParameterNameValues.member',
1069
+ ('ParameterName', 'ParameterValue'))
1070
+ return self._make_request(
1071
+ action='ModifyCacheParameterGroup',
1072
+ verb='POST',
1073
+ path='/', params=params)
1074
+
1075
+ def modify_cache_subnet_group(self, cache_subnet_group_name,
1076
+ cache_subnet_group_description=None,
1077
+ subnet_ids=None):
1078
+ """
1079
+ Modifies an existing Cache Subnet Group.
1080
+
1081
+ :type cache_subnet_group_name: string
1082
+ :param cache_subnet_group_name: The name for the Cache Subnet Group.
1083
+ This value is stored as a lowercase string. Constraints: Must
1084
+ contain no more than 255 alphanumeric characters or hyphens.
1085
+ Example: `mysubnetgroup`
1086
+
1087
+ :type cache_subnet_group_description: string
1088
+ :param cache_subnet_group_description: The description for the Cache
1089
+ Subnet Group.
1090
+
1091
+ :type subnet_ids: list
1092
+ :param subnet_ids: The EC2 Subnet IDs for the Cache Subnet Group.
1093
+
1094
+ """
1095
+ params = {'CacheSubnetGroupName': cache_subnet_group_name, }
1096
+ if cache_subnet_group_description is not None:
1097
+ params['CacheSubnetGroupDescription'] = cache_subnet_group_description
1098
+ if subnet_ids is not None:
1099
+ self.build_list_params(params,
1100
+ subnet_ids,
1101
+ 'SubnetIds.member')
1102
+ return self._make_request(
1103
+ action='ModifyCacheSubnetGroup',
1104
+ verb='POST',
1105
+ path='/', params=params)
1106
+
1107
+ def purchase_reserved_cache_nodes_offering(self,
1108
+ reserved_cache_nodes_offering_id,
1109
+ reserved_cache_node_id=None,
1110
+ cache_node_count=None):
1111
+ """
1112
+ Purchases a reserved Cache Node offering.
1113
+
1114
+ :type reserved_cache_nodes_offering_id: string
1115
+ :param reserved_cache_nodes_offering_id: The ID of the Reserved Cache
1116
+ Node offering to purchase. Example:
1117
+ 438012d3-4052-4cc7-b2e3-8d3372e0e706
1118
+
1119
+ :type reserved_cache_node_id: string
1120
+ :param reserved_cache_node_id: Customer-specified identifier to track
1121
+ this reservation. Example: myreservationID
1122
+
1123
+ :type cache_node_count: integer
1124
+ :param cache_node_count: The number of instances to reserve. Default:
1125
+ `1`
1126
+
1127
+ """
1128
+ params = {
1129
+ 'ReservedCacheNodesOfferingId': reserved_cache_nodes_offering_id,
1130
+ }
1131
+ if reserved_cache_node_id is not None:
1132
+ params['ReservedCacheNodeId'] = reserved_cache_node_id
1133
+ if cache_node_count is not None:
1134
+ params['CacheNodeCount'] = cache_node_count
1135
+ return self._make_request(
1136
+ action='PurchaseReservedCacheNodesOffering',
1137
+ verb='POST',
1138
+ path='/', params=params)
1139
+
1140
+ def reboot_cache_cluster(self, cache_cluster_id,
1141
+ cache_node_ids_to_reboot):
1142
+ """
1143
+ Reboots some (or all) of the cache cluster nodes within a
1144
+ previously provisioned ElastiCache cluster. This API results
1145
+ in the application of modified CacheParameterGroup parameters
1146
+ to the cache cluster. This action is taken as soon as
1147
+ possible, and results in a momentary outage to the cache
1148
+ cluster during which the cache cluster status is set to
1149
+ rebooting. During that momentary outage, the contents of the
1150
+ cache (for each cache cluster node being rebooted) are lost. A
1151
+ CacheCluster event is created when the reboot is completed.
1152
+
1153
+ :type cache_cluster_id: string
1154
+ :param cache_cluster_id: The Cache Cluster identifier. This parameter
1155
+ is stored as a lowercase string.
1156
+
1157
+ :type cache_node_ids_to_reboot: list
1158
+ :param cache_node_ids_to_reboot: A list of Cache Cluster Node Ids to
1159
+ reboot. To reboot an entire cache cluster, specify all cache
1160
+ cluster node Ids.
1161
+
1162
+ """
1163
+ params = {'CacheClusterId': cache_cluster_id, }
1164
+ self.build_list_params(params,
1165
+ cache_node_ids_to_reboot,
1166
+ 'CacheNodeIdsToReboot.member')
1167
+ return self._make_request(
1168
+ action='RebootCacheCluster',
1169
+ verb='POST',
1170
+ path='/', params=params)
1171
+
1172
+ def reset_cache_parameter_group(self, cache_parameter_group_name,
1173
+ parameter_name_values,
1174
+ reset_all_parameters=None):
1175
+ """
1176
+ Modifies the parameters of a CacheParameterGroup to the engine
1177
+ or system default value. To reset specific parameters submit a
1178
+ list of the parameter names. To reset the entire
1179
+ CacheParameterGroup, specify the CacheParameterGroup name and
1180
+ ResetAllParameters parameters.
1181
+
1182
+ :type cache_parameter_group_name: string
1183
+ :param cache_parameter_group_name: The name of the Cache Parameter
1184
+ Group.
1185
+
1186
+ :type reset_all_parameters: boolean
1187
+ :param reset_all_parameters: Specifies whether ( true ) or not ( false
1188
+ ) to reset all parameters in the Cache Parameter Group to default
1189
+ values.
1190
+
1191
+ :type parameter_name_values: list
1192
+ :param parameter_name_values: An array of parameter names which should
1193
+ be reset. If not resetting the entire CacheParameterGroup, at least
1194
+ one parameter name must be supplied.
1195
+
1196
+ """
1197
+ params = {
1198
+ 'CacheParameterGroupName': cache_parameter_group_name,
1199
+ }
1200
+ self.build_complex_list_params(
1201
+ params, parameter_name_values,
1202
+ 'ParameterNameValues.member',
1203
+ ('ParameterName', 'ParameterValue'))
1204
+ if reset_all_parameters is not None:
1205
+ params['ResetAllParameters'] = str(
1206
+ reset_all_parameters).lower()
1207
+ return self._make_request(
1208
+ action='ResetCacheParameterGroup',
1209
+ verb='POST',
1210
+ path='/', params=params)
1211
+
1212
+ def revoke_cache_security_group_ingress(self, cache_security_group_name,
1213
+ ec2_security_group_name,
1214
+ ec2_security_group_owner_id):
1215
+ """
1216
+ Revokes ingress from a CacheSecurityGroup for previously
1217
+ authorized EC2 Security Groups.
1218
+
1219
+ :type cache_security_group_name: string
1220
+ :param cache_security_group_name: The name of the Cache Security Group
1221
+ to revoke ingress from.
1222
+
1223
+ :type ec2_security_group_name: string
1224
+ :param ec2_security_group_name: The name of the EC2 Security Group to
1225
+ revoke access from.
1226
+
1227
+ :type ec2_security_group_owner_id: string
1228
+ :param ec2_security_group_owner_id: The AWS Account Number of the owner
1229
+ of the security group specified in the EC2SecurityGroupName
1230
+ parameter. The AWS Access Key ID is not an acceptable value.
1231
+
1232
+ """
1233
+ params = {
1234
+ 'CacheSecurityGroupName': cache_security_group_name,
1235
+ 'EC2SecurityGroupName': ec2_security_group_name,
1236
+ 'EC2SecurityGroupOwnerId': ec2_security_group_owner_id,
1237
+ }
1238
+ return self._make_request(
1239
+ action='RevokeCacheSecurityGroupIngress',
1240
+ verb='POST',
1241
+ path='/', params=params)
1242
+
1243
+ def _make_request(self, action, verb, path, params):
1244
+ params['ContentType'] = 'JSON'
1245
+ response = self.make_request(action=action, verb='POST',
1246
+ path='/', params=params)
1247
+ body = response.read()
1248
+ boto.log.debug(body)
1249
+ if response.status == 200:
1250
+ return json.loads(body)
1251
+ else:
1252
+ raise self.ResponseError(response.status, response.reason, body)