google-api-client 0.9.pre3 → 0.9.pre4
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +14 -2
- data/Gemfile +4 -0
- data/MIGRATING.md +1 -1
- data/README.md +17 -3
- data/api_names.yaml +127 -14
- data/api_names_out.yaml +5442 -710
- data/bin/generate-api +16 -14
- data/generated/google/apis/adexchangebuyer_v1_3.rb +1 -1
- data/generated/google/apis/adexchangebuyer_v1_3/classes.rb +213 -2
- data/generated/google/apis/adexchangebuyer_v1_3/representations.rb +71 -0
- data/generated/google/apis/adexchangebuyer_v1_3/service.rb +21 -42
- data/generated/google/apis/adexchangeseller_v2_0.rb +1 -1
- data/generated/google/apis/adexchangeseller_v2_0/service.rb +15 -29
- data/generated/google/apis/admin_datatransfer_v1.rb +37 -0
- data/generated/google/apis/admin_datatransfer_v1/classes.rb +267 -0
- data/generated/google/apis/admin_datatransfer_v1/representations.rb +118 -0
- data/generated/google/apis/admin_datatransfer_v1/service.rb +262 -0
- data/generated/google/apis/admin_directory_v1.rb +25 -1
- data/generated/google/apis/admin_directory_v1/classes.rb +718 -0
- data/generated/google/apis/admin_directory_v1/representations.rb +244 -0
- data/generated/google/apis/admin_directory_v1/service.rb +1522 -509
- data/generated/google/apis/admin_reports_v1.rb +1 -1
- data/generated/google/apis/admin_reports_v1/service.rb +5 -10
- data/generated/google/apis/adsense_v1_4.rb +1 -1
- data/generated/google/apis/adsense_v1_4/classes.rb +6 -0
- data/generated/google/apis/adsense_v1_4/representations.rb +1 -0
- data/generated/google/apis/adsense_v1_4/service.rb +40 -78
- data/generated/google/apis/adsensehost_v4_1.rb +1 -1
- data/generated/google/apis/adsensehost_v4_1/service.rb +26 -52
- data/generated/google/apis/analytics_v3.rb +1 -1
- data/generated/google/apis/analytics_v3/classes.rb +11 -13
- data/generated/google/apis/analytics_v3/service.rb +84 -158
- data/generated/google/apis/androidenterprise_v1.rb +2 -2
- data/generated/google/apis/androidenterprise_v1/classes.rb +276 -8
- data/generated/google/apis/androidenterprise_v1/representations.rb +106 -0
- data/generated/google/apis/androidenterprise_v1/service.rb +715 -97
- data/generated/google/apis/androidpublisher_v2.rb +1 -1
- data/generated/google/apis/androidpublisher_v2/classes.rb +2 -2
- data/generated/google/apis/androidpublisher_v2/service.rb +55 -107
- data/generated/google/apis/appengine_v1beta4.rb +35 -0
- data/generated/google/apis/appengine_v1beta4/classes.rb +1532 -0
- data/generated/google/apis/appengine_v1beta4/representations.rb +526 -0
- data/generated/google/apis/appengine_v1beta4/service.rb +476 -0
- data/generated/google/apis/appsactivity_v1.rb +1 -1
- data/generated/google/apis/appsactivity_v1/service.rb +1 -2
- data/generated/google/apis/appstate_v1.rb +1 -1
- data/generated/google/apis/appstate_v1/service.rb +6 -11
- data/generated/google/apis/autoscaler_v1beta2/service.rb +10 -20
- data/generated/google/apis/bigquery_v2.rb +4 -1
- data/generated/google/apis/bigquery_v2/classes.rb +231 -16
- data/generated/google/apis/bigquery_v2/representations.rb +62 -0
- data/generated/google/apis/bigquery_v2/service.rb +24 -45
- data/generated/google/apis/blogger_v3/service.rb +33 -66
- data/generated/google/apis/books_v1.rb +1 -1
- data/generated/google/apis/books_v1/classes.rb +441 -0
- data/generated/google/apis/books_v1/representations.rb +177 -0
- data/generated/google/apis/books_v1/service.rb +210 -90
- data/generated/google/apis/calendar_v3.rb +1 -1
- data/generated/google/apis/calendar_v3/classes.rb +34 -18
- data/generated/google/apis/calendar_v3/service.rb +118 -103
- data/generated/google/apis/civicinfo_v2.rb +1 -1
- data/generated/google/apis/civicinfo_v2/classes.rb +12 -3
- data/generated/google/apis/civicinfo_v2/representations.rb +1 -0
- data/generated/google/apis/civicinfo_v2/service.rb +5 -10
- data/generated/google/apis/classroom_v1.rb +49 -0
- data/generated/google/apis/classroom_v1/classes.rb +512 -0
- data/generated/google/apis/classroom_v1/representations.rb +217 -0
- data/generated/google/apis/classroom_v1/service.rb +970 -0
- data/generated/google/apis/cloudbilling_v1.rb +35 -0
- data/generated/google/apis/cloudbilling_v1/classes.rb +169 -0
- data/generated/google/apis/cloudbilling_v1/representations.rb +79 -0
- data/generated/google/apis/cloudbilling_v1/service.rb +258 -0
- data/generated/google/apis/clouddebugger_v2.rb +41 -0
- data/generated/google/apis/clouddebugger_v2/classes.rb +1004 -0
- data/generated/google/apis/clouddebugger_v2/representations.rb +410 -0
- data/generated/google/apis/clouddebugger_v2/service.rb +370 -0
- data/generated/google/apis/cloudmonitoring_v2beta2.rb +1 -1
- data/generated/google/apis/cloudmonitoring_v2beta2/service.rb +6 -12
- data/generated/google/apis/cloudresourcemanager_v1beta1.rb +5 -2
- data/generated/google/apis/cloudresourcemanager_v1beta1/classes.rb +173 -249
- data/generated/google/apis/cloudresourcemanager_v1beta1/representations.rb +36 -68
- data/generated/google/apis/cloudresourcemanager_v1beta1/service.rb +293 -80
- data/generated/google/apis/cloudtrace_v1.rb +35 -0
- data/generated/google/apis/cloudtrace_v1/classes.rb +188 -0
- data/generated/google/apis/cloudtrace_v1/representations.rb +92 -0
- data/generated/google/apis/cloudtrace_v1/service.rb +190 -0
- data/generated/google/apis/clouduseraccounts_beta.rb +43 -0
- data/generated/google/apis/clouduseraccounts_beta/classes.rb +823 -0
- data/generated/google/apis/clouduseraccounts_beta/representations.rb +313 -0
- data/generated/google/apis/clouduseraccounts_beta/service.rb +854 -0
- data/generated/google/apis/compute_beta.rb +49 -0
- data/generated/google/apis/compute_beta/classes.rb +9128 -0
- data/generated/google/apis/compute_beta/representations.rb +3048 -0
- data/generated/google/apis/compute_beta/service.rb +10154 -0
- data/generated/google/apis/compute_v1.rb +1 -1
- data/generated/google/apis/compute_v1/classes.rb +1305 -520
- data/generated/google/apis/compute_v1/representations.rb +122 -15
- data/generated/google/apis/compute_v1/service.rb +2202 -1085
- data/generated/google/apis/container_v1.rb +1 -1
- data/generated/google/apis/container_v1/classes.rb +56 -31
- data/generated/google/apis/container_v1/representations.rb +12 -0
- data/generated/google/apis/container_v1/service.rb +62 -41
- data/generated/google/apis/content_v2.rb +2 -2
- data/generated/google/apis/content_v2/classes.rb +2252 -56
- data/generated/google/apis/content_v2/representations.rb +917 -87
- data/generated/google/apis/content_v2/service.rb +680 -85
- data/generated/google/apis/coordinate_v1.rb +1 -1
- data/generated/google/apis/coordinate_v1/service.rb +16 -25
- data/generated/google/apis/customsearch_v1/service.rb +1 -2
- data/generated/google/apis/datastore_v1beta2.rb +1 -1
- data/generated/google/apis/datastore_v1beta2/service.rb +12 -18
- data/generated/google/apis/deploymentmanager_v2.rb +44 -0
- data/generated/google/apis/deploymentmanager_v2/classes.rb +1089 -0
- data/generated/google/apis/deploymentmanager_v2/representations.rb +422 -0
- data/generated/google/apis/deploymentmanager_v2/service.rb +857 -0
- data/generated/google/apis/deploymentmanager_v2beta2.rb +5 -2
- data/generated/google/apis/deploymentmanager_v2beta2/classes.rb +22 -3
- data/generated/google/apis/deploymentmanager_v2beta2/representations.rb +3 -0
- data/generated/google/apis/deploymentmanager_v2beta2/service.rb +14 -27
- data/generated/google/apis/dfareporting_v2_1.rb +1 -1
- data/generated/google/apis/dfareporting_v2_1/classes.rb +29 -14
- data/generated/google/apis/dfareporting_v2_1/service.rb +196 -389
- data/generated/google/apis/discovery_v1/classes.rb +7 -0
- data/generated/google/apis/discovery_v1/representations.rb +1 -0
- data/generated/google/apis/discovery_v1/service.rb +2 -4
- data/generated/google/apis/dns_v1.rb +4 -1
- data/generated/google/apis/dns_v1/service.rb +9 -18
- data/generated/google/apis/doubleclickbidmanager_v1.rb +1 -1
- data/generated/google/apis/doubleclickbidmanager_v1/classes.rb +9 -2
- data/generated/google/apis/doubleclickbidmanager_v1/representations.rb +1 -0
- data/generated/google/apis/doubleclickbidmanager_v1/service.rb +8 -16
- data/generated/google/apis/doubleclicksearch_v2.rb +1 -1
- data/generated/google/apis/doubleclicksearch_v2/classes.rb +15 -6
- data/generated/google/apis/doubleclicksearch_v2/representations.rb +1 -0
- data/generated/google/apis/doubleclicksearch_v2/service.rb +13 -23
- data/generated/google/apis/drive_v2.rb +1 -1
- data/generated/google/apis/drive_v2/classes.rb +73 -30
- data/generated/google/apis/drive_v2/representations.rb +14 -0
- data/generated/google/apis/drive_v2/service.rb +139 -135
- data/generated/google/apis/drive_v3.rb +55 -0
- data/generated/google/apis/drive_v3/classes.rb +1534 -0
- data/generated/google/apis/drive_v3/representations.rb +497 -0
- data/generated/google/apis/drive_v3/service.rb +1541 -0
- data/generated/google/apis/fitness_v1.rb +1 -1
- data/generated/google/apis/fitness_v1/service.rb +14 -27
- data/generated/google/apis/fusiontables_v2/service.rb +40 -73
- data/generated/google/apis/games_configuration_v1configuration.rb +1 -1
- data/generated/google/apis/games_configuration_v1configuration/service.rb +14 -27
- data/generated/google/apis/games_management_v1management.rb +37 -0
- data/generated/google/apis/games_management_v1management/classes.rb +524 -0
- data/generated/google/apis/games_management_v1management/representations.rb +231 -0
- data/generated/google/apis/games_management_v1management/service.rb +994 -0
- data/generated/google/apis/games_v1.rb +1 -1
- data/generated/google/apis/games_v1/classes.rb +39 -0
- data/generated/google/apis/games_v1/representations.rb +14 -0
- data/generated/google/apis/games_v1/service.rb +93 -109
- data/generated/google/apis/gan_v1beta1/service.rb +10 -20
- data/generated/google/apis/genomics_v1.rb +5 -3
- data/generated/google/apis/genomics_v1/classes.rb +519 -200
- data/generated/google/apis/genomics_v1/representations.rb +126 -13
- data/generated/google/apis/genomics_v1/service.rb +392 -236
- data/generated/google/apis/gmail_v1.rb +4 -1
- data/generated/google/apis/gmail_v1/service.rb +39 -71
- data/generated/google/apis/groupsmigration_v1/service.rb +2 -3
- data/generated/google/apis/groupssettings_v1/service.rb +3 -6
- data/generated/google/apis/identitytoolkit_v3.rb +1 -1
- data/generated/google/apis/identitytoolkit_v3/classes.rb +125 -0
- data/generated/google/apis/identitytoolkit_v3/representations.rb +37 -0
- data/generated/google/apis/identitytoolkit_v3/service.rb +44 -24
- data/generated/google/apis/kgsearch_v1.rb +32 -0
- data/generated/google/apis/kgsearch_v1/classes.rb +59 -0
- data/generated/google/apis/kgsearch_v1/representations.rb +39 -0
- data/generated/google/apis/kgsearch_v1/service.rb +111 -0
- data/generated/google/apis/licensing_v1.rb +1 -1
- data/generated/google/apis/licensing_v1/service.rb +7 -14
- data/generated/google/apis/logging_v1beta3.rb +16 -4
- data/generated/google/apis/logging_v1beta3/classes.rb +620 -46
- data/generated/google/apis/logging_v1beta3/representations.rb +144 -0
- data/generated/google/apis/logging_v1beta3/service.rb +435 -104
- data/generated/google/apis/manager_v1beta2.rb +3 -0
- data/generated/google/apis/manager_v1beta2/service.rb +8 -16
- data/generated/google/apis/mapsengine_v1.rb +1 -1
- data/generated/google/apis/mapsengine_v1/service.rb +85 -162
- data/generated/google/apis/mirror_v1.rb +1 -1
- data/generated/google/apis/mirror_v1/service.rb +28 -52
- data/generated/google/apis/oauth2_v2.rb +1 -1
- data/generated/google/apis/oauth2_v2/service.rb +4 -8
- data/generated/google/apis/pagespeedonline_v2/service.rb +1 -2
- data/generated/google/apis/partners_v2.rb +32 -0
- data/generated/google/apis/partners_v2/classes.rb +942 -0
- data/generated/google/apis/partners_v2/representations.rb +402 -0
- data/generated/google/apis/partners_v2/service.rb +400 -0
- data/generated/google/apis/plus_domains_v1.rb +1 -1
- data/generated/google/apis/plus_domains_v1/classes.rb +207 -0
- data/generated/google/apis/plus_domains_v1/representations.rb +114 -0
- data/generated/google/apis/plus_domains_v1/service.rb +21 -41
- data/generated/google/apis/plus_v1.rb +1 -1
- data/generated/google/apis/plus_v1/classes.rb +207 -0
- data/generated/google/apis/plus_v1/representations.rb +114 -0
- data/generated/google/apis/plus_v1/service.rb +11 -56
- data/generated/google/apis/prediction_v1_6.rb +1 -1
- data/generated/google/apis/prediction_v1_6/service.rb +8 -16
- data/generated/google/apis/proximitybeacon_v1beta1.rb +31 -0
- data/generated/google/apis/proximitybeacon_v1beta1/classes.rb +639 -0
- data/generated/google/apis/proximitybeacon_v1beta1/representations.rb +274 -0
- data/generated/google/apis/proximitybeacon_v1beta1/service.rb +591 -0
- data/generated/google/apis/pubsub_v1.rb +37 -0
- data/generated/google/apis/pubsub_v1/classes.rb +614 -0
- data/generated/google/apis/pubsub_v1/representations.rb +281 -0
- data/generated/google/apis/pubsub_v1/service.rb +774 -0
- data/generated/google/apis/pubsub_v1beta2.rb +1 -1
- data/generated/google/apis/pubsub_v1beta2/classes.rb +78 -283
- data/generated/google/apis/pubsub_v1beta2/representations.rb +1 -85
- data/generated/google/apis/pubsub_v1beta2/service.rb +79 -87
- data/generated/google/apis/qpx_express_v1/service.rb +1 -2
- data/generated/google/apis/replicapool_v1beta2.rb +3 -0
- data/generated/google/apis/replicapool_v1beta2/service.rb +12 -24
- data/generated/google/apis/replicapoolupdater_v1beta1.rb +4 -1
- data/generated/google/apis/replicapoolupdater_v1beta1/classes.rb +46 -2
- data/generated/google/apis/replicapoolupdater_v1beta1/representations.rb +16 -0
- data/generated/google/apis/replicapoolupdater_v1beta1/service.rb +58 -18
- data/generated/google/apis/reseller_v1.rb +1 -1
- data/generated/google/apis/reseller_v1/classes.rb +19 -1
- data/generated/google/apis/reseller_v1/representations.rb +1 -0
- data/generated/google/apis/reseller_v1/service.rb +16 -30
- data/generated/google/apis/resourceviews_v1beta2.rb +3 -0
- data/generated/google/apis/resourceviews_v1beta2/service.rb +16 -27
- data/generated/google/apis/script_v1.rb +61 -0
- data/generated/google/apis/script_v1/classes.rb +259 -0
- data/generated/google/apis/script_v1/representations.rb +106 -0
- data/generated/google/apis/script_v1/service.rb +98 -0
- data/generated/google/apis/site_verification_v1.rb +1 -1
- data/generated/google/apis/site_verification_v1/service.rb +8 -15
- data/generated/google/apis/sqladmin_v1beta4.rb +1 -1
- data/generated/google/apis/sqladmin_v1beta4/classes.rb +186 -2
- data/generated/google/apis/sqladmin_v1beta4/representations.rb +70 -0
- data/generated/google/apis/sqladmin_v1beta4/service.rb +166 -75
- data/generated/google/apis/storage_v1.rb +5 -2
- data/generated/google/apis/storage_v1/classes.rb +47 -4
- data/generated/google/apis/storage_v1/representations.rb +18 -0
- data/generated/google/apis/storage_v1/service.rb +77 -94
- data/generated/google/apis/storagetransfer_v1.rb +35 -0
- data/generated/google/apis/storagetransfer_v1/classes.rb +1046 -0
- data/generated/google/apis/storagetransfer_v1/representations.rb +370 -0
- data/generated/google/apis/storagetransfer_v1/service.rb +473 -0
- data/generated/google/apis/tagmanager_v1.rb +1 -1
- data/generated/google/apis/tagmanager_v1/classes.rb +189 -31
- data/generated/google/apis/tagmanager_v1/representations.rb +69 -15
- data/generated/google/apis/tagmanager_v1/service.rb +114 -275
- data/generated/google/apis/taskqueue_v1beta2/service.rb +8 -16
- data/generated/google/apis/tasks_v1/service.rb +14 -28
- data/generated/google/apis/translate_v2/service.rb +3 -6
- data/generated/google/apis/urlshortener_v1/service.rb +3 -6
- data/generated/google/apis/webmasters_v3.rb +3 -3
- data/generated/google/apis/webmasters_v3/classes.rb +4 -4
- data/generated/google/apis/webmasters_v3/service.rb +16 -30
- data/generated/google/apis/youtube_analytics_v1.rb +1 -1
- data/generated/google/apis/youtube_analytics_v1/classes.rb +6 -0
- data/generated/google/apis/youtube_analytics_v1/representations.rb +1 -0
- data/generated/google/apis/youtube_analytics_v1/service.rb +16 -21
- data/generated/google/apis/youtube_v3.rb +1 -1
- data/generated/google/apis/youtube_v3/classes.rb +111 -78
- data/generated/google/apis/youtube_v3/representations.rb +2 -0
- data/generated/google/apis/youtube_v3/service.rb +78 -246
- data/generated/google/apis/youtubereporting_v1.rb +38 -0
- data/generated/google/apis/youtubereporting_v1/classes.rb +258 -0
- data/generated/google/apis/youtubereporting_v1/representations.rb +128 -0
- data/generated/google/apis/youtubereporting_v1/service.rb +364 -0
- data/google-api-client.gemspec +3 -3
- data/lib/google/api_client/auth/installed_app.rb +2 -2
- data/lib/google/api_client/auth/key_utils.rb +1 -0
- data/lib/google/api_client/auth/storage.rb +1 -0
- data/lib/google/api_client/auth/storages/file_store.rb +1 -0
- data/lib/google/api_client/auth/storages/redis_store.rb +1 -0
- data/lib/google/api_client/client_secrets.rb +4 -5
- data/lib/google/apis/core/api_command.rb +2 -2
- data/lib/google/apis/core/base_service.rb +1 -0
- data/lib/google/apis/core/batch.rb +25 -8
- data/lib/google/apis/core/download.rb +1 -1
- data/lib/google/apis/core/http_command.rb +24 -12
- data/lib/google/apis/core/multipart.rb +20 -6
- data/lib/google/apis/core/upload.rb +11 -4
- data/lib/google/apis/generator/annotator.rb +29 -10
- data/lib/google/apis/generator/helpers.rb +1 -1
- data/lib/google/apis/generator/templates/_method.tmpl +5 -6
- data/lib/google/apis/options.rb +7 -3
- data/lib/google/apis/version.rb +1 -1
- data/samples/calendar/calendar.rb +1 -1
- data/samples/drive/drive.rb +9 -2
- data/samples/pubsub/pubsub.rb +5 -6
- data/samples/translate/translate.rb +1 -5
- data/script/generate +20 -5
- data/spec/fixtures/files/child/.gitignore +0 -0
- data/spec/fixtures/files/invalid.json +1 -0
- data/spec/google/api_client/client_secrets_spec.rb +38 -1
- data/spec/google/apis/core/batch_spec.rb +22 -8
- data/spec/google/apis/core/download_spec.rb +13 -0
- data/spec/google/apis/core/http_command_spec.rb +26 -9
- data/spec/google/apis/core/upload_spec.rb +65 -17
- data/spec/google/apis/options_spec.rb +8 -0
- data/spec/integration_tests/adsense_spec.rb +28 -0
- data/spec/integration_tests/pubsub_spec.rb +3 -3
- data/spec/spec_helper.rb +5 -1
- data/third_party/hurley_patches.rb +103 -0
- metadata +87 -7
data/google-api-client.gemspec
CHANGED
|
@@ -15,16 +15,16 @@ Gem::Specification.new do |spec|
|
|
|
15
15
|
spec.files = `git ls-files -z`.split("\x0")
|
|
16
16
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
18
|
-
spec.require_paths = ['lib', 'generated']
|
|
18
|
+
spec.require_paths = ['lib', 'generated', 'third_party']
|
|
19
19
|
|
|
20
|
-
spec.add_runtime_dependency 'representable', '~> 2.
|
|
20
|
+
spec.add_runtime_dependency 'representable', '~> 2.3.0'
|
|
21
21
|
spec.add_runtime_dependency 'multi_json', '~> 1.11'
|
|
22
22
|
spec.add_runtime_dependency 'retriable', '~> 2.0'
|
|
23
23
|
spec.add_runtime_dependency 'activesupport', '>= 3.2'
|
|
24
24
|
spec.add_runtime_dependency 'addressable', '~> 2.3'
|
|
25
25
|
spec.add_runtime_dependency 'mime-types', '>= 1.6'
|
|
26
26
|
spec.add_runtime_dependency 'hurley', '~> 0.1'
|
|
27
|
-
spec.add_runtime_dependency 'googleauth', '~> 0.
|
|
27
|
+
spec.add_runtime_dependency 'googleauth', '~> 0.5'
|
|
28
28
|
spec.add_runtime_dependency 'thor', '~> 0.19'
|
|
29
29
|
spec.add_runtime_dependency 'memoist', '~> 0.11'
|
|
30
30
|
end
|
|
@@ -33,6 +33,7 @@ module Google
|
|
|
33
33
|
# drive = Drive::DriveService.new
|
|
34
34
|
# drive.authorization = authorization
|
|
35
35
|
#
|
|
36
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
36
37
|
class InstalledAppFlow
|
|
37
38
|
|
|
38
39
|
RESPONSE_BODY = <<-HTML
|
|
@@ -85,7 +86,7 @@ module Google
|
|
|
85
86
|
#
|
|
86
87
|
# @return [Signet::OAuth2::Client]
|
|
87
88
|
# Authorization instance, nil if user cancelled.
|
|
88
|
-
def authorize(storage=nil, options=
|
|
89
|
+
def authorize(storage=nil, options={})
|
|
89
90
|
auth = @authorization
|
|
90
91
|
|
|
91
92
|
server = WEBrick::HTTPServer.new(
|
|
@@ -125,4 +126,3 @@ module Google
|
|
|
125
126
|
|
|
126
127
|
end
|
|
127
128
|
end
|
|
128
|
-
|
|
@@ -18,6 +18,7 @@ module Google
|
|
|
18
18
|
# Helper for loading keys from the PKCS12 files downloaded when
|
|
19
19
|
# setting up service accounts at the APIs Console.
|
|
20
20
|
#
|
|
21
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
21
22
|
module KeyUtils
|
|
22
23
|
##
|
|
23
24
|
# Loads a key from PKCS12 file, assuming a single private key
|
|
@@ -21,6 +21,7 @@ module Google
|
|
|
21
21
|
# JSON serialized file. Meant to resemble the serialized format
|
|
22
22
|
# http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.file.Storage-class.html
|
|
23
23
|
#
|
|
24
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
24
25
|
class Storage
|
|
25
26
|
|
|
26
27
|
AUTHORIZATION_URI = 'https://accounts.google.com/o/oauth2/auth'
|
|
@@ -21,6 +21,7 @@ module Google
|
|
|
21
21
|
# JSON serialized file. Meant to resemble the serialized format
|
|
22
22
|
# http://google-api-python-client.googlecode.com/hg/docs/epy/oauth2client.file.Storage-class.html
|
|
23
23
|
#
|
|
24
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
24
25
|
class FileStore
|
|
25
26
|
|
|
26
27
|
attr_accessor :path
|
|
@@ -23,7 +23,7 @@ module Google
|
|
|
23
23
|
# inspired by the Google API Python client.
|
|
24
24
|
#
|
|
25
25
|
# @see https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
|
|
26
|
-
#
|
|
26
|
+
# @deprecated Use google-auth-library-ruby instead
|
|
27
27
|
# @example
|
|
28
28
|
# {
|
|
29
29
|
# "web": {
|
|
@@ -46,7 +46,6 @@ module Google
|
|
|
46
46
|
# }
|
|
47
47
|
# }
|
|
48
48
|
class ClientSecrets
|
|
49
|
-
|
|
50
49
|
##
|
|
51
50
|
# Reads client configuration from a file
|
|
52
51
|
#
|
|
@@ -77,7 +76,7 @@ module Google
|
|
|
77
76
|
end
|
|
78
77
|
|
|
79
78
|
##
|
|
80
|
-
#
|
|
79
|
+
# Initialize OAuth client settings.
|
|
81
80
|
#
|
|
82
81
|
# @param [Hash] options
|
|
83
82
|
# Parsed client secrets files
|
|
@@ -122,7 +121,7 @@ module Google
|
|
|
122
121
|
def to_json
|
|
123
122
|
return MultiJson.dump(to_hash)
|
|
124
123
|
end
|
|
125
|
-
|
|
124
|
+
|
|
126
125
|
def to_hash
|
|
127
126
|
{
|
|
128
127
|
self.flow => ({
|
|
@@ -147,7 +146,7 @@ module Google
|
|
|
147
146
|
end
|
|
148
147
|
}
|
|
149
148
|
end
|
|
150
|
-
|
|
149
|
+
|
|
151
150
|
def to_authorization
|
|
152
151
|
gem 'signet', '>= 0.4.0'
|
|
153
152
|
require 'signet/oauth_2/client'
|
|
@@ -96,8 +96,8 @@ module Google
|
|
|
96
96
|
if error
|
|
97
97
|
message = error['reason'] if error.has_key?('reason')
|
|
98
98
|
raise Google::Apis::RateLimitError.new(message,
|
|
99
|
-
status_code: status,
|
|
100
|
-
header: header,
|
|
99
|
+
status_code: status,
|
|
100
|
+
header: header,
|
|
101
101
|
body: body) if RATE_LIMIT_ERRORS.include?(message)
|
|
102
102
|
end
|
|
103
103
|
super(status, header, body, message)
|
|
@@ -292,6 +292,7 @@ module Google
|
|
|
292
292
|
def new_client
|
|
293
293
|
client = Hurley::Client.new
|
|
294
294
|
client.request_options.timeout = request_options.timeout_sec
|
|
295
|
+
client.request_options.open_timeout = request_options.open_timeout_sec
|
|
295
296
|
client.request_options.proxy = client_options.proxy_url
|
|
296
297
|
client.request_options.query_class = Hurley::Query::Flat
|
|
297
298
|
client.ssl_options.ca_file = File.join(Google::Apis::ROOT, 'lib', 'cacerts.pem')
|
|
@@ -31,7 +31,7 @@ require 'google/apis/core/http_command'
|
|
|
31
31
|
require 'google/apis/core/upload'
|
|
32
32
|
require 'google/apis/core/download'
|
|
33
33
|
require 'addressable/uri'
|
|
34
|
-
|
|
34
|
+
require 'securerandom'
|
|
35
35
|
module Google
|
|
36
36
|
module Apis
|
|
37
37
|
module Core
|
|
@@ -47,6 +47,7 @@ module Google
|
|
|
47
47
|
def initialize(method, url)
|
|
48
48
|
super(method, url)
|
|
49
49
|
@calls = []
|
|
50
|
+
@base_id = SecureRandom.uuid
|
|
50
51
|
end
|
|
51
52
|
|
|
52
53
|
##
|
|
@@ -78,9 +79,12 @@ module Google
|
|
|
78
79
|
parts = split_parts(body, m[1])
|
|
79
80
|
deserializer = CallDeserializer.new
|
|
80
81
|
parts.each_index do |index|
|
|
81
|
-
|
|
82
|
+
response = deserializer.to_http_response(parts[index])
|
|
83
|
+
outer_header = response.shift
|
|
84
|
+
call_id = header_to_id(outer_header[:content_id]) || index
|
|
85
|
+
call, callback = @calls[call_id]
|
|
82
86
|
begin
|
|
83
|
-
result = call.process_response(*
|
|
87
|
+
result = call.process_response(*response) unless call.nil?
|
|
84
88
|
success(result, &callback)
|
|
85
89
|
rescue => e
|
|
86
90
|
error(e, &callback)
|
|
@@ -103,9 +107,11 @@ module Google
|
|
|
103
107
|
|
|
104
108
|
serializer = CallSerializer.new
|
|
105
109
|
multipart = Multipart.new(boundary: BATCH_BOUNDARY, content_type: MULTIPART_MIXED)
|
|
106
|
-
@calls.
|
|
110
|
+
@calls.each_index do |index|
|
|
111
|
+
call, _ = @calls[index]
|
|
112
|
+
content_id = id_to_header(index)
|
|
107
113
|
io = serializer.to_upload_io(call)
|
|
108
|
-
multipart.add_upload(io)
|
|
114
|
+
multipart.add_upload(io, content_id: content_id)
|
|
109
115
|
end
|
|
110
116
|
self.body = multipart.assemble
|
|
111
117
|
|
|
@@ -120,6 +126,17 @@ module Google
|
|
|
120
126
|
end
|
|
121
127
|
fail Google::Apis::ClientError, 'Invalid command object' unless command.is_a?(HttpCommand)
|
|
122
128
|
end
|
|
129
|
+
|
|
130
|
+
def id_to_header(call_id)
|
|
131
|
+
return sprintf('<%s+%i>', @base_id, call_id)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def header_to_id(content_id)
|
|
135
|
+
match = /<response-.*\+(\d+)>/.match(content_id)
|
|
136
|
+
return match[1].to_i if match
|
|
137
|
+
return nil
|
|
138
|
+
end
|
|
139
|
+
|
|
123
140
|
end
|
|
124
141
|
|
|
125
142
|
# Wrapper request for batching multiple uploads in a single server request
|
|
@@ -180,19 +197,19 @@ module Google
|
|
|
180
197
|
# Deconstructs a raw HTTP response part
|
|
181
198
|
# @private
|
|
182
199
|
class CallDeserializer
|
|
183
|
-
#
|
|
200
|
+
# Parse a batched response.
|
|
184
201
|
#
|
|
185
202
|
# @param [String] call_response
|
|
186
203
|
# the response to parse.
|
|
187
204
|
# @return [Array<(Fixnum, Hurley::Header, String)>]
|
|
188
205
|
# Status, header, and response body.
|
|
189
206
|
def to_http_response(call_response)
|
|
190
|
-
|
|
207
|
+
outer_header, outer_body = split_header_and_body(call_response)
|
|
191
208
|
status_line, payload = outer_body.split(/\n/, 2)
|
|
192
209
|
_, status = status_line.split(' ', 3)
|
|
193
210
|
|
|
194
211
|
header, body = split_header_and_body(payload)
|
|
195
|
-
[status.to_i, header, body]
|
|
212
|
+
[outer_header, status.to_i, header, body]
|
|
196
213
|
end
|
|
197
214
|
|
|
198
215
|
protected
|
|
@@ -71,7 +71,7 @@ module Google
|
|
|
71
71
|
logger.debug { sprintf('Resuming download from offset %d', @offset) }
|
|
72
72
|
req.header[RANGE_HEADER] = sprintf('bytes=%d-', @offset)
|
|
73
73
|
end
|
|
74
|
-
req.on_body do |res, chunk|
|
|
74
|
+
req.on_body(200, 201) do |res, chunk|
|
|
75
75
|
check_status(res.status_code, chunk) unless res.status_code.nil?
|
|
76
76
|
logger.debug { sprintf('Writing chunk (%d bytes)', chunk.length) }
|
|
77
77
|
@offset += chunk.length
|
|
@@ -19,6 +19,7 @@ require 'google/apis/errors'
|
|
|
19
19
|
require 'retriable'
|
|
20
20
|
require 'hurley'
|
|
21
21
|
require 'hurley/addressable'
|
|
22
|
+
require 'hurley_patches'
|
|
22
23
|
require 'google/apis/core/logging'
|
|
23
24
|
require 'pp'
|
|
24
25
|
|
|
@@ -91,7 +92,6 @@ module Google
|
|
|
91
92
|
# @raise [Google::Apis::AuthorizationError] Authorization is required
|
|
92
93
|
def execute(client)
|
|
93
94
|
prepare!
|
|
94
|
-
proc = block_given? ? Proc.new : nil
|
|
95
95
|
begin
|
|
96
96
|
Retriable.retriable tries: options.retries + 1,
|
|
97
97
|
base_interval: 1,
|
|
@@ -104,11 +104,19 @@ module Google
|
|
|
104
104
|
Retriable.retriable tries: auth_tries,
|
|
105
105
|
on: [Google::Apis::AuthorizationError],
|
|
106
106
|
on_retry: proc { |*| refresh_authorization } do
|
|
107
|
-
|
|
107
|
+
execute_once(client).tap do |result|
|
|
108
|
+
if block_given?
|
|
109
|
+
yield result, nil
|
|
110
|
+
end
|
|
111
|
+
end
|
|
108
112
|
end
|
|
109
113
|
end
|
|
110
114
|
rescue => e
|
|
111
|
-
|
|
115
|
+
if block_given?
|
|
116
|
+
yield nil, e
|
|
117
|
+
else
|
|
118
|
+
raise e
|
|
119
|
+
end
|
|
112
120
|
end
|
|
113
121
|
ensure
|
|
114
122
|
release!
|
|
@@ -136,7 +144,7 @@ module Google
|
|
|
136
144
|
def prepare!
|
|
137
145
|
header.update(options.header) if options && options.header
|
|
138
146
|
self.url = url.expand(params) if url.is_a?(Addressable::Template)
|
|
139
|
-
url.query_values = query
|
|
147
|
+
url.query_values = query.merge(url.query_values || {})
|
|
140
148
|
end
|
|
141
149
|
|
|
142
150
|
# Release any resources used by this command
|
|
@@ -167,7 +175,7 @@ module Google
|
|
|
167
175
|
#
|
|
168
176
|
# @param [Fixnum] status
|
|
169
177
|
# HTTP status code of response
|
|
170
|
-
# @param
|
|
178
|
+
# @param
|
|
171
179
|
# @param [Hurley::Header] header
|
|
172
180
|
# HTTP response headers
|
|
173
181
|
# @param [String] body
|
|
@@ -184,16 +192,16 @@ module Google
|
|
|
184
192
|
when 200...300
|
|
185
193
|
nil
|
|
186
194
|
when 301, 302, 303, 307
|
|
187
|
-
message ||= sprintf('Redirect to %s', header[:location])
|
|
195
|
+
message ||= sprintf('Redirect to %s', header[:location])
|
|
188
196
|
raise Google::Apis::RedirectError.new(message, status_code: status, header: header, body: body)
|
|
189
197
|
when 401
|
|
190
198
|
message ||= 'Unauthorized'
|
|
191
199
|
raise Google::Apis::AuthorizationError.new(message, status_code: status, header: header, body: body)
|
|
192
200
|
when 304, 400, 402...500
|
|
193
|
-
message ||= 'Invalid request'
|
|
201
|
+
message ||= 'Invalid request'
|
|
194
202
|
raise Google::Apis::ClientError.new(message, status_code: status, header: header, body: body)
|
|
195
203
|
when 500...600
|
|
196
|
-
message ||= 'Server error'
|
|
204
|
+
message ||= 'Server error'
|
|
197
205
|
raise Google::Apis::ServerError.new(message, status_code: status, header: header, body: body)
|
|
198
206
|
else
|
|
199
207
|
logger.warn(sprintf('Encountered unexpected status code %s', status))
|
|
@@ -244,25 +252,29 @@ module Google
|
|
|
244
252
|
# @private
|
|
245
253
|
# @param [Hurley::Client] client
|
|
246
254
|
# HTTP client
|
|
247
|
-
# @yield [result, err] Result or error if block supplied
|
|
248
255
|
# @return [Object]
|
|
249
256
|
# @raise [Google::Apis::ServerError] An error occurred on the server and the request can be retried
|
|
250
257
|
# @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
|
|
251
258
|
# @raise [Google::Apis::AuthorizationError] Authorization is required
|
|
252
|
-
def execute_once(client
|
|
259
|
+
def execute_once(client)
|
|
253
260
|
body.rewind if body.respond_to?(:rewind)
|
|
254
261
|
begin
|
|
255
262
|
logger.debug { sprintf('Sending HTTP %s %s', method, url) }
|
|
256
263
|
response = client.send(method, url, body) do |req|
|
|
264
|
+
# Temporary workaround for Hurley bug where the connection preference
|
|
265
|
+
# is ignored and it uses nested anyway
|
|
266
|
+
req.url.query_class = Hurley::Query::Flat
|
|
267
|
+
query.each { | k, v| req.url.query[k] = v }
|
|
268
|
+
# End workaround
|
|
257
269
|
apply_request_options(req)
|
|
258
270
|
end
|
|
259
271
|
logger.debug { response.status_code }
|
|
260
272
|
logger.debug { response.inspect }
|
|
261
273
|
response = process_response(response.status_code, response.header, response.body)
|
|
262
|
-
success(response
|
|
274
|
+
success(response)
|
|
263
275
|
rescue => e
|
|
264
276
|
logger.debug { sprintf('Caught error %s', e) }
|
|
265
|
-
error(e, rethrow: true
|
|
277
|
+
error(e, rethrow: true)
|
|
266
278
|
end
|
|
267
279
|
end
|
|
268
280
|
|
|
@@ -31,7 +31,7 @@ module Google
|
|
|
31
31
|
# Multipart boundary
|
|
32
32
|
# @param [String] value
|
|
33
33
|
# JSON content
|
|
34
|
-
def initialize(boundary, value)
|
|
34
|
+
def initialize(boundary, value, header = {})
|
|
35
35
|
@part = build_part(boundary, value)
|
|
36
36
|
@length = @part.bytesize
|
|
37
37
|
@io = StringIO.new(@part)
|
|
@@ -95,19 +95,25 @@ module Google
|
|
|
95
95
|
# @param [Hash] header
|
|
96
96
|
# Headers for the part
|
|
97
97
|
def build_head(boundary, type, content_len, header)
|
|
98
|
+
content_id = ''
|
|
99
|
+
if header[:content_id]
|
|
100
|
+
content_id = sprintf(CID_FORMAT, header[:content_id])
|
|
101
|
+
end
|
|
98
102
|
sprintf(HEAD_FORMAT,
|
|
99
103
|
boundary,
|
|
100
104
|
content_len.to_i,
|
|
105
|
+
content_id,
|
|
101
106
|
header[:content_type] || type,
|
|
102
107
|
header[:content_transfer_encoding] || DEFAULT_TR_ENCODING)
|
|
103
108
|
end
|
|
104
109
|
|
|
105
110
|
DEFAULT_TR_ENCODING = 'binary'.freeze
|
|
106
111
|
FOOT = "\r\n".freeze
|
|
112
|
+
CID_FORMAT = "Content-ID: %s\r\n"
|
|
107
113
|
HEAD_FORMAT = <<-END
|
|
108
114
|
--%s\r
|
|
109
115
|
Content-Length: %d\r
|
|
110
|
-
|
|
116
|
+
%sContent-Type: %s\r
|
|
111
117
|
Content-Transfer-Encoding: %s\r
|
|
112
118
|
\r
|
|
113
119
|
END
|
|
@@ -137,9 +143,12 @@ Content-Transfer-Encoding: %s\r
|
|
|
137
143
|
#
|
|
138
144
|
# @param [String] body
|
|
139
145
|
# JSON text
|
|
146
|
+
# @param [String] content_id
|
|
147
|
+
# Optional unique ID of this part
|
|
140
148
|
# @return [self]
|
|
141
|
-
def add_json(body)
|
|
142
|
-
|
|
149
|
+
def add_json(body, content_id: nil)
|
|
150
|
+
header = { :content_id => content_id }
|
|
151
|
+
@parts << Google::Apis::Core::JsonPart.new(@boundary, body, header)
|
|
143
152
|
self
|
|
144
153
|
end
|
|
145
154
|
|
|
@@ -147,9 +156,14 @@ Content-Transfer-Encoding: %s\r
|
|
|
147
156
|
#
|
|
148
157
|
# @param [Google::Apis::Core::UploadIO] upload_io
|
|
149
158
|
# IO stream
|
|
159
|
+
# @param [String] content_id
|
|
160
|
+
# Optional unique ID of this part
|
|
150
161
|
# @return [self]
|
|
151
|
-
def add_upload(upload_io)
|
|
152
|
-
|
|
162
|
+
def add_upload(upload_io, content_id: nil)
|
|
163
|
+
header = { :content_id => content_id }
|
|
164
|
+
@parts << Google::Apis::Core::FilePart.new(@boundary,
|
|
165
|
+
upload_io,
|
|
166
|
+
header)
|
|
153
167
|
self
|
|
154
168
|
end
|
|
155
169
|
|
|
@@ -178,7 +178,6 @@ module Google
|
|
|
178
178
|
def process_response(status, header, body)
|
|
179
179
|
@offset = Integer(header[BYTES_RECEIVED_HEADER]) if header.key?(BYTES_RECEIVED_HEADER)
|
|
180
180
|
@upload_url = header[UPLOAD_URL_HEADER] if header.key?(UPLOAD_URL_HEADER)
|
|
181
|
-
|
|
182
181
|
upload_status = header[UPLOAD_STATUS_HEADER]
|
|
183
182
|
logger.debug { sprintf('Upload status %s', upload_status) }
|
|
184
183
|
if upload_status == STATUS_ACTIVE
|
|
@@ -254,12 +253,16 @@ module Google
|
|
|
254
253
|
# @raise [Google::Apis::ClientError] The request is invalid and should not be retried without modification
|
|
255
254
|
# @raise [Google::Apis::AuthorizationError] Authorization is required
|
|
256
255
|
def execute_once(client, &block)
|
|
257
|
-
|
|
256
|
+
case @state
|
|
257
|
+
when :start
|
|
258
258
|
response = send_start_command(client)
|
|
259
|
-
|
|
259
|
+
result = process_response(response.status_code, response.header, response.body)
|
|
260
|
+
when :active
|
|
260
261
|
response = send_query_command(client)
|
|
262
|
+
result = process_response(response.status_code, response.header, response.body)
|
|
263
|
+
when :cancelled, :final
|
|
264
|
+
error(@last_error, rethrow: true, &block)
|
|
261
265
|
end
|
|
262
|
-
result = process_response(response.status_code, response.header, response.body)
|
|
263
266
|
if @state == :active
|
|
264
267
|
response = send_upload_command(client)
|
|
265
268
|
result = process_response(response.status_code, response.header, response.body)
|
|
@@ -267,6 +270,10 @@ module Google
|
|
|
267
270
|
|
|
268
271
|
success(result, &block) if @state == :final
|
|
269
272
|
rescue => e
|
|
273
|
+
# Some APIs like Youtube generate non-retriable 401 errors and mark
|
|
274
|
+
# the upload as finalized. Save the error just in case we get
|
|
275
|
+
# retried.
|
|
276
|
+
@last_error = e
|
|
270
277
|
error(e, rethrow: true, &block)
|
|
271
278
|
end
|
|
272
279
|
end
|