gapic-generator 0.6.4 → 0.6.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0dc10e022bdc300aff2d3f5cb95686c3deae5cd4ab3068dc621771ab716137d2
4
- data.tar.gz: '048e93d769f582f002d59be693b3f49818cefb205db30bc70969994edb0880bf'
3
+ metadata.gz: d1b218438104bc5239538c96e90d05a84591a7517c7f8e3e01009b0a7c47bb76
4
+ data.tar.gz: dcfea920e8b059e62df55e305ee956182101e0531ea7c207d9a6d45589982d00
5
5
  SHA512:
6
- metadata.gz: '0496b671939b2290d878ce0ba38e3d6cc2499e483c018d7a1b62ad99f629c506c261b6108d4d5a5cd82f82dd40050b374a7a059a03b3fad1b5951256dd940b1c'
7
- data.tar.gz: b521992f0db776914b9a4f035bcc3fb76ecb57f0bd005f2ff0fc6c744410d48f787fd648bfb218a88d93ecc12cfa86bdccd63557ddbe63aa962f3d4994e8a3ca
6
+ metadata.gz: ef95a59c0f4bfabaa7a479ddaf9eab02739c18e345fc03d33b8e4f50c9676c5aafb9facedfdb4cc2202e269c7724bf497297c72c67b48763fea251330315547f
7
+ data.tar.gz: cecd8d4c13b61a1be2578cee67b7f5601a83b6d4795228fce3c5d89f572351a773830a6fca6af07defcf3274633fecddbf23cb02a45503be64082d0296fd317d
@@ -1,5 +1,29 @@
1
1
  # Release History for gapic-generator
2
2
 
3
+ ### 0.6.9 / 2020-12-07
4
+
5
+ * Load package-level handwritten helpers.
6
+ * Disable Names/PredicateName rubocop rule.
7
+ * Fix generated client tests when a request field name collides with a Ruby superclass method.
8
+
9
+ ### 0.6.8 / 2020-09-16
10
+
11
+ * Add samples tasks to generated gapic rakefiles.
12
+ * Disable Style/AsciiComments rule.
13
+
14
+ ### 0.6.7 / 2020-08-07
15
+
16
+ * Generated credentials config allows symbols.
17
+
18
+ ### 0.6.6 / 2020-08-05
19
+
20
+ * Use numeric error codes rather than strings in generated retry configs.
21
+
22
+ ### 0.6.5 / 2020-07-16
23
+
24
+ * Examples in auth, rakefile, and readme should pick a non-common service.
25
+ * Emit a warning if common_services config references a nonexistent service.
26
+
3
27
  ### 0.6.4 / 2020-07-13
4
28
 
5
29
  * Fix rubocop warning on a generated multi-path helper if it could take no arguments.
@@ -30,7 +30,7 @@ COPY --from=gcr.io/gapic-images/api-common-protos:beta /protos/ /workspace/commo
30
30
  COPY --from=builder /workspace/*.gem /workspace/
31
31
 
32
32
  # Install the subgenerator and other needed tools.
33
- RUN gem install --pre grpc-tools gapic-generator-<%= gem_name %>.gem \
33
+ RUN gem install grpc-tools gapic-generator-<%= gem_name %>.gem \
34
34
  && rm gapic-generator-<%= gem_name %>.gem \
35
35
  && mkdir -p --mode=777 /.cache
36
36
 
@@ -16,6 +16,6 @@
16
16
 
17
17
  module Gapic
18
18
  module Generator
19
- VERSION = "0.6.4"
19
+ VERSION = "0.6.9"
20
20
  end
21
21
  end
@@ -40,6 +40,31 @@ module Gapic
40
40
  MULTIPLIER_JSON_KEY = "backoffMultiplier"
41
41
  STATUS_CODES_JSON_KEY = "retryableStatusCodes"
42
42
 
43
+ # See https://grpc.github.io/grpc/core/md_doc_statuscodes.html for a
44
+ # list of error codes.
45
+ ERROR_CODE_MAPPING = [
46
+ "OK",
47
+ "CANCELLED",
48
+ "UNKNOWN",
49
+ "INVALID_ARGUMENT",
50
+ "DEADLINE_EXCEEDED",
51
+ "NOT_FOUND",
52
+ "ALREADY_EXISTS",
53
+ "PERMISSION_DENIED",
54
+ "RESOURCE_EXHAUSTED",
55
+ "FAILED_PRECONDITION",
56
+ "ABORTED",
57
+ "OUT_OF_RANGE",
58
+ "UNIMPLEMENTED",
59
+ "INTERNAL",
60
+ "UNAVAILABLE",
61
+ "DATA_LOSS",
62
+ "UNAUTHENTICATED"
63
+ ].freeze
64
+
65
+ ERROR_STRING_MAPPING = ERROR_CODE_MAPPING.each_with_index.each_with_object({}) do |(str, num), hash|
66
+ hash[str] = num
67
+ end.freeze
43
68
 
44
69
  ##
45
70
  # Parses ServiceConfig from a json of a GRPC service config
@@ -146,11 +171,26 @@ module Gapic
146
171
  initial_delay_seconds = parse_interval_seconds get(retry_policy_json, INITIAL_DELAY_JSON_KEY)
147
172
  max_delay_seconds = parse_interval_seconds get(retry_policy_json, MAX_DELAY_JSON_KEY)
148
173
  multiplier = get retry_policy_json, MULTIPLIER_JSON_KEY
149
- status_codes = get retry_policy_json, STATUS_CODES_JSON_KEY
174
+ status_codes = convert_codes get retry_policy_json, STATUS_CODES_JSON_KEY
150
175
 
151
176
  RetryPolicy.new initial_delay_seconds, max_delay_seconds, multiplier, status_codes
152
177
  end
153
178
 
179
+ ##
180
+ # Interpret input status codes. Convert strings to their associated integer codes.
181
+ #
182
+ def self.convert_codes input_codes
183
+ return nil if input_codes.nil?
184
+ Array(input_codes).map do |obj|
185
+ case obj
186
+ when String
187
+ ERROR_STRING_MAPPING[obj]
188
+ when Integer
189
+ obj
190
+ end
191
+ end.compact
192
+ end
193
+
154
194
  ##
155
195
  # Parses time expressed in secondds from the GRPC service config json
156
196
  # The time is encoded is a string as float or integer with a letter 's' afterwards
@@ -212,7 +252,7 @@ module Gapic
212
252
  end
213
253
 
214
254
  private_class_method :parse_service_names, :filter_service_method_names, :parse_config,
215
- :parse_retry_policy, :parse_interval_seconds, :valid_float?
255
+ :parse_retry_policy, :parse_interval_seconds, :valid_float?, :convert_codes
216
256
  end
217
257
  end
218
258
  end
@@ -48,6 +48,10 @@ module Gapic
48
48
  end
49
49
  end
50
50
 
51
+ def first_non_common_service
52
+ services.find { |service| service.common_service_delegate.nil? }
53
+ end
54
+
51
55
  def proto_files
52
56
  @proto_files ||= begin
53
57
  files = @api.files
@@ -80,9 +80,25 @@ module Gapic
80
80
  package_require + ".rb"
81
81
  end
82
82
 
83
+ def package_directory_name
84
+ package_require.split("/").last
85
+ end
86
+
83
87
  def empty?
84
88
  services.empty?
85
89
  end
90
+
91
+ def helpers_file_path
92
+ helpers_require + ".rb"
93
+ end
94
+
95
+ def helpers_file_name
96
+ "_helpers.rb"
97
+ end
98
+
99
+ def helpers_require
100
+ package_require + "/_helpers"
101
+ end
86
102
  end
87
103
  end
88
104
  end
@@ -44,14 +44,18 @@ module Gapic
44
44
  #
45
45
  # @param request [Google::Protobuf::Compiler::CodeGeneratorRequest]
46
46
  # The request object.
47
- def initialize request
47
+ # @param error_output [IO] An IO to write any errors/warnings to.
48
+ # @param configuration [Hash] Optional override of configuration.
49
+ def initialize request, error_output: STDERR, configuration: nil
48
50
  @request = request
49
51
  loader = Loader.new
50
52
  @files = request.proto_file.map do |fd|
51
53
  loader.load_file fd, request.file_to_generate.include?(fd.name)
52
54
  end
53
55
  @files.each { |f| f.parent = self }
56
+ @configuration = configuration
54
57
  @resource_types = analyze_resources
58
+ sanity_checks error_output
55
59
  end
56
60
 
57
61
  def containing_api
@@ -295,6 +299,18 @@ module Gapic
295
299
 
296
300
  private
297
301
 
302
+ # Perform a variety of sanity checks on the data, and prints errors to
303
+ # the given output as appropriate.
304
+ #
305
+ # @param output [IO] Stream to write outputs to.
306
+ def sanity_checks output
307
+ addrs = services.map { |service| service.address.join "." }
308
+ configuration[:common_services]&.each do |k, v|
309
+ output.puts "WARNING: configured common service #{k} is not present" unless addrs.include? k
310
+ output.puts "WARNING: configured common service delegate #{v} is not present" unless addrs.include? v
311
+ end
312
+ end
313
+
298
314
  # Does a pre-analysis of all resources defined in the job. This has
299
315
  # two effects:
300
316
  # * Side effect: each resource has its parent_resources field set.
@@ -16,7 +16,7 @@ $ gem install <%= gem.name %>
16
16
 
17
17
  ```ruby
18
18
  require "<%= gem.entrypoint_require %>"
19
- <%- service = gem.packages.first&.services.first -%>
19
+ <%- service = gem.first_non_common_service -%>
20
20
  <%- method = service&.methods.first -%>
21
21
  <%- if service && method -%>
22
22
 
@@ -25,6 +25,10 @@ Metrics/PerceivedComplexity:
25
25
  Naming/FileName:
26
26
  Exclude:
27
27
  - "lib/<%= gem.name %>.rb"
28
+ Naming/PredicateName:
29
+ Enabled: false
30
+ Style/AsciiComments:
31
+ Enabled: false
28
32
  Style/CaseEquality:
29
33
  Enabled: false
30
34
  Style/IfUnlessModifier:
@@ -15,3 +15,7 @@ require "<%= package.gem.version_require %>"
15
15
  <%- end -%>
16
16
  module <%= package.module_name %>
17
17
  end
18
+ <% @footer = capture do %>
19
+ helper_path = ::File.join __dir__, "<%= package.package_directory_name %>", "<%= package.helpers_file_name %>"
20
+ require "<%= package.helpers_require %>" if ::File.file? helper_path
21
+ <% end %>
@@ -1,3 +1,3 @@
1
1
  <%- assert_locals service -%>
2
- helper_path = ::File.join __dir__, "<%= service.service_directory_name%>", "helpers.rb"
2
+ helper_path = ::File.join __dir__, "<%= service.service_directory_name %>", "<%= service.helpers_file_name %>"
3
3
  require "<%= service.helpers_require %>" if ::File.file? helper_path
@@ -87,7 +87,7 @@ class Configuration
87
87
 
88
88
  config_attr :endpoint, <%= service.client_endpoint.inspect %>, ::String
89
89
  config_attr :credentials, nil do |value|
90
- allowed = [::String, ::Hash, ::Proc, ::Google::Auth::Credentials, ::Signet::OAuth2::Client, nil]
90
+ allowed = [::String, ::Hash, ::Proc, ::Symbol, ::Google::Auth::Credentials, ::Signet::OAuth2::Client, nil]
91
91
  allowed += [::GRPC::Core::Channel, ::GRPC::Core::ChannelCredentials] if defined? ::GRPC
92
92
  allowed.any? { |klass| klass === value }
93
93
  end
@@ -87,13 +87,13 @@ def test_<%= method.name %>
87
87
  assert_kind_of <%= method.request_type %>, r
88
88
  <%- fields.each do |field| -%>
89
89
  <%- if field.message? && field.repeated? && !field.map? -%>
90
- assert_kind_of <%= field.type_name_full %>, r.<%= field.name %>.first
90
+ assert_kind_of <%= field.type_name_full %>, r["<%= field.name %>"].first
91
91
  <%- elsif field.map? -%>
92
- assert_equal(<%= field.default_value %>, r.<%= field.name %>.to_h)
92
+ assert_equal(<%= field.default_value %>, r["<%= field.name %>"].to_h)
93
93
  <%- elsif field.message? -%>
94
- assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), r.<%= field.name %>
94
+ assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), r["<%= field.name %>"]
95
95
  <%- else -%>
96
- assert_equal <%= field.default_value %>, r.<%= field.name %>
96
+ assert_equal <%= field.default_value %>, r["<%= field.name %>"]
97
97
  <%- end -%>
98
98
  <%- if field.oneof? && !field.proto3_optional? -%>
99
99
  assert_equal :<%= field.name %>, r.<%= field.oneof_name %>
@@ -71,13 +71,13 @@ def test_<%= method.name %>
71
71
  assert_kind_of <%= method.request_type %>, r
72
72
  <%- fields.each do |field| -%>
73
73
  <%- if field.message? && field.repeated? && !field.map? -%>
74
- assert_kind_of <%= field.type_name_full %>, r.<%= field.name %>.first
74
+ assert_kind_of <%= field.type_name_full %>, r["<%= field.name %>"].first
75
75
  <%- elsif field.map? -%>
76
- assert_equal(<%= field.default_value %>, r.<%= field.name %>.to_h)
76
+ assert_equal(<%= field.default_value %>, r["<%= field.name %>"].to_h)
77
77
  <%- elsif field.message? -%>
78
- assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), r.<%= field.name %>
78
+ assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), r["<%= field.name %>"]
79
79
  <%- else -%>
80
- assert_equal <%= field.default_value %>, r.<%= field.name %>
80
+ assert_equal <%= field.default_value %>, r["<%= field.name %>"]
81
81
  <%- end -%>
82
82
  <%- if field.oneof? && !field.proto3_optional? -%>
83
83
  assert_equal :<%= field.name %>, r.<%= field.oneof_name %>
@@ -18,13 +18,13 @@ def test_<%= method.name %>
18
18
  assert_kind_of <%= method.request_type %>, request
19
19
  <%- fields.each do |field| -%>
20
20
  <%- if field.message? && field.repeated? && !field.map? -%>
21
- assert_kind_of <%= field.type_name_full %>, request.<%= field.name %>.first
21
+ assert_kind_of <%= field.type_name_full %>, request["<%= field.name %>"].first
22
22
  <%- elsif field.map? -%>
23
- assert_equal(<%= field.default_value %>, request.<%= field.name %>.to_h)
23
+ assert_equal(<%= field.default_value %>, request["<%= field.name %>"].to_h)
24
24
  <%- elsif field.message? -%>
25
- assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), request.<%= field.name %>
25
+ assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), request["<%= field.name %>"]
26
26
  <%- else -%>
27
- assert_equal <%= field.default_value %>, request.<%= field.name %>
27
+ assert_equal <%= field.default_value %>, request["<%= field.name %>"]
28
28
  <%- end -%>
29
29
  <%- if field.oneof? && !field.proto3_optional? -%>
30
30
  assert_equal :<%= field.name %>, request.<%= field.oneof_name %>
@@ -18,13 +18,13 @@ def test_<%= method.name %>
18
18
  assert_kind_of <%= method.request_type %>, request
19
19
  <%- fields.each do |field| -%>
20
20
  <%- if field.message? && field.repeated? && !field.map? -%>
21
- assert_kind_of <%= field.type_name_full %>, request.<%= field.name %>.first
21
+ assert_kind_of <%= field.type_name_full %>, request["<%= field.name %>"].first
22
22
  <%- elsif field.map? -%>
23
- assert_equal(<%= field.default_value %>, request.<%= field.name %>.to_h)
23
+ assert_equal(<%= field.default_value %>, request["<%= field.name %>"].to_h)
24
24
  <%- elsif field.message? -%>
25
- assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), request.<%= field.name %>
25
+ assert_equal Gapic::Protobuf.coerce(<%= field.default_value %>, to: <%= field.type_name_full %>), request["<%= field.name %>"]
26
26
  <%- else -%>
27
- assert_equal <%= field.default_value %>, request.<%= field.name %>
27
+ assert_equal <%= field.default_value %>, request["<%= field.name %>"]
28
28
  <%- end -%>
29
29
  <%- if field.oneof? && !field.proto3_optional? -%>
30
30
  assert_equal :<%= field.name %>, request.<%= field.oneof_name %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gapic-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.6.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernest Landrito
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-07-13 00:00:00.000000000 Z
13
+ date: 2020-12-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack