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,236 +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
- # Copyright 2015 Google Inc.
15
- #
16
- # Licensed under the Apache License, Version 2.0 (the "License");
17
- # you may not use this file except in compliance with the License.
18
- # You may obtain a copy of the License at
19
- #
20
- # http://www.apache.org/licenses/LICENSE-2.0
21
- #
22
- # Unless required by applicable law or agreed to in writing, software
23
- # distributed under the License is distributed on an "AS IS" BASIS,
24
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25
- # See the License for the specific language governing permissions and
26
- # limitations under the License.
27
-
28
- require 'google/apis/core/multipart'
29
- require 'google/apis/core/http_command'
30
- require 'google/apis/core/upload'
31
- require 'google/apis/core/download'
32
- require 'google/apis/core/composite_io'
33
- require 'addressable/uri'
34
- require 'securerandom'
35
-
36
- module Google
37
- module Apis
38
- module Core
39
- # Wrapper request for batching multiple calls in a single server request
40
- class BatchCommand < HttpCommand
41
- MULTIPART_MIXED = 'multipart/mixed'
42
-
43
- # @param [symbol] method
44
- # HTTP method
45
- # @param [String,Addressable::URI, Addressable::Template] url
46
- # HTTP URL or template
47
- def initialize(method, url)
48
- super(method, url)
49
- @calls = []
50
- @base_id = SecureRandom.uuid
51
- end
52
-
53
- ##
54
- # Add a new call to the batch request.
55
- #
56
- # @param [Google::Apis::Core::HttpCommand] call API Request to add
57
- # @yield [result, err] Result & error when response available
58
- # @return [Google::Apis::Core::BatchCommand] self
59
- def add(call, &block)
60
- ensure_valid_command(call)
61
- @calls << [call, block]
62
- self
63
- end
64
-
65
- protected
66
-
67
- ##
68
- # Deconstruct the batch response and process the individual results
69
- #
70
- # @param [String] content_type
71
- # Content type of body
72
- # @param [String, #read] body
73
- # Response body
74
- # @return [Object]
75
- # Response object
76
- def decode_response_body(content_type, body)
77
- m = /.*boundary=(.+)/.match(content_type)
78
- if m
79
- parts = split_parts(body, m[1])
80
- deserializer = CallDeserializer.new
81
- parts.each_index do |index|
82
- response = deserializer.to_http_response(parts[index])
83
- outer_header = response.shift
84
- call_id = header_to_id(outer_header['Content-ID'].first) || index
85
- call, callback = @calls[call_id]
86
- begin
87
- result = call.process_response(*response) unless call.nil?
88
- success(result, &callback)
89
- rescue => e
90
- error(e, &callback)
91
- end
92
- end
93
- end
94
- nil
95
- end
96
-
97
- def split_parts(body, boundary)
98
- parts = body.split(/\r?\n?--#{Regexp.escape(boundary)}/)
99
- parts[1...-1]
100
- end
101
-
102
- # Encode the batch request
103
- # @return [void]
104
- # @raise [Google::Apis::BatchError] if batch is empty
105
- def prepare!
106
- fail BatchError, 'Cannot make an empty batch request' if @calls.empty?
107
-
108
- serializer = CallSerializer.new
109
- multipart = Multipart.new(content_type: MULTIPART_MIXED)
110
- @calls.each_index do |index|
111
- call, _ = @calls[index]
112
- content_id = id_to_header(index)
113
- io = serializer.to_part(call)
114
- multipart.add_upload(io, content_type: 'application/http', content_id: content_id)
115
- end
116
- self.body = multipart.assemble
117
-
118
- header['Content-Type'] = multipart.content_type
119
- super
120
- end
121
-
122
- def ensure_valid_command(command)
123
- if command.is_a?(Google::Apis::Core::BaseUploadCommand) || command.is_a?(Google::Apis::Core::DownloadCommand)
124
- fail Google::Apis::ClientError, 'Can not include media requests in batch'
125
- end
126
- fail Google::Apis::ClientError, 'Invalid command object' unless command.is_a?(HttpCommand)
127
- end
128
-
129
- def id_to_header(call_id)
130
- return sprintf('<%s+%i>', @base_id, call_id)
131
- end
132
-
133
- def header_to_id(content_id)
134
- match = /<response-.*\+(\d+)>/.match(content_id)
135
- return match[1].to_i if match
136
- return nil
137
- end
138
-
139
- end
140
-
141
- # Wrapper request for batching multiple uploads in a single server request
142
- class BatchUploadCommand < BatchCommand
143
- def ensure_valid_command(command)
144
- fail Google::Apis::ClientError, 'Can only include upload commands in batch' \
145
- unless command.is_a?(Google::Apis::Core::BaseUploadCommand)
146
- end
147
-
148
- def prepare!
149
- header['X-Goog-Upload-Protocol'] = 'batch'
150
- super
151
- end
152
- end
153
-
154
- # Serializes a command for embedding in a multipart batch request
155
- # @private
156
- class CallSerializer
157
- ##
158
- # Serialize a single batched call for assembling the multipart message
159
- #
160
- # @param [Google::Apis::Core::HttpCommand] call
161
- # the call to serialize.
162
- # @return [IO]
163
- # the serialized request
164
- def to_part(call)
165
- call.prepare!
166
- # This will add the Authorization header if needed.
167
- call.apply_request_options(call.header)
168
- parts = []
169
- parts << build_head(call)
170
- parts << build_body(call) unless call.body.nil?
171
- length = parts.inject(0) { |a, e| a + e.length }
172
- Google::Apis::Core::CompositeIO.new(*parts)
173
- end
174
-
175
- protected
176
-
177
- def build_head(call)
178
- request_head = "#{call.method.to_s.upcase} #{Addressable::URI.parse(call.url).request_uri} HTTP/1.1"
179
- call.header.each do |key, value|
180
- request_head << sprintf("\r\n%s: %s", key, value)
181
- end
182
- request_head << sprintf("\r\nHost: %s", call.url.host)
183
- request_head << "\r\n\r\n"
184
- StringIO.new(request_head)
185
- end
186
-
187
- def build_body(call)
188
- return nil if call.body.nil?
189
- return call.body if call.body.respond_to?(:read)
190
- StringIO.new(call.body)
191
- end
192
- end
193
-
194
- # Deconstructs a raw HTTP response part
195
- # @private
196
- class CallDeserializer
197
- # Parse a batched response.
198
- #
199
- # @param [String] call_response
200
- # the response to parse.
201
- # @return [Array<(Fixnum, Hash, String)>]
202
- # Status, header, and response body.
203
- def to_http_response(call_response)
204
- outer_header, outer_body = split_header_and_body(call_response)
205
- status_line, payload = outer_body.split(/\n/, 2)
206
- _, status = status_line.split(' ', 3)
207
-
208
- header, body = split_header_and_body(payload)
209
- [outer_header, status.to_i, header, body]
210
- end
211
-
212
- protected
213
-
214
- # Auxiliary method to split the header from the body in an HTTP response.
215
- #
216
- # @param [String] response
217
- # the response to parse.
218
- # @return [Array<(HTTP::Message::Headers, String)>]
219
- # the header and the body, separately.
220
- def split_header_and_body(response)
221
- header = HTTP::Message::Headers.new
222
- payload = response.lstrip
223
- while payload
224
- line, payload = payload.split(/\n/, 2)
225
- line.sub!(/\s+\z/, '')
226
- break if line.empty?
227
- match = /\A([^:]+):\s*/.match(line)
228
- fail BatchError, sprintf('Invalid header line in response: %s', line) if match.nil?
229
- header[match[1]] = match.post_match
230
- end
231
- [header, payload]
232
- end
233
- end
234
- end
235
- end
236
- end
@@ -1,97 +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
- # Copyright 2015 Google Inc.
15
- #
16
- # Licensed under the Apache License, Version 2.0 (the "License");
17
- # you may not use this file except in compliance with the License.
18
- # You may obtain a copy of the License at
19
- #
20
- # http://www.apache.org/licenses/LICENSE-2.0
21
- #
22
- # Unless required by applicable law or agreed to in writing, software
23
- # distributed under the License is distributed on an "AS IS" BASIS,
24
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25
- # See the License for the specific language governing permissions and
26
- # limitations under the License.
27
-
28
- require 'google/apis/core/http_command'
29
- require 'google/apis/core/upload'
30
- require 'google/apis/core/download'
31
- require 'addressable/uri'
32
- require 'securerandom'
33
- module Google
34
- module Apis
35
- module Core
36
- class CompositeIO
37
- def initialize(*ios)
38
- @ios = ios.flatten
39
- @pos = 0
40
- @index = 0
41
- @sizes = @ios.map(&:size)
42
- end
43
-
44
- def read(length = nil, buf = nil)
45
- buf = buf ? buf.replace('') : ''
46
-
47
- begin
48
- io = @ios[@index]
49
- break if io.nil?
50
- result = io.read(length)
51
- if result
52
- buf << result
53
- if length
54
- length -= result.length
55
- break if length == 0
56
- end
57
- end
58
- @index += 1
59
- end while @index < @ios.length
60
- buf.length > 0 ? buf : nil
61
- end
62
-
63
- def size
64
- @sizes.reduce(:+)
65
- end
66
-
67
- alias_method :length, :size
68
-
69
- def pos
70
- @pos
71
- end
72
-
73
- def pos=(pos)
74
- fail ArgumentError, "Position can not be negative" if pos < 0
75
- @pos = pos
76
- new_index = nil
77
- @ios.each_with_index do |io,idx|
78
- size = io.size
79
- if pos <= size
80
- new_index ||= idx
81
- io.pos = pos
82
- pos = 0
83
- else
84
- io.pos = size
85
- pos -= size
86
- end
87
- end
88
- @index = new_index unless new_index.nil?
89
- end
90
-
91
- def rewind
92
- self.pos = 0
93
- end
94
- end
95
- end
96
- end
97
- end
@@ -1,118 +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 'google/apis/core/api_command'
16
- require 'google/apis/errors'
17
- require 'addressable/uri'
18
-
19
- module Google
20
- module Apis
21
- module Core
22
- # Streaming/resumable media download support
23
- class DownloadCommand < ApiCommand
24
- RANGE_HEADER = 'Range'
25
- OK_STATUS = [200, 201, 206]
26
-
27
- # File or IO to write content to
28
- # @return [String, File, #write]
29
- attr_accessor :download_dest
30
-
31
- # Ensure the download destination is a writable stream.
32
- #
33
- # @return [void]
34
- def prepare!
35
- @state = :start
36
- @download_url = nil
37
- @offset = 0
38
- if download_dest.respond_to?(:write)
39
- @download_io = download_dest
40
- @close_io_on_finish = false
41
- elsif download_dest.is_a?(String)
42
- @download_io = File.open(download_dest, 'wb')
43
- @close_io_on_finish = true
44
- else
45
- @download_io = StringIO.new('', 'wb')
46
- @close_io_on_finish = false
47
- end
48
- super
49
- end
50
-
51
- # Close IO stream when command done. Only closes the stream if it was opened by the command.
52
- def release!
53
- @download_io.close if @close_io_on_finish
54
- end
55
-
56
- # Execute the upload request once. Overrides the default implementation to handle streaming/chunking
57
- # of file content.
58
- #
59
- # @private
60
- # @param [HTTPClient] client
61
- # HTTP client
62
- # @yield [result, err] Result or error if block supplied
63
- # @return [Object]
64
- # @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
65
- # @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
66
- # @raise [Google::Apis::AuthorizationError] Authorization is required
67
- def execute_once(client, &block)
68
- request_header = header.dup
69
- apply_request_options(request_header)
70
- download_offset = nil
71
-
72
- if @offset > 0
73
- logger.debug { sprintf('Resuming download from offset %d', @offset) }
74
- request_header[RANGE_HEADER] = sprintf('bytes=%d-', @offset)
75
- end
76
-
77
- http_res = client.get(url.to_s,
78
- query: query,
79
- header: request_header,
80
- follow_redirect: true) do |res, chunk|
81
- status = res.http_header.status_code.to_i
82
- next unless OK_STATUS.include?(status)
83
-
84
- download_offset ||= (status == 206 ? @offset : 0)
85
- download_offset += chunk.bytesize
86
-
87
- if download_offset - chunk.bytesize == @offset
88
- next_chunk = chunk
89
- else
90
- # Oh no! Requested a chunk, but received the entire content
91
- chunk_index = @offset - (download_offset - chunk.bytesize)
92
- next_chunk = chunk.byteslice(chunk_index..-1)
93
- next if next_chunk.nil?
94
- end
95
-
96
- # logger.debug { sprintf('Writing chunk (%d bytes, %d total)', chunk.length, bytes_read) }
97
- @download_io.write(next_chunk)
98
-
99
- @offset += next_chunk.bytesize
100
- end
101
-
102
- @download_io.flush if @download_io.respond_to?(:flush)
103
-
104
- if @close_io_on_finish
105
- result = nil
106
- else
107
- result = @download_io
108
- end
109
- check_status(http_res.status.to_i, http_res.header, http_res.body)
110
- success(result, &block)
111
- rescue => e
112
- @download_io.flush if @download_io.respond_to?(:flush)
113
- error(e, rethrow: true, &block)
114
- end
115
- end
116
- end
117
- end
118
- end