gcloud 0.11.0 → 0.12.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.
- checksums.yaml +8 -8
- data/AUTHENTICATION.md +3 -3
- data/CHANGELOG.md +92 -0
- data/OVERVIEW.md +3 -3
- data/lib/gcloud.rb +75 -25
- data/lib/gcloud/backoff.rb +5 -1
- data/lib/gcloud/bigquery.rb +25 -43
- data/lib/gcloud/bigquery/copy_job.rb +13 -13
- data/lib/gcloud/bigquery/data.rb +20 -16
- data/lib/gcloud/bigquery/dataset.rb +202 -177
- data/lib/gcloud/bigquery/dataset/access.rb +118 -104
- data/lib/gcloud/bigquery/dataset/list.rb +14 -18
- data/lib/gcloud/bigquery/extract_job.rb +12 -12
- data/lib/gcloud/bigquery/insert_response.rb +12 -14
- data/lib/gcloud/bigquery/job.rb +45 -57
- data/lib/gcloud/bigquery/job/list.rb +18 -24
- data/lib/gcloud/bigquery/load_job.rb +35 -27
- data/lib/gcloud/bigquery/project.rb +53 -73
- data/lib/gcloud/bigquery/query_data.rb +28 -35
- data/lib/gcloud/bigquery/query_job.rb +18 -18
- data/lib/gcloud/bigquery/schema.rb +359 -0
- data/lib/gcloud/bigquery/service.rb +506 -0
- data/lib/gcloud/bigquery/table.rb +185 -266
- data/lib/gcloud/bigquery/table/list.rb +15 -19
- data/lib/gcloud/bigquery/view.rb +126 -81
- data/lib/gcloud/datastore.rb +39 -27
- data/lib/gcloud/datastore/commit.rb +2 -2
- data/lib/gcloud/datastore/dataset.rb +8 -19
- data/lib/gcloud/datastore/dataset/lookup_results.rb +2 -4
- data/lib/gcloud/datastore/dataset/query_results.rb +0 -2
- data/lib/gcloud/datastore/entity.rb +7 -1
- data/lib/gcloud/datastore/errors.rb +5 -27
- data/lib/gcloud/datastore/grpc_utils.rb +4 -3
- data/lib/gcloud/datastore/key.rb +6 -0
- data/lib/gcloud/datastore/service.rb +18 -12
- data/lib/gcloud/datastore/transaction.rb +0 -10
- data/lib/gcloud/dns.rb +29 -19
- data/lib/gcloud/dns/change.rb +10 -15
- data/lib/gcloud/dns/change/list.rb +4 -4
- data/lib/gcloud/dns/importer.rb +1 -1
- data/lib/gcloud/dns/project.rb +32 -49
- data/lib/gcloud/dns/record.rb +8 -2
- data/lib/gcloud/dns/record/list.rb +4 -4
- data/lib/gcloud/dns/service.rb +167 -0
- data/lib/gcloud/dns/zone.rb +33 -52
- data/lib/gcloud/dns/zone/list.rb +12 -16
- data/lib/gcloud/errors.rb +31 -19
- data/lib/gcloud/logging.rb +50 -39
- data/lib/gcloud/logging/entry.rb +197 -24
- data/lib/gcloud/logging/entry/list.rb +0 -2
- data/lib/gcloud/logging/logger.rb +1 -1
- data/lib/gcloud/logging/metric.rb +3 -9
- data/lib/gcloud/logging/metric/list.rb +0 -2
- data/lib/gcloud/logging/project.rb +58 -54
- data/lib/gcloud/logging/resource_descriptor.rb +2 -2
- data/lib/gcloud/logging/resource_descriptor/list.rb +0 -2
- data/lib/gcloud/logging/service.rb +32 -23
- data/lib/gcloud/logging/sink.rb +8 -14
- data/lib/gcloud/logging/sink/list.rb +0 -2
- data/lib/gcloud/pubsub.rb +21 -16
- data/lib/gcloud/pubsub/policy.rb +204 -0
- data/lib/gcloud/pubsub/project.rb +26 -38
- data/lib/gcloud/pubsub/service.rb +39 -31
- data/lib/gcloud/pubsub/subscription.rb +56 -59
- data/lib/gcloud/pubsub/subscription/list.rb +4 -4
- data/lib/gcloud/pubsub/topic.rb +69 -66
- data/lib/gcloud/pubsub/topic/list.rb +0 -2
- data/lib/gcloud/pubsub/topic/{batch.rb → publisher.rb} +15 -2
- data/lib/gcloud/resource_manager.rb +27 -26
- data/lib/gcloud/resource_manager/manager.rb +19 -39
- data/lib/gcloud/resource_manager/policy.rb +211 -0
- data/lib/gcloud/resource_manager/project.rb +97 -121
- data/lib/gcloud/resource_manager/project/list.rb +7 -7
- data/lib/gcloud/resource_manager/project/updater.rb +4 -9
- data/lib/gcloud/resource_manager/service.rb +127 -0
- data/lib/gcloud/storage.rb +24 -42
- data/lib/gcloud/storage/bucket.rb +104 -192
- data/lib/gcloud/storage/bucket/acl.rb +47 -143
- data/lib/gcloud/storage/bucket/cors.rb +55 -11
- data/lib/gcloud/storage/bucket/list.rb +14 -14
- data/lib/gcloud/storage/errors.rb +3 -43
- data/lib/gcloud/storage/file.rb +114 -111
- data/lib/gcloud/storage/file/acl.rb +27 -113
- data/lib/gcloud/storage/file/list.rb +21 -21
- data/lib/gcloud/storage/project.rb +49 -59
- data/lib/gcloud/storage/service.rb +347 -0
- data/lib/gcloud/translate.rb +24 -14
- data/lib/gcloud/translate/api.rb +12 -21
- data/lib/gcloud/translate/detection.rb +5 -5
- data/lib/gcloud/translate/language.rb +1 -1
- data/lib/gcloud/translate/service.rb +80 -0
- data/lib/gcloud/translate/translation.rb +6 -6
- data/lib/gcloud/version.rb +1 -1
- data/lib/gcloud/vision.rb +24 -15
- data/lib/gcloud/vision/annotate.rb +24 -21
- data/lib/gcloud/vision/annotation.rb +9 -9
- data/lib/gcloud/vision/annotation/entity.rb +11 -11
- data/lib/gcloud/vision/annotation/face.rb +25 -25
- data/lib/gcloud/vision/annotation/properties.rb +8 -8
- data/lib/gcloud/vision/annotation/safe_search.rb +4 -4
- data/lib/gcloud/vision/annotation/text.rb +7 -7
- data/lib/gcloud/vision/annotation/vertex.rb +1 -1
- data/lib/gcloud/vision/image.rb +11 -11
- data/lib/gcloud/vision/location.rb +5 -2
- data/lib/gcloud/vision/project.rb +14 -16
- data/lib/gcloud/vision/service.rb +66 -0
- data/lib/google/api_client.rb +0 -0
- metadata +27 -24
- data/lib/gcloud/bigquery/connection.rb +0 -624
- data/lib/gcloud/bigquery/errors.rb +0 -68
- data/lib/gcloud/bigquery/table/schema.rb +0 -234
- data/lib/gcloud/dns/connection.rb +0 -173
- data/lib/gcloud/dns/errors.rb +0 -68
- data/lib/gcloud/resource_manager/connection.rb +0 -134
- data/lib/gcloud/resource_manager/errors.rb +0 -68
- data/lib/gcloud/storage/connection.rb +0 -444
- data/lib/gcloud/translate/connection.rb +0 -85
- data/lib/gcloud/translate/errors.rb +0 -68
- data/lib/gcloud/upload.rb +0 -95
- data/lib/gcloud/vision/connection.rb +0 -63
- data/lib/gcloud/vision/errors.rb +0 -69
data/lib/gcloud/datastore.rb
CHANGED
|
@@ -39,6 +39,9 @@ module Gcloud
|
|
|
39
39
|
# The default scope is:
|
|
40
40
|
#
|
|
41
41
|
# * `https://www.googleapis.com/auth/datastore`
|
|
42
|
+
# @param [Integer] retries Number of times to retry requests on server error.
|
|
43
|
+
# The default value is `3`. Optional.
|
|
44
|
+
# @param [Integer] timeout Default timeout to use in requests. Optional.
|
|
42
45
|
#
|
|
43
46
|
# @return [Gcloud::Datastore::Dataset]
|
|
44
47
|
#
|
|
@@ -57,19 +60,28 @@ module Gcloud
|
|
|
57
60
|
#
|
|
58
61
|
# datastore.save task
|
|
59
62
|
#
|
|
60
|
-
def self.datastore project = nil, keyfile = nil, scope: nil
|
|
63
|
+
def self.datastore project = nil, keyfile = nil, scope: nil, retries: nil,
|
|
64
|
+
timeout: nil
|
|
61
65
|
project ||= Gcloud::Datastore::Dataset.default_project
|
|
66
|
+
project = project.to_s # Always cast to a string
|
|
67
|
+
fail ArgumentError, "project is missing" if project.empty?
|
|
68
|
+
|
|
62
69
|
if ENV["DATASTORE_EMULATOR_HOST"]
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
return Gcloud::Datastore::Dataset.new(
|
|
71
|
+
Gcloud::Datastore::Service.new(
|
|
72
|
+
project, :this_channel_is_insecure,
|
|
73
|
+
host: ENV["DATASTORE_EMULATOR_HOST"], retries: retries))
|
|
66
74
|
end
|
|
75
|
+
|
|
67
76
|
if keyfile.nil?
|
|
68
77
|
credentials = Gcloud::Datastore::Credentials.default scope: scope
|
|
69
78
|
else
|
|
70
79
|
credentials = Gcloud::Datastore::Credentials.new keyfile, scope: scope
|
|
71
80
|
end
|
|
72
|
-
|
|
81
|
+
|
|
82
|
+
Gcloud::Datastore::Dataset.new(
|
|
83
|
+
Gcloud::Datastore::Service.new(
|
|
84
|
+
project, credentials, retries: retries, timeout: timeout))
|
|
73
85
|
end
|
|
74
86
|
|
|
75
87
|
##
|
|
@@ -80,7 +92,7 @@ module Gcloud
|
|
|
80
92
|
# relational databases, but there are some key differences to be aware of to
|
|
81
93
|
# make the most of using Datastore.
|
|
82
94
|
#
|
|
83
|
-
#
|
|
95
|
+
# The goal of gcloud-ruby is to provide a API that is comfortable to
|
|
84
96
|
# Rubyists. Authentication is handled by {Gcloud#datastore}. You can provide
|
|
85
97
|
# the project and credential information to connect to the Datastore service,
|
|
86
98
|
# or if you are running on Google Compute Engine this configuration is taken
|
|
@@ -507,43 +519,43 @@ module Gcloud
|
|
|
507
519
|
# end
|
|
508
520
|
# ```
|
|
509
521
|
#
|
|
510
|
-
# ## Configuring
|
|
522
|
+
# ## Configuring retries and timeout
|
|
511
523
|
#
|
|
512
|
-
#
|
|
513
|
-
#
|
|
514
|
-
#
|
|
515
|
-
# `
|
|
524
|
+
# You can configure how many times API requests may be automatically retried.
|
|
525
|
+
# When an API request fails, the response will be inspected to see if the
|
|
526
|
+
# request meets criteria indicating that it may succeed on retry, such as
|
|
527
|
+
# `500` and `503` status codes or a specific internal error code such as
|
|
528
|
+
# `rateLimitExceeded`. If it meets the criteria, the request will be retried
|
|
529
|
+
# after a delay. If another error occurs, the delay will be increased before a
|
|
530
|
+
# subsequent attempt, until the `retries` limit is reached.
|
|
516
531
|
#
|
|
517
|
-
#
|
|
518
|
-
# should be retried. If the response matches the criteria, then the request
|
|
519
|
-
# will be retried after a delay. If another error occurs, the delay will be
|
|
520
|
-
# increased incrementally before a subsequent attempt. The first retry will be
|
|
521
|
-
# delayed one second, the second retry two seconds, and so on.
|
|
532
|
+
# You can also set the request `timeout` value in seconds.
|
|
522
533
|
#
|
|
523
534
|
# ```ruby
|
|
524
535
|
# require "gcloud"
|
|
525
|
-
# require "gcloud/backoff"
|
|
526
536
|
#
|
|
527
|
-
#
|
|
537
|
+
# gcloud = Gcloud.new
|
|
538
|
+
# datastore = gcloud.datastore retries: 10, timeout: 120
|
|
528
539
|
# ```
|
|
529
540
|
#
|
|
530
541
|
# See the [Datastore error
|
|
531
542
|
# codes](https://cloud.google.com/datastore/docs/concepts/errors#error_codes)
|
|
532
543
|
# for a list of error conditions.
|
|
533
544
|
#
|
|
534
|
-
# ## The Datastore Emulator
|
|
545
|
+
# ## The Cloud Datastore Emulator
|
|
535
546
|
#
|
|
536
|
-
# As of this release, the Datastore emulator that is part of the gcloud
|
|
537
|
-
# no longer compatible with gcloud-ruby. This is because the gcloud
|
|
538
|
-
# Datastore emulator does not yet support gRPC as a transport
|
|
547
|
+
# As of this release, the Cloud Datastore emulator that is part of the gcloud
|
|
548
|
+
# SDK is no longer compatible with gcloud-ruby. This is because the gcloud
|
|
549
|
+
# SDK's Cloud Datastore emulator does not yet support gRPC as a transport
|
|
550
|
+
# layer.
|
|
539
551
|
#
|
|
540
|
-
# A gRPC-compatible emulator is available until the gcloud SDK Datastore
|
|
552
|
+
# A gRPC-compatible emulator is available until the gcloud SDK Cloud Datastore
|
|
541
553
|
# emulator supports gRPC. To use it you must [download the gRPC
|
|
542
|
-
# emulator](https://storage.googleapis.com/gcd/tools/
|
|
543
|
-
# use the `
|
|
554
|
+
# emulator](https://storage.googleapis.com/gcd/tools/cloud-datastore-emulator-1.1.1.zip)
|
|
555
|
+
# and use the `cloud_datastore_emulator` script.
|
|
544
556
|
#
|
|
545
|
-
# When you run the
|
|
546
|
-
# following printed:
|
|
557
|
+
# When you run the Cloud Datastore emulator you will see a message similar to
|
|
558
|
+
# the following printed:
|
|
547
559
|
#
|
|
548
560
|
# ```
|
|
549
561
|
# If you are using a library that supports the DATASTORE_EMULATOR_HOST
|
|
@@ -29,8 +29,8 @@ module Gcloud
|
|
|
29
29
|
# c.delete entity1, entity2
|
|
30
30
|
# end
|
|
31
31
|
#
|
|
32
|
-
#
|
|
33
|
-
#
|
|
32
|
+
# See {Gcloud::Datastore::Dataset#commit} and
|
|
33
|
+
# {Gcloud::Datastore::Transaction#commit}.
|
|
34
34
|
class Commit
|
|
35
35
|
##
|
|
36
36
|
# @private Create a new Commit object.
|
|
@@ -60,10 +60,8 @@ module Gcloud
|
|
|
60
60
|
# @private Creates a new Dataset instance.
|
|
61
61
|
#
|
|
62
62
|
# See {Gcloud#datastore}
|
|
63
|
-
def initialize
|
|
64
|
-
|
|
65
|
-
fail ArgumentError, "project is missing" if project.empty?
|
|
66
|
-
@service = Service.new project, credentials
|
|
63
|
+
def initialize service
|
|
64
|
+
@service = service
|
|
67
65
|
end
|
|
68
66
|
|
|
69
67
|
##
|
|
@@ -106,15 +104,14 @@ module Gcloud
|
|
|
106
104
|
#
|
|
107
105
|
def allocate_ids incomplete_key, count = 1
|
|
108
106
|
if incomplete_key.complete?
|
|
109
|
-
fail Gcloud::Datastore::
|
|
107
|
+
fail Gcloud::Datastore::KeyError,
|
|
108
|
+
"An incomplete key must be provided."
|
|
110
109
|
end
|
|
111
110
|
|
|
112
111
|
ensure_service!
|
|
113
112
|
incomplete_keys = count.times.map { incomplete_key.to_grpc }
|
|
114
113
|
allocate_res = service.allocate_ids(*incomplete_keys)
|
|
115
114
|
allocate_res.keys.map { |key| Key.from_grpc key }
|
|
116
|
-
rescue GRPC::BadStatus => e
|
|
117
|
-
raise Gcloud::Error.from_error(e)
|
|
118
115
|
end
|
|
119
116
|
|
|
120
117
|
##
|
|
@@ -275,8 +272,6 @@ module Gcloud
|
|
|
275
272
|
end
|
|
276
273
|
entities.each { |e| e.key.freeze unless e.persisted? }
|
|
277
274
|
entities
|
|
278
|
-
rescue GRPC::BadStatus => e
|
|
279
|
-
raise Gcloud::Error.from_error(e)
|
|
280
275
|
end
|
|
281
276
|
|
|
282
277
|
##
|
|
@@ -342,8 +337,6 @@ module Gcloud
|
|
|
342
337
|
lookup_res = service.lookup(*Array(keys).flatten.map(&:to_grpc),
|
|
343
338
|
consistency: consistency)
|
|
344
339
|
LookupResults.from_grpc lookup_res, service, consistency
|
|
345
|
-
rescue GRPC::BadStatus => e
|
|
346
|
-
raise Gcloud::Error.from_error(e)
|
|
347
340
|
end
|
|
348
341
|
alias_method :lookup, :find_all
|
|
349
342
|
|
|
@@ -399,8 +392,6 @@ module Gcloud
|
|
|
399
392
|
query_res = service.run_query query.to_grpc, namespace,
|
|
400
393
|
consistency: consistency
|
|
401
394
|
QueryResults.from_grpc query_res, service, namespace, query.to_grpc.dup
|
|
402
|
-
rescue GRPC::BadStatus => e
|
|
403
|
-
raise Gcloud::Error.from_error(e)
|
|
404
395
|
end
|
|
405
396
|
alias_method :run_query, :run
|
|
406
397
|
|
|
@@ -459,15 +450,13 @@ module Gcloud
|
|
|
459
450
|
begin
|
|
460
451
|
yield tx
|
|
461
452
|
tx.commit
|
|
462
|
-
rescue
|
|
453
|
+
rescue
|
|
463
454
|
begin
|
|
464
455
|
tx.rollback
|
|
465
|
-
rescue
|
|
466
|
-
|
|
467
|
-
raise TransactionError.new(msg, commit_error: e, rollback_error: re)
|
|
456
|
+
rescue
|
|
457
|
+
raise TransactionError, "Transaction failed to commit and rollback."
|
|
468
458
|
end
|
|
469
|
-
raise TransactionError
|
|
470
|
-
commit_error: e)
|
|
459
|
+
raise TransactionError, "Transaction failed to commit."
|
|
471
460
|
end
|
|
472
461
|
end
|
|
473
462
|
|
|
@@ -101,8 +101,6 @@ module Gcloud
|
|
|
101
101
|
consistency: @consistency,
|
|
102
102
|
transaction: @transaction)
|
|
103
103
|
self.class.from_grpc lookup_res, @service, @consistency
|
|
104
|
-
rescue GRPC::BadStatus => e
|
|
105
|
-
raise Gcloud::Error.from_error(e)
|
|
106
104
|
end
|
|
107
105
|
|
|
108
106
|
##
|
|
@@ -200,7 +198,7 @@ module Gcloud
|
|
|
200
198
|
end
|
|
201
199
|
|
|
202
200
|
##
|
|
203
|
-
# Convenience method to convert GRPC entities to
|
|
201
|
+
# Convenience method to convert GRPC entities to gcloud-ruby entities.
|
|
204
202
|
def self.to_gcloud_entities grpc_entity_results
|
|
205
203
|
# Entities are nested in an object.
|
|
206
204
|
Array(grpc_entity_results).map do |result|
|
|
@@ -210,7 +208,7 @@ module Gcloud
|
|
|
210
208
|
end
|
|
211
209
|
|
|
212
210
|
##
|
|
213
|
-
# Convenience method to convert GRPC keys to
|
|
211
|
+
# Convenience method to convert GRPC keys to gcloud-ruby keys.
|
|
214
212
|
def self.to_gcloud_keys grpc_keys
|
|
215
213
|
# Keys are not nested in an object like entities are.
|
|
216
214
|
Array(grpc_keys).map { |key| Key.from_grpc key }
|
|
@@ -160,8 +160,6 @@ module Gcloud
|
|
|
160
160
|
query.start_cursor = cursor.to_grpc # should always be a Cursor...
|
|
161
161
|
query_res = service.run_query query, namespace
|
|
162
162
|
self.class.from_grpc query_res, service, namespace, query
|
|
163
|
-
rescue GRPC::BadStatus => e
|
|
164
|
-
raise Gcloud::Error.from_error(e)
|
|
165
163
|
end
|
|
166
164
|
|
|
167
165
|
##
|
|
@@ -350,6 +350,12 @@ module Gcloud
|
|
|
350
350
|
end
|
|
351
351
|
end
|
|
352
352
|
|
|
353
|
+
##
|
|
354
|
+
# The number of bytes the Entity will take to serialize during API calls.
|
|
355
|
+
def serialized_size
|
|
356
|
+
to_grpc.to_proto.length
|
|
357
|
+
end
|
|
358
|
+
|
|
353
359
|
##
|
|
354
360
|
# @private Convert the Entity to a Google::Datastore::V1beta3::Entity
|
|
355
361
|
# object.
|
|
@@ -415,7 +421,7 @@ module Gcloud
|
|
|
415
421
|
next if value.nil?
|
|
416
422
|
@_exclude_indexes[name] = value.exclude_from_indexes
|
|
417
423
|
unless value.array_value.nil?
|
|
418
|
-
exclude = value.array_value.values.map
|
|
424
|
+
exclude = value.array_value.values.map(&:exclude_from_indexes)
|
|
419
425
|
@_exclude_indexes[name] = exclude
|
|
420
426
|
end
|
|
421
427
|
end
|
|
@@ -18,46 +18,24 @@ require "gcloud/errors"
|
|
|
18
18
|
module Gcloud
|
|
19
19
|
module Datastore
|
|
20
20
|
##
|
|
21
|
-
# #
|
|
21
|
+
# # KeyError
|
|
22
22
|
#
|
|
23
|
-
#
|
|
24
|
-
class
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
##
|
|
28
|
-
# # KeyfileError
|
|
29
|
-
#
|
|
30
|
-
# Raised when a keyfile is not correct.
|
|
31
|
-
class KeyfileError < Gcloud::Datastore::Error
|
|
23
|
+
# Raised when a key is not correct.
|
|
24
|
+
class KeyError < Gcloud::Error
|
|
32
25
|
end
|
|
33
26
|
|
|
34
27
|
##
|
|
35
28
|
# # PropertyError
|
|
36
29
|
#
|
|
37
30
|
# Raised when a property is not correct.
|
|
38
|
-
class PropertyError < Gcloud::
|
|
31
|
+
class PropertyError < Gcloud::Error
|
|
39
32
|
end
|
|
40
33
|
|
|
41
34
|
##
|
|
42
35
|
# # TransactionError
|
|
43
36
|
#
|
|
44
37
|
# General error for Transaction problems.
|
|
45
|
-
class TransactionError < Gcloud::
|
|
46
|
-
##
|
|
47
|
-
# An error that occurred within the transaction. (optional)
|
|
48
|
-
attr_reader :commit_error
|
|
49
|
-
alias_method :inner, :commit_error # backwards compatibility
|
|
50
|
-
|
|
51
|
-
##
|
|
52
|
-
# An error that occurred within the transaction. (optional)
|
|
53
|
-
attr_reader :rollback_error
|
|
54
|
-
|
|
55
|
-
# @private
|
|
56
|
-
def initialize message, commit_error: nil, rollback_error: nil
|
|
57
|
-
super(message)
|
|
58
|
-
@commit_error = commit_error
|
|
59
|
-
@rollback_error = rollback_error
|
|
60
|
-
end
|
|
38
|
+
class TransactionError < Gcloud::Error
|
|
61
39
|
end
|
|
62
40
|
end
|
|
63
41
|
end
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
require "gcloud/grpc_utils"
|
|
17
17
|
require "gcloud/datastore/errors"
|
|
18
18
|
require "stringio"
|
|
19
|
+
require "base64"
|
|
19
20
|
|
|
20
21
|
module Gcloud
|
|
21
22
|
##
|
|
@@ -102,7 +103,7 @@ module Gcloud
|
|
|
102
103
|
v.string_value = value
|
|
103
104
|
elsif Array === value
|
|
104
105
|
v.array_value = Google::Datastore::V1beta3::ArrayValue.new(
|
|
105
|
-
values: value.map { |
|
|
106
|
+
values: value.map { |val| to_value val }
|
|
106
107
|
)
|
|
107
108
|
elsif value.respond_to? :to_time
|
|
108
109
|
v.timestamp_value = Google::Protobuf::Timestamp.new(
|
|
@@ -120,11 +121,11 @@ module Gcloud
|
|
|
120
121
|
end
|
|
121
122
|
|
|
122
123
|
def self.encode_bytes bytes
|
|
123
|
-
|
|
124
|
+
Base64.strict_encode64(bytes.to_s).encode("ASCII-8BIT")
|
|
124
125
|
end
|
|
125
126
|
|
|
126
127
|
def self.decode_bytes bytes
|
|
127
|
-
bytes.to_s
|
|
128
|
+
Base64.decode64(bytes.to_s).force_encoding Encoding::ASCII_8BIT
|
|
128
129
|
end
|
|
129
130
|
# rubocop:enable all
|
|
130
131
|
end
|
data/lib/gcloud/datastore/key.rb
CHANGED
|
@@ -232,6 +232,12 @@ module Gcloud
|
|
|
232
232
|
kind.nil? || (id.nil? && (name.nil? || name.empty?))
|
|
233
233
|
end
|
|
234
234
|
|
|
235
|
+
##
|
|
236
|
+
# The number of bytes the Key will take to serialize during API calls.
|
|
237
|
+
def serialized_size
|
|
238
|
+
to_grpc.to_proto.length
|
|
239
|
+
end
|
|
240
|
+
|
|
235
241
|
##
|
|
236
242
|
# @private Convert the Key to a Google::Datastore::V1beta3::Key object.
|
|
237
243
|
def to_grpc
|
|
@@ -23,14 +23,16 @@ module Gcloud
|
|
|
23
23
|
# @private Represents the gRPC Datastore service, including all the API
|
|
24
24
|
# methods.
|
|
25
25
|
class Service
|
|
26
|
-
attr_accessor :project, :credentials, :host
|
|
26
|
+
attr_accessor :project, :credentials, :host, :retries, :timeout
|
|
27
27
|
|
|
28
28
|
##
|
|
29
29
|
# Creates a new Service instance.
|
|
30
|
-
def initialize project, credentials
|
|
30
|
+
def initialize project, credentials, host: nil, retries: nil, timeout: nil
|
|
31
31
|
@project = project
|
|
32
32
|
@credentials = credentials
|
|
33
|
-
@host = "datastore.googleapis.com"
|
|
33
|
+
@host = host || "datastore.googleapis.com"
|
|
34
|
+
@retries = retries
|
|
35
|
+
@timeout = timeout
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
def creds
|
|
@@ -42,7 +44,7 @@ module Gcloud
|
|
|
42
44
|
def datastore
|
|
43
45
|
return mocked_datastore if mocked_datastore
|
|
44
46
|
@datastore ||= Google::Datastore::V1beta3::Datastore::Stub.new(
|
|
45
|
-
host, creds)
|
|
47
|
+
host, creds, timeout: timeout)
|
|
46
48
|
end
|
|
47
49
|
attr_accessor :mocked_datastore
|
|
48
50
|
|
|
@@ -59,7 +61,7 @@ module Gcloud
|
|
|
59
61
|
keys: incomplete_keys
|
|
60
62
|
)
|
|
61
63
|
|
|
62
|
-
|
|
64
|
+
execute { datastore.allocate_ids allocate_req }
|
|
63
65
|
end
|
|
64
66
|
|
|
65
67
|
##
|
|
@@ -71,7 +73,7 @@ module Gcloud
|
|
|
71
73
|
)
|
|
72
74
|
lookup_req.read_options = generate_read_options consistency, transaction
|
|
73
75
|
|
|
74
|
-
|
|
76
|
+
execute { datastore.lookup lookup_req }
|
|
75
77
|
end
|
|
76
78
|
|
|
77
79
|
# Query for entities.
|
|
@@ -90,7 +92,7 @@ module Gcloud
|
|
|
90
92
|
run_req.partition_id = Google::Datastore::V1beta3::PartitionId.new(
|
|
91
93
|
namespace_id: namespace) if namespace
|
|
92
94
|
|
|
93
|
-
|
|
95
|
+
execute { datastore.run_query run_req }
|
|
94
96
|
end
|
|
95
97
|
|
|
96
98
|
##
|
|
@@ -100,7 +102,7 @@ module Gcloud
|
|
|
100
102
|
project_id: project
|
|
101
103
|
)
|
|
102
104
|
|
|
103
|
-
|
|
105
|
+
execute { datastore.begin_transaction tx_req }
|
|
104
106
|
end
|
|
105
107
|
|
|
106
108
|
##
|
|
@@ -117,7 +119,7 @@ module Gcloud
|
|
|
117
119
|
commit_req.transaction = transaction
|
|
118
120
|
end
|
|
119
121
|
|
|
120
|
-
|
|
122
|
+
execute { datastore.commit commit_req }
|
|
121
123
|
end
|
|
122
124
|
|
|
123
125
|
##
|
|
@@ -128,17 +130,21 @@ module Gcloud
|
|
|
128
130
|
transaction: transaction
|
|
129
131
|
)
|
|
130
132
|
|
|
131
|
-
|
|
133
|
+
execute { datastore.rollback rb_req }
|
|
132
134
|
end
|
|
133
135
|
|
|
134
136
|
def inspect
|
|
135
137
|
"#{self.class}(#{@project})"
|
|
136
138
|
end
|
|
137
139
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
+
##
|
|
141
|
+
# Performs backoff and error handling
|
|
142
|
+
def execute
|
|
143
|
+
Gcloud::Backoff.new(retries: retries).execute_grpc do
|
|
140
144
|
yield
|
|
141
145
|
end
|
|
146
|
+
rescue GRPC::BadStatus => e
|
|
147
|
+
raise Gcloud::Error.from_error(e)
|
|
142
148
|
end
|
|
143
149
|
|
|
144
150
|
protected
|