libv8 7.8.279.23.0beta1 → 8.4.255.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (719) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +11 -14
  4. data/CHANGELOG.md +7 -1
  5. data/README.md +10 -11
  6. data/Rakefile +30 -36
  7. data/ext/libv8/builder.rb +2 -1
  8. data/lib/libv8/version.rb +1 -1
  9. data/libv8.gemspec +1 -3
  10. data/vendor/depot_tools/{cipd.ps1 → .cipd_impl.ps1} +0 -0
  11. data/vendor/depot_tools/.gitattributes +1 -1
  12. data/vendor/depot_tools/.gitignore +3 -1
  13. data/vendor/depot_tools/.style.yapf +3 -1
  14. data/vendor/depot_tools/.vpython +55 -0
  15. data/vendor/depot_tools/.vpython3 +23 -0
  16. data/vendor/depot_tools/CROS_OWNERS +3 -1
  17. data/vendor/depot_tools/GOMA_OWNERS +9 -0
  18. data/vendor/depot_tools/LUCI_OWNERS +5 -0
  19. data/vendor/depot_tools/OWNERS +21 -6
  20. data/vendor/depot_tools/PRESUBMIT.py +35 -18
  21. data/vendor/depot_tools/README.git-cl.md +0 -14
  22. data/vendor/depot_tools/README.md +1 -1
  23. data/vendor/depot_tools/WATCHLISTS +2 -2
  24. data/vendor/depot_tools/auth.py +60 -772
  25. data/vendor/depot_tools/autoninja +12 -6
  26. data/vendor/depot_tools/autoninja.bat +6 -6
  27. data/vendor/depot_tools/autoninja.py +64 -27
  28. data/vendor/depot_tools/bb +1 -1
  29. data/vendor/depot_tools/bootstrap/{win/README.md → README.md} +28 -14
  30. data/vendor/depot_tools/bootstrap/{win/win_tools.py → bootstrap.py} +60 -43
  31. data/vendor/depot_tools/bootstrap/{win/git-bash.template.sh → git-bash.template.sh} +1 -1
  32. data/vendor/depot_tools/bootstrap/{win/git.template.bat → git.template.bat} +0 -0
  33. data/vendor/depot_tools/bootstrap/manifest.txt +27 -0
  34. data/vendor/depot_tools/bootstrap/manifest_bleeding_edge.txt +27 -0
  35. data/vendor/depot_tools/bootstrap/{win/profile.d.python.sh → profile.d.python.sh} +0 -0
  36. data/vendor/depot_tools/bootstrap/{win/python27.bleeding_edge.bat → python27.bat} +0 -0
  37. data/vendor/depot_tools/bootstrap/{win/python27.new.bat → python3.bat} +3 -3
  38. data/vendor/depot_tools/bootstrap/{win/win_tools.bat → win_tools.bat} +21 -16
  39. data/vendor/depot_tools/bootstrap_python3 +35 -0
  40. data/vendor/depot_tools/cbuildbot +1 -1
  41. data/vendor/depot_tools/chrome_set_ver +1 -1
  42. data/vendor/depot_tools/cipd +43 -39
  43. data/vendor/depot_tools/cipd.bat +2 -2
  44. data/vendor/depot_tools/cipd_client_version +1 -1
  45. data/vendor/depot_tools/cipd_client_version.digests +15 -14
  46. data/vendor/depot_tools/cipd_manifest.txt +31 -8
  47. data/vendor/depot_tools/cipd_manifest.versions +278 -158
  48. data/vendor/depot_tools/cit.py +9 -7
  49. data/vendor/depot_tools/clang_format.py +4 -1
  50. data/vendor/depot_tools/clang_format_merge_driver.py +10 -8
  51. data/vendor/depot_tools/compile_single_file.py +7 -2
  52. data/vendor/depot_tools/cpplint.py +51 -45
  53. data/vendor/depot_tools/cros +87 -0
  54. data/vendor/depot_tools/cros_sdk +1 -1
  55. data/vendor/depot_tools/crosjobs +13 -0
  56. data/vendor/depot_tools/detect_host_arch.py +0 -1
  57. data/vendor/depot_tools/dirmd +12 -0
  58. data/vendor/depot_tools/dirmd.bat +7 -0
  59. data/vendor/depot_tools/download_from_google_storage.py +47 -27
  60. data/vendor/depot_tools/ensure_bootstrap +14 -0
  61. data/vendor/depot_tools/fetch +14 -1
  62. data/vendor/depot_tools/fetch.bat +14 -1
  63. data/vendor/depot_tools/fetch.py +5 -7
  64. data/vendor/depot_tools/fetch_configs/chromium.py +6 -4
  65. data/vendor/depot_tools/fetch_configs/devtools-frontend.py +44 -0
  66. data/vendor/depot_tools/fetch_configs/ios_internal.py +10 -19
  67. data/vendor/depot_tools/fix_encoding.py +19 -5
  68. data/vendor/depot_tools/gclient +28 -12
  69. data/vendor/depot_tools/gclient-new-workdir.py +2 -0
  70. data/vendor/depot_tools/gclient.bat +18 -1
  71. data/vendor/depot_tools/gclient.py +156 -118
  72. data/vendor/depot_tools/gclient_eval.py +119 -107
  73. data/vendor/depot_tools/gclient_paths.py +67 -57
  74. data/vendor/depot_tools/gclient_scm.py +180 -169
  75. data/vendor/depot_tools/gclient_utils.py +177 -124
  76. data/vendor/depot_tools/gerrit_client.py +21 -13
  77. data/vendor/depot_tools/gerrit_util.py +188 -228
  78. data/vendor/depot_tools/git-cache +1 -1
  79. data/vendor/depot_tools/git-cl +1 -1
  80. data/vendor/depot_tools/git-drover +1 -1
  81. data/vendor/depot_tools/git-find-releases +1 -1
  82. data/vendor/depot_tools/git-footers +1 -1
  83. data/vendor/depot_tools/git-freeze +1 -1
  84. data/vendor/depot_tools/git-hyper-blame +1 -1
  85. data/vendor/depot_tools/git-map +1 -1
  86. data/vendor/depot_tools/git-map-branches +1 -1
  87. data/vendor/depot_tools/git-mark-merge-base +1 -1
  88. data/vendor/depot_tools/git-nav-downstream +1 -1
  89. data/vendor/depot_tools/git-new-branch +1 -1
  90. data/vendor/depot_tools/git-number +1 -1
  91. data/vendor/depot_tools/git-rebase-update +1 -1
  92. data/vendor/depot_tools/git-rename-branch +1 -1
  93. data/vendor/depot_tools/git-reparent-branch +1 -1
  94. data/vendor/depot_tools/git-retry +1 -1
  95. data/vendor/depot_tools/git-squash-branch +1 -1
  96. data/vendor/depot_tools/git-thaw +1 -1
  97. data/vendor/depot_tools/git-upstream-diff +1 -1
  98. data/vendor/depot_tools/git_cache.py +195 -281
  99. data/vendor/depot_tools/git_cl.py +1506 -2075
  100. data/vendor/depot_tools/git_cl_completion.sh +16 -2
  101. data/vendor/depot_tools/git_common.py +77 -32
  102. data/vendor/depot_tools/git_drover.py +17 -8
  103. data/vendor/depot_tools/git_find_releases.py +11 -9
  104. data/vendor/depot_tools/git_footers.py +13 -9
  105. data/vendor/depot_tools/git_freezer.py +3 -1
  106. data/vendor/depot_tools/git_hyper_blame.py +25 -32
  107. data/vendor/depot_tools/git_map.py +115 -93
  108. data/vendor/depot_tools/git_map_branches.py +11 -10
  109. data/vendor/depot_tools/git_mark_merge_base.py +8 -6
  110. data/vendor/depot_tools/git_nav_downstream.py +9 -6
  111. data/vendor/depot_tools/git_new_branch.py +39 -33
  112. data/vendor/depot_tools/git_number.py +28 -17
  113. data/vendor/depot_tools/git_rebase_update.py +50 -49
  114. data/vendor/depot_tools/git_rename_branch.py +2 -2
  115. data/vendor/depot_tools/git_reparent_branch.py +8 -6
  116. data/vendor/depot_tools/git_upstream_diff.py +4 -2
  117. data/vendor/depot_tools/gn.py +6 -4
  118. data/vendor/depot_tools/goma_auth +12 -0
  119. data/vendor/depot_tools/goma_auth.bat +8 -0
  120. data/vendor/depot_tools/goma_ctl +12 -0
  121. data/vendor/depot_tools/goma_ctl.bat +8 -0
  122. data/vendor/depot_tools/gsutil.py +5 -2
  123. data/vendor/depot_tools/gsutil.py.bat +8 -0
  124. data/vendor/depot_tools/gsutil.vpython +3 -1
  125. data/vendor/depot_tools/infra/config/OWNERS +2 -2
  126. data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
  127. data/vendor/depot_tools/led +1 -1
  128. data/vendor/depot_tools/lockfile.py +116 -0
  129. data/vendor/depot_tools/luci-auth +1 -1
  130. data/vendor/depot_tools/lucicfg +1 -1
  131. data/vendor/depot_tools/mac_toolchain +1 -1
  132. data/vendor/depot_tools/man/html/depot_tools.html +1 -1
  133. data/vendor/depot_tools/man/html/depot_tools_tutorial.html +31 -25
  134. data/vendor/depot_tools/man/html/git-cl.html +1 -1
  135. data/vendor/depot_tools/man/html/git-drover.html +18 -18
  136. data/vendor/depot_tools/man/html/git-footers.html +1 -1
  137. data/vendor/depot_tools/man/html/git-freeze.html +3 -3
  138. data/vendor/depot_tools/man/html/git-hyper-blame.html +1 -1
  139. data/vendor/depot_tools/man/html/git-map-branches.html +2 -2
  140. data/vendor/depot_tools/man/html/git-map.html +1 -1
  141. data/vendor/depot_tools/man/html/git-mark-merge-base.html +1 -1
  142. data/vendor/depot_tools/man/html/git-nav-downstream.html +3 -3
  143. data/vendor/depot_tools/man/html/git-nav-upstream.html +12 -6
  144. data/vendor/depot_tools/man/html/git-new-branch.html +1 -1
  145. data/vendor/depot_tools/man/html/git-rebase-update.html +20 -1
  146. data/vendor/depot_tools/man/html/git-rename-branch.html +1 -1
  147. data/vendor/depot_tools/man/html/git-reparent-branch.html +1 -1
  148. data/vendor/depot_tools/man/html/git-retry.html +1 -1
  149. data/vendor/depot_tools/man/html/git-squash-branch.html +1 -1
  150. data/vendor/depot_tools/man/html/git-thaw.html +1 -1
  151. data/vendor/depot_tools/man/html/git-upstream-diff.html +10 -6
  152. data/vendor/depot_tools/man/man1/git-cl.1 +4 -4
  153. data/vendor/depot_tools/man/man1/git-drover.1 +21 -21
  154. data/vendor/depot_tools/man/man1/git-footers.1 +4 -4
  155. data/vendor/depot_tools/man/man1/git-freeze.1 +6 -6
  156. data/vendor/depot_tools/man/man1/git-hyper-blame.1 +4 -4
  157. data/vendor/depot_tools/man/man1/git-map-branches.1 +4 -4
  158. data/vendor/depot_tools/man/man1/git-map.1 +4 -4
  159. data/vendor/depot_tools/man/man1/git-mark-merge-base.1 +4 -4
  160. data/vendor/depot_tools/man/man1/git-nav-downstream.1 +6 -6
  161. data/vendor/depot_tools/man/man1/git-nav-upstream.1 +15 -9
  162. data/vendor/depot_tools/man/man1/git-new-branch.1 +3 -3
  163. data/vendor/depot_tools/man/man1/git-rebase-update.1 +14 -4
  164. data/vendor/depot_tools/man/man1/git-rename-branch.1 +4 -4
  165. data/vendor/depot_tools/man/man1/git-reparent-branch.1 +4 -4
  166. data/vendor/depot_tools/man/man1/git-retry.1 +4 -4
  167. data/vendor/depot_tools/man/man1/git-squash-branch.1 +4 -4
  168. data/vendor/depot_tools/man/man1/git-thaw.1 +4 -4
  169. data/vendor/depot_tools/man/man1/git-upstream-diff.1 +7 -13
  170. data/vendor/depot_tools/man/man7/depot_tools.7 +4 -4
  171. data/vendor/depot_tools/man/man7/depot_tools_tutorial.7 +31 -25
  172. data/vendor/depot_tools/man/src/common_demo_functions.sh +2 -2
  173. data/vendor/depot_tools/man/src/depot_tools_tutorial.txt +3 -3
  174. data/vendor/depot_tools/man/src/filter_demo_output.py +3 -1
  175. data/vendor/depot_tools/man/src/git-new-branch.txt +2 -1
  176. data/vendor/depot_tools/man/src/git-rebase-update.txt +8 -1
  177. data/vendor/depot_tools/metrics.README.md +5 -2
  178. data/vendor/depot_tools/metrics.py +4 -4
  179. data/vendor/depot_tools/metrics_utils.py +3 -3
  180. data/vendor/depot_tools/my_activity.py +85 -251
  181. data/vendor/depot_tools/ninja +1 -0
  182. data/vendor/depot_tools/ninja-mac +0 -0
  183. data/vendor/depot_tools/ninjalog_uploader.py +146 -145
  184. data/vendor/depot_tools/ninjalog_uploader_wrapper.py +69 -60
  185. data/vendor/depot_tools/owners.py +57 -21
  186. data/vendor/depot_tools/owners_finder.py +28 -14
  187. data/vendor/depot_tools/post_build_ninja_summary.py +76 -48
  188. data/vendor/depot_tools/presubmit_canned_checks.py +293 -106
  189. data/vendor/depot_tools/presubmit_support.py +527 -333
  190. data/vendor/depot_tools/prpc +1 -1
  191. data/vendor/depot_tools/pylint +2 -12
  192. data/vendor/depot_tools/pylint-1.5 +78 -0
  193. data/vendor/depot_tools/pylint-1.6 +78 -0
  194. data/vendor/depot_tools/pylint-1.7 +78 -0
  195. data/vendor/depot_tools/pylint-1.8 +78 -0
  196. data/vendor/depot_tools/pylint-1.9 +78 -0
  197. data/vendor/depot_tools/{depot-tools-auth.bat → pylint.bat} +2 -2
  198. data/vendor/depot_tools/pylint_main.py +45 -0
  199. data/vendor/depot_tools/pylintrc +14 -1
  200. data/vendor/depot_tools/python-bin/python3 +7 -0
  201. data/vendor/depot_tools/python_runner.sh +13 -8
  202. data/vendor/depot_tools/rdb +12 -0
  203. data/vendor/depot_tools/rdb.bat +7 -0
  204. data/vendor/depot_tools/recipes/OWNERS +0 -1
  205. data/vendor/depot_tools/recipes/README.recipes.md +215 -151
  206. data/vendor/depot_tools/recipes/recipe_modules/OWNERS +1 -1
  207. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +17 -17
  208. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +65 -32
  209. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +12 -4
  210. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +11 -3
  211. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +12 -4
  212. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +22 -8
  213. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +27 -9
  214. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +22 -8
  215. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +22 -8
  216. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/input_commit_with_id_without_repo.json +22 -8
  217. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/multiple_patch_refs.json +22 -8
  218. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +27 -9
  219. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_HEAD.json +12 -4
  220. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_branch_head.json +10 -4
  221. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_a_specific_commit.json +12 -4
  222. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_cp_checkout_master.json +10 -4
  223. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/refs.json +22 -8
  224. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +22 -8
  225. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/resolve_chromium_fixed_version.json +117 -0
  226. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +16 -10
  227. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +34 -10
  228. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +16 -10
  229. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +27 -9
  230. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +27 -9
  231. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +27 -9
  232. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +27 -9
  233. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +27 -9
  234. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +27 -9
  235. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +27 -9
  236. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +0 -5
  237. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +22 -8
  238. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +7 -23
  239. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +187 -114
  240. data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +2 -2
  241. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/do_not_retry_patch_failures_in_cq.py +42 -0
  242. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +1 -0
  243. data/vendor/depot_tools/recipes/recipe_modules/cipd/__init__.py +0 -1
  244. data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +2 -2
  245. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +0 -1
  246. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +0 -1
  247. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +2 -4
  248. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +0 -1
  249. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +0 -1
  250. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +26 -6
  251. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +23 -5
  252. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +23 -5
  253. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +0 -1
  254. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +0 -1
  255. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +0 -1
  256. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +0 -1
  257. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +0 -1
  258. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +0 -1
  259. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +0 -1
  260. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +0 -1
  261. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +0 -1
  262. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +0 -1
  263. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +0 -1
  264. data/vendor/depot_tools/recipes/recipe_modules/cipd/test_api.py +1 -1
  265. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +4 -1
  266. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +4 -2
  267. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +3 -1
  268. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +4 -2
  269. data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +2 -1
  270. data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +82 -13
  271. data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +21 -9
  272. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +3 -4
  273. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +3 -6
  274. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +3 -4
  275. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +7 -7
  276. data/vendor/depot_tools/recipes/recipe_modules/gclient/resources/diff_deps.py +16 -0
  277. data/vendor/depot_tools/recipes/recipe_modules/gclient/test_api.py +4 -0
  278. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/basic.json +55 -0
  279. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/dont have revision yet.json +84 -0
  280. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/no change, exception.json +83 -0
  281. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.expected/windows.json +55 -0
  282. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/diff_deps.py +88 -0
  283. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +9 -21
  284. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/sync_failure.py +24 -0
  285. data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +2 -1
  286. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +7 -12
  287. data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +0 -2
  288. data/vendor/depot_tools/recipes/recipe_modules/git/api.py +9 -17
  289. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +2 -8
  290. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +2 -8
  291. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +2 -8
  292. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +2 -8
  293. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +2 -8
  294. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +2 -8
  295. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +2 -8
  296. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +3 -13
  297. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +2 -8
  298. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +4 -12
  299. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +2 -10
  300. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +1 -7
  301. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +1 -7
  302. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +0 -8
  303. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +3 -10
  304. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +3 -11
  305. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +2 -8
  306. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +3 -13
  307. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +2 -8
  308. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +2 -8
  309. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +0 -5
  310. data/vendor/depot_tools/recipes/recipe_modules/git_cl/__init__.py +1 -1
  311. data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +7 -13
  312. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +21 -16
  313. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.py +1 -2
  314. data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +1 -1
  315. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +0 -1
  316. data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +2 -2
  317. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +0 -1
  318. data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +23 -8
  319. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +52 -1
  320. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.py +15 -0
  321. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +1 -0
  322. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +32 -8
  323. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/ancient_version.json +83 -0
  324. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/automatic_version.json +83 -0
  325. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/explicit_version.json +83 -0
  326. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +0 -1
  327. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +5 -4
  328. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +0 -1
  329. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +21 -2
  330. data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +20 -0
  331. data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +235 -3
  332. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +13 -5
  333. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.py +5 -1
  334. data/vendor/depot_tools/recipes/recipe_modules/presubmit/properties.proto +14 -0
  335. data/vendor/depot_tools/recipes/recipe_modules/presubmit/test_api.py +19 -0
  336. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/execute.py +247 -0
  337. data/vendor/depot_tools/recipes/recipe_modules/presubmit/tests/prepare.py +49 -0
  338. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +33 -45
  339. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +0 -1
  340. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +64 -21
  341. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +64 -21
  342. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +1 -22
  343. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +1 -22
  344. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +5 -32
  345. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_fetch_ref_timeout.py +29 -0
  346. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.expected/basic.json +5 -0
  347. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_owner.py +22 -0
  348. data/vendor/depot_tools/recipes/recipe_modules/tryserver/tests/gerrit_change_target_ref.py +32 -0
  349. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +0 -1
  350. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +0 -1
  351. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +2 -1
  352. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +1 -6
  353. data/vendor/depot_tools/recipes/recipes.py +49 -28
  354. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +11 -6
  355. data/vendor/depot_tools/repo +698 -540
  356. data/vendor/depot_tools/roll-dep +14 -1
  357. data/vendor/depot_tools/roll-dep.bat +10 -1
  358. data/vendor/depot_tools/roll_dep.py +15 -10
  359. data/vendor/depot_tools/scm.py +94 -74
  360. data/vendor/depot_tools/setup_color.py +36 -2
  361. data/vendor/depot_tools/split_cl.py +44 -32
  362. data/vendor/depot_tools/subcommand.py +6 -6
  363. data/vendor/depot_tools/subprocess2.py +38 -322
  364. data/vendor/depot_tools/third_party/colorama/LICENSE.txt +0 -1
  365. data/vendor/depot_tools/third_party/colorama/README.chromium +4 -5
  366. data/vendor/depot_tools/third_party/colorama/README.rst +346 -0
  367. data/vendor/depot_tools/third_party/colorama/__init__.py +3 -4
  368. data/vendor/depot_tools/third_party/colorama/ansi.py +82 -30
  369. data/vendor/depot_tools/third_party/colorama/ansitowin32.py +105 -37
  370. data/vendor/depot_tools/third_party/colorama/initialise.py +39 -15
  371. data/vendor/depot_tools/third_party/colorama/win32.py +46 -28
  372. data/vendor/depot_tools/third_party/colorama/winterm.py +80 -31
  373. data/vendor/depot_tools/update_depot_tools +18 -8
  374. data/vendor/depot_tools/update_depot_tools.bat +19 -15
  375. data/vendor/depot_tools/upload_metrics.py +7 -6
  376. data/vendor/depot_tools/upload_to_google_storage.py +22 -15
  377. data/vendor/depot_tools/vpython +4 -4
  378. data/vendor/depot_tools/vpython.bat +1 -1
  379. data/vendor/depot_tools/vpython3 +55 -0
  380. data/vendor/depot_tools/vpython3.bat +12 -0
  381. data/vendor/depot_tools/watchlists.py +14 -11
  382. data/vendor/depot_tools/weekly +4 -2
  383. data/vendor/depot_tools/win32imports.py +61 -0
  384. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +49 -41
  385. data/vendor/depot_tools/win_toolchain/package_from_installed.py +142 -149
  386. data/vendor/depot_tools/wtf +5 -3
  387. data/vendor/depot_tools/yapf +5 -1
  388. metadata +66 -345
  389. data/vendor/depot_tools/README.testing +0 -23
  390. data/vendor/depot_tools/annotated_gclient.py +0 -89
  391. data/vendor/depot_tools/appengine_mapper.py +0 -23
  392. data/vendor/depot_tools/bootstrap/win/manifest.txt +0 -20
  393. data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +0 -20
  394. data/vendor/depot_tools/bootstrap/win/pylint.new.bat +0 -7
  395. data/vendor/depot_tools/buildbucket.py +0 -186
  396. data/vendor/depot_tools/checkout.py +0 -431
  397. data/vendor/depot_tools/cros +0 -1
  398. data/vendor/depot_tools/dart_format.py +0 -58
  399. data/vendor/depot_tools/depot-tools-auth +0 -8
  400. data/vendor/depot_tools/depot-tools-auth.py +0 -102
  401. data/vendor/depot_tools/my_reviews.py +0 -396
  402. data/vendor/depot_tools/patch.py +0 -548
  403. data/vendor/depot_tools/pylint.py +0 -30
  404. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name.json +0 -48
  405. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +0 -239
  406. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +0 -222
  407. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/__init__.py +0 -4
  408. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/api.py +0 -29
  409. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +0 -15
  410. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +0 -15
  411. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +0 -15
  412. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +0 -15
  413. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +0 -15
  414. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +0 -15
  415. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +0 -15
  416. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +0 -15
  417. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +0 -15
  418. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +0 -15
  419. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.py +0 -33
  420. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +0 -66
  421. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +0 -11
  422. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +0 -45
  423. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +0 -45
  424. data/vendor/depot_tools/rietveld.py +0 -779
  425. data/vendor/depot_tools/roll-dep-svn +0 -8
  426. data/vendor/depot_tools/roll-dep-svn.bat +0 -12
  427. data/vendor/depot_tools/roll_dep_svn.py +0 -430
  428. data/vendor/depot_tools/support/chromite_wrapper +0 -96
  429. data/vendor/depot_tools/third_party/boto/LICENSE +0 -18
  430. data/vendor/depot_tools/third_party/boto/README.chromium +0 -43
  431. data/vendor/depot_tools/third_party/boto/README.rst +0 -163
  432. data/vendor/depot_tools/third_party/boto/__init__.py +0 -793
  433. data/vendor/depot_tools/third_party/boto/auth.py +0 -682
  434. data/vendor/depot_tools/third_party/boto/auth_handler.py +0 -58
  435. data/vendor/depot_tools/third_party/boto/cacerts/__init__.py +0 -22
  436. data/vendor/depot_tools/third_party/boto/cacerts/cacerts.txt +0 -2183
  437. data/vendor/depot_tools/third_party/boto/compat.py +0 -28
  438. data/vendor/depot_tools/third_party/boto/connection.py +0 -1081
  439. data/vendor/depot_tools/third_party/boto/contrib/__init__.py +0 -22
  440. data/vendor/depot_tools/third_party/boto/contrib/ymlmessage.py +0 -52
  441. data/vendor/depot_tools/third_party/boto/core/README +0 -58
  442. data/vendor/depot_tools/third_party/boto/core/__init__.py +0 -23
  443. data/vendor/depot_tools/third_party/boto/core/auth.py +0 -78
  444. data/vendor/depot_tools/third_party/boto/core/credentials.py +0 -154
  445. data/vendor/depot_tools/third_party/boto/core/dictresponse.py +0 -178
  446. data/vendor/depot_tools/third_party/boto/core/service.py +0 -67
  447. data/vendor/depot_tools/third_party/boto/datapipeline/__init__.py +0 -0
  448. data/vendor/depot_tools/third_party/boto/datapipeline/exceptions.py +0 -42
  449. data/vendor/depot_tools/third_party/boto/datapipeline/layer1.py +0 -546
  450. data/vendor/depot_tools/third_party/boto/ecs/__init__.py +0 -90
  451. data/vendor/depot_tools/third_party/boto/ecs/item.py +0 -153
  452. data/vendor/depot_tools/third_party/boto/exception.py +0 -476
  453. data/vendor/depot_tools/third_party/boto/file/README +0 -49
  454. data/vendor/depot_tools/third_party/boto/file/__init__.py +0 -28
  455. data/vendor/depot_tools/third_party/boto/file/bucket.py +0 -112
  456. data/vendor/depot_tools/third_party/boto/file/connection.py +0 -33
  457. data/vendor/depot_tools/third_party/boto/file/key.py +0 -199
  458. data/vendor/depot_tools/third_party/boto/file/simpleresultset.py +0 -30
  459. data/vendor/depot_tools/third_party/boto/fps/__init__.py +0 -21
  460. data/vendor/depot_tools/third_party/boto/fps/connection.py +0 -369
  461. data/vendor/depot_tools/third_party/boto/fps/exception.py +0 -344
  462. data/vendor/depot_tools/third_party/boto/fps/response.py +0 -175
  463. data/vendor/depot_tools/third_party/boto/gs/__init__.py +0 -22
  464. data/vendor/depot_tools/third_party/boto/gs/acl.py +0 -304
  465. data/vendor/depot_tools/third_party/boto/gs/bucket.py +0 -870
  466. data/vendor/depot_tools/third_party/boto/gs/bucketlistresultset.py +0 -64
  467. data/vendor/depot_tools/third_party/boto/gs/connection.py +0 -103
  468. data/vendor/depot_tools/third_party/boto/gs/cors.py +0 -169
  469. data/vendor/depot_tools/third_party/boto/gs/key.py +0 -704
  470. data/vendor/depot_tools/third_party/boto/gs/resumable_upload_handler.py +0 -659
  471. data/vendor/depot_tools/third_party/boto/gs/user.py +0 -54
  472. data/vendor/depot_tools/third_party/boto/handler.py +0 -44
  473. data/vendor/depot_tools/third_party/boto/https_connection.py +0 -124
  474. data/vendor/depot_tools/third_party/boto/jsonresponse.py +0 -163
  475. data/vendor/depot_tools/third_party/boto/manage/__init__.py +0 -23
  476. data/vendor/depot_tools/third_party/boto/manage/cmdshell.py +0 -241
  477. data/vendor/depot_tools/third_party/boto/manage/propget.py +0 -64
  478. data/vendor/depot_tools/third_party/boto/manage/server.py +0 -556
  479. data/vendor/depot_tools/third_party/boto/manage/task.py +0 -175
  480. data/vendor/depot_tools/third_party/boto/manage/test_manage.py +0 -34
  481. data/vendor/depot_tools/third_party/boto/manage/volume.py +0 -420
  482. data/vendor/depot_tools/third_party/boto/mashups/__init__.py +0 -23
  483. data/vendor/depot_tools/third_party/boto/mashups/interactive.py +0 -97
  484. data/vendor/depot_tools/third_party/boto/mashups/iobject.py +0 -115
  485. data/vendor/depot_tools/third_party/boto/mashups/order.py +0 -211
  486. data/vendor/depot_tools/third_party/boto/mashups/server.py +0 -395
  487. data/vendor/depot_tools/third_party/boto/plugin.py +0 -90
  488. data/vendor/depot_tools/third_party/boto/provider.py +0 -337
  489. data/vendor/depot_tools/third_party/boto/pyami/__init__.py +0 -22
  490. data/vendor/depot_tools/third_party/boto/pyami/bootstrap.py +0 -134
  491. data/vendor/depot_tools/third_party/boto/pyami/config.py +0 -229
  492. data/vendor/depot_tools/third_party/boto/pyami/copybot.cfg +0 -60
  493. data/vendor/depot_tools/third_party/boto/pyami/copybot.py +0 -97
  494. data/vendor/depot_tools/third_party/boto/pyami/helloworld.py +0 -28
  495. data/vendor/depot_tools/third_party/boto/pyami/launch_ami.py +0 -178
  496. data/vendor/depot_tools/third_party/boto/pyami/scriptbase.py +0 -44
  497. data/vendor/depot_tools/third_party/boto/pyami/startup.py +0 -60
  498. data/vendor/depot_tools/third_party/boto/regioninfo.py +0 -63
  499. data/vendor/depot_tools/third_party/boto/resultset.py +0 -169
  500. data/vendor/depot_tools/third_party/boto/roboto/__init__.py +0 -1
  501. data/vendor/depot_tools/third_party/boto/roboto/awsqueryrequest.py +0 -504
  502. data/vendor/depot_tools/third_party/boto/roboto/awsqueryservice.py +0 -121
  503. data/vendor/depot_tools/third_party/boto/roboto/param.py +0 -147
  504. data/vendor/depot_tools/third_party/boto/s3/__init__.py +0 -84
  505. data/vendor/depot_tools/third_party/boto/s3/acl.py +0 -164
  506. data/vendor/depot_tools/third_party/boto/s3/bucket.py +0 -1634
  507. data/vendor/depot_tools/third_party/boto/s3/bucketlistresultset.py +0 -139
  508. data/vendor/depot_tools/third_party/boto/s3/bucketlogging.py +0 -83
  509. data/vendor/depot_tools/third_party/boto/s3/connection.py +0 -540
  510. data/vendor/depot_tools/third_party/boto/s3/cors.py +0 -210
  511. data/vendor/depot_tools/third_party/boto/s3/deletemarker.py +0 -55
  512. data/vendor/depot_tools/third_party/boto/s3/key.py +0 -1712
  513. data/vendor/depot_tools/third_party/boto/s3/keyfile.py +0 -134
  514. data/vendor/depot_tools/third_party/boto/s3/lifecycle.py +0 -231
  515. data/vendor/depot_tools/third_party/boto/s3/multidelete.py +0 -138
  516. data/vendor/depot_tools/third_party/boto/s3/multipart.py +0 -315
  517. data/vendor/depot_tools/third_party/boto/s3/prefix.py +0 -42
  518. data/vendor/depot_tools/third_party/boto/s3/resumable_download_handler.py +0 -339
  519. data/vendor/depot_tools/third_party/boto/s3/tagging.py +0 -71
  520. data/vendor/depot_tools/third_party/boto/s3/user.py +0 -49
  521. data/vendor/depot_tools/third_party/boto/s3/website.py +0 -237
  522. data/vendor/depot_tools/third_party/boto/services/__init__.py +0 -23
  523. data/vendor/depot_tools/third_party/boto/services/bs.py +0 -179
  524. data/vendor/depot_tools/third_party/boto/services/message.py +0 -58
  525. data/vendor/depot_tools/third_party/boto/services/result.py +0 -136
  526. data/vendor/depot_tools/third_party/boto/services/service.py +0 -161
  527. data/vendor/depot_tools/third_party/boto/services/servicedef.py +0 -91
  528. data/vendor/depot_tools/third_party/boto/services/sonofmmm.cfg +0 -43
  529. data/vendor/depot_tools/third_party/boto/services/sonofmmm.py +0 -81
  530. data/vendor/depot_tools/third_party/boto/services/submit.py +0 -88
  531. data/vendor/depot_tools/third_party/boto/ses/__init__.py +0 -54
  532. data/vendor/depot_tools/third_party/boto/ses/connection.py +0 -521
  533. data/vendor/depot_tools/third_party/boto/ses/exceptions.py +0 -77
  534. data/vendor/depot_tools/third_party/boto/storage_uri.py +0 -835
  535. data/vendor/depot_tools/third_party/boto/sts/__init__.py +0 -55
  536. data/vendor/depot_tools/third_party/boto/sts/connection.py +0 -207
  537. data/vendor/depot_tools/third_party/boto/sts/credentials.py +0 -215
  538. data/vendor/depot_tools/third_party/boto/utils.py +0 -927
  539. data/vendor/depot_tools/third_party/colorama/README.txt +0 -304
  540. data/vendor/depot_tools/third_party/fancy_urllib/README +0 -22
  541. data/vendor/depot_tools/third_party/fancy_urllib/__init__.py +0 -460
  542. data/vendor/depot_tools/third_party/logilab/README.chromium +0 -6
  543. data/vendor/depot_tools/third_party/logilab/__init__.py +0 -0
  544. data/vendor/depot_tools/third_party/logilab/astroid/LICENSE.txt +0 -340
  545. data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +0 -11
  546. data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +0 -136
  547. data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +0 -42
  548. data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +0 -233
  549. data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +0 -548
  550. data/vendor/depot_tools/third_party/logilab/astroid/astpeephole.py +0 -86
  551. data/vendor/depot_tools/third_party/logilab/astroid/bases.py +0 -636
  552. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_builtin_inference.py +0 -336
  553. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +0 -15
  554. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_gi.py +0 -195
  555. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_mechanize.py +0 -18
  556. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_nose.py +0 -82
  557. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +0 -62
  558. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +0 -76
  559. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +0 -44
  560. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_six.py +0 -288
  561. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +0 -65
  562. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +0 -473
  563. data/vendor/depot_tools/third_party/logilab/astroid/builder.py +0 -263
  564. data/vendor/depot_tools/third_party/logilab/astroid/context.py +0 -81
  565. data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +0 -75
  566. data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +0 -71
  567. data/vendor/depot_tools/third_party/logilab/astroid/inference.py +0 -359
  568. data/vendor/depot_tools/third_party/logilab/astroid/manager.py +0 -267
  569. data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +0 -147
  570. data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +0 -741
  571. data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +0 -1053
  572. data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +0 -87
  573. data/vendor/depot_tools/third_party/logilab/astroid/objects.py +0 -186
  574. data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +0 -470
  575. data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +0 -390
  576. data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +0 -989
  577. data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +0 -1716
  578. data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +0 -201
  579. data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +0 -96
  580. data/vendor/depot_tools/third_party/logilab/astroid/util.py +0 -89
  581. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +0 -19
  582. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +0 -11
  583. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +0 -20
  584. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +0 -1421
  585. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +0 -9
  586. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +0 -246
  587. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +0 -414
  588. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +0 -13
  589. data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +0 -24
  590. data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +0 -11
  591. data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +0 -19
  592. data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +0 -2729
  593. data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +0 -96
  594. data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +0 -512
  595. data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +0 -228
  596. data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +0 -901
  597. data/vendor/depot_tools/third_party/mock/LICENSE.txt +0 -26
  598. data/vendor/depot_tools/third_party/mock/README.chromium +0 -24
  599. data/vendor/depot_tools/third_party/mock/__init__.py +0 -2366
  600. data/vendor/depot_tools/third_party/oauth2client/LICENSE +0 -202
  601. data/vendor/depot_tools/third_party/oauth2client/MODIFICATIONS.diff +0 -66
  602. data/vendor/depot_tools/third_party/oauth2client/README.chromium +0 -15
  603. data/vendor/depot_tools/third_party/oauth2client/__init__.py +0 -5
  604. data/vendor/depot_tools/third_party/oauth2client/anyjson.py +0 -32
  605. data/vendor/depot_tools/third_party/oauth2client/appengine.py +0 -963
  606. data/vendor/depot_tools/third_party/oauth2client/client.py +0 -1363
  607. data/vendor/depot_tools/third_party/oauth2client/clientsecrets.py +0 -153
  608. data/vendor/depot_tools/third_party/oauth2client/crypt.py +0 -377
  609. data/vendor/depot_tools/third_party/oauth2client/django_orm.py +0 -134
  610. data/vendor/depot_tools/third_party/oauth2client/file.py +0 -124
  611. data/vendor/depot_tools/third_party/oauth2client/gce.py +0 -90
  612. data/vendor/depot_tools/third_party/oauth2client/keyring_storage.py +0 -109
  613. data/vendor/depot_tools/third_party/oauth2client/locked_file.py +0 -373
  614. data/vendor/depot_tools/third_party/oauth2client/multistore_file.py +0 -465
  615. data/vendor/depot_tools/third_party/oauth2client/old_run.py +0 -160
  616. data/vendor/depot_tools/third_party/oauth2client/tools.py +0 -243
  617. data/vendor/depot_tools/third_party/oauth2client/util.py +0 -196
  618. data/vendor/depot_tools/third_party/oauth2client/xsrfutil.py +0 -113
  619. data/vendor/depot_tools/third_party/protobuf26/README.chromium +0 -23
  620. data/vendor/depot_tools/third_party/protobuf26/__init__.py +0 -0
  621. data/vendor/depot_tools/third_party/protobuf26/compiler/__init__.py +0 -0
  622. data/vendor/depot_tools/third_party/protobuf26/compiler/plugin_pb2.py +0 -184
  623. data/vendor/depot_tools/third_party/protobuf26/descriptor.py +0 -849
  624. data/vendor/depot_tools/third_party/protobuf26/descriptor_database.py +0 -137
  625. data/vendor/depot_tools/third_party/protobuf26/descriptor_pb2.py +0 -1522
  626. data/vendor/depot_tools/third_party/protobuf26/descriptor_pool.py +0 -643
  627. data/vendor/depot_tools/third_party/protobuf26/internal/__init__.py +0 -0
  628. data/vendor/depot_tools/third_party/protobuf26/internal/api_implementation.py +0 -89
  629. data/vendor/depot_tools/third_party/protobuf26/internal/containers.py +0 -269
  630. data/vendor/depot_tools/third_party/protobuf26/internal/cpp_message.py +0 -663
  631. data/vendor/depot_tools/third_party/protobuf26/internal/decoder.py +0 -831
  632. data/vendor/depot_tools/third_party/protobuf26/internal/encoder.py +0 -788
  633. data/vendor/depot_tools/third_party/protobuf26/internal/enum_type_wrapper.py +0 -89
  634. data/vendor/depot_tools/third_party/protobuf26/internal/message_listener.py +0 -78
  635. data/vendor/depot_tools/third_party/protobuf26/internal/python_message.py +0 -1247
  636. data/vendor/depot_tools/third_party/protobuf26/internal/type_checkers.py +0 -328
  637. data/vendor/depot_tools/third_party/protobuf26/internal/wire_format.py +0 -268
  638. data/vendor/depot_tools/third_party/protobuf26/message.py +0 -284
  639. data/vendor/depot_tools/third_party/protobuf26/message_factory.py +0 -155
  640. data/vendor/depot_tools/third_party/protobuf26/reflection.py +0 -205
  641. data/vendor/depot_tools/third_party/protobuf26/service.py +0 -226
  642. data/vendor/depot_tools/third_party/protobuf26/service_reflection.py +0 -284
  643. data/vendor/depot_tools/third_party/protobuf26/symbol_database.py +0 -185
  644. data/vendor/depot_tools/third_party/protobuf26/text_encoding.py +0 -110
  645. data/vendor/depot_tools/third_party/protobuf26/text_format.py +0 -873
  646. data/vendor/depot_tools/third_party/pylint.py +0 -37
  647. data/vendor/depot_tools/third_party/pylint/LICENSE.txt +0 -340
  648. data/vendor/depot_tools/third_party/pylint/README.chromium +0 -30
  649. data/vendor/depot_tools/third_party/pylint/__init__.py +0 -46
  650. data/vendor/depot_tools/third_party/pylint/__main__.py +0 -3
  651. data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +0 -80
  652. data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +0 -123
  653. data/vendor/depot_tools/third_party/pylint/checkers/async.py +0 -82
  654. data/vendor/depot_tools/third_party/pylint/checkers/base.py +0 -2010
  655. data/vendor/depot_tools/third_party/pylint/checkers/classes.py +0 -1120
  656. data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +0 -348
  657. data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +0 -369
  658. data/vendor/depot_tools/third_party/pylint/checkers/format.py +0 -993
  659. data/vendor/depot_tools/third_party/pylint/checkers/imports.py +0 -654
  660. data/vendor/depot_tools/third_party/pylint/checkers/logging.py +0 -258
  661. data/vendor/depot_tools/third_party/pylint/checkers/misc.py +0 -105
  662. data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +0 -169
  663. data/vendor/depot_tools/third_party/pylint/checkers/python3.py +0 -591
  664. data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +0 -129
  665. data/vendor/depot_tools/third_party/pylint/checkers/similar.py +0 -371
  666. data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +0 -264
  667. data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +0 -280
  668. data/vendor/depot_tools/third_party/pylint/checkers/strings.py +0 -618
  669. data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +0 -974
  670. data/vendor/depot_tools/third_party/pylint/checkers/utils.py +0 -741
  671. data/vendor/depot_tools/third_party/pylint/checkers/variables.py +0 -1191
  672. data/vendor/depot_tools/third_party/pylint/config.py +0 -820
  673. data/vendor/depot_tools/third_party/pylint/epylint.py +0 -181
  674. data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
  675. data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +0 -311
  676. data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +0 -62
  677. data/vendor/depot_tools/third_party/pylint/graph.py +0 -179
  678. data/vendor/depot_tools/third_party/pylint/gui.py +0 -531
  679. data/vendor/depot_tools/third_party/pylint/interfaces.py +0 -102
  680. data/vendor/depot_tools/third_party/pylint/lint.py +0 -1381
  681. data/vendor/depot_tools/third_party/pylint/pyreverse/__init__.py +0 -5
  682. data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +0 -230
  683. data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +0 -258
  684. data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +0 -372
  685. data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +0 -147
  686. data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +0 -210
  687. data/vendor/depot_tools/third_party/pylint/pyreverse/vcgutils.py +0 -198
  688. data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +0 -198
  689. data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +0 -149
  690. data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +0 -27
  691. data/vendor/depot_tools/third_party/pylint/reporters/html.py +0 -108
  692. data/vendor/depot_tools/third_party/pylint/reporters/json.py +0 -64
  693. data/vendor/depot_tools/third_party/pylint/reporters/text.py +0 -237
  694. data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +0 -106
  695. data/vendor/depot_tools/third_party/pylint/reporters/ureports/html_writer.py +0 -93
  696. data/vendor/depot_tools/third_party/pylint/reporters/ureports/nodes.py +0 -181
  697. data/vendor/depot_tools/third_party/pylint/reporters/ureports/text_writer.py +0 -99
  698. data/vendor/depot_tools/third_party/pylint/testutils.py +0 -414
  699. data/vendor/depot_tools/third_party/pylint/utils.py +0 -1148
  700. data/vendor/depot_tools/third_party/pymox/COPYING +0 -202
  701. data/vendor/depot_tools/third_party/pymox/MANIFEST.in +0 -5
  702. data/vendor/depot_tools/third_party/pymox/README +0 -56
  703. data/vendor/depot_tools/third_party/pymox/__init__.py +0 -0
  704. data/vendor/depot_tools/third_party/pymox/mox.py +0 -1643
  705. data/vendor/depot_tools/third_party/pymox/mox_test.py +0 -1708
  706. data/vendor/depot_tools/third_party/pymox/mox_test_helper.py +0 -76
  707. data/vendor/depot_tools/third_party/pymox/setup.py +0 -14
  708. data/vendor/depot_tools/third_party/pymox/stubout.py +0 -142
  709. data/vendor/depot_tools/third_party/pymox/stubout_test.py +0 -47
  710. data/vendor/depot_tools/third_party/pymox/stubout_testee.py +0 -2
  711. data/vendor/depot_tools/third_party/simplejson/LICENSE.txt +0 -19
  712. data/vendor/depot_tools/third_party/simplejson/PKG-INFO +0 -29
  713. data/vendor/depot_tools/third_party/simplejson/__init__.py +0 -437
  714. data/vendor/depot_tools/third_party/simplejson/decoder.py +0 -421
  715. data/vendor/depot_tools/third_party/simplejson/encoder.py +0 -501
  716. data/vendor/depot_tools/third_party/simplejson/ordered_dict.py +0 -119
  717. data/vendor/depot_tools/third_party/simplejson/scanner.py +0 -77
  718. data/vendor/depot_tools/third_party/simplejson/tool.py +0 -39
  719. data/vendor/depot_tools/third_party/upload.py +0 -2565
@@ -1,202 +0,0 @@
1
-
2
- Apache License
3
- Version 2.0, January 2004
4
- http://www.apache.org/licenses/
5
-
6
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
-
8
- 1. Definitions.
9
-
10
- "License" shall mean the terms and conditions for use, reproduction,
11
- and distribution as defined by Sections 1 through 9 of this document.
12
-
13
- "Licensor" shall mean the copyright owner or entity authorized by
14
- the copyright owner that is granting the License.
15
-
16
- "Legal Entity" shall mean the union of the acting entity and all
17
- other entities that control, are controlled by, or are under common
18
- control with that entity. For the purposes of this definition,
19
- "control" means (i) the power, direct or indirect, to cause the
20
- direction or management of such entity, whether by contract or
21
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
- outstanding shares, or (iii) beneficial ownership of such entity.
23
-
24
- "You" (or "Your") shall mean an individual or Legal Entity
25
- exercising permissions granted by this License.
26
-
27
- "Source" form shall mean the preferred form for making modifications,
28
- including but not limited to software source code, documentation
29
- source, and configuration files.
30
-
31
- "Object" form shall mean any form resulting from mechanical
32
- transformation or translation of a Source form, including but
33
- not limited to compiled object code, generated documentation,
34
- and conversions to other media types.
35
-
36
- "Work" shall mean the work of authorship, whether in Source or
37
- Object form, made available under the License, as indicated by a
38
- copyright notice that is included in or attached to the work
39
- (an example is provided in the Appendix below).
40
-
41
- "Derivative Works" shall mean any work, whether in Source or Object
42
- form, that is based on (or derived from) the Work and for which the
43
- editorial revisions, annotations, elaborations, or other modifications
44
- represent, as a whole, an original work of authorship. For the purposes
45
- of this License, Derivative Works shall not include works that remain
46
- separable from, or merely link (or bind by name) to the interfaces of,
47
- the Work and Derivative Works thereof.
48
-
49
- "Contribution" shall mean any work of authorship, including
50
- the original version of the Work and any modifications or additions
51
- to that Work or Derivative Works thereof, that is intentionally
52
- submitted to Licensor for inclusion in the Work by the copyright owner
53
- or by an individual or Legal Entity authorized to submit on behalf of
54
- the copyright owner. For the purposes of this definition, "submitted"
55
- means any form of electronic, verbal, or written communication sent
56
- to the Licensor or its representatives, including but not limited to
57
- communication on electronic mailing lists, source code control systems,
58
- and issue tracking systems that are managed by, or on behalf of, the
59
- Licensor for the purpose of discussing and improving the Work, but
60
- excluding communication that is conspicuously marked or otherwise
61
- designated in writing by the copyright owner as "Not a Contribution."
62
-
63
- "Contributor" shall mean Licensor and any individual or Legal Entity
64
- on behalf of whom a Contribution has been received by Licensor and
65
- subsequently incorporated within the Work.
66
-
67
- 2. Grant of Copyright License. Subject to the terms and conditions of
68
- this License, each Contributor hereby grants to You a perpetual,
69
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
- copyright license to reproduce, prepare Derivative Works of,
71
- publicly display, publicly perform, sublicense, and distribute the
72
- Work and such Derivative Works in Source or Object form.
73
-
74
- 3. Grant of Patent License. Subject to the terms and conditions of
75
- this License, each Contributor hereby grants to You a perpetual,
76
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
- (except as stated in this section) patent license to make, have made,
78
- use, offer to sell, sell, import, and otherwise transfer the Work,
79
- where such license applies only to those patent claims licensable
80
- by such Contributor that are necessarily infringed by their
81
- Contribution(s) alone or by combination of their Contribution(s)
82
- with the Work to which such Contribution(s) was submitted. If You
83
- institute patent litigation against any entity (including a
84
- cross-claim or counterclaim in a lawsuit) alleging that the Work
85
- or a Contribution incorporated within the Work constitutes direct
86
- or contributory patent infringement, then any patent licenses
87
- granted to You under this License for that Work shall terminate
88
- as of the date such litigation is filed.
89
-
90
- 4. Redistribution. You may reproduce and distribute copies of the
91
- Work or Derivative Works thereof in any medium, with or without
92
- modifications, and in Source or Object form, provided that You
93
- meet the following conditions:
94
-
95
- (a) You must give any other recipients of the Work or
96
- Derivative Works a copy of this License; and
97
-
98
- (b) You must cause any modified files to carry prominent notices
99
- stating that You changed the files; and
100
-
101
- (c) You must retain, in the Source form of any Derivative Works
102
- that You distribute, all copyright, patent, trademark, and
103
- attribution notices from the Source form of the Work,
104
- excluding those notices that do not pertain to any part of
105
- the Derivative Works; and
106
-
107
- (d) If the Work includes a "NOTICE" text file as part of its
108
- distribution, then any Derivative Works that You distribute must
109
- include a readable copy of the attribution notices contained
110
- within such NOTICE file, excluding those notices that do not
111
- pertain to any part of the Derivative Works, in at least one
112
- of the following places: within a NOTICE text file distributed
113
- as part of the Derivative Works; within the Source form or
114
- documentation, if provided along with the Derivative Works; or,
115
- within a display generated by the Derivative Works, if and
116
- wherever such third-party notices normally appear. The contents
117
- of the NOTICE file are for informational purposes only and
118
- do not modify the License. You may add Your own attribution
119
- notices within Derivative Works that You distribute, alongside
120
- or as an addendum to the NOTICE text from the Work, provided
121
- that such additional attribution notices cannot be construed
122
- as modifying the License.
123
-
124
- You may add Your own copyright statement to Your modifications and
125
- may provide additional or different license terms and conditions
126
- for use, reproduction, or distribution of Your modifications, or
127
- for any such Derivative Works as a whole, provided Your use,
128
- reproduction, and distribution of the Work otherwise complies with
129
- the conditions stated in this License.
130
-
131
- 5. Submission of Contributions. Unless You explicitly state otherwise,
132
- any Contribution intentionally submitted for inclusion in the Work
133
- by You to the Licensor shall be under the terms and conditions of
134
- this License, without any additional terms or conditions.
135
- Notwithstanding the above, nothing herein shall supersede or modify
136
- the terms of any separate license agreement you may have executed
137
- with Licensor regarding such Contributions.
138
-
139
- 6. Trademarks. This License does not grant permission to use the trade
140
- names, trademarks, service marks, or product names of the Licensor,
141
- except as required for reasonable and customary use in describing the
142
- origin of the Work and reproducing the content of the NOTICE file.
143
-
144
- 7. Disclaimer of Warranty. Unless required by applicable law or
145
- agreed to in writing, Licensor provides the Work (and each
146
- Contributor provides its Contributions) on an "AS IS" BASIS,
147
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
- implied, including, without limitation, any warranties or conditions
149
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
- PARTICULAR PURPOSE. You are solely responsible for determining the
151
- appropriateness of using or redistributing the Work and assume any
152
- risks associated with Your exercise of permissions under this License.
153
-
154
- 8. Limitation of Liability. In no event and under no legal theory,
155
- whether in tort (including negligence), contract, or otherwise,
156
- unless required by applicable law (such as deliberate and grossly
157
- negligent acts) or agreed to in writing, shall any Contributor be
158
- liable to You for damages, including any direct, indirect, special,
159
- incidental, or consequential damages of any character arising as a
160
- result of this License or out of the use or inability to use the
161
- Work (including but not limited to damages for loss of goodwill,
162
- work stoppage, computer failure or malfunction, or any and all
163
- other commercial damages or losses), even if such Contributor
164
- has been advised of the possibility of such damages.
165
-
166
- 9. Accepting Warranty or Additional Liability. While redistributing
167
- the Work or Derivative Works thereof, You may choose to offer,
168
- and charge a fee for, acceptance of support, warranty, indemnity,
169
- or other liability obligations and/or rights consistent with this
170
- License. However, in accepting such obligations, You may act only
171
- on Your own behalf and on Your sole responsibility, not on behalf
172
- of any other Contributor, and only if You agree to indemnify,
173
- defend, and hold each Contributor harmless for any liability
174
- incurred by, or claims asserted against, such Contributor by reason
175
- of your accepting any such warranty or additional liability.
176
-
177
- END OF TERMS AND CONDITIONS
178
-
179
- APPENDIX: How to apply the Apache License to your work.
180
-
181
- To apply the Apache License to your work, attach the following
182
- boilerplate notice, with the fields enclosed by brackets "[]"
183
- replaced with your own identifying information. (Don't include
184
- the brackets!) The text should be enclosed in the appropriate
185
- comment syntax for the file format. We also recommend that a
186
- file or class name and description of purpose be included on the
187
- same "printed page" as the copyright notice for easier
188
- identification within third-party archives.
189
-
190
- Copyright [yyyy] [name of copyright owner]
191
-
192
- Licensed under the Apache License, Version 2.0 (the "License");
193
- you may not use this file except in compliance with the License.
194
- You may obtain a copy of the License at
195
-
196
- http://www.apache.org/licenses/LICENSE-2.0
197
-
198
- Unless required by applicable law or agreed to in writing, software
199
- distributed under the License is distributed on an "AS IS" BASIS,
200
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201
- See the License for the specific language governing permissions and
202
- limitations under the License.
@@ -1,66 +0,0 @@
1
- diff --git a/third_party/oauth2client/client.py b/third_party/oauth2client/client.py
2
- index 4e8e616..6901f3f 100644
3
- --- a/third_party/oauth2client/client.py
4
- +++ b/third_party/oauth2client/client.py
5
- @@ -23,24 +23,23 @@ import base64
6
- import clientsecrets
7
- import copy
8
- import datetime
9
- -import httplib2
10
- +from .. import httplib2
11
- import logging
12
- -import os
13
- import sys
14
- import time
15
- import urllib
16
- import urlparse
17
-
18
- -from oauth2client import GOOGLE_AUTH_URI
19
- -from oauth2client import GOOGLE_REVOKE_URI
20
- -from oauth2client import GOOGLE_TOKEN_URI
21
- -from oauth2client import util
22
- -from oauth2client.anyjson import simplejson
23
- +from . import GOOGLE_AUTH_URI
24
- +from . import GOOGLE_REVOKE_URI
25
- +from . import GOOGLE_TOKEN_URI
26
- +from . import util
27
- +from .anyjson import simplejson
28
-
29
- HAS_OPENSSL = False
30
- HAS_CRYPTO = False
31
- try:
32
- - from oauth2client import crypt
33
- + from . import crypt
34
- HAS_CRYPTO = True
35
- if crypt.OpenSSLVerifier is not None:
36
- HAS_OPENSSL = True
37
- diff --git a/third_party/oauth2client/locked_file.py b/third_party/oauth2client/locked_file.py
38
- index 31514dc..858b702 100644
39
- --- a/third_party/oauth2client/locked_file.py
40
- +++ b/third_party/oauth2client/locked_file.py
41
- @@ -35,7 +35,7 @@ import logging
42
- import os
43
- import time
44
-
45
- -from oauth2client import util
46
- +from . import util
47
-
48
- logger = logging.getLogger(__name__)
49
-
50
- diff --git a/third_party/oauth2client/multistore_file.py b/third_party/oauth2client/multistore_file.py
51
- index ce7a519..ea89027 100644
52
- --- a/third_party/oauth2client/multistore_file.py
53
- +++ b/third_party/oauth2client/multistore_file.py
54
- @@ -50,9 +50,9 @@ import os
55
- import threading
56
-
57
- from anyjson import simplejson
58
- -from oauth2client.client import Storage as BaseStorage
59
- -from oauth2client.client import Credentials
60
- -from oauth2client import util
61
- +from .client import Storage as BaseStorage
62
- +from .client import Credentials
63
- +from . import util
64
- from locked_file import LockedFile
65
-
66
- logger = logging.getLogger(__name__)
@@ -1,15 +0,0 @@
1
- Name: oauth2client
2
- Short Name: oauth2client
3
- URL: https://pypi.python.org/packages/source/o/oauth2client/oauth2client-1.2.tar.gz
4
- Version: 1.2
5
- License: Apache License 2.0
6
-
7
- Description:
8
- OAuth2 authentication library in Python
9
-
10
- Local modifications:
11
- See also MODIFICATIONS.diff
12
-
13
- Notes:
14
- Requires the httplib2 library.
15
-
@@ -1,5 +0,0 @@
1
- __version__ = "1.2"
2
-
3
- GOOGLE_AUTH_URI = 'https://accounts.google.com/o/oauth2/auth'
4
- GOOGLE_REVOKE_URI = 'https://accounts.google.com/o/oauth2/revoke'
5
- GOOGLE_TOKEN_URI = 'https://accounts.google.com/o/oauth2/token'
@@ -1,32 +0,0 @@
1
- # Copyright (C) 2010 Google Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- """Utility module to import a JSON module
16
-
17
- Hides all the messy details of exactly where
18
- we get a simplejson module from.
19
- """
20
-
21
- __author__ = 'jcgregorio@google.com (Joe Gregorio)'
22
-
23
-
24
- try: # pragma: no cover
25
- # Should work for Python2.6 and higher.
26
- import json as simplejson
27
- except ImportError: # pragma: no cover
28
- try:
29
- import simplejson
30
- except ImportError:
31
- # Try to import from django, should work on App Engine
32
- from django.utils import simplejson
@@ -1,963 +0,0 @@
1
- # Copyright (C) 2010 Google Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- """Utilities for Google App Engine
16
-
17
- Utilities for making it easier to use OAuth 2.0 on Google App Engine.
18
- """
19
-
20
- __author__ = 'jcgregorio@google.com (Joe Gregorio)'
21
-
22
- import base64
23
- import cgi
24
- import httplib2
25
- import logging
26
- import os
27
- import pickle
28
- import threading
29
- import time
30
-
31
- from google.appengine.api import app_identity
32
- from google.appengine.api import memcache
33
- from google.appengine.api import users
34
- from google.appengine.ext import db
35
- from google.appengine.ext import webapp
36
- from google.appengine.ext.webapp.util import login_required
37
- from google.appengine.ext.webapp.util import run_wsgi_app
38
- from oauth2client import GOOGLE_AUTH_URI
39
- from oauth2client import GOOGLE_REVOKE_URI
40
- from oauth2client import GOOGLE_TOKEN_URI
41
- from oauth2client import clientsecrets
42
- from oauth2client import util
43
- from oauth2client import xsrfutil
44
- from oauth2client.anyjson import simplejson
45
- from oauth2client.client import AccessTokenRefreshError
46
- from oauth2client.client import AssertionCredentials
47
- from oauth2client.client import Credentials
48
- from oauth2client.client import Flow
49
- from oauth2client.client import OAuth2WebServerFlow
50
- from oauth2client.client import Storage
51
-
52
- # TODO(dhermes): Resolve import issue.
53
- # This is a temporary fix for a Google internal issue.
54
- try:
55
- from google.appengine.ext import ndb
56
- except ImportError:
57
- ndb = None
58
-
59
-
60
- logger = logging.getLogger(__name__)
61
-
62
- OAUTH2CLIENT_NAMESPACE = 'oauth2client#ns'
63
-
64
- XSRF_MEMCACHE_ID = 'xsrf_secret_key'
65
-
66
-
67
- def _safe_html(s):
68
- """Escape text to make it safe to display.
69
-
70
- Args:
71
- s: string, The text to escape.
72
-
73
- Returns:
74
- The escaped text as a string.
75
- """
76
- return cgi.escape(s, quote=1).replace("'", ''')
77
-
78
-
79
- class InvalidClientSecretsError(Exception):
80
- """The client_secrets.json file is malformed or missing required fields."""
81
-
82
-
83
- class InvalidXsrfTokenError(Exception):
84
- """The XSRF token is invalid or expired."""
85
-
86
-
87
- class SiteXsrfSecretKey(db.Model):
88
- """Storage for the sites XSRF secret key.
89
-
90
- There will only be one instance stored of this model, the one used for the
91
- site.
92
- """
93
- secret = db.StringProperty()
94
-
95
- if ndb is not None:
96
- class SiteXsrfSecretKeyNDB(ndb.Model):
97
- """NDB Model for storage for the sites XSRF secret key.
98
-
99
- Since this model uses the same kind as SiteXsrfSecretKey, it can be used
100
- interchangeably. This simply provides an NDB model for interacting with the
101
- same data the DB model interacts with.
102
-
103
- There should only be one instance stored of this model, the one used for the
104
- site.
105
- """
106
- secret = ndb.StringProperty()
107
-
108
- @classmethod
109
- def _get_kind(cls):
110
- """Return the kind name for this class."""
111
- return 'SiteXsrfSecretKey'
112
-
113
-
114
- def _generate_new_xsrf_secret_key():
115
- """Returns a random XSRF secret key.
116
- """
117
- return os.urandom(16).encode("hex")
118
-
119
-
120
- def xsrf_secret_key():
121
- """Return the secret key for use for XSRF protection.
122
-
123
- If the Site entity does not have a secret key, this method will also create
124
- one and persist it.
125
-
126
- Returns:
127
- The secret key.
128
- """
129
- secret = memcache.get(XSRF_MEMCACHE_ID, namespace=OAUTH2CLIENT_NAMESPACE)
130
- if not secret:
131
- # Load the one and only instance of SiteXsrfSecretKey.
132
- model = SiteXsrfSecretKey.get_or_insert(key_name='site')
133
- if not model.secret:
134
- model.secret = _generate_new_xsrf_secret_key()
135
- model.put()
136
- secret = model.secret
137
- memcache.add(XSRF_MEMCACHE_ID, secret, namespace=OAUTH2CLIENT_NAMESPACE)
138
-
139
- return str(secret)
140
-
141
-
142
- class AppAssertionCredentials(AssertionCredentials):
143
- """Credentials object for App Engine Assertion Grants
144
-
145
- This object will allow an App Engine application to identify itself to Google
146
- and other OAuth 2.0 servers that can verify assertions. It can be used for the
147
- purpose of accessing data stored under an account assigned to the App Engine
148
- application itself.
149
-
150
- This credential does not require a flow to instantiate because it represents
151
- a two legged flow, and therefore has all of the required information to
152
- generate and refresh its own access tokens.
153
- """
154
-
155
- @util.positional(2)
156
- def __init__(self, scope, **kwargs):
157
- """Constructor for AppAssertionCredentials
158
-
159
- Args:
160
- scope: string or iterable of strings, scope(s) of the credentials being
161
- requested.
162
- """
163
- self.scope = util.scopes_to_string(scope)
164
-
165
- # Assertion type is no longer used, but still in the parent class signature.
166
- super(AppAssertionCredentials, self).__init__(None)
167
-
168
- @classmethod
169
- def from_json(cls, json):
170
- data = simplejson.loads(json)
171
- return AppAssertionCredentials(data['scope'])
172
-
173
- def _refresh(self, http_request):
174
- """Refreshes the access_token.
175
-
176
- Since the underlying App Engine app_identity implementation does its own
177
- caching we can skip all the storage hoops and just to a refresh using the
178
- API.
179
-
180
- Args:
181
- http_request: callable, a callable that matches the method signature of
182
- httplib2.Http.request, used to make the refresh request.
183
-
184
- Raises:
185
- AccessTokenRefreshError: When the refresh fails.
186
- """
187
- try:
188
- scopes = self.scope.split()
189
- (token, _) = app_identity.get_access_token(scopes)
190
- except app_identity.Error, e:
191
- raise AccessTokenRefreshError(str(e))
192
- self.access_token = token
193
-
194
-
195
- class FlowProperty(db.Property):
196
- """App Engine datastore Property for Flow.
197
-
198
- Utility property that allows easy storage and retrieval of an
199
- oauth2client.Flow"""
200
-
201
- # Tell what the user type is.
202
- data_type = Flow
203
-
204
- # For writing to datastore.
205
- def get_value_for_datastore(self, model_instance):
206
- flow = super(FlowProperty,
207
- self).get_value_for_datastore(model_instance)
208
- return db.Blob(pickle.dumps(flow))
209
-
210
- # For reading from datastore.
211
- def make_value_from_datastore(self, value):
212
- if value is None:
213
- return None
214
- return pickle.loads(value)
215
-
216
- def validate(self, value):
217
- if value is not None and not isinstance(value, Flow):
218
- raise db.BadValueError('Property %s must be convertible '
219
- 'to a FlowThreeLegged instance (%s)' %
220
- (self.name, value))
221
- return super(FlowProperty, self).validate(value)
222
-
223
- def empty(self, value):
224
- return not value
225
-
226
-
227
- if ndb is not None:
228
- class FlowNDBProperty(ndb.PickleProperty):
229
- """App Engine NDB datastore Property for Flow.
230
-
231
- Serves the same purpose as the DB FlowProperty, but for NDB models. Since
232
- PickleProperty inherits from BlobProperty, the underlying representation of
233
- the data in the datastore will be the same as in the DB case.
234
-
235
- Utility property that allows easy storage and retrieval of an
236
- oauth2client.Flow
237
- """
238
-
239
- def _validate(self, value):
240
- """Validates a value as a proper Flow object.
241
-
242
- Args:
243
- value: A value to be set on the property.
244
-
245
- Raises:
246
- TypeError if the value is not an instance of Flow.
247
- """
248
- logger.info('validate: Got type %s', type(value))
249
- if value is not None and not isinstance(value, Flow):
250
- raise TypeError('Property %s must be convertible to a flow '
251
- 'instance; received: %s.' % (self._name, value))
252
-
253
-
254
- class CredentialsProperty(db.Property):
255
- """App Engine datastore Property for Credentials.
256
-
257
- Utility property that allows easy storage and retrieval of
258
- oath2client.Credentials
259
- """
260
-
261
- # Tell what the user type is.
262
- data_type = Credentials
263
-
264
- # For writing to datastore.
265
- def get_value_for_datastore(self, model_instance):
266
- logger.info("get: Got type " + str(type(model_instance)))
267
- cred = super(CredentialsProperty,
268
- self).get_value_for_datastore(model_instance)
269
- if cred is None:
270
- cred = ''
271
- else:
272
- cred = cred.to_json()
273
- return db.Blob(cred)
274
-
275
- # For reading from datastore.
276
- def make_value_from_datastore(self, value):
277
- logger.info("make: Got type " + str(type(value)))
278
- if value is None:
279
- return None
280
- if len(value) == 0:
281
- return None
282
- try:
283
- credentials = Credentials.new_from_json(value)
284
- except ValueError:
285
- credentials = None
286
- return credentials
287
-
288
- def validate(self, value):
289
- value = super(CredentialsProperty, self).validate(value)
290
- logger.info("validate: Got type " + str(type(value)))
291
- if value is not None and not isinstance(value, Credentials):
292
- raise db.BadValueError('Property %s must be convertible '
293
- 'to a Credentials instance (%s)' %
294
- (self.name, value))
295
- #if value is not None and not isinstance(value, Credentials):
296
- # return None
297
- return value
298
-
299
-
300
- if ndb is not None:
301
- # TODO(dhermes): Turn this into a JsonProperty and overhaul the Credentials
302
- # and subclass mechanics to use new_from_dict, to_dict,
303
- # from_dict, etc.
304
- class CredentialsNDBProperty(ndb.BlobProperty):
305
- """App Engine NDB datastore Property for Credentials.
306
-
307
- Serves the same purpose as the DB CredentialsProperty, but for NDB models.
308
- Since CredentialsProperty stores data as a blob and this inherits from
309
- BlobProperty, the data in the datastore will be the same as in the DB case.
310
-
311
- Utility property that allows easy storage and retrieval of Credentials and
312
- subclasses.
313
- """
314
- def _validate(self, value):
315
- """Validates a value as a proper credentials object.
316
-
317
- Args:
318
- value: A value to be set on the property.
319
-
320
- Raises:
321
- TypeError if the value is not an instance of Credentials.
322
- """
323
- logger.info('validate: Got type %s', type(value))
324
- if value is not None and not isinstance(value, Credentials):
325
- raise TypeError('Property %s must be convertible to a credentials '
326
- 'instance; received: %s.' % (self._name, value))
327
-
328
- def _to_base_type(self, value):
329
- """Converts our validated value to a JSON serialized string.
330
-
331
- Args:
332
- value: A value to be set in the datastore.
333
-
334
- Returns:
335
- A JSON serialized version of the credential, else '' if value is None.
336
- """
337
- if value is None:
338
- return ''
339
- else:
340
- return value.to_json()
341
-
342
- def _from_base_type(self, value):
343
- """Converts our stored JSON string back to the desired type.
344
-
345
- Args:
346
- value: A value from the datastore to be converted to the desired type.
347
-
348
- Returns:
349
- A deserialized Credentials (or subclass) object, else None if the
350
- value can't be parsed.
351
- """
352
- if not value:
353
- return None
354
- try:
355
- # Uses the from_json method of the implied class of value
356
- credentials = Credentials.new_from_json(value)
357
- except ValueError:
358
- credentials = None
359
- return credentials
360
-
361
-
362
- class StorageByKeyName(Storage):
363
- """Store and retrieve a credential to and from the App Engine datastore.
364
-
365
- This Storage helper presumes the Credentials have been stored as a
366
- CredentialsProperty or CredentialsNDBProperty on a datastore model class, and
367
- that entities are stored by key_name.
368
- """
369
-
370
- @util.positional(4)
371
- def __init__(self, model, key_name, property_name, cache=None, user=None):
372
- """Constructor for Storage.
373
-
374
- Args:
375
- model: db.Model or ndb.Model, model class
376
- key_name: string, key name for the entity that has the credentials
377
- property_name: string, name of the property that is a CredentialsProperty
378
- or CredentialsNDBProperty.
379
- cache: memcache, a write-through cache to put in front of the datastore.
380
- If the model you are using is an NDB model, using a cache will be
381
- redundant since the model uses an instance cache and memcache for you.
382
- user: users.User object, optional. Can be used to grab user ID as a
383
- key_name if no key name is specified.
384
- """
385
- if key_name is None:
386
- if user is None:
387
- raise ValueError('StorageByKeyName called with no key name or user.')
388
- key_name = user.user_id()
389
-
390
- self._model = model
391
- self._key_name = key_name
392
- self._property_name = property_name
393
- self._cache = cache
394
-
395
- def _is_ndb(self):
396
- """Determine whether the model of the instance is an NDB model.
397
-
398
- Returns:
399
- Boolean indicating whether or not the model is an NDB or DB model.
400
- """
401
- # issubclass will fail if one of the arguments is not a class, only need
402
- # worry about new-style classes since ndb and db models are new-style
403
- if isinstance(self._model, type):
404
- if ndb is not None and issubclass(self._model, ndb.Model):
405
- return True
406
- elif issubclass(self._model, db.Model):
407
- return False
408
-
409
- raise TypeError('Model class not an NDB or DB model: %s.' % (self._model,))
410
-
411
- def _get_entity(self):
412
- """Retrieve entity from datastore.
413
-
414
- Uses a different model method for db or ndb models.
415
-
416
- Returns:
417
- Instance of the model corresponding to the current storage object
418
- and stored using the key name of the storage object.
419
- """
420
- if self._is_ndb():
421
- return self._model.get_by_id(self._key_name)
422
- else:
423
- return self._model.get_by_key_name(self._key_name)
424
-
425
- def _delete_entity(self):
426
- """Delete entity from datastore.
427
-
428
- Attempts to delete using the key_name stored on the object, whether or not
429
- the given key is in the datastore.
430
- """
431
- if self._is_ndb():
432
- ndb.Key(self._model, self._key_name).delete()
433
- else:
434
- entity_key = db.Key.from_path(self._model.kind(), self._key_name)
435
- db.delete(entity_key)
436
-
437
- def locked_get(self):
438
- """Retrieve Credential from datastore.
439
-
440
- Returns:
441
- oauth2client.Credentials
442
- """
443
- credentials = None
444
- if self._cache:
445
- json = self._cache.get(self._key_name)
446
- if json:
447
- credentials = Credentials.new_from_json(json)
448
- if credentials is None:
449
- entity = self._get_entity()
450
- if entity is not None:
451
- credentials = getattr(entity, self._property_name)
452
- if self._cache:
453
- self._cache.set(self._key_name, credentials.to_json())
454
-
455
- if credentials and hasattr(credentials, 'set_store'):
456
- credentials.set_store(self)
457
- return credentials
458
-
459
- def locked_put(self, credentials):
460
- """Write a Credentials to the datastore.
461
-
462
- Args:
463
- credentials: Credentials, the credentials to store.
464
- """
465
- entity = self._model.get_or_insert(self._key_name)
466
- setattr(entity, self._property_name, credentials)
467
- entity.put()
468
- if self._cache:
469
- self._cache.set(self._key_name, credentials.to_json())
470
-
471
- def locked_delete(self):
472
- """Delete Credential from datastore."""
473
-
474
- if self._cache:
475
- self._cache.delete(self._key_name)
476
-
477
- self._delete_entity()
478
-
479
-
480
- class CredentialsModel(db.Model):
481
- """Storage for OAuth 2.0 Credentials
482
-
483
- Storage of the model is keyed by the user.user_id().
484
- """
485
- credentials = CredentialsProperty()
486
-
487
-
488
- if ndb is not None:
489
- class CredentialsNDBModel(ndb.Model):
490
- """NDB Model for storage of OAuth 2.0 Credentials
491
-
492
- Since this model uses the same kind as CredentialsModel and has a property
493
- which can serialize and deserialize Credentials correctly, it can be used
494
- interchangeably with a CredentialsModel to access, insert and delete the
495
- same entities. This simply provides an NDB model for interacting with the
496
- same data the DB model interacts with.
497
-
498
- Storage of the model is keyed by the user.user_id().
499
- """
500
- credentials = CredentialsNDBProperty()
501
-
502
- @classmethod
503
- def _get_kind(cls):
504
- """Return the kind name for this class."""
505
- return 'CredentialsModel'
506
-
507
-
508
- def _build_state_value(request_handler, user):
509
- """Composes the value for the 'state' parameter.
510
-
511
- Packs the current request URI and an XSRF token into an opaque string that
512
- can be passed to the authentication server via the 'state' parameter.
513
-
514
- Args:
515
- request_handler: webapp.RequestHandler, The request.
516
- user: google.appengine.api.users.User, The current user.
517
-
518
- Returns:
519
- The state value as a string.
520
- """
521
- uri = request_handler.request.url
522
- token = xsrfutil.generate_token(xsrf_secret_key(), user.user_id(),
523
- action_id=str(uri))
524
- return uri + ':' + token
525
-
526
-
527
- def _parse_state_value(state, user):
528
- """Parse the value of the 'state' parameter.
529
-
530
- Parses the value and validates the XSRF token in the state parameter.
531
-
532
- Args:
533
- state: string, The value of the state parameter.
534
- user: google.appengine.api.users.User, The current user.
535
-
536
- Raises:
537
- InvalidXsrfTokenError: if the XSRF token is invalid.
538
-
539
- Returns:
540
- The redirect URI.
541
- """
542
- uri, token = state.rsplit(':', 1)
543
- if not xsrfutil.validate_token(xsrf_secret_key(), token, user.user_id(),
544
- action_id=uri):
545
- raise InvalidXsrfTokenError()
546
-
547
- return uri
548
-
549
-
550
- class OAuth2Decorator(object):
551
- """Utility for making OAuth 2.0 easier.
552
-
553
- Instantiate and then use with oauth_required or oauth_aware
554
- as decorators on webapp.RequestHandler methods.
555
-
556
- Example:
557
-
558
- decorator = OAuth2Decorator(
559
- client_id='837...ent.com',
560
- client_secret='Qh...wwI',
561
- scope='https://www.googleapis.com/auth/plus')
562
-
563
-
564
- class MainHandler(webapp.RequestHandler):
565
-
566
- @decorator.oauth_required
567
- def get(self):
568
- http = decorator.http()
569
- # http is authorized with the user's Credentials and can be used
570
- # in API calls
571
-
572
- """
573
-
574
- def set_credentials(self, credentials):
575
- self._tls.credentials = credentials
576
-
577
- def get_credentials(self):
578
- """A thread local Credentials object.
579
-
580
- Returns:
581
- A client.Credentials object, or None if credentials hasn't been set in
582
- this thread yet, which may happen when calling has_credentials inside
583
- oauth_aware.
584
- """
585
- return getattr(self._tls, 'credentials', None)
586
-
587
- credentials = property(get_credentials, set_credentials)
588
-
589
- def set_flow(self, flow):
590
- self._tls.flow = flow
591
-
592
- def get_flow(self):
593
- """A thread local Flow object.
594
-
595
- Returns:
596
- A credentials.Flow object, or None if the flow hasn't been set in this
597
- thread yet, which happens in _create_flow() since Flows are created
598
- lazily.
599
- """
600
- return getattr(self._tls, 'flow', None)
601
-
602
- flow = property(get_flow, set_flow)
603
-
604
-
605
- @util.positional(4)
606
- def __init__(self, client_id, client_secret, scope,
607
- auth_uri=GOOGLE_AUTH_URI,
608
- token_uri=GOOGLE_TOKEN_URI,
609
- revoke_uri=GOOGLE_REVOKE_URI,
610
- user_agent=None,
611
- message=None,
612
- callback_path='/oauth2callback',
613
- token_response_param=None,
614
- _storage_class=StorageByKeyName,
615
- _credentials_class=CredentialsModel,
616
- _credentials_property_name='credentials',
617
- **kwargs):
618
-
619
- """Constructor for OAuth2Decorator
620
-
621
- Args:
622
- client_id: string, client identifier.
623
- client_secret: string client secret.
624
- scope: string or iterable of strings, scope(s) of the credentials being
625
- requested.
626
- auth_uri: string, URI for authorization endpoint. For convenience
627
- defaults to Google's endpoints but any OAuth 2.0 provider can be used.
628
- token_uri: string, URI for token endpoint. For convenience
629
- defaults to Google's endpoints but any OAuth 2.0 provider can be used.
630
- revoke_uri: string, URI for revoke endpoint. For convenience
631
- defaults to Google's endpoints but any OAuth 2.0 provider can be used.
632
- user_agent: string, User agent of your application, default to None.
633
- message: Message to display if there are problems with the OAuth 2.0
634
- configuration. The message may contain HTML and will be presented on the
635
- web interface for any method that uses the decorator.
636
- callback_path: string, The absolute path to use as the callback URI. Note
637
- that this must match up with the URI given when registering the
638
- application in the APIs Console.
639
- token_response_param: string. If provided, the full JSON response
640
- to the access token request will be encoded and included in this query
641
- parameter in the callback URI. This is useful with providers (e.g.
642
- wordpress.com) that include extra fields that the client may want.
643
- _storage_class: "Protected" keyword argument not typically provided to
644
- this constructor. A storage class to aid in storing a Credentials object
645
- for a user in the datastore. Defaults to StorageByKeyName.
646
- _credentials_class: "Protected" keyword argument not typically provided to
647
- this constructor. A db or ndb Model class to hold credentials. Defaults
648
- to CredentialsModel.
649
- _credentials_property_name: "Protected" keyword argument not typically
650
- provided to this constructor. A string indicating the name of the field
651
- on the _credentials_class where a Credentials object will be stored.
652
- Defaults to 'credentials'.
653
- **kwargs: dict, Keyword arguments are be passed along as kwargs to the
654
- OAuth2WebServerFlow constructor.
655
- """
656
- self._tls = threading.local()
657
- self.flow = None
658
- self.credentials = None
659
- self._client_id = client_id
660
- self._client_secret = client_secret
661
- self._scope = util.scopes_to_string(scope)
662
- self._auth_uri = auth_uri
663
- self._token_uri = token_uri
664
- self._revoke_uri = revoke_uri
665
- self._user_agent = user_agent
666
- self._kwargs = kwargs
667
- self._message = message
668
- self._in_error = False
669
- self._callback_path = callback_path
670
- self._token_response_param = token_response_param
671
- self._storage_class = _storage_class
672
- self._credentials_class = _credentials_class
673
- self._credentials_property_name = _credentials_property_name
674
-
675
- def _display_error_message(self, request_handler):
676
- request_handler.response.out.write('<html><body>')
677
- request_handler.response.out.write(_safe_html(self._message))
678
- request_handler.response.out.write('</body></html>')
679
-
680
- def oauth_required(self, method):
681
- """Decorator that starts the OAuth 2.0 dance.
682
-
683
- Starts the OAuth dance for the logged in user if they haven't already
684
- granted access for this application.
685
-
686
- Args:
687
- method: callable, to be decorated method of a webapp.RequestHandler
688
- instance.
689
- """
690
-
691
- def check_oauth(request_handler, *args, **kwargs):
692
- if self._in_error:
693
- self._display_error_message(request_handler)
694
- return
695
-
696
- user = users.get_current_user()
697
- # Don't use @login_decorator as this could be used in a POST request.
698
- if not user:
699
- request_handler.redirect(users.create_login_url(
700
- request_handler.request.uri))
701
- return
702
-
703
- self._create_flow(request_handler)
704
-
705
- # Store the request URI in 'state' so we can use it later
706
- self.flow.params['state'] = _build_state_value(request_handler, user)
707
- self.credentials = self._storage_class(
708
- self._credentials_class, None,
709
- self._credentials_property_name, user=user).get()
710
-
711
- if not self.has_credentials():
712
- return request_handler.redirect(self.authorize_url())
713
- try:
714
- resp = method(request_handler, *args, **kwargs)
715
- except AccessTokenRefreshError:
716
- return request_handler.redirect(self.authorize_url())
717
- finally:
718
- self.credentials = None
719
- return resp
720
-
721
- return check_oauth
722
-
723
- def _create_flow(self, request_handler):
724
- """Create the Flow object.
725
-
726
- The Flow is calculated lazily since we don't know where this app is
727
- running until it receives a request, at which point redirect_uri can be
728
- calculated and then the Flow object can be constructed.
729
-
730
- Args:
731
- request_handler: webapp.RequestHandler, the request handler.
732
- """
733
- if self.flow is None:
734
- redirect_uri = request_handler.request.relative_url(
735
- self._callback_path) # Usually /oauth2callback
736
- self.flow = OAuth2WebServerFlow(self._client_id, self._client_secret,
737
- self._scope, redirect_uri=redirect_uri,
738
- user_agent=self._user_agent,
739
- auth_uri=self._auth_uri,
740
- token_uri=self._token_uri,
741
- revoke_uri=self._revoke_uri,
742
- **self._kwargs)
743
-
744
- def oauth_aware(self, method):
745
- """Decorator that sets up for OAuth 2.0 dance, but doesn't do it.
746
-
747
- Does all the setup for the OAuth dance, but doesn't initiate it.
748
- This decorator is useful if you want to create a page that knows
749
- whether or not the user has granted access to this application.
750
- From within a method decorated with @oauth_aware the has_credentials()
751
- and authorize_url() methods can be called.
752
-
753
- Args:
754
- method: callable, to be decorated method of a webapp.RequestHandler
755
- instance.
756
- """
757
-
758
- def setup_oauth(request_handler, *args, **kwargs):
759
- if self._in_error:
760
- self._display_error_message(request_handler)
761
- return
762
-
763
- user = users.get_current_user()
764
- # Don't use @login_decorator as this could be used in a POST request.
765
- if not user:
766
- request_handler.redirect(users.create_login_url(
767
- request_handler.request.uri))
768
- return
769
-
770
- self._create_flow(request_handler)
771
-
772
- self.flow.params['state'] = _build_state_value(request_handler, user)
773
- self.credentials = self._storage_class(
774
- self._credentials_class, None,
775
- self._credentials_property_name, user=user).get()
776
- try:
777
- resp = method(request_handler, *args, **kwargs)
778
- finally:
779
- self.credentials = None
780
- return resp
781
- return setup_oauth
782
-
783
-
784
- def has_credentials(self):
785
- """True if for the logged in user there are valid access Credentials.
786
-
787
- Must only be called from with a webapp.RequestHandler subclassed method
788
- that had been decorated with either @oauth_required or @oauth_aware.
789
- """
790
- return self.credentials is not None and not self.credentials.invalid
791
-
792
- def authorize_url(self):
793
- """Returns the URL to start the OAuth dance.
794
-
795
- Must only be called from with a webapp.RequestHandler subclassed method
796
- that had been decorated with either @oauth_required or @oauth_aware.
797
- """
798
- url = self.flow.step1_get_authorize_url()
799
- return str(url)
800
-
801
- def http(self):
802
- """Returns an authorized http instance.
803
-
804
- Must only be called from within an @oauth_required decorated method, or
805
- from within an @oauth_aware decorated method where has_credentials()
806
- returns True.
807
- """
808
- return self.credentials.authorize(httplib2.Http())
809
-
810
- @property
811
- def callback_path(self):
812
- """The absolute path where the callback will occur.
813
-
814
- Note this is the absolute path, not the absolute URI, that will be
815
- calculated by the decorator at runtime. See callback_handler() for how this
816
- should be used.
817
-
818
- Returns:
819
- The callback path as a string.
820
- """
821
- return self._callback_path
822
-
823
-
824
- def callback_handler(self):
825
- """RequestHandler for the OAuth 2.0 redirect callback.
826
-
827
- Usage:
828
- app = webapp.WSGIApplication([
829
- ('/index', MyIndexHandler),
830
- ...,
831
- (decorator.callback_path, decorator.callback_handler())
832
- ])
833
-
834
- Returns:
835
- A webapp.RequestHandler that handles the redirect back from the
836
- server during the OAuth 2.0 dance.
837
- """
838
- decorator = self
839
-
840
- class OAuth2Handler(webapp.RequestHandler):
841
- """Handler for the redirect_uri of the OAuth 2.0 dance."""
842
-
843
- @login_required
844
- def get(self):
845
- error = self.request.get('error')
846
- if error:
847
- errormsg = self.request.get('error_description', error)
848
- self.response.out.write(
849
- 'The authorization request failed: %s' % _safe_html(errormsg))
850
- else:
851
- user = users.get_current_user()
852
- decorator._create_flow(self)
853
- credentials = decorator.flow.step2_exchange(self.request.params)
854
- decorator._storage_class(
855
- decorator._credentials_class, None,
856
- decorator._credentials_property_name, user=user).put(credentials)
857
- redirect_uri = _parse_state_value(str(self.request.get('state')),
858
- user)
859
-
860
- if decorator._token_response_param and credentials.token_response:
861
- resp_json = simplejson.dumps(credentials.token_response)
862
- redirect_uri = util._add_query_parameter(
863
- redirect_uri, decorator._token_response_param, resp_json)
864
-
865
- self.redirect(redirect_uri)
866
-
867
- return OAuth2Handler
868
-
869
- def callback_application(self):
870
- """WSGI application for handling the OAuth 2.0 redirect callback.
871
-
872
- If you need finer grained control use `callback_handler` which returns just
873
- the webapp.RequestHandler.
874
-
875
- Returns:
876
- A webapp.WSGIApplication that handles the redirect back from the
877
- server during the OAuth 2.0 dance.
878
- """
879
- return webapp.WSGIApplication([
880
- (self.callback_path, self.callback_handler())
881
- ])
882
-
883
-
884
- class OAuth2DecoratorFromClientSecrets(OAuth2Decorator):
885
- """An OAuth2Decorator that builds from a clientsecrets file.
886
-
887
- Uses a clientsecrets file as the source for all the information when
888
- constructing an OAuth2Decorator.
889
-
890
- Example:
891
-
892
- decorator = OAuth2DecoratorFromClientSecrets(
893
- os.path.join(os.path.dirname(__file__), 'client_secrets.json')
894
- scope='https://www.googleapis.com/auth/plus')
895
-
896
-
897
- class MainHandler(webapp.RequestHandler):
898
-
899
- @decorator.oauth_required
900
- def get(self):
901
- http = decorator.http()
902
- # http is authorized with the user's Credentials and can be used
903
- # in API calls
904
- """
905
-
906
- @util.positional(3)
907
- def __init__(self, filename, scope, message=None, cache=None):
908
- """Constructor
909
-
910
- Args:
911
- filename: string, File name of client secrets.
912
- scope: string or iterable of strings, scope(s) of the credentials being
913
- requested.
914
- message: string, A friendly string to display to the user if the
915
- clientsecrets file is missing or invalid. The message may contain HTML
916
- and will be presented on the web interface for any method that uses the
917
- decorator.
918
- cache: An optional cache service client that implements get() and set()
919
- methods. See clientsecrets.loadfile() for details.
920
- """
921
- client_type, client_info = clientsecrets.loadfile(filename, cache=cache)
922
- if client_type not in [
923
- clientsecrets.TYPE_WEB, clientsecrets.TYPE_INSTALLED]:
924
- raise InvalidClientSecretsError(
925
- 'OAuth2Decorator doesn\'t support this OAuth 2.0 flow.')
926
- constructor_kwargs = {
927
- 'auth_uri': client_info['auth_uri'],
928
- 'token_uri': client_info['token_uri'],
929
- 'message': message,
930
- }
931
- revoke_uri = client_info.get('revoke_uri')
932
- if revoke_uri is not None:
933
- constructor_kwargs['revoke_uri'] = revoke_uri
934
- super(OAuth2DecoratorFromClientSecrets, self).__init__(
935
- client_info['client_id'], client_info['client_secret'],
936
- scope, **constructor_kwargs)
937
- if message is not None:
938
- self._message = message
939
- else:
940
- self._message = 'Please configure your application for OAuth 2.0.'
941
-
942
-
943
- @util.positional(2)
944
- def oauth2decorator_from_clientsecrets(filename, scope,
945
- message=None, cache=None):
946
- """Creates an OAuth2Decorator populated from a clientsecrets file.
947
-
948
- Args:
949
- filename: string, File name of client secrets.
950
- scope: string or list of strings, scope(s) of the credentials being
951
- requested.
952
- message: string, A friendly string to display to the user if the
953
- clientsecrets file is missing or invalid. The message may contain HTML and
954
- will be presented on the web interface for any method that uses the
955
- decorator.
956
- cache: An optional cache service client that implements get() and set()
957
- methods. See clientsecrets.loadfile() for details.
958
-
959
- Returns: An OAuth2Decorator
960
-
961
- """
962
- return OAuth2DecoratorFromClientSecrets(filename, scope,
963
- message=message, cache=cache)