gcloud 0.0.7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (998) hide show
  1. checksums.yaml +7 -0
  2. data/{packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/ext/__init__.py → .gemtest} +0 -0
  3. data/.rubocop.yml +17 -0
  4. data/CHANGELOG.md +5 -0
  5. data/CONTRIBUTING.md +93 -0
  6. data/LICENSE +201 -674
  7. data/Manifest.txt +66 -0
  8. data/README.md +110 -12
  9. data/Rakefile +34 -3
  10. data/gcloud.gemspec +48 -17
  11. data/lib/gcloud.rb +8 -0
  12. data/lib/gcloud/backoff.rb +115 -0
  13. data/lib/gcloud/credentials.rb +124 -0
  14. data/lib/gcloud/datastore.rb +66 -0
  15. data/lib/gcloud/datastore/connection.rb +177 -0
  16. data/lib/gcloud/datastore/credentials.rb +41 -0
  17. data/lib/gcloud/datastore/dataset.rb +259 -0
  18. data/lib/gcloud/datastore/dataset/lookup_results.rb +60 -0
  19. data/lib/gcloud/datastore/dataset/query_results.rb +87 -0
  20. data/lib/gcloud/datastore/entity.rb +257 -0
  21. data/lib/gcloud/datastore/errors.rb +65 -0
  22. data/lib/gcloud/datastore/key.rb +151 -0
  23. data/lib/gcloud/datastore/properties.rb +102 -0
  24. data/lib/gcloud/datastore/proto.rb +253 -0
  25. data/lib/gcloud/datastore/query.rb +189 -0
  26. data/lib/gcloud/datastore/transaction.rb +116 -0
  27. data/lib/gcloud/proto/datastore_v1.pb.rb +377 -0
  28. data/lib/gcloud/storage.rb +78 -0
  29. data/lib/gcloud/storage/bucket.rb +254 -0
  30. data/lib/gcloud/storage/bucket/acl.rb +311 -0
  31. data/lib/gcloud/storage/bucket/list.rb +45 -0
  32. data/lib/gcloud/storage/connection.rb +358 -0
  33. data/{packages/gsutil/gslib/commands/__init__.py → lib/gcloud/storage/credentials.rb} +13 -2
  34. data/lib/gcloud/storage/errors.rb +78 -0
  35. data/lib/gcloud/storage/file.rb +287 -0
  36. data/lib/gcloud/storage/file/acl.rb +172 -0
  37. data/lib/gcloud/storage/file/list.rb +52 -0
  38. data/lib/gcloud/storage/file/verifier.rb +65 -0
  39. data/lib/gcloud/storage/project.rb +119 -0
  40. data/lib/gcloud/version.rb +5 -0
  41. data/{packages/gsutil/gslib/tests/testcase/__init__.py → rakelib/console.rake} +14 -4
  42. data/{packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version.py → rakelib/manifest.rake} +11 -4
  43. data/{packages/gsutil/gslib/addlhelp/__init__.py → rakelib/proto.rake} +4 -2
  44. data/{packages/gsutil/gslib/tests/__init__.py → rakelib/rubocop.rake} +4 -2
  45. data/rakelib/test.rake +144 -0
  46. data/test/gcloud/datastore/proto/test_cursor.rb +36 -0
  47. data/test/gcloud/datastore/proto/test_direction.rb +60 -0
  48. data/test/gcloud/datastore/proto/test_operator.rb +76 -0
  49. data/test/gcloud/datastore/proto/test_value.rb +231 -0
  50. data/test/gcloud/datastore/test_connection.rb +93 -0
  51. data/test/gcloud/datastore/test_credentials.rb +38 -0
  52. data/test/gcloud/datastore/test_dataset.rb +413 -0
  53. data/test/gcloud/datastore/test_entity.rb +161 -0
  54. data/test/gcloud/datastore/test_entity_exclude.rb +225 -0
  55. data/test/gcloud/datastore/test_key.rb +189 -0
  56. data/test/gcloud/datastore/test_query.rb +271 -0
  57. data/test/gcloud/datastore/test_transaction.rb +121 -0
  58. data/test/gcloud/storage/test_backoff.rb +127 -0
  59. data/test/gcloud/storage/test_bucket.rb +270 -0
  60. data/test/gcloud/storage/test_bucket_acl.rb +253 -0
  61. data/test/gcloud/storage/test_default_acl.rb +256 -0
  62. data/test/gcloud/storage/test_file.rb +221 -0
  63. data/test/gcloud/storage/test_file_acl.rb +367 -0
  64. data/test/gcloud/storage/test_project.rb +180 -0
  65. data/{packages/gsutil/gslib/no_op_auth_plugin.py → test/gcloud/storage/test_storage.rb} +14 -15
  66. data/test/gcloud/storage/test_verifier.rb +62 -0
  67. data/test/gcloud/test_version.rb +8 -0
  68. data/test/helper.rb +91 -0
  69. metadata +259 -1020
  70. data.tar.gz.sig +0 -2
  71. data/CHANGELOG +0 -14
  72. data/Makefile +0 -13
  73. data/Manifest +0 -937
  74. data/TODO +0 -2
  75. data/bin/gcloud +0 -7
  76. data/bin/gcutil-symlink +0 -53
  77. data/bin/gsutil-symlink +0 -377
  78. data/init.rb +0 -3
  79. data/packages/README +0 -6
  80. data/packages/gcutil-1.7.1.tar.gz +0 -0
  81. data/packages/gcutil-1.7.1/CHANGELOG +0 -197
  82. data/packages/gcutil-1.7.1/LICENSE +0 -202
  83. data/packages/gcutil-1.7.1/VERSION +0 -1
  84. data/packages/gcutil-1.7.1/gcutil +0 -53
  85. data/packages/gcutil-1.7.1/lib/google_api_python_client/LICENSE +0 -23
  86. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/__init__.py +0 -1
  87. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/__init__.pyc +0 -0
  88. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/discovery.py +0 -743
  89. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/discovery.pyc +0 -0
  90. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/errors.py +0 -123
  91. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/errors.pyc +0 -0
  92. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/http.py +0 -1443
  93. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/http.pyc +0 -0
  94. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/mimeparse.py +0 -172
  95. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/mimeparse.pyc +0 -0
  96. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/model.py +0 -385
  97. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/model.pyc +0 -0
  98. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/schema.py +0 -303
  99. data/packages/gcutil-1.7.1/lib/google_api_python_client/apiclient/schema.pyc +0 -0
  100. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/__init__.py +0 -1
  101. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/__init__.pyc +0 -0
  102. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/anyjson.py +0 -32
  103. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/anyjson.pyc +0 -0
  104. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/appengine.py +0 -528
  105. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/client.py +0 -1139
  106. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/client.pyc +0 -0
  107. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/clientsecrets.py +0 -105
  108. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/clientsecrets.pyc +0 -0
  109. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/crypt.py +0 -244
  110. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/crypt.pyc +0 -0
  111. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/django_orm.py +0 -124
  112. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/file.py +0 -107
  113. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/locked_file.py +0 -343
  114. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/locked_file.pyc +0 -0
  115. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/multistore_file.py +0 -379
  116. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/multistore_file.pyc +0 -0
  117. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/tools.py +0 -174
  118. data/packages/gcutil-1.7.1/lib/google_api_python_client/oauth2client/tools.pyc +0 -0
  119. data/packages/gcutil-1.7.1/lib/google_api_python_client/uritemplate/__init__.py +0 -147
  120. data/packages/gcutil-1.7.1/lib/google_api_python_client/uritemplate/__init__.pyc +0 -0
  121. data/packages/gcutil-1.7.1/lib/google_apputils/LICENSE +0 -202
  122. data/packages/gcutil-1.7.1/lib/google_apputils/google/__init__.py +0 -3
  123. data/packages/gcutil-1.7.1/lib/google_apputils/google/__init__.pyc +0 -0
  124. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/__init__.py +0 -3
  125. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/__init__.pyc +0 -0
  126. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/app.py +0 -356
  127. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/app.pyc +0 -0
  128. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/appcommands.py +0 -783
  129. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/appcommands.pyc +0 -0
  130. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/basetest.py +0 -1260
  131. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/datelib.py +0 -421
  132. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/debug.py +0 -60
  133. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/file_util.py +0 -181
  134. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/resources.py +0 -67
  135. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/run_script_module.py +0 -217
  136. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/setup_command.py +0 -159
  137. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/shellutil.py +0 -49
  138. data/packages/gcutil-1.7.1/lib/google_apputils/google/apputils/stopwatch.py +0 -204
  139. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/__init__.py +0 -0
  140. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/__init__.pyc +0 -0
  141. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auth_helper.py +0 -140
  142. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auth_helper.pyc +0 -0
  143. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auth_helper_test.py +0 -149
  144. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auto_auth.py +0 -130
  145. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auto_auth.pyc +0 -0
  146. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/auto_auth_test.py +0 -75
  147. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/basic_cmds.py +0 -128
  148. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/basic_cmds.pyc +0 -0
  149. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/basic_cmds_test.py +0 -111
  150. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/command_base.py +0 -1808
  151. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/command_base.pyc +0 -0
  152. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/command_base_test.py +0 -1651
  153. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/compute/v1beta13.json +0 -2851
  154. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/compute/v1beta14.json +0 -3361
  155. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/disk_cmds.py +0 -342
  156. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/disk_cmds.pyc +0 -0
  157. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/disk_cmds_test.py +0 -474
  158. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/firewall_cmds.py +0 -344
  159. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/firewall_cmds.pyc +0 -0
  160. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/firewall_cmds_test.py +0 -231
  161. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/flags_cache.py +0 -274
  162. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/flags_cache.pyc +0 -0
  163. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/gcutil +0 -89
  164. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/gcutil_logging.py +0 -69
  165. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/gcutil_logging.pyc +0 -0
  166. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/image_cmds.py +0 -262
  167. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/image_cmds.pyc +0 -0
  168. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/image_cmds_test.py +0 -172
  169. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/instance_cmds.py +0 -1506
  170. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/instance_cmds.pyc +0 -0
  171. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/instance_cmds_test.py +0 -1904
  172. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/kernel_cmds.py +0 -91
  173. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/kernel_cmds.pyc +0 -0
  174. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/kernel_cmds_test.py +0 -56
  175. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/machine_type_cmds.py +0 -106
  176. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/machine_type_cmds.pyc +0 -0
  177. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/machine_type_cmds_test.py +0 -59
  178. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata.py +0 -96
  179. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata.pyc +0 -0
  180. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata_lib.py +0 -357
  181. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata_lib.pyc +0 -0
  182. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/metadata_test.py +0 -84
  183. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/mock_api.py +0 -420
  184. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/mock_metadata.py +0 -58
  185. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/move_cmds.py +0 -824
  186. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/move_cmds.pyc +0 -0
  187. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/move_cmds_test.py +0 -307
  188. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/network_cmds.py +0 -178
  189. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/network_cmds.pyc +0 -0
  190. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/network_cmds_test.py +0 -133
  191. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/operation_cmds.py +0 -181
  192. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/operation_cmds.pyc +0 -0
  193. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/operation_cmds_test.py +0 -196
  194. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/path_initializer.py +0 -38
  195. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/path_initializer.pyc +0 -0
  196. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/project_cmds.py +0 -173
  197. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/project_cmds.pyc +0 -0
  198. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/project_cmds_test.py +0 -111
  199. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/scopes.py +0 -61
  200. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/scopes.pyc +0 -0
  201. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/scopes_test.py +0 -50
  202. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/snapshot_cmds.py +0 -276
  203. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/snapshot_cmds.pyc +0 -0
  204. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/snapshot_cmds_test.py +0 -260
  205. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/ssh_keys.py +0 -266
  206. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/ssh_keys.pyc +0 -0
  207. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/ssh_keys_test.py +0 -128
  208. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/table_formatter.py +0 -563
  209. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/table_formatter.pyc +0 -0
  210. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/thread_pool.py +0 -188
  211. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/thread_pool.pyc +0 -0
  212. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/thread_pool_test.py +0 -88
  213. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/utils.py +0 -208
  214. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/utils.pyc +0 -0
  215. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/utils_test.py +0 -193
  216. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version.pyc +0 -0
  217. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version_checker.py +0 -246
  218. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version_checker.pyc +0 -0
  219. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/version_checker_test.py +0 -271
  220. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/zone_cmds.py +0 -151
  221. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/zone_cmds.pyc +0 -0
  222. data/packages/gcutil-1.7.1/lib/google_compute_engine/gcutil/zone_cmds_test.py +0 -60
  223. data/packages/gcutil-1.7.1/lib/httplib2/LICENSE +0 -21
  224. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/__init__.py +0 -1630
  225. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/__init__.pyc +0 -0
  226. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/cacerts.txt +0 -714
  227. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/iri2uri.py +0 -110
  228. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/iri2uri.pyc +0 -0
  229. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/socks.py +0 -438
  230. data/packages/gcutil-1.7.1/lib/httplib2/httplib2/socks.pyc +0 -0
  231. data/packages/gcutil-1.7.1/lib/iso8601/LICENSE +0 -20
  232. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/__init__.py +0 -1
  233. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/__init__.pyc +0 -0
  234. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/iso8601.py +0 -102
  235. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/iso8601.pyc +0 -0
  236. data/packages/gcutil-1.7.1/lib/iso8601/iso8601/test_iso8601.py +0 -111
  237. data/packages/gcutil-1.7.1/lib/python_gflags/AUTHORS +0 -2
  238. data/packages/gcutil-1.7.1/lib/python_gflags/LICENSE +0 -28
  239. data/packages/gcutil-1.7.1/lib/python_gflags/gflags.py +0 -2862
  240. data/packages/gcutil-1.7.1/lib/python_gflags/gflags.pyc +0 -0
  241. data/packages/gcutil-1.7.1/lib/python_gflags/gflags2man.py +0 -544
  242. data/packages/gcutil-1.7.1/lib/python_gflags/gflags_validators.py +0 -187
  243. data/packages/gcutil-1.7.1/lib/python_gflags/gflags_validators.pyc +0 -0
  244. data/packages/gsutil.tar.gz +0 -0
  245. data/packages/gsutil/CHECKSUM +0 -1
  246. data/packages/gsutil/COPYING +0 -202
  247. data/packages/gsutil/LICENSE.third_party +0 -295
  248. data/packages/gsutil/MANIFEST.in +0 -5
  249. data/packages/gsutil/README +0 -38
  250. data/packages/gsutil/README.pkg +0 -49
  251. data/packages/gsutil/ReleaseNotes.txt +0 -780
  252. data/packages/gsutil/VERSION +0 -1
  253. data/packages/gsutil/boto/Changelog.rst +0 -35
  254. data/packages/gsutil/boto/LICENSE +0 -18
  255. data/packages/gsutil/boto/MANIFEST.in +0 -12
  256. data/packages/gsutil/boto/README.rst +0 -163
  257. data/packages/gsutil/boto/bin/asadmin +0 -290
  258. data/packages/gsutil/boto/bin/bundle_image +0 -27
  259. data/packages/gsutil/boto/bin/cfadmin +0 -108
  260. data/packages/gsutil/boto/bin/cq +0 -89
  261. data/packages/gsutil/boto/bin/cwutil +0 -140
  262. data/packages/gsutil/boto/bin/elbadmin +0 -284
  263. data/packages/gsutil/boto/bin/fetch_file +0 -43
  264. data/packages/gsutil/boto/bin/glacier +0 -154
  265. data/packages/gsutil/boto/bin/instance_events +0 -145
  266. data/packages/gsutil/boto/bin/kill_instance +0 -35
  267. data/packages/gsutil/boto/bin/launch_instance +0 -252
  268. data/packages/gsutil/boto/bin/list_instances +0 -90
  269. data/packages/gsutil/boto/bin/lss3 +0 -77
  270. data/packages/gsutil/boto/bin/mturk +0 -465
  271. data/packages/gsutil/boto/bin/pyami_sendmail +0 -52
  272. data/packages/gsutil/boto/bin/route53 +0 -205
  273. data/packages/gsutil/boto/bin/s3put +0 -374
  274. data/packages/gsutil/boto/bin/sdbadmin +0 -194
  275. data/packages/gsutil/boto/bin/taskadmin +0 -116
  276. data/packages/gsutil/boto/boto/__init__.py +0 -793
  277. data/packages/gsutil/boto/boto/__init__.pyc +0 -0
  278. data/packages/gsutil/boto/boto/auth.py +0 -682
  279. data/packages/gsutil/boto/boto/auth.pyc +0 -0
  280. data/packages/gsutil/boto/boto/auth_handler.py +0 -58
  281. data/packages/gsutil/boto/boto/auth_handler.pyc +0 -0
  282. data/packages/gsutil/boto/boto/beanstalk/__init__.py +0 -65
  283. data/packages/gsutil/boto/boto/beanstalk/exception.py +0 -64
  284. data/packages/gsutil/boto/boto/beanstalk/layer1.py +0 -1153
  285. data/packages/gsutil/boto/boto/beanstalk/response.py +0 -703
  286. data/packages/gsutil/boto/boto/beanstalk/wrapper.py +0 -29
  287. data/packages/gsutil/boto/boto/cacerts/__init__.py +0 -22
  288. data/packages/gsutil/boto/boto/cacerts/__init__.pyc +0 -0
  289. data/packages/gsutil/boto/boto/cacerts/cacerts.txt +0 -633
  290. data/packages/gsutil/boto/boto/cloudformation/__init__.py +0 -68
  291. data/packages/gsutil/boto/boto/cloudformation/connection.py +0 -364
  292. data/packages/gsutil/boto/boto/cloudformation/stack.py +0 -360
  293. data/packages/gsutil/boto/boto/cloudformation/template.py +0 -43
  294. data/packages/gsutil/boto/boto/cloudfront/__init__.py +0 -324
  295. data/packages/gsutil/boto/boto/cloudfront/distribution.py +0 -745
  296. data/packages/gsutil/boto/boto/cloudfront/exception.py +0 -26
  297. data/packages/gsutil/boto/boto/cloudfront/identity.py +0 -122
  298. data/packages/gsutil/boto/boto/cloudfront/invalidation.py +0 -216
  299. data/packages/gsutil/boto/boto/cloudfront/logging.py +0 -38
  300. data/packages/gsutil/boto/boto/cloudfront/object.py +0 -48
  301. data/packages/gsutil/boto/boto/cloudfront/origin.py +0 -150
  302. data/packages/gsutil/boto/boto/cloudfront/signers.py +0 -60
  303. data/packages/gsutil/boto/boto/cloudsearch/__init__.py +0 -45
  304. data/packages/gsutil/boto/boto/cloudsearch/document.py +0 -265
  305. data/packages/gsutil/boto/boto/cloudsearch/domain.py +0 -394
  306. data/packages/gsutil/boto/boto/cloudsearch/layer1.py +0 -738
  307. data/packages/gsutil/boto/boto/cloudsearch/layer2.py +0 -67
  308. data/packages/gsutil/boto/boto/cloudsearch/optionstatus.py +0 -248
  309. data/packages/gsutil/boto/boto/cloudsearch/search.py +0 -365
  310. data/packages/gsutil/boto/boto/cloudsearch/sourceattribute.py +0 -75
  311. data/packages/gsutil/boto/boto/compat.py +0 -28
  312. data/packages/gsutil/boto/boto/compat.pyc +0 -0
  313. data/packages/gsutil/boto/boto/connection.py +0 -1081
  314. data/packages/gsutil/boto/boto/connection.pyc +0 -0
  315. data/packages/gsutil/boto/boto/contrib/__init__.py +0 -22
  316. data/packages/gsutil/boto/boto/contrib/ymlmessage.py +0 -52
  317. data/packages/gsutil/boto/boto/core/README +0 -58
  318. data/packages/gsutil/boto/boto/core/__init__.py +0 -23
  319. data/packages/gsutil/boto/boto/core/auth.py +0 -78
  320. data/packages/gsutil/boto/boto/core/credentials.py +0 -154
  321. data/packages/gsutil/boto/boto/core/dictresponse.py +0 -178
  322. data/packages/gsutil/boto/boto/core/service.py +0 -67
  323. data/packages/gsutil/boto/boto/datapipeline/__init__.py +0 -0
  324. data/packages/gsutil/boto/boto/datapipeline/exceptions.py +0 -42
  325. data/packages/gsutil/boto/boto/datapipeline/layer1.py +0 -546
  326. data/packages/gsutil/boto/boto/dynamodb/__init__.py +0 -66
  327. data/packages/gsutil/boto/boto/dynamodb/batch.py +0 -262
  328. data/packages/gsutil/boto/boto/dynamodb/condition.py +0 -170
  329. data/packages/gsutil/boto/boto/dynamodb/exceptions.py +0 -64
  330. data/packages/gsutil/boto/boto/dynamodb/item.py +0 -196
  331. data/packages/gsutil/boto/boto/dynamodb/layer1.py +0 -575
  332. data/packages/gsutil/boto/boto/dynamodb/layer2.py +0 -798
  333. data/packages/gsutil/boto/boto/dynamodb/schema.py +0 -112
  334. data/packages/gsutil/boto/boto/dynamodb/table.py +0 -540
  335. data/packages/gsutil/boto/boto/dynamodb/types.py +0 -326
  336. data/packages/gsutil/boto/boto/ec2/__init__.py +0 -96
  337. data/packages/gsutil/boto/boto/ec2/address.py +0 -103
  338. data/packages/gsutil/boto/boto/ec2/autoscale/__init__.py +0 -781
  339. data/packages/gsutil/boto/boto/ec2/autoscale/activity.py +0 -74
  340. data/packages/gsutil/boto/boto/ec2/autoscale/group.py +0 -337
  341. data/packages/gsutil/boto/boto/ec2/autoscale/instance.py +0 -60
  342. data/packages/gsutil/boto/boto/ec2/autoscale/launchconfig.py +0 -209
  343. data/packages/gsutil/boto/boto/ec2/autoscale/policy.py +0 -166
  344. data/packages/gsutil/boto/boto/ec2/autoscale/request.py +0 -38
  345. data/packages/gsutil/boto/boto/ec2/autoscale/scheduled.py +0 -60
  346. data/packages/gsutil/boto/boto/ec2/autoscale/tag.py +0 -84
  347. data/packages/gsutil/boto/boto/ec2/blockdevicemapping.py +0 -141
  348. data/packages/gsutil/boto/boto/ec2/bundleinstance.py +0 -78
  349. data/packages/gsutil/boto/boto/ec2/buyreservation.py +0 -84
  350. data/packages/gsutil/boto/boto/ec2/cloudwatch/__init__.py +0 -603
  351. data/packages/gsutil/boto/boto/ec2/cloudwatch/alarm.py +0 -316
  352. data/packages/gsutil/boto/boto/ec2/cloudwatch/datapoint.py +0 -40
  353. data/packages/gsutil/boto/boto/ec2/cloudwatch/dimension.py +0 -38
  354. data/packages/gsutil/boto/boto/ec2/cloudwatch/listelement.py +0 -31
  355. data/packages/gsutil/boto/boto/ec2/cloudwatch/metric.py +0 -175
  356. data/packages/gsutil/boto/boto/ec2/connection.py +0 -3409
  357. data/packages/gsutil/boto/boto/ec2/ec2object.py +0 -107
  358. data/packages/gsutil/boto/boto/ec2/elb/__init__.py +0 -553
  359. data/packages/gsutil/boto/boto/ec2/elb/healthcheck.py +0 -89
  360. data/packages/gsutil/boto/boto/ec2/elb/instancestate.py +0 -62
  361. data/packages/gsutil/boto/boto/ec2/elb/listelement.py +0 -36
  362. data/packages/gsutil/boto/boto/ec2/elb/listener.py +0 -75
  363. data/packages/gsutil/boto/boto/ec2/elb/loadbalancer.py +0 -324
  364. data/packages/gsutil/boto/boto/ec2/elb/policies.py +0 -89
  365. data/packages/gsutil/boto/boto/ec2/elb/securitygroup.py +0 -38
  366. data/packages/gsutil/boto/boto/ec2/group.py +0 -39
  367. data/packages/gsutil/boto/boto/ec2/image.py +0 -350
  368. data/packages/gsutil/boto/boto/ec2/instance.py +0 -661
  369. data/packages/gsutil/boto/boto/ec2/instanceinfo.py +0 -51
  370. data/packages/gsutil/boto/boto/ec2/instancestatus.py +0 -207
  371. data/packages/gsutil/boto/boto/ec2/keypair.py +0 -113
  372. data/packages/gsutil/boto/boto/ec2/launchspecification.py +0 -105
  373. data/packages/gsutil/boto/boto/ec2/networkinterface.py +0 -247
  374. data/packages/gsutil/boto/boto/ec2/placementgroup.py +0 -51
  375. data/packages/gsutil/boto/boto/ec2/regioninfo.py +0 -34
  376. data/packages/gsutil/boto/boto/ec2/reservedinstance.py +0 -227
  377. data/packages/gsutil/boto/boto/ec2/securitygroup.py +0 -357
  378. data/packages/gsutil/boto/boto/ec2/snapshot.py +0 -170
  379. data/packages/gsutil/boto/boto/ec2/spotdatafeedsubscription.py +0 -63
  380. data/packages/gsutil/boto/boto/ec2/spotinstancerequest.py +0 -188
  381. data/packages/gsutil/boto/boto/ec2/spotpricehistory.py +0 -55
  382. data/packages/gsutil/boto/boto/ec2/tag.py +0 -87
  383. data/packages/gsutil/boto/boto/ec2/vmtype.py +0 -58
  384. data/packages/gsutil/boto/boto/ec2/volume.py +0 -293
  385. data/packages/gsutil/boto/boto/ec2/volumestatus.py +0 -200
  386. data/packages/gsutil/boto/boto/ec2/zone.py +0 -80
  387. data/packages/gsutil/boto/boto/ecs/__init__.py +0 -90
  388. data/packages/gsutil/boto/boto/ecs/item.py +0 -153
  389. data/packages/gsutil/boto/boto/elasticache/__init__.py +0 -62
  390. data/packages/gsutil/boto/boto/elasticache/layer1.py +0 -1252
  391. data/packages/gsutil/boto/boto/elastictranscoder/__init__.py +0 -62
  392. data/packages/gsutil/boto/boto/elastictranscoder/exceptions.py +0 -46
  393. data/packages/gsutil/boto/boto/elastictranscoder/layer1.py +0 -509
  394. data/packages/gsutil/boto/boto/emr/__init__.py +0 -73
  395. data/packages/gsutil/boto/boto/emr/bootstrap_action.py +0 -44
  396. data/packages/gsutil/boto/boto/emr/connection.py +0 -531
  397. data/packages/gsutil/boto/boto/emr/emrobject.py +0 -176
  398. data/packages/gsutil/boto/boto/emr/instance_group.py +0 -43
  399. data/packages/gsutil/boto/boto/emr/step.py +0 -281
  400. data/packages/gsutil/boto/boto/exception.py +0 -476
  401. data/packages/gsutil/boto/boto/exception.pyc +0 -0
  402. data/packages/gsutil/boto/boto/file/README +0 -49
  403. data/packages/gsutil/boto/boto/file/__init__.py +0 -28
  404. data/packages/gsutil/boto/boto/file/bucket.py +0 -112
  405. data/packages/gsutil/boto/boto/file/connection.py +0 -33
  406. data/packages/gsutil/boto/boto/file/key.py +0 -199
  407. data/packages/gsutil/boto/boto/file/simpleresultset.py +0 -30
  408. data/packages/gsutil/boto/boto/fps/__init__.py +0 -21
  409. data/packages/gsutil/boto/boto/fps/connection.py +0 -369
  410. data/packages/gsutil/boto/boto/fps/exception.py +0 -344
  411. data/packages/gsutil/boto/boto/fps/response.py +0 -175
  412. data/packages/gsutil/boto/boto/glacier/__init__.py +0 -57
  413. data/packages/gsutil/boto/boto/glacier/concurrent.py +0 -409
  414. data/packages/gsutil/boto/boto/glacier/exceptions.py +0 -58
  415. data/packages/gsutil/boto/boto/glacier/job.py +0 -152
  416. data/packages/gsutil/boto/boto/glacier/layer1.py +0 -637
  417. data/packages/gsutil/boto/boto/glacier/layer2.py +0 -93
  418. data/packages/gsutil/boto/boto/glacier/response.py +0 -48
  419. data/packages/gsutil/boto/boto/glacier/utils.py +0 -163
  420. data/packages/gsutil/boto/boto/glacier/vault.py +0 -387
  421. data/packages/gsutil/boto/boto/glacier/writer.py +0 -242
  422. data/packages/gsutil/boto/boto/gs/__init__.py +0 -22
  423. data/packages/gsutil/boto/boto/gs/__init__.pyc +0 -0
  424. data/packages/gsutil/boto/boto/gs/acl.py +0 -304
  425. data/packages/gsutil/boto/boto/gs/acl.pyc +0 -0
  426. data/packages/gsutil/boto/boto/gs/bucket.py +0 -870
  427. data/packages/gsutil/boto/boto/gs/bucket.pyc +0 -0
  428. data/packages/gsutil/boto/boto/gs/bucketlistresultset.py +0 -64
  429. data/packages/gsutil/boto/boto/gs/bucketlistresultset.pyc +0 -0
  430. data/packages/gsutil/boto/boto/gs/connection.py +0 -103
  431. data/packages/gsutil/boto/boto/gs/connection.pyc +0 -0
  432. data/packages/gsutil/boto/boto/gs/cors.py +0 -169
  433. data/packages/gsutil/boto/boto/gs/cors.pyc +0 -0
  434. data/packages/gsutil/boto/boto/gs/key.py +0 -704
  435. data/packages/gsutil/boto/boto/gs/key.pyc +0 -0
  436. data/packages/gsutil/boto/boto/gs/resumable_upload_handler.py +0 -659
  437. data/packages/gsutil/boto/boto/gs/resumable_upload_handler.pyc +0 -0
  438. data/packages/gsutil/boto/boto/gs/user.py +0 -54
  439. data/packages/gsutil/boto/boto/gs/user.pyc +0 -0
  440. data/packages/gsutil/boto/boto/handler.py +0 -44
  441. data/packages/gsutil/boto/boto/handler.pyc +0 -0
  442. data/packages/gsutil/boto/boto/https_connection.py +0 -124
  443. data/packages/gsutil/boto/boto/https_connection.pyc +0 -0
  444. data/packages/gsutil/boto/boto/iam/__init__.py +0 -74
  445. data/packages/gsutil/boto/boto/iam/connection.py +0 -1317
  446. data/packages/gsutil/boto/boto/iam/summarymap.py +0 -42
  447. data/packages/gsutil/boto/boto/jsonresponse.py +0 -163
  448. data/packages/gsutil/boto/boto/jsonresponse.pyc +0 -0
  449. data/packages/gsutil/boto/boto/manage/__init__.py +0 -23
  450. data/packages/gsutil/boto/boto/manage/cmdshell.py +0 -241
  451. data/packages/gsutil/boto/boto/manage/propget.py +0 -64
  452. data/packages/gsutil/boto/boto/manage/server.py +0 -556
  453. data/packages/gsutil/boto/boto/manage/task.py +0 -175
  454. data/packages/gsutil/boto/boto/manage/test_manage.py +0 -34
  455. data/packages/gsutil/boto/boto/manage/volume.py +0 -420
  456. data/packages/gsutil/boto/boto/mashups/__init__.py +0 -23
  457. data/packages/gsutil/boto/boto/mashups/interactive.py +0 -97
  458. data/packages/gsutil/boto/boto/mashups/iobject.py +0 -115
  459. data/packages/gsutil/boto/boto/mashups/order.py +0 -211
  460. data/packages/gsutil/boto/boto/mashups/server.py +0 -395
  461. data/packages/gsutil/boto/boto/mturk/__init__.py +0 -23
  462. data/packages/gsutil/boto/boto/mturk/connection.py +0 -1027
  463. data/packages/gsutil/boto/boto/mturk/layoutparam.py +0 -55
  464. data/packages/gsutil/boto/boto/mturk/notification.py +0 -103
  465. data/packages/gsutil/boto/boto/mturk/price.py +0 -48
  466. data/packages/gsutil/boto/boto/mturk/qualification.py +0 -137
  467. data/packages/gsutil/boto/boto/mturk/question.py +0 -455
  468. data/packages/gsutil/boto/boto/mws/__init__.py +0 -21
  469. data/packages/gsutil/boto/boto/mws/connection.py +0 -813
  470. data/packages/gsutil/boto/boto/mws/exception.py +0 -75
  471. data/packages/gsutil/boto/boto/mws/response.py +0 -655
  472. data/packages/gsutil/boto/boto/plugin.py +0 -90
  473. data/packages/gsutil/boto/boto/plugin.pyc +0 -0
  474. data/packages/gsutil/boto/boto/provider.py +0 -337
  475. data/packages/gsutil/boto/boto/provider.pyc +0 -0
  476. data/packages/gsutil/boto/boto/pyami/__init__.py +0 -22
  477. data/packages/gsutil/boto/boto/pyami/__init__.pyc +0 -0
  478. data/packages/gsutil/boto/boto/pyami/bootstrap.py +0 -134
  479. data/packages/gsutil/boto/boto/pyami/config.py +0 -229
  480. data/packages/gsutil/boto/boto/pyami/config.pyc +0 -0
  481. data/packages/gsutil/boto/boto/pyami/copybot.cfg +0 -60
  482. data/packages/gsutil/boto/boto/pyami/copybot.py +0 -97
  483. data/packages/gsutil/boto/boto/pyami/helloworld.py +0 -28
  484. data/packages/gsutil/boto/boto/pyami/installers/__init__.py +0 -64
  485. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/__init__.py +0 -22
  486. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/apache.py +0 -43
  487. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/ebs.py +0 -238
  488. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/installer.py +0 -96
  489. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/mysql.py +0 -109
  490. data/packages/gsutil/boto/boto/pyami/installers/ubuntu/trac.py +0 -139
  491. data/packages/gsutil/boto/boto/pyami/launch_ami.py +0 -178
  492. data/packages/gsutil/boto/boto/pyami/scriptbase.py +0 -44
  493. data/packages/gsutil/boto/boto/pyami/startup.py +0 -60
  494. data/packages/gsutil/boto/boto/rds/__init__.py +0 -1194
  495. data/packages/gsutil/boto/boto/rds/dbinstance.py +0 -357
  496. data/packages/gsutil/boto/boto/rds/dbsecuritygroup.py +0 -177
  497. data/packages/gsutil/boto/boto/rds/dbsnapshot.py +0 -108
  498. data/packages/gsutil/boto/boto/rds/event.py +0 -49
  499. data/packages/gsutil/boto/boto/rds/parametergroup.py +0 -201
  500. data/packages/gsutil/boto/boto/rds/regioninfo.py +0 -32
  501. data/packages/gsutil/boto/boto/regioninfo.py +0 -63
  502. data/packages/gsutil/boto/boto/regioninfo.pyc +0 -0
  503. data/packages/gsutil/boto/boto/resultset.py +0 -169
  504. data/packages/gsutil/boto/boto/resultset.pyc +0 -0
  505. data/packages/gsutil/boto/boto/roboto/__init__.py +0 -1
  506. data/packages/gsutil/boto/boto/roboto/awsqueryrequest.py +0 -504
  507. data/packages/gsutil/boto/boto/roboto/awsqueryservice.py +0 -121
  508. data/packages/gsutil/boto/boto/roboto/param.py +0 -147
  509. data/packages/gsutil/boto/boto/route53/__init__.py +0 -75
  510. data/packages/gsutil/boto/boto/route53/connection.py +0 -403
  511. data/packages/gsutil/boto/boto/route53/exception.py +0 -27
  512. data/packages/gsutil/boto/boto/route53/hostedzone.py +0 -56
  513. data/packages/gsutil/boto/boto/route53/record.py +0 -306
  514. data/packages/gsutil/boto/boto/route53/status.py +0 -42
  515. data/packages/gsutil/boto/boto/route53/zone.py +0 -412
  516. data/packages/gsutil/boto/boto/s3/__init__.py +0 -84
  517. data/packages/gsutil/boto/boto/s3/__init__.pyc +0 -0
  518. data/packages/gsutil/boto/boto/s3/acl.py +0 -164
  519. data/packages/gsutil/boto/boto/s3/acl.pyc +0 -0
  520. data/packages/gsutil/boto/boto/s3/bucket.py +0 -1634
  521. data/packages/gsutil/boto/boto/s3/bucket.pyc +0 -0
  522. data/packages/gsutil/boto/boto/s3/bucketlistresultset.py +0 -139
  523. data/packages/gsutil/boto/boto/s3/bucketlistresultset.pyc +0 -0
  524. data/packages/gsutil/boto/boto/s3/bucketlogging.py +0 -83
  525. data/packages/gsutil/boto/boto/s3/bucketlogging.pyc +0 -0
  526. data/packages/gsutil/boto/boto/s3/connection.py +0 -540
  527. data/packages/gsutil/boto/boto/s3/connection.pyc +0 -0
  528. data/packages/gsutil/boto/boto/s3/cors.py +0 -210
  529. data/packages/gsutil/boto/boto/s3/cors.pyc +0 -0
  530. data/packages/gsutil/boto/boto/s3/deletemarker.py +0 -55
  531. data/packages/gsutil/boto/boto/s3/deletemarker.pyc +0 -0
  532. data/packages/gsutil/boto/boto/s3/key.py +0 -1712
  533. data/packages/gsutil/boto/boto/s3/key.pyc +0 -0
  534. data/packages/gsutil/boto/boto/s3/keyfile.py +0 -134
  535. data/packages/gsutil/boto/boto/s3/keyfile.pyc +0 -0
  536. data/packages/gsutil/boto/boto/s3/lifecycle.py +0 -231
  537. data/packages/gsutil/boto/boto/s3/lifecycle.pyc +0 -0
  538. data/packages/gsutil/boto/boto/s3/multidelete.py +0 -138
  539. data/packages/gsutil/boto/boto/s3/multidelete.pyc +0 -0
  540. data/packages/gsutil/boto/boto/s3/multipart.py +0 -315
  541. data/packages/gsutil/boto/boto/s3/multipart.pyc +0 -0
  542. data/packages/gsutil/boto/boto/s3/prefix.py +0 -42
  543. data/packages/gsutil/boto/boto/s3/prefix.pyc +0 -0
  544. data/packages/gsutil/boto/boto/s3/resumable_download_handler.py +0 -339
  545. data/packages/gsutil/boto/boto/s3/resumable_download_handler.pyc +0 -0
  546. data/packages/gsutil/boto/boto/s3/tagging.py +0 -71
  547. data/packages/gsutil/boto/boto/s3/tagging.pyc +0 -0
  548. data/packages/gsutil/boto/boto/s3/user.py +0 -49
  549. data/packages/gsutil/boto/boto/s3/user.pyc +0 -0
  550. data/packages/gsutil/boto/boto/s3/website.py +0 -237
  551. data/packages/gsutil/boto/boto/s3/website.pyc +0 -0
  552. data/packages/gsutil/boto/boto/sdb/__init__.py +0 -67
  553. data/packages/gsutil/boto/boto/sdb/connection.py +0 -617
  554. data/packages/gsutil/boto/boto/sdb/db/__init__.py +0 -20
  555. data/packages/gsutil/boto/boto/sdb/db/blob.py +0 -75
  556. data/packages/gsutil/boto/boto/sdb/db/key.py +0 -59
  557. data/packages/gsutil/boto/boto/sdb/db/manager/__init__.py +0 -85
  558. data/packages/gsutil/boto/boto/sdb/db/manager/sdbmanager.py +0 -732
  559. data/packages/gsutil/boto/boto/sdb/db/manager/xmlmanager.py +0 -517
  560. data/packages/gsutil/boto/boto/sdb/db/model.py +0 -294
  561. data/packages/gsutil/boto/boto/sdb/db/property.py +0 -703
  562. data/packages/gsutil/boto/boto/sdb/db/query.py +0 -85
  563. data/packages/gsutil/boto/boto/sdb/db/sequence.py +0 -226
  564. data/packages/gsutil/boto/boto/sdb/db/test_db.py +0 -231
  565. data/packages/gsutil/boto/boto/sdb/domain.py +0 -377
  566. data/packages/gsutil/boto/boto/sdb/item.py +0 -181
  567. data/packages/gsutil/boto/boto/sdb/queryresultset.py +0 -92
  568. data/packages/gsutil/boto/boto/sdb/regioninfo.py +0 -32
  569. data/packages/gsutil/boto/boto/services/__init__.py +0 -23
  570. data/packages/gsutil/boto/boto/services/bs.py +0 -179
  571. data/packages/gsutil/boto/boto/services/message.py +0 -58
  572. data/packages/gsutil/boto/boto/services/result.py +0 -136
  573. data/packages/gsutil/boto/boto/services/service.py +0 -161
  574. data/packages/gsutil/boto/boto/services/servicedef.py +0 -91
  575. data/packages/gsutil/boto/boto/services/sonofmmm.cfg +0 -43
  576. data/packages/gsutil/boto/boto/services/sonofmmm.py +0 -81
  577. data/packages/gsutil/boto/boto/services/submit.py +0 -88
  578. data/packages/gsutil/boto/boto/ses/__init__.py +0 -54
  579. data/packages/gsutil/boto/boto/ses/connection.py +0 -521
  580. data/packages/gsutil/boto/boto/ses/exceptions.py +0 -77
  581. data/packages/gsutil/boto/boto/sns/__init__.py +0 -78
  582. data/packages/gsutil/boto/boto/sns/connection.py +0 -431
  583. data/packages/gsutil/boto/boto/sqs/__init__.py +0 -56
  584. data/packages/gsutil/boto/boto/sqs/attributes.py +0 -46
  585. data/packages/gsutil/boto/boto/sqs/batchresults.py +0 -95
  586. data/packages/gsutil/boto/boto/sqs/connection.py +0 -417
  587. data/packages/gsutil/boto/boto/sqs/jsonmessage.py +0 -43
  588. data/packages/gsutil/boto/boto/sqs/message.py +0 -253
  589. data/packages/gsutil/boto/boto/sqs/queue.py +0 -478
  590. data/packages/gsutil/boto/boto/sqs/regioninfo.py +0 -32
  591. data/packages/gsutil/boto/boto/storage_uri.py +0 -835
  592. data/packages/gsutil/boto/boto/storage_uri.pyc +0 -0
  593. data/packages/gsutil/boto/boto/sts/__init__.py +0 -55
  594. data/packages/gsutil/boto/boto/sts/connection.py +0 -207
  595. data/packages/gsutil/boto/boto/sts/credentials.py +0 -215
  596. data/packages/gsutil/boto/boto/swf/__init__.py +0 -60
  597. data/packages/gsutil/boto/boto/swf/exceptions.py +0 -44
  598. data/packages/gsutil/boto/boto/swf/layer1.py +0 -1512
  599. data/packages/gsutil/boto/boto/swf/layer1_decisions.py +0 -287
  600. data/packages/gsutil/boto/boto/swf/layer2.py +0 -342
  601. data/packages/gsutil/boto/boto/utils.py +0 -927
  602. data/packages/gsutil/boto/boto/utils.pyc +0 -0
  603. data/packages/gsutil/boto/boto/vpc/__init__.py +0 -910
  604. data/packages/gsutil/boto/boto/vpc/customergateway.py +0 -54
  605. data/packages/gsutil/boto/boto/vpc/dhcpoptions.py +0 -72
  606. data/packages/gsutil/boto/boto/vpc/internetgateway.py +0 -72
  607. data/packages/gsutil/boto/boto/vpc/routetable.py +0 -109
  608. data/packages/gsutil/boto/boto/vpc/subnet.py +0 -57
  609. data/packages/gsutil/boto/boto/vpc/vpc.py +0 -54
  610. data/packages/gsutil/boto/boto/vpc/vpnconnection.py +0 -60
  611. data/packages/gsutil/boto/boto/vpc/vpngateway.py +0 -83
  612. data/packages/gsutil/boto/docs/BotoCheatSheet.pdf +0 -0
  613. data/packages/gsutil/boto/docs/Makefile +0 -89
  614. data/packages/gsutil/boto/docs/make.bat +0 -113
  615. data/packages/gsutil/boto/docs/source/_templates/layout.html +0 -3
  616. data/packages/gsutil/boto/docs/source/autoscale_tut.rst +0 -220
  617. data/packages/gsutil/boto/docs/source/boto_config_tut.rst +0 -125
  618. data/packages/gsutil/boto/docs/source/boto_theme/static/boto.css_t +0 -239
  619. data/packages/gsutil/boto/docs/source/boto_theme/static/pygments.css +0 -61
  620. data/packages/gsutil/boto/docs/source/boto_theme/theme.conf +0 -3
  621. data/packages/gsutil/boto/docs/source/cloudfront_tut.rst +0 -196
  622. data/packages/gsutil/boto/docs/source/cloudsearch_tut.rst +0 -411
  623. data/packages/gsutil/boto/docs/source/cloudwatch_tut.rst +0 -116
  624. data/packages/gsutil/boto/docs/source/conf.py +0 -32
  625. data/packages/gsutil/boto/docs/source/contributing.rst +0 -204
  626. data/packages/gsutil/boto/docs/source/documentation.rst +0 -59
  627. data/packages/gsutil/boto/docs/source/dynamodb_tut.rst +0 -339
  628. data/packages/gsutil/boto/docs/source/ec2_tut.rst +0 -86
  629. data/packages/gsutil/boto/docs/source/elb_tut.rst +0 -257
  630. data/packages/gsutil/boto/docs/source/emr_tut.rst +0 -108
  631. data/packages/gsutil/boto/docs/source/index.rst +0 -146
  632. data/packages/gsutil/boto/docs/source/rds_tut.rst +0 -108
  633. data/packages/gsutil/boto/docs/source/ref/autoscale.rst +0 -62
  634. data/packages/gsutil/boto/docs/source/ref/beanstalk.rst +0 -26
  635. data/packages/gsutil/boto/docs/source/ref/boto.rst +0 -47
  636. data/packages/gsutil/boto/docs/source/ref/cloudformation.rst +0 -34
  637. data/packages/gsutil/boto/docs/source/ref/cloudfront.rst +0 -68
  638. data/packages/gsutil/boto/docs/source/ref/cloudsearch.rst +0 -59
  639. data/packages/gsutil/boto/docs/source/ref/cloudwatch.rst +0 -27
  640. data/packages/gsutil/boto/docs/source/ref/contrib.rst +0 -32
  641. data/packages/gsutil/boto/docs/source/ref/datapipeline.rst +0 -26
  642. data/packages/gsutil/boto/docs/source/ref/dynamodb.rst +0 -61
  643. data/packages/gsutil/boto/docs/source/ref/ec2.rst +0 -140
  644. data/packages/gsutil/boto/docs/source/ref/ecs.rst +0 -19
  645. data/packages/gsutil/boto/docs/source/ref/elasticache.rst +0 -19
  646. data/packages/gsutil/boto/docs/source/ref/elastictranscoder.rst +0 -26
  647. data/packages/gsutil/boto/docs/source/ref/elb.rst +0 -47
  648. data/packages/gsutil/boto/docs/source/ref/emr.rst +0 -34
  649. data/packages/gsutil/boto/docs/source/ref/file.rst +0 -34
  650. data/packages/gsutil/boto/docs/source/ref/fps.rst +0 -19
  651. data/packages/gsutil/boto/docs/source/ref/glacier.rst +0 -63
  652. data/packages/gsutil/boto/docs/source/ref/gs.rst +0 -72
  653. data/packages/gsutil/boto/docs/source/ref/iam.rst +0 -27
  654. data/packages/gsutil/boto/docs/source/ref/index.rst +0 -40
  655. data/packages/gsutil/boto/docs/source/ref/manage.rst +0 -47
  656. data/packages/gsutil/boto/docs/source/ref/mturk.rst +0 -54
  657. data/packages/gsutil/boto/docs/source/ref/mws.rst +0 -33
  658. data/packages/gsutil/boto/docs/source/ref/pyami.rst +0 -103
  659. data/packages/gsutil/boto/docs/source/ref/rds.rst +0 -47
  660. data/packages/gsutil/boto/docs/source/ref/route53.rst +0 -34
  661. data/packages/gsutil/boto/docs/source/ref/s3.rst +0 -111
  662. data/packages/gsutil/boto/docs/source/ref/sdb.rst +0 -45
  663. data/packages/gsutil/boto/docs/source/ref/sdb_db.rst +0 -83
  664. data/packages/gsutil/boto/docs/source/ref/services.rst +0 -61
  665. data/packages/gsutil/boto/docs/source/ref/ses.rst +0 -21
  666. data/packages/gsutil/boto/docs/source/ref/sns.rst +0 -17
  667. data/packages/gsutil/boto/docs/source/ref/sqs.rst +0 -61
  668. data/packages/gsutil/boto/docs/source/ref/sts.rst +0 -25
  669. data/packages/gsutil/boto/docs/source/ref/swf.rst +0 -22
  670. data/packages/gsutil/boto/docs/source/ref/vpc.rst +0 -54
  671. data/packages/gsutil/boto/docs/source/s3_tut.rst +0 -450
  672. data/packages/gsutil/boto/docs/source/security_groups.rst +0 -82
  673. data/packages/gsutil/boto/docs/source/ses_tut.rst +0 -171
  674. data/packages/gsutil/boto/docs/source/simpledb_tut.rst +0 -188
  675. data/packages/gsutil/boto/docs/source/sqs_tut.rst +0 -246
  676. data/packages/gsutil/boto/docs/source/vpc_tut.rst +0 -100
  677. data/packages/gsutil/boto/pylintrc +0 -305
  678. data/packages/gsutil/boto/requirements.txt +0 -10
  679. data/packages/gsutil/boto/setup.py +0 -89
  680. data/packages/gsutil/boto/tests/__init__.py +0 -20
  681. data/packages/gsutil/boto/tests/db/test_lists.py +0 -96
  682. data/packages/gsutil/boto/tests/db/test_password.py +0 -128
  683. data/packages/gsutil/boto/tests/db/test_query.py +0 -152
  684. data/packages/gsutil/boto/tests/db/test_sequence.py +0 -109
  685. data/packages/gsutil/boto/tests/devpay/__init__.py +0 -0
  686. data/packages/gsutil/boto/tests/devpay/test_s3.py +0 -181
  687. data/packages/gsutil/boto/tests/fps/__init__.py +0 -0
  688. data/packages/gsutil/boto/tests/fps/test.py +0 -100
  689. data/packages/gsutil/boto/tests/fps/test_verify_signature.py +0 -12
  690. data/packages/gsutil/boto/tests/integration/__init__.py +0 -0
  691. data/packages/gsutil/boto/tests/integration/beanstalk/test_wrapper.py +0 -209
  692. data/packages/gsutil/boto/tests/integration/cloudformation/__init__.py +0 -21
  693. data/packages/gsutil/boto/tests/integration/cloudformation/test_cert_verification.py +0 -40
  694. data/packages/gsutil/boto/tests/integration/cloudformation/test_connection.py +0 -110
  695. data/packages/gsutil/boto/tests/integration/cloudsearch/__init__.py +0 -21
  696. data/packages/gsutil/boto/tests/integration/cloudsearch/test_cert_verification.py +0 -40
  697. data/packages/gsutil/boto/tests/integration/datapipeline/test_layer1.py +0 -122
  698. data/packages/gsutil/boto/tests/integration/dynamodb/__init__.py +0 -20
  699. data/packages/gsutil/boto/tests/integration/dynamodb/test_cert_verification.py +0 -40
  700. data/packages/gsutil/boto/tests/integration/dynamodb/test_layer1.py +0 -266
  701. data/packages/gsutil/boto/tests/integration/dynamodb/test_layer2.py +0 -484
  702. data/packages/gsutil/boto/tests/integration/dynamodb/test_table.py +0 -84
  703. data/packages/gsutil/boto/tests/integration/ec2/__init__.py +0 -20
  704. data/packages/gsutil/boto/tests/integration/ec2/autoscale/__init__.py +0 -21
  705. data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_cert_verification.py +0 -40
  706. data/packages/gsutil/boto/tests/integration/ec2/autoscale/test_connection.py +0 -167
  707. data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/__init__.py +0 -20
  708. data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_cert_verification.py +0 -40
  709. data/packages/gsutil/boto/tests/integration/ec2/cloudwatch/test_connection.py +0 -277
  710. data/packages/gsutil/boto/tests/integration/ec2/elb/__init__.py +0 -20
  711. data/packages/gsutil/boto/tests/integration/ec2/elb/test_cert_verification.py +0 -40
  712. data/packages/gsutil/boto/tests/integration/ec2/elb/test_connection.py +0 -130
  713. data/packages/gsutil/boto/tests/integration/ec2/test_cert_verification.py +0 -40
  714. data/packages/gsutil/boto/tests/integration/ec2/test_connection.py +0 -192
  715. data/packages/gsutil/boto/tests/integration/ec2/vpc/__init__.py +0 -0
  716. data/packages/gsutil/boto/tests/integration/ec2/vpc/test_connection.py +0 -95
  717. data/packages/gsutil/boto/tests/integration/elasticache/__init__.py +0 -0
  718. data/packages/gsutil/boto/tests/integration/elasticache/test_layer1.py +0 -67
  719. data/packages/gsutil/boto/tests/integration/elastictranscoder/__init__.py +0 -0
  720. data/packages/gsutil/boto/tests/integration/elastictranscoder/test_cert_verification.py +0 -35
  721. data/packages/gsutil/boto/tests/integration/elastictranscoder/test_layer1.py +0 -115
  722. data/packages/gsutil/boto/tests/integration/emr/__init__.py +0 -20
  723. data/packages/gsutil/boto/tests/integration/emr/test_cert_verification.py +0 -40
  724. data/packages/gsutil/boto/tests/integration/glacier/__init__.py +0 -22
  725. data/packages/gsutil/boto/tests/integration/glacier/test_cert_verification.py +0 -40
  726. data/packages/gsutil/boto/tests/integration/glacier/test_layer1.py +0 -44
  727. data/packages/gsutil/boto/tests/integration/glacier/test_layer2.py +0 -45
  728. data/packages/gsutil/boto/tests/integration/gs/__init__.py +0 -0
  729. data/packages/gsutil/boto/tests/integration/gs/cb_test_harness.py +0 -71
  730. data/packages/gsutil/boto/tests/integration/gs/test_basic.py +0 -379
  731. data/packages/gsutil/boto/tests/integration/gs/test_generation_conditionals.py +0 -399
  732. data/packages/gsutil/boto/tests/integration/gs/test_resumable_downloads.py +0 -358
  733. data/packages/gsutil/boto/tests/integration/gs/test_resumable_uploads.py +0 -525
  734. data/packages/gsutil/boto/tests/integration/gs/test_storage_uri.py +0 -125
  735. data/packages/gsutil/boto/tests/integration/gs/test_versioning.py +0 -268
  736. data/packages/gsutil/boto/tests/integration/gs/testcase.py +0 -116
  737. data/packages/gsutil/boto/tests/integration/gs/util.py +0 -63
  738. data/packages/gsutil/boto/tests/integration/iam/__init__.py +0 -20
  739. data/packages/gsutil/boto/tests/integration/iam/test_cert_verification.py +0 -40
  740. data/packages/gsutil/boto/tests/integration/mws/__init__.py +0 -0
  741. data/packages/gsutil/boto/tests/integration/mws/test.py +0 -100
  742. data/packages/gsutil/boto/tests/integration/rds/__init__.py +0 -21
  743. data/packages/gsutil/boto/tests/integration/rds/test_cert_verification.py +0 -40
  744. data/packages/gsutil/boto/tests/integration/route53/__init__.py +0 -20
  745. data/packages/gsutil/boto/tests/integration/route53/test_cert_verification.py +0 -40
  746. data/packages/gsutil/boto/tests/integration/route53/test_zone.py +0 -132
  747. data/packages/gsutil/boto/tests/integration/s3/__init__.py +0 -20
  748. data/packages/gsutil/boto/tests/integration/s3/mock_storage_service.py +0 -589
  749. data/packages/gsutil/boto/tests/integration/s3/other_cacerts.txt +0 -70
  750. data/packages/gsutil/boto/tests/integration/s3/test_bucket.py +0 -263
  751. data/packages/gsutil/boto/tests/integration/s3/test_cert_verification.py +0 -40
  752. data/packages/gsutil/boto/tests/integration/s3/test_connection.py +0 -245
  753. data/packages/gsutil/boto/tests/integration/s3/test_cors.py +0 -78
  754. data/packages/gsutil/boto/tests/integration/s3/test_encryption.py +0 -115
  755. data/packages/gsutil/boto/tests/integration/s3/test_https_cert_validation.py +0 -141
  756. data/packages/gsutil/boto/tests/integration/s3/test_key.py +0 -375
  757. data/packages/gsutil/boto/tests/integration/s3/test_mfa.py +0 -95
  758. data/packages/gsutil/boto/tests/integration/s3/test_multidelete.py +0 -181
  759. data/packages/gsutil/boto/tests/integration/s3/test_multipart.py +0 -139
  760. data/packages/gsutil/boto/tests/integration/s3/test_pool.py +0 -246
  761. data/packages/gsutil/boto/tests/integration/s3/test_versioning.py +0 -158
  762. data/packages/gsutil/boto/tests/integration/sdb/__init__.py +0 -20
  763. data/packages/gsutil/boto/tests/integration/sdb/test_cert_verification.py +0 -40
  764. data/packages/gsutil/boto/tests/integration/sdb/test_connection.py +0 -119
  765. data/packages/gsutil/boto/tests/integration/ses/__init__.py +0 -0
  766. data/packages/gsutil/boto/tests/integration/ses/test_cert_verification.py +0 -40
  767. data/packages/gsutil/boto/tests/integration/ses/test_connection.py +0 -38
  768. data/packages/gsutil/boto/tests/integration/sns/__init__.py +0 -20
  769. data/packages/gsutil/boto/tests/integration/sns/test_cert_verification.py +0 -40
  770. data/packages/gsutil/boto/tests/integration/sqs/__init__.py +0 -20
  771. data/packages/gsutil/boto/tests/integration/sqs/test_cert_verification.py +0 -40
  772. data/packages/gsutil/boto/tests/integration/sqs/test_connection.py +0 -217
  773. data/packages/gsutil/boto/tests/integration/sts/__init__.py +0 -20
  774. data/packages/gsutil/boto/tests/integration/sts/test_cert_verification.py +0 -40
  775. data/packages/gsutil/boto/tests/integration/sts/test_session_token.py +0 -65
  776. data/packages/gsutil/boto/tests/integration/swf/__init__.py +0 -0
  777. data/packages/gsutil/boto/tests/integration/swf/test_cert_verification.py +0 -40
  778. data/packages/gsutil/boto/tests/integration/swf/test_layer1.py +0 -246
  779. data/packages/gsutil/boto/tests/integration/swf/test_layer1_workflow_execution.py +0 -173
  780. data/packages/gsutil/boto/tests/mturk/__init__.py +0 -0
  781. data/packages/gsutil/boto/tests/mturk/_init_environment.py +0 -28
  782. data/packages/gsutil/boto/tests/mturk/all_tests.py +0 -24
  783. data/packages/gsutil/boto/tests/mturk/cleanup_tests.py +0 -47
  784. data/packages/gsutil/boto/tests/mturk/common.py +0 -45
  785. data/packages/gsutil/boto/tests/mturk/create_free_text_question_regex.doctest +0 -100
  786. data/packages/gsutil/boto/tests/mturk/create_hit.doctest +0 -92
  787. data/packages/gsutil/boto/tests/mturk/create_hit_binary.doctest +0 -94
  788. data/packages/gsutil/boto/tests/mturk/create_hit_external.py +0 -21
  789. data/packages/gsutil/boto/tests/mturk/create_hit_from_hit_type.doctest +0 -103
  790. data/packages/gsutil/boto/tests/mturk/create_hit_test.py +0 -21
  791. data/packages/gsutil/boto/tests/mturk/create_hit_with_qualifications.py +0 -16
  792. data/packages/gsutil/boto/tests/mturk/hit_persistence.py +0 -27
  793. data/packages/gsutil/boto/tests/mturk/mocks.py +0 -11
  794. data/packages/gsutil/boto/tests/mturk/reviewable_hits.doctest +0 -129
  795. data/packages/gsutil/boto/tests/mturk/run-doctest.py +0 -13
  796. data/packages/gsutil/boto/tests/mturk/search_hits.doctest +0 -16
  797. data/packages/gsutil/boto/tests/mturk/selenium_support.py +0 -61
  798. data/packages/gsutil/boto/tests/mturk/support.py +0 -7
  799. data/packages/gsutil/boto/tests/mturk/test_disable_hit.py +0 -11
  800. data/packages/gsutil/boto/tests/test.py +0 -59
  801. data/packages/gsutil/boto/tests/unit/__init__.py +0 -79
  802. data/packages/gsutil/boto/tests/unit/auth/__init__.py +0 -0
  803. data/packages/gsutil/boto/tests/unit/auth/test_sigv4.py +0 -73
  804. data/packages/gsutil/boto/tests/unit/beanstalk/__init__.py +0 -0
  805. data/packages/gsutil/boto/tests/unit/beanstalk/test_layer1.py +0 -128
  806. data/packages/gsutil/boto/tests/unit/cloudformation/__init__.py +0 -0
  807. data/packages/gsutil/boto/tests/unit/cloudformation/test_connection.py +0 -605
  808. data/packages/gsutil/boto/tests/unit/cloudformation/test_stack.py +0 -63
  809. data/packages/gsutil/boto/tests/unit/cloudfront/__init__.py +0 -0
  810. data/packages/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py +0 -113
  811. data/packages/gsutil/boto/tests/unit/cloudfront/test_signed_urls.py +0 -354
  812. data/packages/gsutil/boto/tests/unit/cloudsearch/__init__.py +0 -1
  813. data/packages/gsutil/boto/tests/unit/cloudsearch/test_connection.py +0 -241
  814. data/packages/gsutil/boto/tests/unit/cloudsearch/test_document.py +0 -324
  815. data/packages/gsutil/boto/tests/unit/cloudsearch/test_search.py +0 -325
  816. data/packages/gsutil/boto/tests/unit/dynamodb/__init__.py +0 -0
  817. data/packages/gsutil/boto/tests/unit/dynamodb/test_batch.py +0 -103
  818. data/packages/gsutil/boto/tests/unit/dynamodb/test_layer2.py +0 -119
  819. data/packages/gsutil/boto/tests/unit/dynamodb/test_types.py +0 -82
  820. data/packages/gsutil/boto/tests/unit/ec2/__init__.py +0 -0
  821. data/packages/gsutil/boto/tests/unit/ec2/autoscale/__init__.py +0 -0
  822. data/packages/gsutil/boto/tests/unit/ec2/autoscale/test_group.py +0 -162
  823. data/packages/gsutil/boto/tests/unit/ec2/test_address.py +0 -39
  824. data/packages/gsutil/boto/tests/unit/ec2/test_blockdevicemapping.py +0 -79
  825. data/packages/gsutil/boto/tests/unit/ec2/test_connection.py +0 -480
  826. data/packages/gsutil/boto/tests/unit/ec2/test_instance.py +0 -243
  827. data/packages/gsutil/boto/tests/unit/ec2/test_networkinterface.py +0 -140
  828. data/packages/gsutil/boto/tests/unit/ec2/test_volume.py +0 -248
  829. data/packages/gsutil/boto/tests/unit/emr/test_emr_responses.py +0 -373
  830. data/packages/gsutil/boto/tests/unit/glacier/__init__.py +0 -0
  831. data/packages/gsutil/boto/tests/unit/glacier/test_concurrent.py +0 -120
  832. data/packages/gsutil/boto/tests/unit/glacier/test_job.py +0 -60
  833. data/packages/gsutil/boto/tests/unit/glacier/test_layer1.py +0 -98
  834. data/packages/gsutil/boto/tests/unit/glacier/test_layer2.py +0 -266
  835. data/packages/gsutil/boto/tests/unit/glacier/test_utils.py +0 -116
  836. data/packages/gsutil/boto/tests/unit/glacier/test_vault.py +0 -100
  837. data/packages/gsutil/boto/tests/unit/glacier/test_writer.py +0 -185
  838. data/packages/gsutil/boto/tests/unit/provider/__init__.py +0 -0
  839. data/packages/gsutil/boto/tests/unit/provider/test_provider.py +0 -176
  840. data/packages/gsutil/boto/tests/unit/rds/__init__.py +0 -0
  841. data/packages/gsutil/boto/tests/unit/rds/test_connection.py +0 -131
  842. data/packages/gsutil/boto/tests/unit/s3/__init__.py +0 -0
  843. data/packages/gsutil/boto/tests/unit/s3/test_cors_configuration.py +0 -77
  844. data/packages/gsutil/boto/tests/unit/s3/test_key.py +0 -75
  845. data/packages/gsutil/boto/tests/unit/s3/test_keyfile.py +0 -101
  846. data/packages/gsutil/boto/tests/unit/s3/test_lifecycle.py +0 -97
  847. data/packages/gsutil/boto/tests/unit/s3/test_tagging.py +0 -47
  848. data/packages/gsutil/boto/tests/unit/s3/test_uri.py +0 -257
  849. data/packages/gsutil/boto/tests/unit/s3/test_website.py +0 -188
  850. data/packages/gsutil/boto/tests/unit/sns/__init__.py +0 -0
  851. data/packages/gsutil/boto/tests/unit/sns/test_connection.py +0 -99
  852. data/packages/gsutil/boto/tests/unit/sqs/__init__.py +0 -0
  853. data/packages/gsutil/boto/tests/unit/sqs/test_connection.py +0 -98
  854. data/packages/gsutil/boto/tests/unit/sqs/test_queue.py +0 -40
  855. data/packages/gsutil/boto/tests/unit/sts/test_connection.py +0 -74
  856. data/packages/gsutil/boto/tests/unit/test_connection.py +0 -60
  857. data/packages/gsutil/boto/tests/unit/utils/test_utils.py +0 -109
  858. data/packages/gsutil/boto/tox.ini +0 -8
  859. data/packages/gsutil/gslib/README +0 -5
  860. data/packages/gsutil/gslib/__init__.py +0 -22
  861. data/packages/gsutil/gslib/__init__.pyc +0 -0
  862. data/packages/gsutil/gslib/addlhelp/acls.py +0 -234
  863. data/packages/gsutil/gslib/addlhelp/anon.py +0 -57
  864. data/packages/gsutil/gslib/addlhelp/command_opts.py +0 -116
  865. data/packages/gsutil/gslib/addlhelp/dev.py +0 -139
  866. data/packages/gsutil/gslib/addlhelp/metadata.py +0 -186
  867. data/packages/gsutil/gslib/addlhelp/naming.py +0 -173
  868. data/packages/gsutil/gslib/addlhelp/prod.py +0 -160
  869. data/packages/gsutil/gslib/addlhelp/projects.py +0 -130
  870. data/packages/gsutil/gslib/addlhelp/subdirs.py +0 -110
  871. data/packages/gsutil/gslib/addlhelp/support.py +0 -86
  872. data/packages/gsutil/gslib/addlhelp/versioning.py +0 -242
  873. data/packages/gsutil/gslib/addlhelp/wildcards.py +0 -170
  874. data/packages/gsutil/gslib/bucket_listing_ref.py +0 -175
  875. data/packages/gsutil/gslib/bucket_listing_ref.pyc +0 -0
  876. data/packages/gsutil/gslib/command.py +0 -722
  877. data/packages/gsutil/gslib/command.pyc +0 -0
  878. data/packages/gsutil/gslib/command_runner.py +0 -101
  879. data/packages/gsutil/gslib/command_runner.pyc +0 -0
  880. data/packages/gsutil/gslib/commands/__init__.pyc +0 -0
  881. data/packages/gsutil/gslib/commands/cat.py +0 -131
  882. data/packages/gsutil/gslib/commands/cat.pyc +0 -0
  883. data/packages/gsutil/gslib/commands/chacl.py +0 -532
  884. data/packages/gsutil/gslib/commands/chacl.pyc +0 -0
  885. data/packages/gsutil/gslib/commands/config.py +0 -694
  886. data/packages/gsutil/gslib/commands/config.pyc +0 -0
  887. data/packages/gsutil/gslib/commands/cp.py +0 -1818
  888. data/packages/gsutil/gslib/commands/cp.pyc +0 -0
  889. data/packages/gsutil/gslib/commands/disablelogging.py +0 -101
  890. data/packages/gsutil/gslib/commands/disablelogging.pyc +0 -0
  891. data/packages/gsutil/gslib/commands/enablelogging.py +0 -149
  892. data/packages/gsutil/gslib/commands/enablelogging.pyc +0 -0
  893. data/packages/gsutil/gslib/commands/getacl.py +0 -82
  894. data/packages/gsutil/gslib/commands/getacl.pyc +0 -0
  895. data/packages/gsutil/gslib/commands/getcors.py +0 -121
  896. data/packages/gsutil/gslib/commands/getcors.pyc +0 -0
  897. data/packages/gsutil/gslib/commands/getdefacl.py +0 -86
  898. data/packages/gsutil/gslib/commands/getdefacl.pyc +0 -0
  899. data/packages/gsutil/gslib/commands/getlogging.py +0 -137
  900. data/packages/gsutil/gslib/commands/getlogging.pyc +0 -0
  901. data/packages/gsutil/gslib/commands/getversioning.py +0 -116
  902. data/packages/gsutil/gslib/commands/getversioning.pyc +0 -0
  903. data/packages/gsutil/gslib/commands/getwebcfg.py +0 -122
  904. data/packages/gsutil/gslib/commands/getwebcfg.pyc +0 -0
  905. data/packages/gsutil/gslib/commands/help.py +0 -218
  906. data/packages/gsutil/gslib/commands/help.pyc +0 -0
  907. data/packages/gsutil/gslib/commands/ls.py +0 -578
  908. data/packages/gsutil/gslib/commands/ls.pyc +0 -0
  909. data/packages/gsutil/gslib/commands/mb.py +0 -172
  910. data/packages/gsutil/gslib/commands/mb.pyc +0 -0
  911. data/packages/gsutil/gslib/commands/mv.py +0 -159
  912. data/packages/gsutil/gslib/commands/mv.pyc +0 -0
  913. data/packages/gsutil/gslib/commands/perfdiag.py +0 -903
  914. data/packages/gsutil/gslib/commands/perfdiag.pyc +0 -0
  915. data/packages/gsutil/gslib/commands/rb.py +0 -113
  916. data/packages/gsutil/gslib/commands/rb.pyc +0 -0
  917. data/packages/gsutil/gslib/commands/rm.py +0 -239
  918. data/packages/gsutil/gslib/commands/rm.pyc +0 -0
  919. data/packages/gsutil/gslib/commands/setacl.py +0 -138
  920. data/packages/gsutil/gslib/commands/setacl.pyc +0 -0
  921. data/packages/gsutil/gslib/commands/setcors.py +0 -145
  922. data/packages/gsutil/gslib/commands/setcors.pyc +0 -0
  923. data/packages/gsutil/gslib/commands/setdefacl.py +0 -105
  924. data/packages/gsutil/gslib/commands/setdefacl.pyc +0 -0
  925. data/packages/gsutil/gslib/commands/setmeta.py +0 -428
  926. data/packages/gsutil/gslib/commands/setmeta.pyc +0 -0
  927. data/packages/gsutil/gslib/commands/setversioning.py +0 -114
  928. data/packages/gsutil/gslib/commands/setversioning.pyc +0 -0
  929. data/packages/gsutil/gslib/commands/setwebcfg.py +0 -190
  930. data/packages/gsutil/gslib/commands/setwebcfg.pyc +0 -0
  931. data/packages/gsutil/gslib/commands/test.py +0 -228
  932. data/packages/gsutil/gslib/commands/test.pyc +0 -0
  933. data/packages/gsutil/gslib/commands/update.py +0 -305
  934. data/packages/gsutil/gslib/commands/update.pyc +0 -0
  935. data/packages/gsutil/gslib/commands/version.py +0 -150
  936. data/packages/gsutil/gslib/commands/version.pyc +0 -0
  937. data/packages/gsutil/gslib/exception.py +0 -76
  938. data/packages/gsutil/gslib/exception.pyc +0 -0
  939. data/packages/gsutil/gslib/help_provider.py +0 -81
  940. data/packages/gsutil/gslib/help_provider.pyc +0 -0
  941. data/packages/gsutil/gslib/name_expansion.py +0 -550
  942. data/packages/gsutil/gslib/name_expansion.pyc +0 -0
  943. data/packages/gsutil/gslib/plurality_checkable_iterator.py +0 -56
  944. data/packages/gsutil/gslib/plurality_checkable_iterator.pyc +0 -0
  945. data/packages/gsutil/gslib/project_id.py +0 -67
  946. data/packages/gsutil/gslib/project_id.pyc +0 -0
  947. data/packages/gsutil/gslib/storage_uri_builder.py +0 -56
  948. data/packages/gsutil/gslib/storage_uri_builder.pyc +0 -0
  949. data/packages/gsutil/gslib/tests/__init__.pyc +0 -0
  950. data/packages/gsutil/gslib/tests/test_chacl.py +0 -236
  951. data/packages/gsutil/gslib/tests/test_cp.py +0 -267
  952. data/packages/gsutil/gslib/tests/test_data/test.gif +0 -0
  953. data/packages/gsutil/gslib/tests/test_data/test.mp3 +0 -0
  954. data/packages/gsutil/gslib/tests/test_ls.py +0 -66
  955. data/packages/gsutil/gslib/tests/test_mv.py +0 -69
  956. data/packages/gsutil/gslib/tests/test_naming.py +0 -989
  957. data/packages/gsutil/gslib/tests/test_perfdiag.py +0 -41
  958. data/packages/gsutil/gslib/tests/test_plurality_checkable_iterator.py +0 -67
  959. data/packages/gsutil/gslib/tests/test_rm.py +0 -143
  960. data/packages/gsutil/gslib/tests/test_setacl.py +0 -152
  961. data/packages/gsutil/gslib/tests/test_setcors.py +0 -168
  962. data/packages/gsutil/gslib/tests/test_setmeta.py +0 -91
  963. data/packages/gsutil/gslib/tests/test_setversioning.py +0 -44
  964. data/packages/gsutil/gslib/tests/test_setwebcfg.py +0 -63
  965. data/packages/gsutil/gslib/tests/test_thread_pool.py +0 -92
  966. data/packages/gsutil/gslib/tests/test_wildcard_iterator.py +0 -364
  967. data/packages/gsutil/gslib/tests/testcase/base.py +0 -89
  968. data/packages/gsutil/gslib/tests/testcase/integration_testcase.py +0 -197
  969. data/packages/gsutil/gslib/tests/testcase/unit_testcase.py +0 -230
  970. data/packages/gsutil/gslib/tests/util.py +0 -125
  971. data/packages/gsutil/gslib/tests/util.pyc +0 -0
  972. data/packages/gsutil/gslib/thread_pool.py +0 -79
  973. data/packages/gsutil/gslib/thread_pool.pyc +0 -0
  974. data/packages/gsutil/gslib/util.py +0 -151
  975. data/packages/gsutil/gslib/util.pyc +0 -0
  976. data/packages/gsutil/gslib/wildcard_iterator.py +0 -492
  977. data/packages/gsutil/gslib/wildcard_iterator.pyc +0 -0
  978. data/packages/gsutil/gsutil +0 -377
  979. data/packages/gsutil/gsutil.spec.in +0 -75
  980. data/packages/gsutil/oauth2_plugin/__init__.py +0 -22
  981. data/packages/gsutil/oauth2_plugin/__init__.pyc +0 -0
  982. data/packages/gsutil/oauth2_plugin/oauth2_client.py +0 -642
  983. data/packages/gsutil/oauth2_plugin/oauth2_client.pyc +0 -0
  984. data/packages/gsutil/oauth2_plugin/oauth2_client_test.py +0 -374
  985. data/packages/gsutil/oauth2_plugin/oauth2_helper.py +0 -110
  986. data/packages/gsutil/oauth2_plugin/oauth2_helper.pyc +0 -0
  987. data/packages/gsutil/oauth2_plugin/oauth2_plugin.py +0 -24
  988. data/packages/gsutil/oauth2_plugin/oauth2_plugin.pyc +0 -0
  989. data/packages/gsutil/pkg_gen.sh +0 -54
  990. data/packages/gsutil/pkg_util.py +0 -60
  991. data/packages/gsutil/setup.py +0 -141
  992. data/packages/gsutil/third_party/__init__.py +0 -0
  993. data/packages/gsutil/third_party/__init__.pyc +0 -0
  994. data/packages/gsutil/third_party/fancy_urllib/README +0 -21
  995. data/packages/gsutil/third_party/fancy_urllib/__init__.py +0 -398
  996. data/packages/gsutil/third_party/fancy_urllib/__init__.pyc +0 -0
  997. data/tasks/rubygem.rake +0 -31
  998. metadata.gz.sig +0 -0
@@ -1,1260 +0,0 @@
1
- #!/usr/bin/env python
2
- # Copyright 2010 Google Inc. All Rights Reserved.
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS-IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
-
16
- """Base functionality for google tests.
17
-
18
- This module contains base classes and high-level functions for Google-style
19
- tests.
20
- """
21
-
22
- __author__ = 'dborowitz@google.com (Dave Borowitz)'
23
-
24
- import commands
25
- import difflib
26
- import getpass
27
- import itertools
28
- import os
29
- import re
30
- import subprocess
31
- import sys
32
- import tempfile
33
- import types
34
-
35
-
36
- # unittest2 is a backport of Python 2.7's unittest for Python 2.6, so
37
- # we don't need it if we are running 2.7 or newer.
38
-
39
- if sys.version_info < (2, 7):
40
- import unittest2 as unittest
41
- else:
42
- import unittest
43
-
44
- from google.apputils import app
45
- import gflags as flags
46
- from google.apputils import shellutil
47
-
48
- FLAGS = flags.FLAGS
49
-
50
- # ----------------------------------------------------------------------
51
- # Internal functions to extract default flag values from environment.
52
- # ----------------------------------------------------------------------
53
- def _GetDefaultTestRandomSeed():
54
- random_seed = 301
55
- value = os.environ.get('TEST_RANDOM_SEED', '')
56
- try:
57
- random_seed = int(value)
58
- except ValueError:
59
- pass
60
- return random_seed
61
-
62
-
63
- def _GetDefaultTestTmpdir():
64
- tmpdir = os.environ.get('TEST_TMPDIR', '')
65
- if not tmpdir:
66
- tmpdir = os.path.join(tempfile.gettempdir(), 'google_apputils_basetest')
67
-
68
- return tmpdir
69
-
70
-
71
- flags.DEFINE_integer('test_random_seed', _GetDefaultTestRandomSeed(),
72
- 'Random seed for testing. Some test frameworks may '
73
- 'change the default value of this flag between runs, so '
74
- 'it is not appropriate for seeding probabilistic tests.',
75
- allow_override=1)
76
- flags.DEFINE_string('test_srcdir',
77
- os.environ.get('TEST_SRCDIR', ''),
78
- 'Root of directory tree where source files live',
79
- allow_override=1)
80
- flags.DEFINE_string('test_tmpdir', _GetDefaultTestTmpdir(),
81
- 'Directory for temporary testing files',
82
- allow_override=1)
83
-
84
-
85
- class BeforeAfterTestCaseMeta(type):
86
-
87
- """Adds setUpTestCase() and tearDownTestCase() methods.
88
-
89
- These may be needed for setup and teardown of shared fixtures usually because
90
- such fixtures are expensive to setup and teardown (eg Perforce clients). When
91
- using such fixtures, care should be taken to keep each test as independent as
92
- possible (eg via the use of sandboxes).
93
-
94
- Example:
95
-
96
- class MyTestCase(basetest.TestCase):
97
-
98
- __metaclass__ = basetest.BeforeAfterTestCaseMeta
99
-
100
- @classmethod
101
- def setUpTestCase(cls):
102
- cls._resource = foo.ReallyExpensiveResource()
103
-
104
- @classmethod
105
- def tearDownTestCase(cls):
106
- cls._resource.Destroy()
107
-
108
- def testSomething(self):
109
- self._resource.Something()
110
- ...
111
- """
112
-
113
- _test_loader = unittest.defaultTestLoader
114
-
115
- def __init__(cls, name, bases, dict):
116
- super(BeforeAfterTestCaseMeta, cls).__init__(name, bases, dict)
117
-
118
- # Notes from mtklein
119
-
120
- # This code can be tricky to think about. Here are a few things to remember
121
- # as you read through it.
122
-
123
- # When inheritance is involved, this __init__ is called once on each class
124
- # in the inheritance chain when that class is defined. In a typical
125
- # scenario where a BaseClass inheriting from TestCase declares the
126
- # __metaclass__ and SubClass inherits from BaseClass, __init__ will be first
127
- # called with cls=BaseClass when BaseClass is defined, and then called later
128
- # with cls=SubClass when SubClass is defined.
129
-
130
- # To know when to call setUpTestCase and tearDownTestCase, this class wraps
131
- # the setUp, tearDown, and test* methods in a TestClass. We'd like to only
132
- # wrap those methods in the leaves of the inheritance tree, but we can't
133
- # know when we're a leaf at wrapping time. So instead we wrap all the
134
- # setUp, tearDown, and test* methods, but code them so that we only do the
135
- # counting we want at the leaves, which we *can* detect when we've got an
136
- # actual instance to look at --- i.e. self, when a method is running.
137
-
138
- # Because we're wrapping at every level of inheritance, some methods get
139
- # wrapped multiple times down the inheritance chain; if SubClass were to
140
- # inherit, say, setUp or testFoo from BaseClass, that method would be
141
- # wrapped twice, first by BaseClass then by SubClass. That's OK, because we
142
- # ensure that the extra code we inject with these wrappers is idempotent.
143
-
144
- # test_names are the test methods this class can see.
145
- test_names = set(cls._test_loader.getTestCaseNames(cls))
146
-
147
- # Each class keeps a set of the tests it still has to run. When it's empty,
148
- # we know we should call tearDownTestCase. For now, it holds the sentinel
149
- # value of None, acting as a indication that we need to call setUpTestCase,
150
- # which fills in the actual tests to run.
151
- cls.__tests_to_run = None
152
-
153
- # These calls go through and monkeypatch various methods, in no particular
154
- # order.
155
- BeforeAfterTestCaseMeta.SetSetUpAttr(cls, test_names)
156
- BeforeAfterTestCaseMeta.SetTearDownAttr(cls)
157
- BeforeAfterTestCaseMeta.SetTestMethodAttrs(cls, test_names)
158
- BeforeAfterTestCaseMeta.SetBeforeAfterTestCaseAttr()
159
-
160
- # Just a little utility function to help with monkey-patching.
161
- @staticmethod
162
- def SetMethod(cls, method_name, replacement):
163
- """Like setattr, but also preserves name, doc, and module metadata."""
164
- original = getattr(cls, method_name)
165
- replacement.__name__ = original.__name__
166
- replacement.__doc__ = original.__doc__
167
- replacement.__module__ = original.__module__
168
- setattr(cls, method_name, replacement)
169
-
170
- @staticmethod
171
- def SetSetUpAttr(cls, test_names):
172
- """Wraps setUp() with per-class setUp() functionality."""
173
- # Remember that SetSetUpAttr is eventually called on each class in the
174
- # inheritance chain. This line can be subtle because of inheritance. Say
175
- # we've got BaseClass that defines setUp, and SubClass inheriting from it
176
- # that doesn't define setUp. This method will run twice, and both times
177
- # cls_setUp will be BaseClass.setUp. This is one of the tricky cases where
178
- # setUp will be wrapped multiple times.
179
- cls_setUp = cls.setUp
180
-
181
- # We create a new setUp method that first checks to see if we need to run
182
- # setUpTestCase (looking for the __tests_to_run==None flag), and then runs
183
- # the original setUp method.
184
- def setUp(self):
185
- """Function that will encapsulate and replace cls.setUp()."""
186
- # This line is unassuming but crucial to making this whole system work.
187
- # It sets leaf to the class of the instance we're currently testing. That
188
- # is, leaf is going to be a leaf class. It's not necessarily the same
189
- # class as the parameter cls that's being passed in. For example, in the
190
- # case above where setUp is in BaseClass, when we instantiate a SubClass
191
- # and call setUp, we need leaf to be pointing at the class SubClass.
192
- leaf = self.__class__
193
-
194
- # The reason we want to do this is that it makes sure setUpTestCase is
195
- # only run once, not once for each class down the inheritance chain. When
196
- # multiply-wrapped, this extra code is called multiple times. In the
197
- # running example:
198
- #
199
- # 1) cls=BaseClass: replace BaseClass' setUp with a wrapped setUp
200
- # 2) cls=SubClass: set SubClass.setUp to what it thinks was its original
201
- # setUp --- the wrapped setUp from 1)
202
- #
203
- # So it's double-wrapped, but that's OK. When we actually call setUp from
204
- # an instance, we're calling the double-wrapped method. It sees
205
- # __tests_to_run is None and fills that in. Then it calls what it thinks
206
- # was its original setUp, the singly-wrapped setUp from BaseClass. The
207
- # singly-wrapped setUp *skips* the if-statement, as it sees
208
- # leaf.__tests_to_run is not None now. It just runs the real, original
209
- # setUp().
210
-
211
- # test_names is passed in from __init__, and holds all the test cases that
212
- # cls can see. In the BaseClass call, that's probably the empty set, and
213
- # for SubClass it'd have your test methods.
214
-
215
- if leaf.__tests_to_run is None:
216
- leaf.__tests_to_run = set(test_names)
217
- self.setUpTestCase()
218
- cls_setUp(self)
219
-
220
- # Monkeypatch our new setUp method into the place of the original.
221
- BeforeAfterTestCaseMeta.SetMethod(cls, 'setUp', setUp)
222
-
223
- @staticmethod
224
- def SetTearDownAttr(cls):
225
- """Wraps tearDown() with per-class tearDown() functionality."""
226
-
227
- # This is analagous to SetSetUpAttr, except of course it's patching tearDown
228
- # to run tearDownTestCase when there are no more tests to run. All the same
229
- # hairy logic applies.
230
- cls_tearDown = cls.tearDown
231
-
232
- def tearDown(self):
233
- """Function that will encapsulate and replace cls.tearDown()."""
234
- cls_tearDown(self)
235
-
236
- leaf = self.__class__
237
- # We need to make sure that tearDownTestCase is only run when
238
- # we're executing this in the leaf class, so we need the
239
- # explicit leaf == cls check below.
240
- if (leaf.__tests_to_run is not None
241
- and not leaf.__tests_to_run
242
- and leaf == cls):
243
- leaf.__tests_to_run = None
244
- self.tearDownTestCase()
245
-
246
- BeforeAfterTestCaseMeta.SetMethod(cls, 'tearDown', tearDown)
247
-
248
- @staticmethod
249
- def SetTestMethodAttrs(cls, test_names):
250
- """Makes each test method first remove itself from the remaining set."""
251
- # This makes each test case remove itself from the set of remaining tests.
252
- # You might think that this belongs more logically in tearDown, and I'd
253
- # agree except that tearDown doesn't know what test case it's tearing down!
254
- # Instead we have the test method itself remove itself before attempting the
255
- # test.
256
-
257
- # Note that having the test remove itself after running doesn't work, as we
258
- # never get to 'after running' for tests that fail.
259
-
260
- # Like setUp and tearDown, the test case could conceivably be wrapped
261
- # twice... but as noted it's an implausible situation to have an actual test
262
- # defined in a base class. Just in case, we take the same precaution by
263
- # looking in only the leaf class' set of __tests_to_run, and using discard()
264
- # instead of remove() to make the operation idempotent.
265
-
266
- for test_name in test_names:
267
- cls_test = getattr(cls, test_name)
268
-
269
- # The default parameters here make sure that each new test() function
270
- # remembers its own values of cls_test and test_name. Without these
271
- # default parameters, they'd all point to the values from the last
272
- # iteration of the loop, causing some arbitrary test method to run
273
- # multiple times and the others never. :(
274
- def test(self, cls_test=cls_test, test_name=test_name):
275
- leaf = self.__class__
276
- leaf.__tests_to_run.discard(test_name)
277
- return cls_test(self)
278
-
279
- BeforeAfterTestCaseMeta.SetMethod(cls, test_name, test)
280
-
281
- @staticmethod
282
- def SetBeforeAfterTestCaseAttr():
283
- # This just makes sure every TestCase has a setUpTestCase or
284
- # tearDownTestCase, so that you can safely define only one or neither of
285
- # them if you want.
286
- TestCase.setUpTestCase = lambda self: None
287
- TestCase.tearDownTestCase = lambda self: None
288
-
289
-
290
- class TestCase(unittest.TestCase):
291
- """Extension of unittest.TestCase providing more powerful assertions."""
292
-
293
- maxDiff = 80 * 20
294
-
295
- def __init__(self, methodName='runTest'):
296
- super(TestCase, self).__init__(methodName)
297
- self.__recorded_properties = {}
298
-
299
- def shortDescription(self):
300
- """Format both the test method name and the first line of its docstring.
301
-
302
- If no docstring is given, only returns the method name.
303
-
304
- This method overrides unittest.TestCase.shortDescription(), which
305
- only returns the first line of the docstring, obscuring the name
306
- of the test upon failure.
307
-
308
- Returns:
309
- desc: A short description of a test method.
310
- """
311
- desc = str(self)
312
- # NOTE: super() is used here instead of directly invoking
313
- # unittest.TestCase.shortDescription(self), because of the
314
- # following line that occurs later on:
315
- # unittest.TestCase = TestCase
316
- # Because of this, direct invocation of what we think is the
317
- # superclass will actually cause infinite recursion.
318
- doc_first_line = super(TestCase, self).shortDescription()
319
- if doc_first_line is not None:
320
- desc = '\n'.join((desc, doc_first_line))
321
- return desc
322
-
323
- def assertSequenceStartsWith(self, prefix, whole, msg=None):
324
- """An equality assertion for the beginning of ordered sequences.
325
-
326
- If prefix is an empty sequence, it will raise an error unless whole is also
327
- an empty sequence.
328
-
329
- If prefix is not a sequence, it will raise an error if the first element of
330
- whole does not match.
331
-
332
- Args:
333
- prefix: A sequence expected at the beginning of the whole parameter.
334
- whole: The sequence in which to look for prefix.
335
- msg: Optional message to append on failure.
336
- """
337
- try:
338
- prefix_len = len(prefix)
339
- except (TypeError, NotImplementedError):
340
- prefix = [prefix]
341
- prefix_len = 1
342
-
343
- try:
344
- whole_len = len(whole)
345
- except (TypeError, NotImplementedError):
346
- self.fail('For whole: len(%s) is not supported, it appears to be type: '
347
- '%s' % (whole, type(whole)))
348
-
349
- assert prefix_len <= whole_len, (
350
- 'Prefix length (%d) is longer than whole length (%d).' %
351
- (prefix_len, whole_len))
352
-
353
- if not prefix_len and whole_len:
354
- self.fail('Prefix length is 0 but whole length is %d: %s' %
355
- (len(whole), whole))
356
-
357
- try:
358
- self.assertSequenceEqual(prefix, whole[:prefix_len], msg)
359
- except AssertionError:
360
- self.fail(msg or 'prefix: %s not found at start of whole: %s.' %
361
- (prefix, whole))
362
-
363
- def assertContainsSubset(self, expected_subset, actual_set, msg=None):
364
- """Checks whether actual iterable is a superset of expected iterable."""
365
- missing = set(expected_subset) - set(actual_set)
366
- if not missing:
367
- return
368
-
369
- missing_msg = 'Missing elements %s\nExpected: %s\nActual: %s' % (
370
- missing, expected_subset, actual_set)
371
- if msg:
372
- msg += ': %s' % missing_msg
373
- else:
374
- msg = missing_msg
375
- self.fail(msg)
376
-
377
- def assertSameElements(self, expected_seq, actual_seq, msg=None):
378
- """Assert that two sequences have the same elements (in any order).
379
-
380
- This method, unlike assertItemsEqual, doesn't care about any
381
- duplicates in the expected and actual sequences.
382
-
383
- >> assertSameElements([1, 1, 1, 0, 0, 0], [0, 1])
384
- # Doesn't raise an AssertionError
385
-
386
- If possible, you should use assertItemsEqual instead of
387
- assertSameElements.
388
-
389
- Args:
390
- expected_seq: A sequence containing elements we are expecting.
391
- actual_seq: The sequence that we are testing.
392
- msg: The message to be printed if the test fails.
393
- """
394
- # `unittest2.TestCase` used to have assertSameElements, but it was
395
- # removed in favor of assertItemsEqual. As there's a unit test
396
- # that explicitly checks this behavior, I am leaving this method
397
- # alone.
398
- try:
399
- expected = dict([(element, None) for element in expected_seq])
400
- actual = dict([(element, None) for element in actual_seq])
401
- missing = [element for element in expected if element not in actual]
402
- unexpected = [element for element in actual if element not in expected]
403
- missing.sort()
404
- unexpected.sort()
405
- except TypeError:
406
- # Fall back to slower list-compare if any of the objects are
407
- # not hashable.
408
- expected = list(expected_seq)
409
- actual = list(actual_seq)
410
- expected.sort()
411
- actual.sort()
412
- missing, unexpected = _SortedListDifference(expected, actual)
413
- errors = []
414
- if missing:
415
- errors.append('Expected, but missing:\n %r\n' % missing)
416
- if unexpected:
417
- errors.append('Unexpected, but present:\n %r\n' % unexpected)
418
- if errors:
419
- self.fail(msg or ''.join(errors))
420
-
421
- # unittest2.TestCase.assertMulitilineEqual works very similarly, but it
422
- # has a different error format. However, I find this slightly more readable.
423
- def assertMultiLineEqual(self, first, second, msg=None):
424
- """Assert that two multi-line strings are equal."""
425
- assert isinstance(first, types.StringTypes), (
426
- 'First argument is not a string: %r' % (first,))
427
- assert isinstance(second, types.StringTypes), (
428
- 'Second argument is not a string: %r' % (second,))
429
-
430
- if first == second:
431
- return
432
- if msg:
433
- raise self.failureException(msg)
434
-
435
- failure_message = ['\n']
436
- for line in difflib.ndiff(first.splitlines(True), second.splitlines(True)):
437
- failure_message.append(line)
438
- if not line.endswith('\n'):
439
- failure_message.append('\n')
440
- raise self.failureException(''.join(failure_message))
441
-
442
- def assertBetween(self, value, minv, maxv, msg=None):
443
- """Asserts that value is between minv and maxv (inclusive)."""
444
- if msg is None:
445
- msg = '"%r" unexpectedly not between "%r" and "%r"' % (value, minv, maxv)
446
- self.assert_(minv <= value, msg)
447
- self.assert_(maxv >= value, msg)
448
-
449
- def assertRegexMatch(self, actual_str, regexes, message=None):
450
- """Asserts that at least one regex in regexes matches str.
451
-
452
- If possible you should use assertRegexpMatches, which is a simpler
453
- version of this method. assertRegexpMatches takes a single regular
454
- expression (a string or re compiled object) instead of a list.
455
-
456
- Notes:
457
- 1. This function uses substring matching, i.e. the matching
458
- succeeds if *any* substring of the error message matches *any*
459
- regex in the list. This is more convenient for the user than
460
- full-string matching.
461
-
462
- 2. If regexes is the empty list, the matching will always fail.
463
-
464
- 3. Use regexes=[''] for a regex that will always pass.
465
-
466
- 4. '.' matches any single character *except* the newline. To
467
- match any character, use '(.|\n)'.
468
-
469
- 5. '^' matches the beginning of each line, not just the beginning
470
- of the string. Similarly, '$' matches the end of each line.
471
-
472
- 6. An exception will be thrown if regexes contains an invalid
473
- regex.
474
-
475
- Args:
476
- actual_str: The string we try to match with the items in regexes.
477
- regexes: The regular expressions we want to match against str.
478
- See "Notes" above for detailed notes on how this is interpreted.
479
- message: The message to be printed if the test fails.
480
- """
481
- if isinstance(regexes, basestring):
482
- self.fail('regexes is a string; it needs to be a list of strings.')
483
- if not regexes:
484
- self.fail('No regexes specified.')
485
-
486
- regex = '(?:%s)' % ')|(?:'.join(regexes)
487
-
488
- if not re.search(regex, actual_str, re.MULTILINE):
489
- self.fail(message or ('String "%s" does not contain any of these '
490
- 'regexes: %s.' % (actual_str, regexes)))
491
-
492
- def assertCommandSucceeds(self, command, regexes=[''], env=None,
493
- close_fds=True):
494
- """Asserts that a shell command succeeds (i.e. exits with code 0).
495
-
496
- Args:
497
- command: List or string representing the command to run.
498
- regexes: List of regular expression strings.
499
- env: Dictionary of environment variable settings.
500
- close_fds: Whether or not to close all open fd's in the child after
501
- forking.
502
- """
503
- (ret_code, err) = GetCommandStderr(command, env, close_fds)
504
-
505
- command_string = GetCommandString(command)
506
- self.assert_(
507
- ret_code == 0,
508
- 'Running command\n'
509
- '%s failed with error code %s and message\n'
510
- '%s' % (
511
- _QuoteLongString(command_string),
512
- ret_code,
513
- _QuoteLongString(err)))
514
- self.assertRegexMatch(
515
- err,
516
- regexes,
517
- message=(
518
- 'Running command\n'
519
- '%s failed with error code %s and message\n'
520
- '%s which matches no regex in %s' % (
521
- _QuoteLongString(command_string),
522
- ret_code,
523
- _QuoteLongString(err),
524
- regexes)))
525
-
526
- def assertCommandFails(self, command, regexes, env=None, close_fds=True):
527
- """Asserts a shell command fails and the error matches a regex in a list.
528
-
529
- Args:
530
- command: List or string representing the command to run.
531
- regexes: the list of regular expression strings.
532
- env: Dictionary of environment variable settings.
533
- close_fds: Whether or not to close all open fd's in the child after
534
- forking.
535
- """
536
- (ret_code, err) = GetCommandStderr(command, env, close_fds)
537
-
538
- command_string = GetCommandString(command)
539
- self.assert_(
540
- ret_code != 0,
541
- 'The following command succeeded while expected to fail:\n%s' %
542
- _QuoteLongString(command_string))
543
- self.assertRegexMatch(
544
- err,
545
- regexes,
546
- message=(
547
- 'Running command\n'
548
- '%s failed with error code %s and message\n'
549
- '%s which matches no regex in %s' % (
550
- _QuoteLongString(command_string),
551
- ret_code,
552
- _QuoteLongString(err),
553
- regexes)))
554
-
555
- def assertRaisesWithPredicateMatch(self, expected_exception, predicate,
556
- callable_obj, *args,
557
- **kwargs):
558
- """Asserts that exception is thrown and predicate(exception) is true.
559
-
560
- Args:
561
- expected_exception: Exception class expected to be raised.
562
- predicate: Function of one argument that inspects the passed-in exception
563
- and returns True (success) or False (please fail the test).
564
- callable_obj: Function to be called.
565
- args: Extra args.
566
- kwargs: Extra keyword args.
567
- """
568
- try:
569
- callable_obj(*args, **kwargs)
570
- except expected_exception, err:
571
- self.assert_(predicate(err),
572
- '%r does not match predicate %r' % (err, predicate))
573
- else:
574
- self.fail(expected_exception.__name__ + ' not raised')
575
-
576
- def assertRaisesWithLiteralMatch(self, expected_exception,
577
- expected_exception_message, callable_obj,
578
- *args, **kwargs):
579
- """Asserts that the message in a raised exception equals the given string.
580
-
581
- Unlike assertRaisesWithRegexpMatch this method takes a literal string, not
582
- a regular expression.
583
-
584
- Args:
585
- expected_exception: Exception class expected to be raised.
586
- expected_exception_message: String message expected in the raised
587
- exception. For a raise exception e, expected_exception_message must
588
- equal str(e).
589
- callable_obj: Function to be called.
590
- args: Extra args.
591
- kwargs: Extra kwargs.
592
- """
593
- try:
594
- callable_obj(*args, **kwargs)
595
- except expected_exception, err:
596
- actual_exception_message = str(err)
597
- self.assert_(expected_exception_message == actual_exception_message,
598
- 'Exception message does not match.\n'
599
- 'Expected: %r\n'
600
- 'Actual: %r' % (expected_exception_message,
601
- actual_exception_message))
602
- else:
603
- self.fail(expected_exception.__name__ + ' not raised')
604
-
605
- def assertRaisesWithRegexpMatch(self, expected_exception, expected_regexp,
606
- callable_obj, *args, **kwargs):
607
- """Asserts that the message in a raised exception matches the given regexp.
608
-
609
- This is just a wrapper around assertRaisesRegexp. Please use
610
- assertRaisesRegexp instead of assertRaisesWithRegexpMatch.
611
-
612
- Args:
613
- expected_exception: Exception class expected to be raised.
614
- expected_regexp: Regexp (re pattern object or string) expected to be
615
- found in error message.
616
- callable_obj: Function to be called.
617
- args: Extra args.
618
- kwargs: Extra keyword args.
619
- """
620
- # TODO(user): this is a good candidate for a global
621
- # search-and-replace.
622
- self.assertRaisesRegexp(
623
- expected_exception,
624
- expected_regexp,
625
- callable_obj,
626
- *args,
627
- **kwargs)
628
-
629
- def assertContainsInOrder(self, strings, target):
630
- """Asserts that the strings provided are found in the target in order.
631
-
632
- This may be useful for checking HTML output.
633
-
634
- Args:
635
- strings: A list of strings, such as [ 'fox', 'dog' ]
636
- target: A target string in which to look for the strings, such as
637
- 'The quick brown fox jumped over the lazy dog'.
638
- """
639
- if not isinstance(strings, list):
640
- strings = [strings]
641
-
642
- current_index = 0
643
- last_string = None
644
- for string in strings:
645
- index = target.find(str(string), current_index)
646
- if index == -1 and current_index == 0:
647
- self.fail("Did not find '%s' in '%s'" %
648
- (string, target))
649
- elif index == -1:
650
- self.fail("Did not find '%s' after '%s' in '%s'" %
651
- (string, last_string, target))
652
- last_string = string
653
- current_index = index
654
-
655
- def assertTotallyOrdered(self, *groups):
656
- """Asserts that total ordering has been implemented correctly.
657
-
658
- For example, say you have a class A that compares only on its attribute x.
659
- Comparators other than __lt__ are omitted for brevity.
660
-
661
- class A(object):
662
- def __init__(self, x, y):
663
- self.x = xio
664
- self.y = y
665
-
666
- def __hash__(self):
667
- return hash(self.x)
668
-
669
- def __lt__(self, other):
670
- try:
671
- return self.x < other.x
672
- except AttributeError:
673
- return NotImplemented
674
-
675
- assertTotallyOrdered will check that instances can be ordered correctly.
676
- For example,
677
-
678
- self.assertTotallyOrdered(
679
- [None], # None should come before everything else.
680
- [1], # Integers sort earlier.
681
- ['foo'], # As do strings.
682
- [A(1, 'a')],
683
- [A(2, 'b')], # 2 is after 1.
684
- [A(2, 'c'), A(2, 'd')], # The second argument is irrelevant.
685
- [A(3, 'z')])
686
-
687
- Args:
688
- groups: A list of groups of elements. Each group of elements is a list
689
- of objects that are equal. The elements in each group must be less than
690
- the elements in the group after it. For example, these groups are
691
- totally ordered: [None], [1], [2, 2], [3].
692
- """
693
-
694
- def CheckOrder(small, big):
695
- """Ensures small is ordered before big."""
696
- self.assertFalse(small == big,
697
- '%r unexpectedly equals %r' % (small, big))
698
- self.assertTrue(small != big,
699
- '%r unexpectedly equals %r' % (small, big))
700
- self.assertLess(small, big)
701
- self.assertFalse(big < small,
702
- '%r unexpectedly less than %r' % (big, small))
703
- self.assertLessEqual(small, big)
704
- self.assertFalse(big <= small,
705
- '%r unexpectedly less than or equal to %r'
706
- % (big, small))
707
- self.assertGreater(big, small)
708
- self.assertFalse(small > big,
709
- '%r unexpectedly greater than %r' % (small, big))
710
- self.assertGreaterEqual(big, small)
711
- self.assertFalse(small >= big,
712
- '%r unexpectedly greater than or equal to %r'
713
- % (small, big))
714
-
715
- def CheckEqual(a, b):
716
- """Ensures that a and b are equal."""
717
- self.assertEqual(a, b)
718
- self.assertFalse(a != b, '%r unexpectedly equals %r' % (a, b))
719
- self.assertEqual(hash(a), hash(b),
720
- 'hash %d of %r unexpectedly not equal to hash %d of %r'
721
- % (hash(a), a, hash(b), b))
722
- self.assertFalse(a < b, '%r unexpectedly less than %r' % (a, b))
723
- self.assertFalse(b < a, '%r unexpectedly less than %r' % (b, a))
724
- self.assertLessEqual(a, b)
725
- self.assertLessEqual(b, a)
726
- self.assertFalse(a > b, '%r unexpectedly greater than %r' % (a, b))
727
- self.assertFalse(b > a, '%r unexpectedly greater than %r' % (b, a))
728
- self.assertGreaterEqual(a, b)
729
- self.assertGreaterEqual(b, a)
730
-
731
- # For every combination of elements, check the order of every pair of
732
- # elements.
733
- for elements in itertools.product(*groups):
734
- elements = list(elements)
735
- for index, small in enumerate(elements[:-1]):
736
- for big in elements[index + 1:]:
737
- CheckOrder(small, big)
738
-
739
- # Check that every element in each group is equal.
740
- for group in groups:
741
- for a in group:
742
- CheckEqual(a, a)
743
- for a, b in itertools.product(group, group):
744
- CheckEqual(a, b)
745
-
746
- def getRecordedProperties(self):
747
- """Return any properties that the user has recorded."""
748
- return self.__recorded_properties
749
-
750
- def recordProperty(self, property_name, property_value):
751
- """Record an arbitrary property for later use.
752
-
753
- Args:
754
- property_name: str, name of property to record; must be a valid XML
755
- attribute name
756
- property_value: value of property; must be valid XML attribute value
757
- """
758
- self.__recorded_properties[property_name] = property_value
759
-
760
- def _getAssertEqualityFunc(self, first, second):
761
- try:
762
- return super(TestCase, self)._getAssertEqualityFunc(first, second)
763
- except AttributeError:
764
- # This happens if unittest2.TestCase.__init__ was never run. It
765
- # usually means that somebody created a subclass just for the
766
- # assertions and has overriden __init__. "assertTrue" is a safe
767
- # value that will not make __init__ raise a ValueError (this is
768
- # a bit hacky).
769
- test_method = getattr(self, '_testMethodName', 'assertTrue')
770
- super(TestCase, self).__init__(test_method)
771
-
772
- return super(TestCase, self)._getAssertEqualityFunc(first, second)
773
-
774
-
775
- # This is not really needed here, but some unrelated code calls this
776
- # function.
777
- # TODO(user): sort it out.
778
- def _SortedListDifference(expected, actual):
779
- """Finds elements in only one or the other of two, sorted input lists.
780
-
781
- Returns a two-element tuple of lists. The first list contains those
782
- elements in the "expected" list but not in the "actual" list, and the
783
- second contains those elements in the "actual" list but not in the
784
- "expected" list. Duplicate elements in either input list are ignored.
785
-
786
- Args:
787
- expected: The list we expected.
788
- actual: The list we actualy got.
789
- Returns:
790
- (missing, unexpected)
791
- missing: items in expected that are not in actual.
792
- unexpected: items in actual that are not in expected.
793
- """
794
- i = j = 0
795
- missing = []
796
- unexpected = []
797
- while True:
798
- try:
799
- e = expected[i]
800
- a = actual[j]
801
- if e < a:
802
- missing.append(e)
803
- i += 1
804
- while expected[i] == e:
805
- i += 1
806
- elif e > a:
807
- unexpected.append(a)
808
- j += 1
809
- while actual[j] == a:
810
- j += 1
811
- else:
812
- i += 1
813
- try:
814
- while expected[i] == e:
815
- i += 1
816
- finally:
817
- j += 1
818
- while actual[j] == a:
819
- j += 1
820
- except IndexError:
821
- missing.extend(expected[i:])
822
- unexpected.extend(actual[j:])
823
- break
824
- return missing, unexpected
825
-
826
-
827
- # ----------------------------------------------------------------------
828
- # Functions to compare the actual output of a test to the expected
829
- # (golden) output.
830
- #
831
- # Note: We could just replace the sys.stdout and sys.stderr objects,
832
- # but we actually redirect the underlying file objects so that if the
833
- # Python script execs any subprocess, their output will also be
834
- # redirected.
835
- #
836
- # Usage:
837
- # basetest.CaptureTestStdout()
838
- # ... do something ...
839
- # basetest.DiffTestStdout("... path to golden file ...")
840
- # ----------------------------------------------------------------------
841
-
842
-
843
- class CapturedStream(object):
844
- """A temporarily redirected output stream."""
845
-
846
- def __init__(self, stream, filename):
847
- self._stream = stream
848
- self._fd = stream.fileno()
849
- self._filename = filename
850
-
851
- # Keep original stream for later
852
- self._uncaptured_fd = os.dup(self._fd)
853
-
854
- # Open file to save stream to
855
- cap_fd = os.open(self._filename,
856
- os.O_CREAT | os.O_TRUNC | os.O_WRONLY,
857
- 0600)
858
-
859
- # Send stream to this file
860
- self._stream.flush()
861
- os.dup2(cap_fd, self._fd)
862
- os.close(cap_fd)
863
-
864
- def RestartCapture(self):
865
- """Resume capturing output to a file (after calling StopCapture)."""
866
- # Original stream fd
867
- assert self._uncaptured_fd
868
-
869
- # Append stream to file
870
- cap_fd = os.open(self._filename,
871
- os.O_CREAT | os.O_APPEND | os.O_WRONLY,
872
- 0600)
873
-
874
- # Send stream to this file
875
- self._stream.flush()
876
- os.dup2(cap_fd, self._fd)
877
- os.close(cap_fd)
878
-
879
- def StopCapture(self):
880
- """Remove output redirection."""
881
- self._stream.flush()
882
- os.dup2(self._uncaptured_fd, self._fd)
883
-
884
- def filename(self):
885
- return self._filename
886
-
887
- def __del__(self):
888
- self.StopCapture()
889
- os.close(self._uncaptured_fd)
890
- del self._uncaptured_fd
891
-
892
-
893
- _captured_streams = {}
894
-
895
-
896
- def _CaptureTestOutput(stream, filename):
897
- """Redirect an output stream to a file.
898
-
899
- Args:
900
- stream: Should be sys.stdout or sys.stderr.
901
- filename: File where output should be stored.
902
- """
903
- assert not _captured_streams.has_key(stream)
904
- _captured_streams[stream] = CapturedStream(stream, filename)
905
-
906
-
907
- def _DiffTestOutput(stream, golden_filename):
908
- """Compare ouput of redirected stream to contents of golden file.
909
-
910
- Args:
911
- stream: Should be sys.stdout or sys.stderr.
912
- golden_filename: Absolute path to golden file.
913
- """
914
- assert _captured_streams.has_key(stream)
915
- cap = _captured_streams[stream]
916
-
917
- for cap_stream in _captured_streams.itervalues():
918
- cap_stream.StopCapture()
919
-
920
- try:
921
- _Diff(cap.filename(), golden_filename)
922
- finally:
923
- # remove the current stream
924
- del _captured_streams[stream]
925
- # restore other stream capture
926
- for cap_stream in _captured_streams.itervalues():
927
- cap_stream.RestartCapture()
928
-
929
-
930
- # Public interface
931
- def CaptureTestStdout(outfile=None):
932
- if not outfile:
933
- outfile = os.path.join(FLAGS.test_tmpdir, 'captured.out')
934
-
935
- _CaptureTestOutput(sys.stdout, outfile)
936
-
937
-
938
- def CaptureTestStderr(outfile=None):
939
- if not outfile:
940
- outfile = os.path.join(FLAGS.test_tmpdir, 'captured.err')
941
-
942
- _CaptureTestOutput(sys.stderr, outfile)
943
-
944
-
945
- def DiffTestStdout(golden):
946
- _DiffTestOutput(sys.stdout, golden)
947
-
948
-
949
- def DiffTestStderr(golden):
950
- _DiffTestOutput(sys.stderr, golden)
951
-
952
-
953
- def StopCapturing():
954
- while _captured_streams:
955
- _, cap_stream = _captured_streams.popitem()
956
- cap_stream.StopCapture()
957
- del cap_stream
958
-
959
-
960
- def _WriteTestData(data, filename):
961
- """Write data into file named filename."""
962
- fd = os.open(filename, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0600)
963
- os.write(fd, data)
964
- os.close(fd)
965
-
966
-
967
- class OutputDifferedError(AssertionError):
968
- pass
969
-
970
-
971
- class DiffFailureError(Exception):
972
- pass
973
-
974
-
975
- def _Diff(lhs, rhs):
976
- """Run standard unix 'diff' against two files."""
977
-
978
- cmd = '${TEST_DIFF:-diff} %s %s' % (commands.mkarg(lhs), commands.mkarg(rhs))
979
- (status, output) = commands.getstatusoutput(cmd)
980
- if os.WIFEXITED(status) and os.WEXITSTATUS(status) == 1:
981
- # diff outputs must be the same as c++ and shell
982
- raise OutputDifferedError('\nRunning %s\n%s\nTest output differed '
983
- 'from golden file\n' % (cmd, output))
984
- elif not os.WIFEXITED(status) or os.WEXITSTATUS(status) != 0:
985
- raise DiffFailureError('\nRunning %s\n%s\nFailure diffing test output '
986
- 'with golden file\n' % (cmd, output))
987
-
988
-
989
- def DiffTestStringFile(data, golden):
990
- """Diff data agains a golden file."""
991
- data_file = os.path.join(FLAGS.test_tmpdir, 'provided.dat')
992
- _WriteTestData(data, data_file)
993
- _Diff(data_file, golden)
994
-
995
-
996
- def DiffTestStrings(data1, data2):
997
- """Diff two strings."""
998
- data1_file = os.path.join(FLAGS.test_tmpdir, 'provided_1.dat')
999
- _WriteTestData(data1, data1_file)
1000
- data2_file = os.path.join(FLAGS.test_tmpdir, 'provided_2.dat')
1001
- _WriteTestData(data2, data2_file)
1002
- _Diff(data1_file, data2_file)
1003
-
1004
-
1005
- def DiffTestFiles(testgen, golden):
1006
- _Diff(testgen, golden)
1007
-
1008
-
1009
- def GetCommandString(command):
1010
- """Returns an escaped string that can be used as a shell command.
1011
-
1012
- Args:
1013
- command: List or string representing the command to run.
1014
- Returns:
1015
- A string suitable for use as a shell command.
1016
- """
1017
- if isinstance(command, types.StringTypes):
1018
- return command
1019
- else:
1020
- return shellutil.ShellEscapeList(command)
1021
-
1022
-
1023
- def GetCommandStderr(command, env=None, close_fds=True):
1024
- """Runs the given shell command and returns a tuple.
1025
-
1026
- Args:
1027
- command: List or string representing the command to run.
1028
- env: Dictionary of environment variable settings.
1029
- close_fds: Whether or not to close all open fd's in the child after forking.
1030
-
1031
- Returns:
1032
- Tuple of (exit status, text printed to stdout and stderr by the command).
1033
- """
1034
- if env is None: env = {}
1035
- # Forge needs PYTHON_RUNFILES in order to find the runfiles directory when a
1036
- # Python executable is run by a Python test. Pass this through from the
1037
- # parent environment if not explicitly defined.
1038
- if os.environ.get('PYTHON_RUNFILES') and not env.get('PYTHON_RUNFILES'):
1039
- env['PYTHON_RUNFILES'] = os.environ['PYTHON_RUNFILES']
1040
-
1041
- use_shell = isinstance(command, types.StringTypes)
1042
- process = subprocess.Popen(
1043
- command,
1044
- close_fds=close_fds,
1045
- env=env,
1046
- shell=use_shell,
1047
- stderr=subprocess.STDOUT,
1048
- stdout=subprocess.PIPE)
1049
- output = process.communicate()[0]
1050
- exit_status = process.wait()
1051
- return (exit_status, output)
1052
-
1053
-
1054
- def _QuoteLongString(s):
1055
- """Quotes a potentially multi-line string to make the start and end obvious.
1056
-
1057
- Args:
1058
- s: A string.
1059
-
1060
- Returns:
1061
- The quoted string.
1062
- """
1063
- return ('8<-----------\n' +
1064
- s + '\n' +
1065
- '----------->8\n')
1066
-
1067
-
1068
- class TestProgramManualRun(unittest.TestProgram):
1069
- """A TestProgram which runs the tests manually."""
1070
-
1071
- def runTests(self, do_run=False):
1072
- """Run the tests."""
1073
- if do_run:
1074
- unittest.TestProgram.runTests(self)
1075
-
1076
-
1077
- def main(*args, **kwargs):
1078
- """Executes a set of Python unit tests.
1079
-
1080
- Usually this function is called without arguments, so the
1081
- unittest.TestProgram instance will get created with the default settings,
1082
- so it will run all test methods of all TestCase classes in the __main__
1083
- module.
1084
-
1085
- Args:
1086
- args: Positional arguments passed through to unittest.TestProgram.__init__.
1087
- kwargs: Keyword arguments passed through to unittest.TestProgram.__init__.
1088
- """
1089
- _RunInApp(RunTests, args, kwargs)
1090
-
1091
-
1092
- def _IsInAppMain():
1093
- """Returns True iff app.main or app.really_start is active."""
1094
- f = sys._getframe().f_back
1095
- app_dict = app.__dict__
1096
- while f:
1097
- if f.f_globals is app_dict and f.f_code.co_name in ('run', 'really_start'):
1098
- return True
1099
- f = f.f_back
1100
- return False
1101
-
1102
-
1103
- class SavedFlag(object):
1104
- """Helper class for saving and restoring a flag value."""
1105
-
1106
- def __init__(self, flag):
1107
- self.flag = flag
1108
- self.value = flag.value
1109
- self.present = flag.present
1110
-
1111
- def RestoreFlag(self):
1112
- self.flag.value = self.value
1113
- self.flag.present = self.present
1114
-
1115
-
1116
- def _RunInApp(function, args, kwargs):
1117
- """Executes a set of Python unit tests, ensuring app.really_start.
1118
-
1119
- Most users should call basetest.main() instead of _RunInApp.
1120
-
1121
- _RunInApp calculates argv to be the command-line arguments of this program
1122
- (without the flags), sets the default of FLAGS.alsologtostderr to True,
1123
- then it calls function(argv, args, kwargs), making sure that `function'
1124
- will get called within app.run() or app.really_start(). _RunInApp does this
1125
- by checking whether it is called by either app.run() or
1126
- app.really_start(), or by calling app.really_start() explicitly.
1127
-
1128
- The reason why app.really_start has to be ensured is to make sure that
1129
- flags are parsed and stripped properly, and other initializations done by
1130
- the app module are also carried out, no matter if basetest.run() is called
1131
- from within or outside app.run().
1132
-
1133
- If _RunInApp is called from within app.run(), then it will reparse
1134
- sys.argv and pass the result without command-line flags into the argv
1135
- argument of `function'. The reason why this parsing is needed is that
1136
- __main__.main() calls basetest.main() without passing its argv. So the
1137
- only way _RunInApp could get to know the argv without the flags is that
1138
- it reparses sys.argv.
1139
-
1140
- _RunInApp changes the default of FLAGS.alsologtostderr to True so that the
1141
- test program's stderr will contain all the log messages unless otherwise
1142
- specified on the command-line. This overrides any explicit assignment to
1143
- FLAGS.alsologtostderr by the test program prior to the call to _RunInApp()
1144
- (e.g. in __main__.main).
1145
-
1146
- Please note that _RunInApp (and the function it calls) is allowed to make
1147
- changes to kwargs.
1148
-
1149
- Args:
1150
- function: basetest.RunTests or a similar function. It will be called as
1151
- function(argv, args, kwargs) where argv is a list containing the
1152
- elements of sys.argv without the command-line flags.
1153
- args: Positional arguments passed through to unittest.TestProgram.__init__.
1154
- kwargs: Keyword arguments passed through to unittest.TestProgram.__init__.
1155
- """
1156
- if _IsInAppMain():
1157
- # Save command-line flags so the side effects of FLAGS(sys.argv) can be
1158
- # undone.
1159
- saved_flags = dict((f.name, SavedFlag(f))
1160
- for f in FLAGS.FlagDict().itervalues())
1161
-
1162
- # Here we'd like to change the default of alsologtostderr from False to
1163
- # True, so the test programs's stderr will contain all the log messages.
1164
- # The desired effect is that if --alsologtostderr is not specified in
1165
- # the command-line, and __main__.main doesn't set FLAGS.logtostderr
1166
- # before calling us (basetest.main), then our changed default takes
1167
- # effect and alsologtostderr becomes True.
1168
- #
1169
- # However, we cannot achive this exact effect, because here we cannot
1170
- # distinguish these situations:
1171
- #
1172
- # A. main.__main__ has changed it to False, it hasn't been specified on
1173
- # the command-line, and the default was kept as False. We should keep
1174
- # it as False.
1175
- #
1176
- # B. main.__main__ hasn't changed it, it hasn't been specified on the
1177
- # command-line, and the default was kept as False. We should change
1178
- # it to True here.
1179
- #
1180
- # As a workaround, we assume that main.__main__ never changes
1181
- # FLAGS.alsologstderr to False, thus the value of the flag is determined
1182
- # by its default unless the command-line overrides it. We want to change
1183
- # the default to True, and we do it by setting the flag value to True, and
1184
- # letting the command-line override it in FLAGS(sys.argv) below by not
1185
- # restoring it in saved_flag.RestoreFlag().
1186
- if 'alsologtostderr' in saved_flags:
1187
- FLAGS.alsologtostderr = True
1188
- del saved_flags['alsologtostderr']
1189
-
1190
- # The call FLAGS(sys.argv) parses sys.argv, returns the arguments
1191
- # without the flags, and -- as a side effect -- modifies flag values in
1192
- # FLAGS. We don't want the side effect, because we don't want to
1193
- # override flag changes the program did (e.g. in __main__.main)
1194
- # after the command-line has been parsed. So we have the for loop below
1195
- # to change back flags to their old values.
1196
- argv = FLAGS(sys.argv)
1197
- for saved_flag in saved_flags.itervalues():
1198
- saved_flag.RestoreFlag()
1199
-
1200
-
1201
- function(argv, args, kwargs)
1202
- else:
1203
- # Send logging to stderr. Use --alsologtostderr instead of --logtostderr
1204
- # in case tests are reading their own logs.
1205
- if 'alsologtostderr' in FLAGS:
1206
- FLAGS.SetDefault('alsologtostderr', True)
1207
-
1208
- def Main(argv):
1209
- function(argv, args, kwargs)
1210
-
1211
- app.really_start(main=Main)
1212
-
1213
-
1214
- def RunTests(argv, args, kwargs):
1215
- """Executes a set of Python unit tests within app.really_start.
1216
-
1217
- Most users should call basetest.main() instead of RunTests.
1218
-
1219
- Please note that RunTests should be called from app.really_start (which is
1220
- called from app.run()). Calling basetest.main() would ensure that.
1221
-
1222
- Please note that RunTests is allowed to make changes to kwargs.
1223
-
1224
- Args:
1225
- argv: sys.argv with the command-line flags removed from the front, i.e. the
1226
- argv with which app.run() has called __main__.main.
1227
- args: Positional arguments passed through to unittest.TestProgram.__init__.
1228
- kwargs: Keyword arguments passed through to unittest.TestProgram.__init__.
1229
- """
1230
- test_runner = kwargs.get('testRunner')
1231
-
1232
- # Make sure tmpdir exists
1233
- if not os.path.isdir(FLAGS.test_tmpdir):
1234
- os.makedirs(FLAGS.test_tmpdir)
1235
-
1236
- # Run main module setup, if it exists
1237
- main_mod = sys.modules['__main__']
1238
- if hasattr(main_mod, 'setUp') and callable(main_mod.setUp):
1239
- main_mod.setUp()
1240
-
1241
- # Let unittest.TestProgram.__init__ called by
1242
- # TestProgramManualRun.__init__ do its own argv parsing, e.g. for '-v',
1243
- # on argv, which is sys.argv without the command-line flags.
1244
- kwargs.setdefault('argv', argv)
1245
-
1246
- try:
1247
- result = None
1248
- test_program = TestProgramManualRun(*args, **kwargs)
1249
- if test_runner:
1250
- test_program.testRunner = test_runner
1251
- else:
1252
- test_program.testRunner = unittest.TextTestRunner(
1253
- verbosity=test_program.verbosity)
1254
- result = test_program.testRunner.run(test_program.test)
1255
- finally:
1256
- # Run main module teardown, if it exists
1257
- if hasattr(main_mod, 'tearDown') and callable(main_mod.tearDown):
1258
- main_mod.tearDown()
1259
-
1260
- sys.exit(not result.wasSuccessful())