google-api-client 0.52.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +0 -14
  3. data/CHANGELOG.md +6 -0
  4. data/OVERVIEW.md +36 -27
  5. data/generated/google/apis/accesscontextmanager_v1.rb +1 -1
  6. data/generated/google/apis/accesscontextmanager_v1/classes.rb +326 -0
  7. data/generated/google/apis/accesscontextmanager_v1/representations.rb +139 -0
  8. data/generated/google/apis/admin_directory_v1.rb +1 -1
  9. data/generated/google/apis/admin_directory_v1/service.rb +2 -2
  10. data/generated/google/apis/analyticsadmin_v1alpha.rb +2 -2
  11. data/generated/google/apis/analyticsadmin_v1alpha/classes.rb +8 -0
  12. data/generated/google/apis/analyticsadmin_v1alpha/representations.rb +1 -0
  13. data/generated/google/apis/analyticsadmin_v1alpha/service.rb +12 -1
  14. data/{lib/google/apis/core/logging.rb → generated/google/apis/apigateway_v1.rb} +14 -10
  15. data/generated/google/apis/apigateway_v1/classes.rb +1116 -0
  16. data/generated/google/apis/apigateway_v1/representations.rb +442 -0
  17. data/generated/google/apis/apigateway_v1/service.rb +1172 -0
  18. data/generated/google/apis/apigateway_v1beta.rb +1 -1
  19. data/generated/google/apis/apigateway_v1beta/classes.rb +19 -8
  20. data/generated/google/apis/apigateway_v1beta/representations.rb +1 -0
  21. data/generated/google/apis/apigee_v1.rb +1 -1
  22. data/generated/google/apis/apigee_v1/classes.rb +24 -22
  23. data/generated/google/apis/apigee_v1/service.rb +50 -48
  24. data/generated/google/apis/artifactregistry_v1.rb +38 -0
  25. data/generated/google/apis/artifactregistry_v1/classes.rb +242 -0
  26. data/generated/google/apis/artifactregistry_v1/representations.rb +116 -0
  27. data/generated/google/apis/artifactregistry_v1/service.rb +210 -0
  28. data/generated/google/apis/artifactregistry_v1beta1.rb +1 -1
  29. data/generated/google/apis/artifactregistry_v1beta1/classes.rb +0 -120
  30. data/generated/google/apis/artifactregistry_v1beta1/representations.rb +0 -62
  31. data/generated/google/apis/artifactregistry_v1beta2.rb +1 -1
  32. data/generated/google/apis/artifactregistry_v1beta2/classes.rb +0 -120
  33. data/generated/google/apis/artifactregistry_v1beta2/representations.rb +0 -62
  34. data/generated/google/apis/chat_v1.rb +1 -1
  35. data/generated/google/apis/chat_v1/service.rb +132 -0
  36. data/generated/google/apis/cloudasset_v1.rb +1 -1
  37. data/generated/google/apis/cloudasset_v1/classes.rb +326 -0
  38. data/generated/google/apis/cloudasset_v1/representations.rb +139 -0
  39. data/generated/google/apis/cloudasset_v1beta1.rb +1 -1
  40. data/generated/google/apis/cloudasset_v1beta1/classes.rb +326 -0
  41. data/generated/google/apis/cloudasset_v1beta1/representations.rb +139 -0
  42. data/generated/google/apis/cloudasset_v1p5beta1.rb +1 -1
  43. data/generated/google/apis/cloudasset_v1p5beta1/classes.rb +326 -0
  44. data/generated/google/apis/cloudasset_v1p5beta1/representations.rb +139 -0
  45. data/generated/google/apis/cloudbuild_v1.rb +1 -1
  46. data/generated/google/apis/cloudbuild_v1/classes.rb +3 -3
  47. data/generated/google/apis/cloudbuild_v1alpha1.rb +1 -1
  48. data/generated/google/apis/cloudbuild_v1alpha1/classes.rb +3 -3
  49. data/generated/google/apis/cloudbuild_v1alpha2.rb +1 -1
  50. data/generated/google/apis/cloudbuild_v1alpha2/classes.rb +3 -3
  51. data/generated/google/apis/cloudidentity_v1beta1.rb +1 -1
  52. data/generated/google/apis/cloudidentity_v1beta1/classes.rb +1 -1
  53. data/generated/google/apis/cloudresourcemanager_v1.rb +1 -1
  54. data/generated/google/apis/cloudresourcemanager_v1/classes.rb +0 -26
  55. data/generated/google/apis/cloudresourcemanager_v1/representations.rb +0 -24
  56. data/generated/google/apis/cloudresourcemanager_v1beta1.rb +1 -1
  57. data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +0 -26
  58. data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +0 -24
  59. data/generated/google/apis/cloudresourcemanager_v2.rb +1 -1
  60. data/generated/google/apis/cloudresourcemanager_v2/classes.rb +0 -26
  61. data/generated/google/apis/cloudresourcemanager_v2/representations.rb +0 -24
  62. data/generated/google/apis/cloudresourcemanager_v2beta1.rb +1 -1
  63. data/generated/google/apis/cloudresourcemanager_v2beta1/classes.rb +0 -26
  64. data/generated/google/apis/cloudresourcemanager_v2beta1/representations.rb +0 -24
  65. data/generated/google/apis/container_v1.rb +1 -1
  66. data/generated/google/apis/container_v1/classes.rb +7 -7
  67. data/generated/google/apis/container_v1beta1.rb +1 -1
  68. data/generated/google/apis/container_v1beta1/classes.rb +7 -7
  69. data/generated/google/apis/content_v2_1.rb +1 -1
  70. data/generated/google/apis/content_v2_1/classes.rb +434 -0
  71. data/generated/google/apis/content_v2_1/representations.rb +187 -0
  72. data/generated/google/apis/content_v2_1/service.rb +116 -0
  73. data/generated/google/apis/datacatalog_v1beta1.rb +1 -1
  74. data/generated/google/apis/datacatalog_v1beta1/classes.rb +6 -0
  75. data/generated/google/apis/datacatalog_v1beta1/representations.rb +1 -0
  76. data/generated/google/apis/dataflow_v1b3.rb +1 -1
  77. data/generated/google/apis/datalabeling_v1beta1.rb +1 -1
  78. data/generated/google/apis/dataproc_v1.rb +1 -1
  79. data/generated/google/apis/dataproc_v1/classes.rb +29 -1
  80. data/generated/google/apis/dataproc_v1/representations.rb +14 -0
  81. data/generated/google/apis/dataproc_v1/service.rb +42 -0
  82. data/generated/google/apis/dataproc_v1beta2.rb +1 -1
  83. data/generated/google/apis/dataproc_v1beta2/classes.rb +29 -1
  84. data/generated/google/apis/dataproc_v1beta2/representations.rb +14 -0
  85. data/generated/google/apis/dataproc_v1beta2/service.rb +42 -0
  86. data/generated/google/apis/dialogflow_v2.rb +1 -1
  87. data/generated/google/apis/dialogflow_v2/classes.rb +4041 -678
  88. data/generated/google/apis/dialogflow_v2/representations.rb +1851 -298
  89. data/generated/google/apis/dialogflow_v2beta1.rb +1 -1
  90. data/generated/google/apis/dialogflow_v2beta1/classes.rb +4047 -684
  91. data/generated/google/apis/dialogflow_v2beta1/representations.rb +1862 -309
  92. data/generated/google/apis/dialogflow_v3.rb +1 -1
  93. data/generated/google/apis/dialogflow_v3/classes.rb +3120 -311
  94. data/generated/google/apis/dialogflow_v3/representations.rb +2002 -617
  95. data/generated/google/apis/dialogflow_v3/service.rb +408 -0
  96. data/generated/google/apis/dialogflow_v3beta1.rb +1 -1
  97. data/generated/google/apis/dialogflow_v3beta1/classes.rb +5145 -2336
  98. data/generated/google/apis/dialogflow_v3beta1/representations.rb +1729 -344
  99. data/generated/google/apis/dialogflow_v3beta1/service.rb +408 -0
  100. data/generated/google/apis/dlp_v2.rb +1 -1
  101. data/generated/google/apis/dlp_v2/service.rb +3 -9
  102. data/generated/google/apis/documentai_v1beta2.rb +1 -1
  103. data/generated/google/apis/documentai_v1beta2/classes.rb +5 -92
  104. data/generated/google/apis/documentai_v1beta2/representations.rb +2 -15
  105. data/generated/google/apis/documentai_v1beta3.rb +1 -1
  106. data/generated/google/apis/documentai_v1beta3/classes.rb +5 -92
  107. data/generated/google/apis/documentai_v1beta3/representations.rb +2 -15
  108. data/generated/google/apis/gameservices_v1.rb +1 -1
  109. data/generated/google/apis/gameservices_v1/service.rb +14 -14
  110. data/generated/google/apis/gameservices_v1beta.rb +1 -1
  111. data/generated/google/apis/gameservices_v1beta/service.rb +14 -14
  112. data/generated/google/apis/localservices_v1.rb +4 -1
  113. data/generated/google/apis/manufacturers_v1.rb +1 -1
  114. data/generated/google/apis/manufacturers_v1/classes.rb +2 -2
  115. data/generated/google/apis/monitoring_v3.rb +1 -1
  116. data/generated/google/apis/monitoring_v3/classes.rb +2 -2
  117. data/generated/google/apis/notebooks_v1.rb +1 -1
  118. data/generated/google/apis/notebooks_v1/classes.rb +13 -0
  119. data/generated/google/apis/notebooks_v1/representations.rb +12 -0
  120. data/generated/google/apis/notebooks_v1/service.rb +34 -0
  121. data/generated/google/apis/prod_tt_sasportal_v1alpha1.rb +1 -1
  122. data/generated/google/apis/prod_tt_sasportal_v1alpha1/classes.rb +0 -37
  123. data/generated/google/apis/prod_tt_sasportal_v1alpha1/representations.rb +0 -18
  124. data/generated/google/apis/recommendationengine_v1beta1.rb +1 -1
  125. data/generated/google/apis/recommendationengine_v1beta1/service.rb +2 -1
  126. data/generated/google/apis/securitycenter_v1.rb +1 -1
  127. data/generated/google/apis/securitycenter_v1/classes.rb +18 -10
  128. data/generated/google/apis/securitycenter_v1/representations.rb +1 -0
  129. data/generated/google/apis/securitycenter_v1/service.rb +30 -30
  130. data/generated/google/apis/securitycenter_v1beta1.rb +1 -1
  131. data/generated/google/apis/securitycenter_v1beta1/classes.rb +7 -0
  132. data/generated/google/apis/securitycenter_v1beta1/representations.rb +1 -0
  133. data/generated/google/apis/securitycenter_v1beta2.rb +1 -1
  134. data/generated/google/apis/securitycenter_v1beta2/classes.rb +7 -0
  135. data/generated/google/apis/securitycenter_v1beta2/representations.rb +1 -0
  136. data/generated/google/apis/servicemanagement_v1.rb +1 -1
  137. data/generated/google/apis/servicemanagement_v1/classes.rb +11 -10
  138. data/generated/google/apis/sqladmin_v1beta4.rb +1 -1
  139. data/generated/google/apis/sqladmin_v1beta4/classes.rb +7 -7
  140. data/generated/google/apis/sqladmin_v1beta4/service.rb +4 -1
  141. data/generated/google/apis/storagetransfer_v1.rb +1 -1
  142. data/generated/google/apis/storagetransfer_v1/classes.rb +25 -0
  143. data/generated/google/apis/storagetransfer_v1/representations.rb +3 -0
  144. data/generated/google/apis/webmasters_v3/classes.rb +8 -0
  145. data/generated/google/apis/webmasters_v3/representations.rb +1 -0
  146. data/generated/google/apis/youtube_v3.rb +1 -1
  147. data/generated/google/apis/youtube_v3/classes.rb +18 -143
  148. data/generated/google/apis/youtube_v3/representations.rb +0 -57
  149. data/generated/google/apis/youtube_v3/service.rb +0 -43
  150. data/lib/google/apis/version.rb +1 -23
  151. metadata +27 -263
  152. data/.github/CONTRIBUTING.md +0 -31
  153. data/.github/ISSUE_TEMPLATE/bug_report.md +0 -36
  154. data/.github/ISSUE_TEMPLATE/feature_request.md +0 -21
  155. data/.github/ISSUE_TEMPLATE/support_request.md +0 -7
  156. data/.github/workflows/autoapprove.yml +0 -49
  157. data/.github/workflows/release-please.yml +0 -57
  158. data/.gitignore +0 -23
  159. data/.kokoro/build.bat +0 -11
  160. data/.kokoro/build.sh +0 -4
  161. data/.kokoro/continuous/common.cfg +0 -25
  162. data/.kokoro/continuous/linux.cfg +0 -25
  163. data/.kokoro/continuous/osx.cfg +0 -8
  164. data/.kokoro/continuous/post.cfg +0 -30
  165. data/.kokoro/continuous/windows.cfg +0 -29
  166. data/.kokoro/osx.sh +0 -4
  167. data/.kokoro/presubmit/common.cfg +0 -24
  168. data/.kokoro/presubmit/linux.cfg +0 -24
  169. data/.kokoro/presubmit/osx.cfg +0 -8
  170. data/.kokoro/presubmit/windows.cfg +0 -29
  171. data/.kokoro/release.cfg +0 -94
  172. data/.kokoro/trampoline.bat +0 -10
  173. data/.kokoro/trampoline.sh +0 -4
  174. data/.repo-metadata.json +0 -5
  175. data/.rspec +0 -2
  176. data/.rubocop.yml +0 -12
  177. data/.rubocop_todo.yml +0 -63
  178. data/CODE_OF_CONDUCT.md +0 -43
  179. data/Gemfile +0 -55
  180. data/MIGRATING.md +0 -215
  181. data/README.md +0 -402
  182. data/Rakefile +0 -131
  183. data/api_list_config.yaml +0 -9
  184. data/api_names.yaml +0 -1082
  185. data/bin/generate-api +0 -194
  186. data/docs/api-keys.md +0 -20
  187. data/docs/auth.md +0 -53
  188. data/docs/client-secrets.md +0 -69
  189. data/docs/getting-started.md +0 -340
  190. data/docs/installation.md +0 -0
  191. data/docs/logging.md +0 -34
  192. data/docs/media-upload.md +0 -25
  193. data/docs/oauth-installed.md +0 -191
  194. data/docs/oauth-server.md +0 -133
  195. data/docs/oauth-web.md +0 -280
  196. data/docs/oauth.md +0 -268
  197. data/docs/pagination.md +0 -29
  198. data/docs/performance.md +0 -25
  199. data/google-api-client.gemspec +0 -36
  200. data/lib/google/api_client/auth/installed_app.rb +0 -143
  201. data/lib/google/api_client/auth/key_utils.rb +0 -94
  202. data/lib/google/api_client/auth/storage.rb +0 -104
  203. data/lib/google/api_client/auth/storages/file_store.rb +0 -57
  204. data/lib/google/api_client/auth/storages/redis_store.rb +0 -59
  205. data/lib/google/api_client/client_secrets.rb +0 -176
  206. data/lib/google/apis.rb +0 -58
  207. data/lib/google/apis/core/api_command.rb +0 -209
  208. data/lib/google/apis/core/base_service.rb +0 -447
  209. data/lib/google/apis/core/batch.rb +0 -236
  210. data/lib/google/apis/core/composite_io.rb +0 -97
  211. data/lib/google/apis/core/download.rb +0 -118
  212. data/lib/google/apis/core/hashable.rb +0 -44
  213. data/lib/google/apis/core/http_command.rb +0 -447
  214. data/lib/google/apis/core/json_representation.rb +0 -153
  215. data/lib/google/apis/core/multipart.rb +0 -135
  216. data/lib/google/apis/core/upload.rb +0 -273
  217. data/lib/google/apis/errors.rb +0 -89
  218. data/lib/google/apis/generator.rb +0 -71
  219. data/lib/google/apis/generator/annotator.rb +0 -339
  220. data/lib/google/apis/generator/helpers.rb +0 -76
  221. data/lib/google/apis/generator/model.rb +0 -187
  222. data/lib/google/apis/generator/template.rb +0 -124
  223. data/lib/google/apis/generator/templates/_class.tmpl +0 -43
  224. data/lib/google/apis/generator/templates/_method.tmpl +0 -92
  225. data/lib/google/apis/generator/templates/_representation.tmpl +0 -51
  226. data/lib/google/apis/generator/templates/_representation_stub.tmpl +0 -17
  227. data/lib/google/apis/generator/templates/_representation_type.tmpl +0 -10
  228. data/lib/google/apis/generator/templates/classes.rb.tmpl +0 -29
  229. data/lib/google/apis/generator/templates/module.rb.tmpl +0 -40
  230. data/lib/google/apis/generator/templates/representations.rb.tmpl +0 -32
  231. data/lib/google/apis/generator/templates/service.rb.tmpl +0 -61
  232. data/lib/google/apis/options.rb +0 -116
  233. data/rakelib/devsite/devsite_builder.rb +0 -126
  234. data/rakelib/devsite/link_checker.rb +0 -64
  235. data/rakelib/devsite/repo_metadata.rb +0 -56
  236. data/rakelib/metrics.rake +0 -22
  237. data/rakelib/rubocop.rake +0 -10
  238. data/rakelib/spec.rake +0 -11
  239. data/rakelib/yard.rake +0 -11
  240. data/samples/cli/.env +0 -4
  241. data/samples/cli/Gemfile +0 -7
  242. data/samples/cli/README.md +0 -51
  243. data/samples/cli/google-api-samples +0 -32
  244. data/samples/cli/lib/base_cli.rb +0 -95
  245. data/samples/cli/lib/samples/adsense.rb +0 -99
  246. data/samples/cli/lib/samples/analytics.rb +0 -80
  247. data/samples/cli/lib/samples/androidpublisher.rb +0 -47
  248. data/samples/cli/lib/samples/bigquery.rb +0 -101
  249. data/samples/cli/lib/samples/calendar.rb +0 -83
  250. data/samples/cli/lib/samples/drive.rb +0 -82
  251. data/samples/cli/lib/samples/gmail.rb +0 -157
  252. data/samples/cli/lib/samples/pubsub.rb +0 -114
  253. data/samples/cli/lib/samples/sheets.rb +0 -61
  254. data/samples/cli/lib/samples/translate.rb +0 -44
  255. data/samples/cli/lib/samples/vision.rb +0 -69
  256. data/samples/cli/lib/samples/you_tube.rb +0 -47
  257. data/samples/web/Gemfile +0 -9
  258. data/samples/web/README.md +0 -44
  259. data/samples/web/app.rb +0 -120
  260. data/samples/web/views/calendar.erb +0 -34
  261. data/samples/web/views/drive.erb +0 -33
  262. data/samples/web/views/home.erb +0 -34
  263. data/samples/web/views/layout.erb +0 -40
  264. data/synth.py +0 -40
@@ -1,44 +0,0 @@
1
- # Copyright 2015 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
- module Google
16
- module Apis
17
- module Core
18
- # Adds to_hash to objects
19
- module Hashable
20
- # Convert object to hash representation
21
- #
22
- # @return [Hash]
23
- def to_h
24
- Hash[instance_variables.map { |k| [k[1..-1].to_sym, Hashable.process_value(instance_variable_get(k))] }]
25
- end
26
-
27
- # Recursively serialize an object
28
- #
29
- # @param [Object] val
30
- # @return [Hash]
31
- def self.process_value(val)
32
- case val
33
- when Hash
34
- Hash[val.map {|k, v| [k.to_sym, Hashable.process_value(v)] }]
35
- when Array
36
- val.map{ |v| Hashable.process_value(v) }
37
- else
38
- val.respond_to?(:to_h) ? val.to_h : val
39
- end
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,447 +0,0 @@
1
- # Copyright 2015 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
- require 'addressable/uri'
16
- require 'addressable/template'
17
- require 'google/apis/options'
18
- require 'google/apis/errors'
19
- require 'retriable'
20
- require 'google/apis/core/logging'
21
- require 'pp'
22
-
23
- module Google
24
- module Apis
25
- module Core
26
- # Command for HTTP request/response.
27
- class HttpCommand
28
- include Logging
29
-
30
- RETRIABLE_ERRORS = [Google::Apis::ServerError, Google::Apis::RateLimitError, Google::Apis::TransmissionError]
31
-
32
- begin
33
- require 'opencensus'
34
- OPENCENSUS_AVAILABLE = true
35
- rescue LoadError
36
- OPENCENSUS_AVAILABLE = false
37
- end
38
-
39
- # Request options
40
- # @return [Google::Apis::RequestOptions]
41
- attr_accessor :options
42
-
43
- # HTTP request URL
44
- # @return [String, Addressable::URI]
45
- attr_accessor :url
46
-
47
- # HTTP headers
48
- # @return [Hash]
49
- attr_accessor :header
50
-
51
- # Request body
52
- # @return [#read]
53
- attr_accessor :body
54
-
55
- # HTTP method
56
- # @return [symbol]
57
- attr_accessor :method
58
-
59
- # HTTP Client
60
- # @return [HTTPClient]
61
- attr_accessor :connection
62
-
63
- # Query params
64
- # @return [Hash]
65
- attr_accessor :query
66
-
67
- # Path params for URL Template
68
- # @return [Hash]
69
- attr_accessor :params
70
-
71
- # @param [symbol] method
72
- # HTTP method
73
- # @param [String,Addressable::URI, Addressable::Template] url
74
- # HTTP URL or template
75
- # @param [String, #read] body
76
- # Request body
77
- def initialize(method, url, body: nil)
78
- self.options = Google::Apis::RequestOptions.default.dup
79
- self.url = url
80
- self.url = Addressable::Template.new(url) if url.is_a?(String)
81
- self.method = method
82
- self.header = Hash.new
83
- self.body = body
84
- self.query = {}
85
- self.params = {}
86
- @opencensus_span = nil
87
- end
88
-
89
- # Execute the command, retrying as necessary
90
- #
91
- # @param [HTTPClient] client
92
- # HTTP client
93
- # @yield [result, err] Result or error if block supplied
94
- # @return [Object]
95
- # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
96
- # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
97
- # @raise [Google::Apis::AuthorizationError] Authorization is required
98
- def execute(client)
99
- prepare!
100
- opencensus_begin_span
101
- begin
102
- Retriable.retriable tries: options.retries + 1,
103
- base_interval: 1,
104
- multiplier: 2,
105
- on: RETRIABLE_ERRORS do |try|
106
- # This 2nd level retriable only catches auth errors, and supports 1 retry, which allows
107
- # auth to be re-attempted without having to retry all sorts of other failures like
108
- # NotFound, etc
109
- auth_tries = (try == 1 && authorization_refreshable? ? 2 : 1)
110
- Retriable.retriable tries: auth_tries,
111
- on: [Google::Apis::AuthorizationError, Signet::AuthorizationError, Signet::RemoteServerError, Signet::UnexpectedStatusError],
112
- on_retry: proc { |*| refresh_authorization } do
113
- execute_once(client).tap do |result|
114
- if block_given?
115
- yield result, nil
116
- end
117
- end
118
- end
119
- end
120
- rescue => e
121
- if block_given?
122
- yield nil, e
123
- else
124
- raise e
125
- end
126
- end
127
- ensure
128
- opencensus_end_span
129
- @http_res = nil
130
- release!
131
- end
132
-
133
- # Refresh the authorization authorization after a 401 error
134
- #
135
- # @private
136
- # @return [void]
137
- def refresh_authorization
138
- # Handled implicitly by auth lib, here in case need to override
139
- logger.debug('Retrying after authentication failure')
140
- end
141
-
142
- # Check if attached credentials can be automatically refreshed
143
- # @return [Boolean]
144
- def authorization_refreshable?
145
- options.authorization.respond_to?(:apply!)
146
- end
147
-
148
- # Prepare the request (e.g. calculate headers, add query params, serialize data, etc) before sending
149
- #
150
- # @private
151
- # @return [void]
152
- def prepare!
153
- normalize_unicode = true
154
- if options
155
- header.update(options.header) if options.header
156
- query.update(options.query) if options.query
157
- normalize_unicode = options.normalize_unicode
158
- end
159
- self.url = url.expand(params, nil, normalize_unicode) if url.is_a?(Addressable::Template)
160
- url.query_values = normalize_query_values(query).merge(url.query_values || {})
161
-
162
- if allow_form_encoding?
163
- @form_encoded = true
164
- self.body = Addressable::URI.form_encode(url.query_values(Array))
165
- self.header['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'
166
- self.url.query_values = {}
167
- else
168
- @form_encoded = false
169
- end
170
-
171
- self.body = '' unless self.body
172
- end
173
-
174
- # Release any resources used by this command
175
- # @private
176
- # @return [void]
177
- def release!
178
- end
179
-
180
- # Check the response and either decode body or raise error
181
- #
182
- # @param [Fixnum] status
183
- # HTTP status code of response
184
- # @param [Hash] header
185
- # Response headers
186
- # @param [String, #read] body
187
- # Response body
188
- # @return [Object]
189
- # Response object
190
- # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
191
- # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
192
- # @raise [Google::Apis::AuthorizationError] Authorization is required
193
- def process_response(status, header, body)
194
- check_status(status, header, body)
195
- decode_response_body(header['Content-Type'].first, body)
196
- end
197
-
198
- # Check the response and raise error if needed
199
- #
200
- # @param [Fixnum] status
201
- # HTTP status code of response
202
- # @param [Hash] header
203
- # HTTP response headers
204
- # @param [String] body
205
- # HTTP response body
206
- # @param [String] message
207
- # Error message text
208
- # @return [void]
209
- # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
210
- # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
211
- # @raise [Google::Apis::AuthorizationError] Authorization is required
212
- def check_status(status, header = nil, body = nil, message = nil)
213
- # TODO: 304 Not Modified depends on context...
214
- case status
215
- when 200...300
216
- nil
217
- when 301, 302, 303, 307
218
- message ||= sprintf('Redirect to %s', header['Location'])
219
- raise Google::Apis::RedirectError.new(message, status_code: status, header: header, body: body)
220
- when 401
221
- message ||= 'Unauthorized'
222
- raise Google::Apis::AuthorizationError.new(message, status_code: status, header: header, body: body)
223
- when 429
224
- message ||= 'Rate limit exceeded'
225
- raise Google::Apis::RateLimitError.new(message, status_code: status, header: header, body: body)
226
- when 304, 400, 402...500
227
- message ||= 'Invalid request'
228
- raise Google::Apis::ClientError.new(message, status_code: status, header: header, body: body)
229
- when 500...600
230
- message ||= 'Server error'
231
- raise Google::Apis::ServerError.new(message, status_code: status, header: header, body: body)
232
- else
233
- logger.warn(sprintf('Encountered unexpected status code %s', status))
234
- message ||= 'Unknown error'
235
- raise Google::Apis::TransmissionError.new(message, status_code: status, header: header, body: body)
236
- end
237
- end
238
-
239
- # Process the actual response body. Intended to be overridden by subclasses
240
- #
241
- # @param [String] _content_type
242
- # Content type of body
243
- # @param [String, #read] body
244
- # Response body
245
- # @return [Object]
246
- def decode_response_body(_content_type, body)
247
- body
248
- end
249
-
250
- # Process a success response
251
- # @param [Object] result
252
- # Result object
253
- # @return [Object] result if no block given
254
- # @yield [result, nil] if block given
255
- def success(result, &block)
256
- logger.debug { sprintf('Success - %s', safe_object_representation(result)) }
257
- block.call(result, nil) if block_given?
258
- result
259
- end
260
-
261
- # Process an error response
262
- # @param [StandardError] err
263
- # Error object
264
- # @param [Boolean] rethrow
265
- # True if error should be raised again after handling
266
- # @return [void]
267
- # @yield [nil, err] if block given
268
- # @raise [StandardError] if no block
269
- def error(err, rethrow: false, &block)
270
- logger.debug { sprintf('Error - %s', PP.pp(err, '')) }
271
- if err.is_a?(HTTPClient::BadResponseError)
272
- begin
273
- res = err.res
274
- raise Google::Apis::TransmissionError.new(err) if res.nil?
275
- check_status(res.status.to_i, res.header, res.body)
276
- rescue Google::Apis::Error => e
277
- err = e
278
- end
279
- elsif err.is_a?(HTTPClient::TimeoutError) || err.is_a?(SocketError)
280
- err = Google::Apis::TransmissionError.new(err)
281
- end
282
- block.call(nil, err) if block_given?
283
- fail err if rethrow || block.nil?
284
- end
285
-
286
- # Execute the command once.
287
- #
288
- # @private
289
- # @param [HTTPClient] client
290
- # HTTP client
291
- # @return [Object]
292
- # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
293
- # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
294
- # @raise [Google::Apis::AuthorizationError] Authorization is required
295
- def execute_once(client)
296
- body.rewind if body.respond_to?(:rewind)
297
- begin
298
- logger.debug { sprintf('Sending HTTP %s %s', method, url) }
299
- request_header = header.dup
300
- apply_request_options(request_header)
301
-
302
- @http_res = client.request(method.to_s.upcase,
303
- url.to_s,
304
- query: nil,
305
- body: body,
306
- header: request_header,
307
- follow_redirect: true)
308
- logger.debug { @http_res.status }
309
- logger.debug { safe_response_representation @http_res }
310
- response = process_response(@http_res.status.to_i, @http_res.header, @http_res.body)
311
- success(response)
312
- rescue => e
313
- logger.debug { sprintf('Caught error %s', e) }
314
- error(e, rethrow: true)
315
- end
316
- end
317
-
318
- # Update the request with any specified options.
319
- # @param [Hash] req_header
320
- # HTTP headers
321
- # @return [void]
322
- def apply_request_options(req_header)
323
- if options.authorization.respond_to?(:apply!)
324
- options.authorization.apply!(req_header)
325
- elsif options.authorization.is_a?(String)
326
- req_header['Authorization'] = sprintf('Bearer %s', options.authorization)
327
- end
328
- req_header.update(header)
329
- end
330
-
331
- def allow_form_encoding?
332
- [:post, :put].include?(method) && body.nil?
333
- end
334
-
335
- private
336
-
337
- UNSAFE_CLASS_NAMES = [
338
- "Google::Apis::CloudkmsV1::DecryptResponse"
339
- ]
340
-
341
- def safe_object_representation obj
342
- name = obj.class.name
343
- if UNSAFE_CLASS_NAMES.include? name
344
- "#<#{name} (fields redacted)>"
345
- else
346
- PP.pp(obj, "")
347
- end
348
- end
349
-
350
- def safe_response_representation http_res
351
- if respond_to?(:response_class) && response_class.is_a?(Class) &&
352
- UNSAFE_CLASS_NAMES.include?(response_class.name)
353
- return "#<#{http_res.class.name} (fields redacted)>"
354
- end
355
- http_res.inspect
356
- end
357
-
358
- def opencensus_begin_span
359
- return unless OPENCENSUS_AVAILABLE && options.use_opencensus
360
- return if @opencensus_span
361
- return unless OpenCensus::Trace.span_context
362
-
363
- @opencensus_span = OpenCensus::Trace.start_span url.path.to_s
364
- @opencensus_span.kind = OpenCensus::Trace::SpanBuilder::CLIENT
365
- @opencensus_span.put_attribute "http.host", url.host.to_s
366
- @opencensus_span.put_attribute "http.method", method.to_s.upcase
367
- @opencensus_span.put_attribute "http.path", url.path.to_s
368
- if body.respond_to? :bytesize
369
- @opencensus_span.put_message_event \
370
- OpenCensus::Trace::SpanBuilder::SENT, 1, body.bytesize
371
- end
372
-
373
- formatter = OpenCensus::Trace.config.http_formatter
374
- if formatter.respond_to? :header_name
375
- header[formatter.header_name] = formatter.serialize @opencensus_span.context.trace_context
376
- end
377
- rescue StandardError => e
378
- # Log exceptions and continue, so opencensus failures don't cause
379
- # the entire request to fail.
380
- logger.debug { sprintf('Error opening OpenCensus span: %s', e) }
381
- end
382
-
383
- def opencensus_end_span
384
- return unless OPENCENSUS_AVAILABLE
385
- return unless @opencensus_span
386
- return unless OpenCensus::Trace.span_context
387
-
388
- if @http_res
389
- if @http_res.body.respond_to? :bytesize
390
- @opencensus_span.put_message_event \
391
- OpenCensus::Trace::SpanBuilder::RECEIVED, 1, @http_res.body.bytesize
392
- end
393
- status = @http_res.status.to_i
394
- if status > 0
395
- @opencensus_span.set_status map_http_status status
396
- @opencensus_span.put_attribute "http.status_code", status
397
- end
398
- end
399
-
400
- OpenCensus::Trace.end_span @opencensus_span
401
- @opencensus_span = nil
402
- rescue StandardError => e
403
- # Log exceptions and continue, so failures don't cause leaks by
404
- # aborting cleanup.
405
- logger.debug { sprintf('Error finishing OpenCensus span: %s', e) }
406
- end
407
-
408
- def form_encoded?
409
- @form_encoded
410
- end
411
-
412
- def map_http_status http_status
413
- case http_status
414
- when 200..399 then 0 # OK
415
- when 400 then 3 # INVALID_ARGUMENT
416
- when 401 then 16 # UNAUTHENTICATED
417
- when 403 then 7 # PERMISSION_DENIED
418
- when 404 then 5 # NOT_FOUND
419
- when 429 then 8 # RESOURCE_EXHAUSTED
420
- when 501 then 12 # UNIMPLEMENTED
421
- when 503 then 14 # UNAVAILABLE
422
- when 504 then 4 # DEADLINE_EXCEEDED
423
- else 2 # UNKNOWN
424
- end
425
- end
426
-
427
- def normalize_query_values(input)
428
- input.inject({}) do |h, (k, v)|
429
- h[k] = normalize_query_value(v)
430
- h
431
- end
432
- end
433
-
434
- def normalize_query_value(v)
435
- case v
436
- when Array
437
- v.map { |v2| normalize_query_value(v2) }
438
- when nil
439
- nil
440
- else
441
- v.to_s
442
- end
443
- end
444
- end
445
- end
446
- end
447
- end