libv8 6.7.288.46.1 → 7.3.492.27.0beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (408) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -0
  3. data/CHANGELOG.md +4 -0
  4. data/README.md +2 -0
  5. data/ext/libv8/builder.rb +6 -2
  6. data/lib/libv8/version.rb +1 -1
  7. data/vendor/depot_tools/.gitattributes +1 -0
  8. data/vendor/depot_tools/.gitignore +7 -0
  9. data/vendor/depot_tools/CROS_OWNERS +5 -0
  10. data/vendor/depot_tools/OWNERS +12 -1
  11. data/vendor/depot_tools/PRESUBMIT.py +16 -9
  12. data/vendor/depot_tools/README.md +9 -2
  13. data/vendor/depot_tools/autoninja +14 -6
  14. data/vendor/depot_tools/autoninja.bat +11 -1
  15. data/vendor/depot_tools/autoninja.py +40 -18
  16. data/vendor/depot_tools/bb +12 -0
  17. data/vendor/depot_tools/bb.bat +7 -0
  18. data/vendor/depot_tools/bootstrap/win/manifest.txt +1 -1
  19. data/vendor/depot_tools/bootstrap/win/manifest_bleeding_edge.txt +1 -1
  20. data/vendor/depot_tools/bootstrap/win/win_tools.py +2 -1
  21. data/vendor/depot_tools/buildbucket.py +57 -4
  22. data/vendor/depot_tools/cipd +157 -44
  23. data/vendor/depot_tools/cipd.bat +51 -14
  24. data/vendor/depot_tools/cipd.ps1 +104 -42
  25. data/vendor/depot_tools/cipd_client_version +1 -1
  26. data/vendor/depot_tools/cipd_client_version.digests +21 -0
  27. data/vendor/depot_tools/cipd_manifest.txt +19 -6
  28. data/vendor/depot_tools/cipd_manifest.versions +318 -0
  29. data/vendor/depot_tools/clang_format.py +4 -4
  30. data/vendor/depot_tools/cpplint.py +44 -199
  31. data/vendor/depot_tools/dart_format.py +2 -2
  32. data/vendor/depot_tools/detect_host_arch.py +8 -3
  33. data/vendor/depot_tools/download_from_google_storage.py +47 -39
  34. data/vendor/depot_tools/fetch.py +30 -18
  35. data/vendor/depot_tools/fetch_configs/android_internal.py +34 -0
  36. data/vendor/depot_tools/fetch_configs/chromium.py +18 -1
  37. data/vendor/depot_tools/fetch_configs/config_util.py +4 -2
  38. data/vendor/depot_tools/fetch_configs/inspector_protocol.py +40 -0
  39. data/vendor/depot_tools/fetch_configs/node-ci.py +41 -0
  40. data/vendor/depot_tools/fix_encoding.py +3 -3
  41. data/vendor/depot_tools/gclient +1 -1
  42. data/vendor/depot_tools/gclient.py +415 -198
  43. data/vendor/depot_tools/gclient_eval.py +220 -171
  44. data/vendor/depot_tools/gclient_paths.py +142 -0
  45. data/vendor/depot_tools/gclient_scm.py +200 -51
  46. data/vendor/depot_tools/gclient_utils.py +88 -191
  47. data/vendor/depot_tools/gerrit_client.py +13 -0
  48. data/vendor/depot_tools/gerrit_util.py +158 -23
  49. data/vendor/depot_tools/git-nav-upstream +1 -1
  50. data/vendor/depot_tools/git_cache.py +77 -24
  51. data/vendor/depot_tools/git_cl.py +705 -1099
  52. data/vendor/depot_tools/git_common.py +9 -6
  53. data/vendor/depot_tools/git_map_branches.py +19 -2
  54. data/vendor/depot_tools/git_nav_downstream.py +3 -4
  55. data/vendor/depot_tools/git_rebase_update.py +14 -0
  56. data/vendor/depot_tools/git_reparent_branch.py +8 -2
  57. data/vendor/depot_tools/gn.py +38 -3
  58. data/vendor/depot_tools/gsutil.py +8 -3
  59. data/vendor/depot_tools/gsutil.py.bat +15 -0
  60. data/vendor/depot_tools/gsutil.vpython +16 -0
  61. data/vendor/depot_tools/infra/config/OWNERS +0 -1
  62. data/vendor/depot_tools/infra/config/recipes.cfg +3 -2
  63. data/vendor/depot_tools/lucicfg +12 -0
  64. data/vendor/depot_tools/lucicfg.bat +7 -0
  65. data/vendor/depot_tools/man/html/git-map-branches.html +34 -2
  66. data/vendor/depot_tools/man/html/git-new-branch.html +40 -32
  67. data/vendor/depot_tools/man/man1/git-map-branches.1 +24 -5
  68. data/vendor/depot_tools/man/man1/git-new-branch.1 +35 -27
  69. data/vendor/depot_tools/man/src/git-map-branches.demo.1.sh +1 -0
  70. data/vendor/depot_tools/man/src/git-map-branches.txt +10 -0
  71. data/vendor/depot_tools/man/src/git-new-branch.demo.1.sh +9 -4
  72. data/vendor/depot_tools/man/src/git-new-branch.txt +1 -1
  73. data/vendor/depot_tools/metrics.README.md +98 -0
  74. data/vendor/depot_tools/metrics.py +296 -0
  75. data/vendor/depot_tools/metrics_utils.py +303 -0
  76. data/vendor/depot_tools/my_activity.py +91 -29
  77. data/vendor/depot_tools/ninja +1 -1
  78. data/vendor/depot_tools/ninjalog.README.md +64 -0
  79. data/vendor/depot_tools/ninjalog_uploader.py +232 -0
  80. data/vendor/depot_tools/ninjalog_uploader_wrapper.py +116 -0
  81. data/vendor/depot_tools/owners.py +30 -13
  82. data/vendor/depot_tools/owners_finder.py +5 -2
  83. data/vendor/depot_tools/presubmit_canned_checks.py +188 -29
  84. data/vendor/depot_tools/presubmit_support.py +18 -41
  85. data/vendor/depot_tools/pylintrc +23 -19
  86. data/vendor/depot_tools/recipes/OWNERS +2 -0
  87. data/vendor/depot_tools/recipes/README.recipes.md +344 -151
  88. data/vendor/depot_tools/recipes/recipe_modules/bot_update/OWNERS +2 -0
  89. data/vendor/depot_tools/recipes/recipe_modules/bot_update/__init__.py +2 -16
  90. data/vendor/depot_tools/recipes/recipe_modules/bot_update/api.py +141 -99
  91. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic.json +5 -8
  92. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_luci.json +5 -8
  93. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/basic_with_branch_heads.json +6 -98
  94. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/clobber.json +4 -9
  95. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/deprecated_got_revision_mapping.json +45 -5
  96. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_rebase_patch_ref.json +4 -9
  97. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/gerrit_no_reset.json +4 -9
  98. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob.json → input_commit_with_id_without_repo.json} +6 -11
  99. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{tryjob_empty_revision.json → multiple_patch_refs.json} +8 -9
  100. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/no_apply_patch_on_gclient.json +19 -29
  101. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/{trychange.json → refs.json} +4 -9
  102. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/reset_root_solution_revision.json +4 -9
  103. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail.json +51 -6
  104. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch.json +50 -6
  105. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_fail_patch_download.json +51 -6
  106. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle.json +17 -25
  107. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_branch_heads.json +17 -25
  108. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_feature_branch.json +18 -26
  109. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8_feature_branch.json +18 -26
  110. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_webrtc.json +26 -28
  111. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8.json +45 -5
  112. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_v8_head_by_default.json +17 -25
  113. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/unrecognized_commit_repo.json +13 -0
  114. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name.json +13 -152
  115. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_tags.json +4 -9
  116. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.py +185 -202
  117. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/bot_update.py +52 -157
  118. data/vendor/depot_tools/recipes/recipe_modules/bot_update/test_api.py +5 -14
  119. data/vendor/depot_tools/recipes/recipe_modules/bot_update/tests/ensure_checkout.py +34 -0
  120. data/vendor/depot_tools/recipes/recipe_modules/cipd/api.py +14 -2
  121. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic.json +4 -5
  122. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/basic_pkg.json +4 -5
  123. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-failed.json +7 -5
  124. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/describe-many-instances.json +4 -5
  125. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/mac64.json +4 -5
  126. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_file.json +9 -3
  127. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_mode.json +9 -3
  128. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/pkg_bad_verfile.json +9 -3
  129. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/full.expected/win64.json +4 -5
  130. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk arch.json +2 -3
  131. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/junk bits.json +2 -3
  132. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_32.json +2 -3
  133. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_arm_64.json +2 -3
  134. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_32.json +2 -3
  135. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_intel_64.json +2 -3
  136. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/linux_mips_64.json +2 -3
  137. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/mac_intel_64.json +2 -3
  138. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_32.json +2 -3
  139. data/vendor/depot_tools/recipes/recipe_modules/cipd/examples/platform_suffix.expected/win_intel_64.json +2 -3
  140. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/api.py +13 -8
  141. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic.json +18 -12
  142. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/basic_luci.json +18 -12
  143. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.expected/win.json +18 -12
  144. data/vendor/depot_tools/recipes/recipe_modules/depot_tools/examples/full.py +3 -0
  145. data/vendor/depot_tools/recipes/recipe_modules/gclient/__init__.py +1 -0
  146. data/vendor/depot_tools/recipes/recipe_modules/gclient/api.py +58 -46
  147. data/vendor/depot_tools/recipes/recipe_modules/gclient/config.py +65 -22
  148. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/basic.json +20 -21
  149. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/buildbot.json +20 -21
  150. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/revision.json +20 -21
  151. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.expected/tryserver.json +20 -21
  152. data/vendor/depot_tools/recipes/recipe_modules/gclient/examples/full.py +5 -2
  153. data/vendor/depot_tools/recipes/recipe_modules/gclient/tests/patch_project.py +62 -14
  154. data/vendor/depot_tools/recipes/recipe_modules/gerrit/api.py +24 -38
  155. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.expected/basic.json +56 -50
  156. data/vendor/depot_tools/recipes/recipe_modules/gerrit/examples/full.py +15 -9
  157. data/vendor/depot_tools/recipes/recipe_modules/git/__init__.py +4 -1
  158. data/vendor/depot_tools/recipes/recipe_modules/git/api.py +34 -22
  159. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic.json +5 -6
  160. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_branch.json +5 -6
  161. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_file_name.json +5 -6
  162. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_hash.json +5 -6
  163. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_luci.json +222 -0
  164. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_ref.json +5 -6
  165. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_submodule_update_force.json +5 -6
  166. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/basic_tags.json +224 -0
  167. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/can_fail_build.json +10 -6
  168. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cannot_fail_build.json +5 -7
  169. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/cat-file_test.json +5 -6
  170. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_delta.json +5 -6
  171. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_failed.json +5 -7
  172. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output.json +5 -6
  173. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/count-objects_with_bad_output_fails_build.json +10 -5
  174. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/curl_trace_file.json +5 -6
  175. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/git-cache-checkout.json +8 -9
  176. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/platform_win.json +5 -6
  177. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/rebase_failed.json +12 -8
  178. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/remote_not_origin.json +5 -6
  179. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.expected/set_got_revision.json +5 -6
  180. data/vendor/depot_tools/recipes/recipe_modules/git/examples/full.py +27 -11
  181. data/vendor/depot_tools/recipes/recipe_modules/git_cl/api.py +1 -1
  182. data/vendor/depot_tools/recipes/recipe_modules/git_cl/examples/full.expected/basic.json +12 -13
  183. data/vendor/depot_tools/recipes/recipe_modules/gitiles/__init__.py +5 -0
  184. data/vendor/depot_tools/recipes/recipe_modules/gitiles/api.py +120 -5
  185. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.expected/basic.json +45 -3
  186. data/vendor/depot_tools/recipes/recipe_modules/gitiles/examples/full.py +25 -0
  187. data/vendor/depot_tools/recipes/recipe_modules/gitiles/resources/gerrit_client.py +56 -4
  188. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.expected/basic.json +6 -0
  189. data/vendor/depot_tools/recipes/recipe_modules/gitiles/tests/parse_repo_url.py +49 -0
  190. data/vendor/depot_tools/recipes/recipe_modules/gsutil/api.py +24 -13
  191. data/vendor/depot_tools/recipes/recipe_modules/gsutil/examples/full.expected/basic.json +13 -14
  192. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/basic.json +2 -3
  193. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_linux.json +2 -3
  194. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_mac.json +2 -3
  195. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_buildbot_win.json +2 -3
  196. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_linux.json +2 -3
  197. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_mac.json +2 -3
  198. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_generic_win.json +2 -3
  199. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_linux.json +2 -3
  200. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_mac.json +2 -3
  201. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/examples/full.expected/paths_kitchen_win.json +2 -3
  202. data/vendor/depot_tools/recipes/recipe_modules/infra_paths/path_config.py +1 -2
  203. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/__init__.py +35 -0
  204. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/api.py +116 -0
  205. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/linux.json +22 -0
  206. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/mac.json +82 -0
  207. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.expected/win.json +22 -0
  208. data/vendor/depot_tools/recipes/recipe_modules/osx_sdk/examples/full.py +23 -0
  209. data/vendor/depot_tools/recipes/recipe_modules/presubmit/__init__.py +1 -0
  210. data/vendor/depot_tools/recipes/recipe_modules/presubmit/api.py +2 -7
  211. data/vendor/depot_tools/recipes/recipe_modules/presubmit/examples/full.expected/basic.json +7 -6
  212. data/vendor/depot_tools/recipes/recipe_modules/tryserver/__init__.py +1 -0
  213. data/vendor/depot_tools/recipes/recipe_modules/tryserver/api.py +117 -8
  214. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/basic_tags.json +4 -5
  215. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/set_failure_hash_with_no_steps.json +7 -4
  216. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch.json +98 -7
  217. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_gerrit_patch_and_target_ref.json +147 -0
  218. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch.json +8 -5
  219. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_git_patch_luci.json +8 -5
  220. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch.json +9 -6
  221. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.expected/with_wrong_patch_new.json +9 -6
  222. data/vendor/depot_tools/recipes/recipe_modules/tryserver/examples/full.py +27 -2
  223. data/vendor/depot_tools/recipes/recipe_modules/tryserver/test_api.py +14 -0
  224. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/__init__.py +25 -0
  225. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/api.py +137 -0
  226. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/linux.json +22 -0
  227. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/mac.json +22 -0
  228. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.expected/win.json +107 -0
  229. data/vendor/depot_tools/recipes/recipe_modules/windows_sdk/examples/full.py +26 -0
  230. data/vendor/depot_tools/recipes/recipes.py +37 -27
  231. data/vendor/depot_tools/recipes/recipes/fetch_end_to_end_test.expected/basic.json +7 -10
  232. data/vendor/depot_tools/repo +34 -8
  233. data/vendor/depot_tools/roll_dep.py +52 -49
  234. data/vendor/depot_tools/scm.py +38 -23
  235. data/vendor/depot_tools/setup_color.py +4 -2
  236. data/vendor/depot_tools/split_cl.py +32 -4
  237. data/vendor/depot_tools/subprocess2.py +22 -4
  238. data/vendor/depot_tools/third_party/httplib2/README.chromium +2 -2
  239. data/vendor/depot_tools/third_party/httplib2/__init__.py +242 -158
  240. data/vendor/depot_tools/third_party/httplib2/cacerts.txt +57 -44
  241. data/vendor/depot_tools/third_party/httplib2/socks.py +15 -5
  242. data/vendor/depot_tools/third_party/logilab/README.chromium +2 -4
  243. data/vendor/depot_tools/third_party/logilab/astroid/README.chromium +2 -1
  244. data/vendor/depot_tools/third_party/logilab/astroid/__init__.py +10 -5
  245. data/vendor/depot_tools/third_party/logilab/astroid/__pkginfo__.py +5 -5
  246. data/vendor/depot_tools/third_party/logilab/astroid/arguments.py +233 -0
  247. data/vendor/depot_tools/third_party/logilab/astroid/as_string.py +82 -33
  248. data/vendor/depot_tools/third_party/logilab/astroid/bases.py +137 -153
  249. data/vendor/depot_tools/third_party/logilab/astroid/brain/{builtin_inference.py → brain_builtin_inference.py} +117 -26
  250. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_dateutil.py +15 -0
  251. data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2gi.py → brain_gi.py} +48 -8
  252. data/vendor/depot_tools/third_party/logilab/astroid/brain/{py2mechanize.py → brain_mechanize.py} +0 -0
  253. data/vendor/depot_tools/third_party/logilab/astroid/brain/{pynose.py → brain_nose.py} +4 -1
  254. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_numpy.py +62 -0
  255. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_pytest.py +76 -0
  256. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_qt.py +44 -0
  257. data/vendor/depot_tools/third_party/logilab/astroid/brain/{pysix_moves.py → brain_six.py} +28 -1
  258. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_ssl.py +65 -0
  259. data/vendor/depot_tools/third_party/logilab/astroid/brain/brain_stdlib.py +473 -0
  260. data/vendor/depot_tools/third_party/logilab/astroid/builder.py +104 -81
  261. data/vendor/depot_tools/third_party/logilab/astroid/context.py +81 -0
  262. data/vendor/depot_tools/third_party/logilab/astroid/decorators.py +75 -0
  263. data/vendor/depot_tools/third_party/logilab/astroid/exceptions.py +20 -0
  264. data/vendor/depot_tools/third_party/logilab/astroid/inference.py +137 -183
  265. data/vendor/depot_tools/third_party/logilab/astroid/manager.py +45 -169
  266. data/vendor/depot_tools/third_party/logilab/astroid/mixins.py +37 -14
  267. data/vendor/depot_tools/third_party/logilab/astroid/modutils.py +112 -41
  268. data/vendor/depot_tools/third_party/logilab/astroid/node_classes.py +243 -156
  269. data/vendor/depot_tools/third_party/logilab/astroid/nodes.py +35 -22
  270. data/vendor/depot_tools/third_party/logilab/astroid/objects.py +186 -0
  271. data/vendor/depot_tools/third_party/logilab/astroid/protocols.py +157 -102
  272. data/vendor/depot_tools/third_party/logilab/astroid/raw_building.py +32 -8
  273. data/vendor/depot_tools/third_party/logilab/astroid/rebuilder.py +372 -309
  274. data/vendor/depot_tools/third_party/logilab/astroid/scoped_nodes.py +652 -420
  275. data/vendor/depot_tools/third_party/logilab/astroid/test_utils.py +4 -21
  276. data/vendor/depot_tools/third_party/logilab/astroid/transforms.py +96 -0
  277. data/vendor/depot_tools/third_party/logilab/astroid/util.py +89 -0
  278. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/LICENSE +19 -0
  279. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/README.chromium +11 -0
  280. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/__init__.py +20 -0
  281. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/cext.c +1421 -0
  282. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/compat.py +9 -0
  283. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/simple.py +246 -0
  284. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/slots.py +414 -0
  285. data/vendor/depot_tools/third_party/logilab/lazy_object_proxy/utils.py +13 -0
  286. data/vendor/depot_tools/third_party/logilab/wrapt/LICENSE +24 -0
  287. data/vendor/depot_tools/third_party/logilab/wrapt/README.chromium +11 -0
  288. data/vendor/depot_tools/third_party/logilab/wrapt/__init__.py +19 -0
  289. data/vendor/depot_tools/third_party/logilab/wrapt/_wrappers.c +2729 -0
  290. data/vendor/depot_tools/third_party/logilab/wrapt/arguments.py +96 -0
  291. data/vendor/depot_tools/third_party/logilab/wrapt/decorators.py +512 -0
  292. data/vendor/depot_tools/third_party/logilab/wrapt/importer.py +228 -0
  293. data/vendor/depot_tools/third_party/logilab/wrapt/wrappers.py +901 -0
  294. data/vendor/depot_tools/third_party/pylint/README.chromium +2 -25
  295. data/vendor/depot_tools/third_party/pylint/__pkginfo__.py +13 -3
  296. data/vendor/depot_tools/third_party/pylint/checkers/__init__.py +1 -2
  297. data/vendor/depot_tools/third_party/pylint/checkers/async.py +82 -0
  298. data/vendor/depot_tools/third_party/pylint/checkers/base.py +893 -119
  299. data/vendor/depot_tools/third_party/pylint/checkers/classes.py +342 -204
  300. data/vendor/depot_tools/third_party/pylint/checkers/design_analysis.py +51 -34
  301. data/vendor/depot_tools/third_party/pylint/checkers/exceptions.py +84 -47
  302. data/vendor/depot_tools/third_party/pylint/checkers/format.py +55 -30
  303. data/vendor/depot_tools/third_party/pylint/checkers/imports.py +314 -73
  304. data/vendor/depot_tools/third_party/pylint/checkers/logging.py +10 -8
  305. data/vendor/depot_tools/third_party/pylint/checkers/misc.py +2 -1
  306. data/vendor/depot_tools/third_party/pylint/checkers/newstyle.py +45 -48
  307. data/vendor/depot_tools/third_party/pylint/checkers/python3.py +31 -21
  308. data/vendor/depot_tools/third_party/pylint/checkers/raw_metrics.py +3 -3
  309. data/vendor/depot_tools/third_party/pylint/checkers/similar.py +4 -5
  310. data/vendor/depot_tools/third_party/pylint/checkers/spelling.py +24 -10
  311. data/vendor/depot_tools/third_party/pylint/checkers/stdlib.py +120 -56
  312. data/vendor/depot_tools/third_party/pylint/checkers/strings.py +38 -35
  313. data/vendor/depot_tools/third_party/pylint/checkers/typecheck.py +485 -138
  314. data/vendor/depot_tools/third_party/pylint/checkers/utils.py +319 -142
  315. data/vendor/depot_tools/third_party/pylint/checkers/variables.py +329 -207
  316. data/vendor/depot_tools/third_party/pylint/config.py +739 -76
  317. data/vendor/depot_tools/third_party/pylint/epylint.py +9 -5
  318. data/vendor/depot_tools/third_party/pylint/extensions/__init__.py +0 -0
  319. data/vendor/depot_tools/third_party/pylint/extensions/check_docs.py +311 -0
  320. data/vendor/depot_tools/third_party/pylint/extensions/check_elif.py +62 -0
  321. data/vendor/depot_tools/third_party/{logilab/common → pylint}/graph.py +30 -133
  322. data/vendor/depot_tools/third_party/pylint/gui.py +2 -2
  323. data/vendor/depot_tools/third_party/pylint/interfaces.py +21 -3
  324. data/vendor/depot_tools/third_party/pylint/lint.py +123 -140
  325. data/vendor/depot_tools/third_party/pylint/pyreverse/diadefslib.py +10 -13
  326. data/vendor/depot_tools/third_party/pylint/pyreverse/diagrams.py +15 -4
  327. data/vendor/depot_tools/third_party/pylint/pyreverse/inspector.py +372 -0
  328. data/vendor/depot_tools/third_party/pylint/pyreverse/main.py +30 -7
  329. data/vendor/depot_tools/third_party/pylint/pyreverse/utils.py +80 -2
  330. data/vendor/depot_tools/third_party/{logilab/common → pylint/pyreverse}/vcgutils.py +19 -37
  331. data/vendor/depot_tools/third_party/pylint/pyreverse/writer.py +3 -4
  332. data/vendor/depot_tools/third_party/pylint/reporters/__init__.py +34 -18
  333. data/vendor/depot_tools/third_party/pylint/reporters/guireporter.py +1 -1
  334. data/vendor/depot_tools/third_party/pylint/reporters/html.py +10 -3
  335. data/vendor/depot_tools/third_party/pylint/reporters/json.py +10 -4
  336. data/vendor/depot_tools/third_party/pylint/reporters/text.py +94 -3
  337. data/vendor/depot_tools/third_party/pylint/reporters/ureports/__init__.py +106 -0
  338. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/html_writer.py +17 -57
  339. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/nodes.py +52 -74
  340. data/vendor/depot_tools/third_party/{logilab/common → pylint/reporters}/ureports/text_writer.py +14 -60
  341. data/vendor/depot_tools/third_party/pylint/testutils.py +22 -20
  342. data/vendor/depot_tools/third_party/pylint/utils.py +268 -44
  343. data/vendor/depot_tools/third_party/repo/progress.py +42 -0
  344. data/vendor/depot_tools/update_depot_tools +1 -1
  345. data/vendor/depot_tools/upload_metrics.py +25 -0
  346. data/vendor/depot_tools/win_toolchain/get_toolchain_if_necessary.py +45 -15
  347. data/vendor/depot_tools/win_toolchain/package_from_installed.py +71 -24
  348. data/vendor/depot_tools/yapf +1 -1
  349. data/vendor/depot_tools/yapf.bat +1 -1
  350. metadata +92 -77
  351. data/vendor/depot_tools/git-crsync +0 -3
  352. data/vendor/depot_tools/infra/config/cq.cfg +0 -32
  353. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref.json +0 -29
  354. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/apply_gerrit_ref_custom.json +0 -29
  355. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/buildbot.json +0 -105
  356. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/shallow.json +0 -195
  357. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_angle_deprecated.json +0 -248
  358. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/tryjob_gerrit_v8.json +0 -248
  359. data/vendor/depot_tools/recipes/recipe_modules/bot_update/examples/full.expected/with_manifest_name_no_patch.json +0 -105
  360. data/vendor/depot_tools/recipes/recipe_modules/bot_update/resources/apply_gerrit.py +0 -33
  361. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2pytest.py +0 -31
  362. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2qt4.py +0 -22
  363. data/vendor/depot_tools/third_party/logilab/astroid/brain/py2stdlib.py +0 -334
  364. data/vendor/depot_tools/third_party/logilab/astroid/inspector.py +0 -273
  365. data/vendor/depot_tools/third_party/logilab/astroid/utils.py +0 -239
  366. data/vendor/depot_tools/third_party/logilab/common/LICENSE.txt +0 -339
  367. data/vendor/depot_tools/third_party/logilab/common/README.chromium +0 -11
  368. data/vendor/depot_tools/third_party/logilab/common/__init__.py +0 -175
  369. data/vendor/depot_tools/third_party/logilab/common/__pkginfo__.py +0 -57
  370. data/vendor/depot_tools/third_party/logilab/common/cache.py +0 -114
  371. data/vendor/depot_tools/third_party/logilab/common/changelog.py +0 -238
  372. data/vendor/depot_tools/third_party/logilab/common/clcommands.py +0 -334
  373. data/vendor/depot_tools/third_party/logilab/common/cli.py +0 -211
  374. data/vendor/depot_tools/third_party/logilab/common/compat.py +0 -78
  375. data/vendor/depot_tools/third_party/logilab/common/configuration.py +0 -1105
  376. data/vendor/depot_tools/third_party/logilab/common/contexts.py +0 -5
  377. data/vendor/depot_tools/third_party/logilab/common/corbautils.py +0 -117
  378. data/vendor/depot_tools/third_party/logilab/common/daemon.py +0 -101
  379. data/vendor/depot_tools/third_party/logilab/common/date.py +0 -335
  380. data/vendor/depot_tools/third_party/logilab/common/dbf.py +0 -231
  381. data/vendor/depot_tools/third_party/logilab/common/debugger.py +0 -214
  382. data/vendor/depot_tools/third_party/logilab/common/decorators.py +0 -281
  383. data/vendor/depot_tools/third_party/logilab/common/deprecation.py +0 -189
  384. data/vendor/depot_tools/third_party/logilab/common/fileutils.py +0 -404
  385. data/vendor/depot_tools/third_party/logilab/common/interface.py +0 -71
  386. data/vendor/depot_tools/third_party/logilab/common/logging_ext.py +0 -195
  387. data/vendor/depot_tools/third_party/logilab/common/modutils.py +0 -702
  388. data/vendor/depot_tools/third_party/logilab/common/optik_ext.py +0 -392
  389. data/vendor/depot_tools/third_party/logilab/common/optparser.py +0 -92
  390. data/vendor/depot_tools/third_party/logilab/common/proc.py +0 -277
  391. data/vendor/depot_tools/third_party/logilab/common/pyro_ext.py +0 -180
  392. data/vendor/depot_tools/third_party/logilab/common/pytest.py +0 -1199
  393. data/vendor/depot_tools/third_party/logilab/common/registry.py +0 -1119
  394. data/vendor/depot_tools/third_party/logilab/common/shellutils.py +0 -462
  395. data/vendor/depot_tools/third_party/logilab/common/sphinx_ext.py +0 -87
  396. data/vendor/depot_tools/third_party/logilab/common/sphinxutils.py +0 -122
  397. data/vendor/depot_tools/third_party/logilab/common/table.py +0 -929
  398. data/vendor/depot_tools/third_party/logilab/common/tasksqueue.py +0 -101
  399. data/vendor/depot_tools/third_party/logilab/common/testlib.py +0 -1392
  400. data/vendor/depot_tools/third_party/logilab/common/textutils.py +0 -537
  401. data/vendor/depot_tools/third_party/logilab/common/tree.py +0 -369
  402. data/vendor/depot_tools/third_party/logilab/common/umessage.py +0 -194
  403. data/vendor/depot_tools/third_party/logilab/common/ureports/__init__.py +0 -172
  404. data/vendor/depot_tools/third_party/logilab/common/ureports/docbook_writer.py +0 -140
  405. data/vendor/depot_tools/third_party/logilab/common/urllib2ext.py +0 -89
  406. data/vendor/depot_tools/third_party/logilab/common/visitor.py +0 -109
  407. data/vendor/depot_tools/third_party/logilab/common/xmlrpcutils.py +0 -131
  408. data/vendor/depot_tools/third_party/logilab/common/xmlutils.py +0 -61
@@ -0,0 +1,96 @@
1
+ # This is a copy of the inspect.getcallargs() function from Python 2.7
2
+ # so we can provide it for use under Python 2.6. As the code in this
3
+ # file derives from the Python distribution, it falls under the version
4
+ # of the PSF license used for Python 2.7.
5
+
6
+ from inspect import getargspec, ismethod
7
+ import sys
8
+
9
+ def getcallargs(func, *positional, **named):
10
+ """Get the mapping of arguments to values.
11
+
12
+ A dict is returned, with keys the function argument names (including the
13
+ names of the * and ** arguments, if any), and values the respective bound
14
+ values from 'positional' and 'named'."""
15
+ args, varargs, varkw, defaults = getargspec(func)
16
+ f_name = func.__name__
17
+ arg2value = {}
18
+
19
+ # The following closures are basically because of tuple parameter unpacking.
20
+ assigned_tuple_params = []
21
+ def assign(arg, value):
22
+ if isinstance(arg, str):
23
+ arg2value[arg] = value
24
+ else:
25
+ assigned_tuple_params.append(arg)
26
+ value = iter(value)
27
+ for i, subarg in enumerate(arg):
28
+ try:
29
+ subvalue = next(value)
30
+ except StopIteration:
31
+ raise ValueError('need more than %d %s to unpack' %
32
+ (i, 'values' if i > 1 else 'value'))
33
+ assign(subarg, subvalue)
34
+ try:
35
+ next(value)
36
+ except StopIteration:
37
+ pass
38
+ else:
39
+ raise ValueError('too many values to unpack')
40
+ def is_assigned(arg):
41
+ if isinstance(arg, str):
42
+ return arg in arg2value
43
+ return arg in assigned_tuple_params
44
+ if ismethod(func) and func.im_self is not None:
45
+ # implicit 'self' (or 'cls' for classmethods) argument
46
+ positional = (func.im_self,) + positional
47
+ num_pos = len(positional)
48
+ num_total = num_pos + len(named)
49
+ num_args = len(args)
50
+ num_defaults = len(defaults) if defaults else 0
51
+ for arg, value in zip(args, positional):
52
+ assign(arg, value)
53
+ if varargs:
54
+ if num_pos > num_args:
55
+ assign(varargs, positional[-(num_pos-num_args):])
56
+ else:
57
+ assign(varargs, ())
58
+ elif 0 < num_args < num_pos:
59
+ raise TypeError('%s() takes %s %d %s (%d given)' % (
60
+ f_name, 'at most' if defaults else 'exactly', num_args,
61
+ 'arguments' if num_args > 1 else 'argument', num_total))
62
+ elif num_args == 0 and num_total:
63
+ if varkw:
64
+ if num_pos:
65
+ # XXX: We should use num_pos, but Python also uses num_total:
66
+ raise TypeError('%s() takes exactly 0 arguments '
67
+ '(%d given)' % (f_name, num_total))
68
+ else:
69
+ raise TypeError('%s() takes no arguments (%d given)' %
70
+ (f_name, num_total))
71
+ for arg in args:
72
+ if isinstance(arg, str) and arg in named:
73
+ if is_assigned(arg):
74
+ raise TypeError("%s() got multiple values for keyword "
75
+ "argument '%s'" % (f_name, arg))
76
+ else:
77
+ assign(arg, named.pop(arg))
78
+ if defaults: # fill in any missing values with the defaults
79
+ for arg, value in zip(args[-num_defaults:], defaults):
80
+ if not is_assigned(arg):
81
+ assign(arg, value)
82
+ if varkw:
83
+ assign(varkw, named)
84
+ elif named:
85
+ unexpected = next(iter(named))
86
+ if isinstance(unexpected, unicode):
87
+ unexpected = unexpected.encode(sys.getdefaultencoding(), 'replace')
88
+ raise TypeError("%s() got an unexpected keyword argument '%s'" %
89
+ (f_name, unexpected))
90
+ unassigned = num_args - len([arg for arg in args if is_assigned(arg)])
91
+ if unassigned:
92
+ num_required = num_args - num_defaults
93
+ raise TypeError('%s() takes %s %d %s (%d given)' % (
94
+ f_name, 'at least' if defaults else 'exactly', num_required,
95
+ 'arguments' if num_required > 1 else 'argument', num_total))
96
+ return arg2value
@@ -0,0 +1,512 @@
1
+ """This module implements decorators for implementing other decorators
2
+ as well as some commonly used decorators.
3
+
4
+ """
5
+
6
+ import sys
7
+
8
+ PY2 = sys.version_info[0] == 2
9
+ PY3 = sys.version_info[0] == 3
10
+
11
+ if PY3:
12
+ string_types = str,
13
+
14
+ import builtins
15
+ exec_ = getattr(builtins, "exec")
16
+ del builtins
17
+
18
+ else:
19
+ string_types = basestring,
20
+
21
+ def exec_(_code_, _globs_=None, _locs_=None):
22
+ """Execute code in a namespace."""
23
+ if _globs_ is None:
24
+ frame = sys._getframe(1)
25
+ _globs_ = frame.f_globals
26
+ if _locs_ is None:
27
+ _locs_ = frame.f_locals
28
+ del frame
29
+ elif _locs_ is None:
30
+ _locs_ = _globs_
31
+ exec("""exec _code_ in _globs_, _locs_""")
32
+
33
+ from functools import partial
34
+ from inspect import ismethod, isclass, formatargspec
35
+ from collections import namedtuple
36
+ from threading import Lock, RLock
37
+
38
+ try:
39
+ from inspect import signature
40
+ except ImportError:
41
+ pass
42
+
43
+ from .wrappers import (FunctionWrapper, BoundFunctionWrapper, ObjectProxy,
44
+ CallableObjectProxy)
45
+
46
+ # Adapter wrapper for the wrapped function which will overlay certain
47
+ # properties from the adapter function onto the wrapped function so that
48
+ # functions such as inspect.getargspec(), inspect.getfullargspec(),
49
+ # inspect.signature() and inspect.getsource() return the correct results
50
+ # one would expect.
51
+
52
+ class _AdapterFunctionCode(CallableObjectProxy):
53
+
54
+ def __init__(self, wrapped_code, adapter_code):
55
+ super(_AdapterFunctionCode, self).__init__(wrapped_code)
56
+ self._self_adapter_code = adapter_code
57
+
58
+ @property
59
+ def co_argcount(self):
60
+ return self._self_adapter_code.co_argcount
61
+
62
+ @property
63
+ def co_code(self):
64
+ return self._self_adapter_code.co_code
65
+
66
+ @property
67
+ def co_flags(self):
68
+ return self._self_adapter_code.co_flags
69
+
70
+ @property
71
+ def co_kwonlyargcount(self):
72
+ return self._self_adapter_code.co_kwonlyargcount
73
+
74
+ @property
75
+ def co_varnames(self):
76
+ return self._self_adapter_code.co_varnames
77
+
78
+ class _AdapterFunctionSurrogate(CallableObjectProxy):
79
+
80
+ def __init__(self, wrapped, adapter):
81
+ super(_AdapterFunctionSurrogate, self).__init__(wrapped)
82
+ self._self_adapter = adapter
83
+
84
+ @property
85
+ def __code__(self):
86
+ return _AdapterFunctionCode(self.__wrapped__.__code__,
87
+ self._self_adapter.__code__)
88
+
89
+ @property
90
+ def __defaults__(self):
91
+ return self._self_adapter.__defaults__
92
+
93
+ @property
94
+ def __kwdefaults__(self):
95
+ return self._self_adapter.__kwdefaults__
96
+
97
+ @property
98
+ def __signature__(self):
99
+ if 'signature' not in globals():
100
+ return self._self_adapter.__signature__
101
+ else:
102
+ # Can't allow this to fail on Python 3 else it falls
103
+ # through to using __wrapped__, but that will be the
104
+ # wrong function we want to derive the signature
105
+ # from. Thus generate the signature ourselves.
106
+
107
+ return signature(self._self_adapter)
108
+
109
+ if PY2:
110
+ func_code = __code__
111
+ func_defaults = __defaults__
112
+
113
+ class _BoundAdapterWrapper(BoundFunctionWrapper):
114
+
115
+ @property
116
+ def __func__(self):
117
+ return _AdapterFunctionSurrogate(self.__wrapped__.__func__,
118
+ self._self_parent._self_adapter)
119
+
120
+ if PY2:
121
+ im_func = __func__
122
+
123
+ class AdapterWrapper(FunctionWrapper):
124
+
125
+ __bound_function_wrapper__ = _BoundAdapterWrapper
126
+
127
+ def __init__(self, *args, **kwargs):
128
+ adapter = kwargs.pop('adapter')
129
+ super(AdapterWrapper, self).__init__(*args, **kwargs)
130
+ self._self_surrogate = _AdapterFunctionSurrogate(
131
+ self.__wrapped__, adapter)
132
+ self._self_adapter = adapter
133
+
134
+ @property
135
+ def __code__(self):
136
+ return self._self_surrogate.__code__
137
+
138
+ @property
139
+ def __defaults__(self):
140
+ return self._self_surrogate.__defaults__
141
+
142
+ @property
143
+ def __kwdefaults__(self):
144
+ return self._self_surrogate.__kwdefaults__
145
+
146
+ if PY2:
147
+ func_code = __code__
148
+ func_defaults = __defaults__
149
+
150
+ @property
151
+ def __signature__(self):
152
+ return self._self_surrogate.__signature__
153
+
154
+ class AdapterFactory(object):
155
+ def __call__(self, wrapped):
156
+ raise NotImplementedError()
157
+
158
+ class DelegatedAdapterFactory(AdapterFactory):
159
+ def __init__(self, factory):
160
+ super(DelegatedAdapterFactory, self).__init__()
161
+ self.factory = factory
162
+ def __call__(self, wrapped):
163
+ return self.factory(wrapped)
164
+
165
+ adapter_factory = DelegatedAdapterFactory
166
+
167
+ # Decorator for creating other decorators. This decorator and the
168
+ # wrappers which they use are designed to properly preserve any name
169
+ # attributes, function signatures etc, in addition to the wrappers
170
+ # themselves acting like a transparent proxy for the original wrapped
171
+ # function so the wrapper is effectively indistinguishable from the
172
+ # original wrapped function.
173
+
174
+ def decorator(wrapper=None, enabled=None, adapter=None):
175
+ # The decorator should be supplied with a single positional argument
176
+ # which is the wrapper function to be used to implement the
177
+ # decorator. This may be preceded by a step whereby the keyword
178
+ # arguments are supplied to customise the behaviour of the
179
+ # decorator. The 'adapter' argument is used to optionally denote a
180
+ # separate function which is notionally used by an adapter
181
+ # decorator. In that case parts of the function '__code__' and
182
+ # '__defaults__' attributes are used from the adapter function
183
+ # rather than those of the wrapped function. This allows for the
184
+ # argument specification from inspect.getargspec() and similar
185
+ # functions to be overridden with a prototype for a different
186
+ # function than what was wrapped. The 'enabled' argument provides a
187
+ # way to enable/disable the use of the decorator. If the type of
188
+ # 'enabled' is a boolean, then it is evaluated immediately and the
189
+ # wrapper not even applied if it is False. If not a boolean, it will
190
+ # be evaluated when the wrapper is called for an unbound wrapper,
191
+ # and when binding occurs for a bound wrapper. When being evaluated,
192
+ # if 'enabled' is callable it will be called to obtain the value to
193
+ # be checked. If False, the wrapper will not be called and instead
194
+ # the original wrapped function will be called directly instead.
195
+
196
+ if wrapper is not None:
197
+ # Helper function for creating wrapper of the appropriate
198
+ # time when we need it down below.
199
+
200
+ def _build(wrapped, wrapper, enabled=None, adapter=None):
201
+ if adapter:
202
+ if isinstance(adapter, AdapterFactory):
203
+ adapter = adapter(wrapped)
204
+
205
+ if not callable(adapter):
206
+ ns = {}
207
+ if not isinstance(adapter, string_types):
208
+ adapter = formatargspec(*adapter)
209
+ exec_('def adapter{0}: pass'.format(adapter), ns, ns)
210
+ adapter = ns['adapter']
211
+
212
+ return AdapterWrapper(wrapped=wrapped, wrapper=wrapper,
213
+ enabled=enabled, adapter=adapter)
214
+
215
+ return FunctionWrapper(wrapped=wrapped, wrapper=wrapper,
216
+ enabled=enabled)
217
+
218
+ # The wrapper has been provided so return the final decorator.
219
+ # The decorator is itself one of our function wrappers so we
220
+ # can determine when it is applied to functions, instance methods
221
+ # or class methods. This allows us to bind the instance or class
222
+ # method so the appropriate self or cls attribute is supplied
223
+ # when it is finally called.
224
+
225
+ def _wrapper(wrapped, instance, args, kwargs):
226
+ # We first check for the case where the decorator was applied
227
+ # to a class type.
228
+ #
229
+ # @decorator
230
+ # class mydecoratorclass(object):
231
+ # def __init__(self, arg=None):
232
+ # self.arg = arg
233
+ # def __call__(self, wrapped, instance, args, kwargs):
234
+ # return wrapped(*args, **kwargs)
235
+ #
236
+ # @mydecoratorclass(arg=1)
237
+ # def function():
238
+ # pass
239
+ #
240
+ # In this case an instance of the class is to be used as the
241
+ # decorator wrapper function. If args was empty at this point,
242
+ # then it means that there were optional keyword arguments
243
+ # supplied to be used when creating an instance of the class
244
+ # to be used as the wrapper function.
245
+
246
+ if instance is None and isclass(wrapped) and not args:
247
+ # We still need to be passed the target function to be
248
+ # wrapped as yet, so we need to return a further function
249
+ # to be able to capture it.
250
+
251
+ def _capture(target_wrapped):
252
+ # Now have the target function to be wrapped and need
253
+ # to create an instance of the class which is to act
254
+ # as the decorator wrapper function. Before we do that,
255
+ # we need to first check that use of the decorator
256
+ # hadn't been disabled by a simple boolean. If it was,
257
+ # the target function to be wrapped is returned instead.
258
+
259
+ _enabled = enabled
260
+ if type(_enabled) is bool:
261
+ if not _enabled:
262
+ return target_wrapped
263
+ _enabled = None
264
+
265
+ # Now create an instance of the class which is to act
266
+ # as the decorator wrapper function. Any arguments had
267
+ # to be supplied as keyword only arguments so that is
268
+ # all we pass when creating it.
269
+
270
+ target_wrapper = wrapped(**kwargs)
271
+
272
+ # Finally build the wrapper itself and return it.
273
+
274
+ return _build(target_wrapped, target_wrapper,
275
+ _enabled, adapter)
276
+
277
+ return _capture
278
+
279
+ # We should always have the target function to be wrapped at
280
+ # this point as the first (and only) value in args.
281
+
282
+ target_wrapped = args[0]
283
+
284
+ # Need to now check that use of the decorator hadn't been
285
+ # disabled by a simple boolean. If it was, then target
286
+ # function to be wrapped is returned instead.
287
+
288
+ _enabled = enabled
289
+ if type(_enabled) is bool:
290
+ if not _enabled:
291
+ return target_wrapped
292
+ _enabled = None
293
+
294
+ # We now need to build the wrapper, but there are a couple of
295
+ # different cases we need to consider.
296
+
297
+ if instance is None:
298
+ if isclass(wrapped):
299
+ # In this case the decorator was applied to a class
300
+ # type but optional keyword arguments were not supplied
301
+ # for initialising an instance of the class to be used
302
+ # as the decorator wrapper function.
303
+ #
304
+ # @decorator
305
+ # class mydecoratorclass(object):
306
+ # def __init__(self, arg=None):
307
+ # self.arg = arg
308
+ # def __call__(self, wrapped, instance,
309
+ # args, kwargs):
310
+ # return wrapped(*args, **kwargs)
311
+ #
312
+ # @mydecoratorclass
313
+ # def function():
314
+ # pass
315
+ #
316
+ # We still need to create an instance of the class to
317
+ # be used as the decorator wrapper function, but no
318
+ # arguments are pass.
319
+
320
+ target_wrapper = wrapped()
321
+
322
+ else:
323
+ # In this case the decorator was applied to a normal
324
+ # function, or possibly a static method of a class.
325
+ #
326
+ # @decorator
327
+ # def mydecoratorfuntion(wrapped, instance,
328
+ # args, kwargs):
329
+ # return wrapped(*args, **kwargs)
330
+ #
331
+ # @mydecoratorfunction
332
+ # def function():
333
+ # pass
334
+ #
335
+ # That normal function becomes the decorator wrapper
336
+ # function.
337
+
338
+ target_wrapper = wrapper
339
+
340
+ else:
341
+ if isclass(instance):
342
+ # In this case the decorator was applied to a class
343
+ # method.
344
+ #
345
+ # class myclass(object):
346
+ # @decorator
347
+ # @classmethod
348
+ # def decoratorclassmethod(cls, wrapped,
349
+ # instance, args, kwargs):
350
+ # return wrapped(*args, **kwargs)
351
+ #
352
+ # instance = myclass()
353
+ #
354
+ # @instance.decoratorclassmethod
355
+ # def function():
356
+ # pass
357
+ #
358
+ # This one is a bit strange because binding was actually
359
+ # performed on the wrapper created by our decorator
360
+ # factory. We need to apply that binding to the decorator
361
+ # wrapper function which which the decorator factory
362
+ # was applied to.
363
+
364
+ target_wrapper = wrapper.__get__(None, instance)
365
+
366
+ else:
367
+ # In this case the decorator was applied to an instance
368
+ # method.
369
+ #
370
+ # class myclass(object):
371
+ # @decorator
372
+ # def decoratorclassmethod(self, wrapped,
373
+ # instance, args, kwargs):
374
+ # return wrapped(*args, **kwargs)
375
+ #
376
+ # instance = myclass()
377
+ #
378
+ # @instance.decoratorclassmethod
379
+ # def function():
380
+ # pass
381
+ #
382
+ # This one is a bit strange because binding was actually
383
+ # performed on the wrapper created by our decorator
384
+ # factory. We need to apply that binding to the decorator
385
+ # wrapper function which which the decorator factory
386
+ # was applied to.
387
+
388
+ target_wrapper = wrapper.__get__(instance, type(instance))
389
+
390
+ # Finally build the wrapper itself and return it.
391
+
392
+ return _build(target_wrapped, target_wrapper, _enabled, adapter)
393
+
394
+ # We first return our magic function wrapper here so we can
395
+ # determine in what context the decorator factory was used. In
396
+ # other words, it is itself a universal decorator.
397
+
398
+ return _build(wrapper, _wrapper)
399
+
400
+ else:
401
+ # The wrapper still has not been provided, so we are just
402
+ # collecting the optional keyword arguments. Return the
403
+ # decorator again wrapped in a partial using the collected
404
+ # arguments.
405
+
406
+ return partial(decorator, enabled=enabled, adapter=adapter)
407
+
408
+ # Decorator for implementing thread synchronization. It can be used as a
409
+ # decorator, in which case the synchronization context is determined by
410
+ # what type of function is wrapped, or it can also be used as a context
411
+ # manager, where the user needs to supply the correct synchronization
412
+ # context. It is also possible to supply an object which appears to be a
413
+ # synchronization primitive of some sort, by virtue of having release()
414
+ # and acquire() methods. In that case that will be used directly as the
415
+ # synchronization primitive without creating a separate lock against the
416
+ # derived or supplied context.
417
+
418
+ def synchronized(wrapped):
419
+ # Determine if being passed an object which is a synchronization
420
+ # primitive. We can't check by type for Lock, RLock, Semaphore etc,
421
+ # as the means of creating them isn't the type. Therefore use the
422
+ # existence of acquire() and release() methods. This is more
423
+ # extensible anyway as it allows custom synchronization mechanisms.
424
+
425
+ if hasattr(wrapped, 'acquire') and hasattr(wrapped, 'release'):
426
+ # We remember what the original lock is and then return a new
427
+ # decorator which accesses and locks it. When returning the new
428
+ # decorator we wrap it with an object proxy so we can override
429
+ # the context manager methods in case it is being used to wrap
430
+ # synchronized statements with a 'with' statement.
431
+
432
+ lock = wrapped
433
+
434
+ @decorator
435
+ def _synchronized(wrapped, instance, args, kwargs):
436
+ # Execute the wrapped function while the original supplied
437
+ # lock is held.
438
+
439
+ with lock:
440
+ return wrapped(*args, **kwargs)
441
+
442
+ class _PartialDecorator(CallableObjectProxy):
443
+
444
+ def __enter__(self):
445
+ lock.acquire()
446
+ return lock
447
+
448
+ def __exit__(self, *args):
449
+ lock.release()
450
+
451
+ return _PartialDecorator(wrapped=_synchronized)
452
+
453
+ # Following only apply when the lock is being created automatically
454
+ # based on the context of what was supplied. In this case we supply
455
+ # a final decorator, but need to use FunctionWrapper directly as we
456
+ # want to derive from it to add context manager methods in case it is
457
+ # being used to wrap synchronized statements with a 'with' statement.
458
+
459
+ def _synchronized_lock(context):
460
+ # Attempt to retrieve the lock for the specific context.
461
+
462
+ lock = vars(context).get('_synchronized_lock', None)
463
+
464
+ if lock is None:
465
+ # There is no existing lock defined for the context we
466
+ # are dealing with so we need to create one. This needs
467
+ # to be done in a way to guarantee there is only one
468
+ # created, even if multiple threads try and create it at
469
+ # the same time. We can't always use the setdefault()
470
+ # method on the __dict__ for the context. This is the
471
+ # case where the context is a class, as __dict__ is
472
+ # actually a dictproxy. What we therefore do is use a
473
+ # meta lock on this wrapper itself, to control the
474
+ # creation and assignment of the lock attribute against
475
+ # the context.
476
+
477
+ meta_lock = vars(synchronized).setdefault(
478
+ '_synchronized_meta_lock', Lock())
479
+
480
+ with meta_lock:
481
+ # We need to check again for whether the lock we want
482
+ # exists in case two threads were trying to create it
483
+ # at the same time and were competing to create the
484
+ # meta lock.
485
+
486
+ lock = vars(context).get('_synchronized_lock', None)
487
+
488
+ if lock is None:
489
+ lock = RLock()
490
+ setattr(context, '_synchronized_lock', lock)
491
+
492
+ return lock
493
+
494
+ def _synchronized_wrapper(wrapped, instance, args, kwargs):
495
+ # Execute the wrapped function while the lock for the
496
+ # desired context is held. If instance is None then the
497
+ # wrapped function is used as the context.
498
+
499
+ with _synchronized_lock(instance or wrapped):
500
+ return wrapped(*args, **kwargs)
501
+
502
+ class _FinalDecorator(FunctionWrapper):
503
+
504
+ def __enter__(self):
505
+ self._self_lock = _synchronized_lock(self.__wrapped__)
506
+ self._self_lock.acquire()
507
+ return self._self_lock
508
+
509
+ def __exit__(self, *args):
510
+ self._self_lock.release()
511
+
512
+ return _FinalDecorator(wrapped=wrapped, wrapper=_synchronized_wrapper)