Skip to content

Commit 4e5eefd

Browse files
api-clients-generation-pipeline[bot]amaskara-ddci.datadog-api-spec
authored
Add support for multi form parameter support (#2028)
* mult form parameter support * only add non rails for some apis * Regenerate client from commit aeb956c4 of spec repo --------- Co-authored-by: Anika Maskara <[email protected]> Co-authored-by: api-clients-generation-pipeline[bot] <54105614+api-clients-generation-pipeline[bot]@users.noreply.github.com> Co-authored-by: ci.datadog-api-spec <[email protected]>
1 parent 19b2cf3 commit 4e5eefd

File tree

14 files changed

+70
-7
lines changed

14 files changed

+70
-7
lines changed

.apigentools-info

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44
"spec_versions": {
55
"v1": {
66
"apigentools_version": "1.6.6",
7-
"regenerated": "2024-11-04 17:58:13.167732",
8-
"spec_repo_commit": "6ffe013b"
7+
"regenerated": "2024-11-04 18:34:33.238993",
8+
"spec_repo_commit": "aeb956c4"
99
},
1010
"v2": {
1111
"apigentools_version": "1.6.6",
12-
"regenerated": "2024-11-04 17:58:13.187613",
13-
"spec_repo_commit": "6ffe013b"
12+
"regenerated": "2024-11-04 18:34:33.257596",
13+
"spec_repo_commit": "aeb956c4"
1414
}
1515
}
1616
}

.generator/src/generator/templates/api.j2

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,10 @@ module {{ module_name }}::{{ version|upper }}
207207
:return_type => return_type,
208208
:api_version => "{{ version|upper }}"
209209
)
210+
{%- set query_multi_params = operation|parameters | map(attribute=1) | selectattr("in", "equalto", "query")| map("collection_format")| select("eq", "multi") | first-%}
211+
{%- if query_multi_params %}
212+
new_options[:query_string_normalizer] = HTTParty::Request::NON_RAILS_QUERY_STRING_NORMALIZER
213+
{%- endif %}
210214

211215
data, status_code, headers = @api_client.call_api(Net::HTTP::{{ httpMethod|camel_case }}, local_var_path, new_options)
212216
if @api_client.config.debugging

.generator/src/generator/templates/api_client.j2

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ module {{ module_name }}
188188

189189
req_opts[:pem] = File.read(@config.cert_file) if @config.cert_file
190190
req_opts[:pem_password] = File.read(@config.key_file) if @config.key_file
191+
req_opts[:query_string_normalizer] = opts[:query_string_normalizer] if opts[:query_string_normalizer]
191192

192193
opts[:stream_body] = true if opts[:return_type] == 'File'
193194

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2024-10-21T20:05:58.636Z

cassettes/features/v2/security_monitoring/List-findings-with-detection-type-query-param-returns-OK-response.yml

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# List findings with detection_type query param returns "OK" response
2+
3+
require "datadog_api_client"
4+
DatadogAPIClient.configure do |config|
5+
config.unstable_operations["v2.list_findings".to_sym] = true
6+
end
7+
api_instance = DatadogAPIClient::V2::SecurityMonitoringAPI.new
8+
opts = {
9+
filter_vulnerability_type: [
10+
FindingVulnerabilityType::MISCONFIGURATION,
11+
FindingVulnerabilityType::ATTACK_PATH,
12+
],
13+
}
14+
p api_instance.list_findings(opts)

features/step_definitions/request.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
require_relative '../scenarios_model_mapping'
77

88
SLEEP_AFTER_REQUEST = ENV.has_key?("SLEEP_AFTER_REQUEST") ? ENV["SLEEP_AFTER_REQUEST"].to_i : 0
9+
WebMock::Config.instance.query_values_notation = :flat_array
910

1011
module APIWorld
1112
def api
@@ -100,7 +101,7 @@ def relative_time(iso)
100101
return ret.rfc3339(3) if iso
101102
return ret.to_i
102103
end
103-
return nil
104+
nil
104105
}
105106
end
106107

@@ -221,7 +222,7 @@ def build_given(api_version, operation)
221222
def model_builder(param, obj)
222223
model = ScenariosModelMappings["v#{@api_version}.#{@operation_id}"][param]
223224
if model == 'File'
224-
return File.open(File.join(__dir__, "..", "v" + @api_version, obj))
225+
return File.open(File.join(__dir__, "..", "v" + @api_version, obj))
225226
end
226227
@api_client.convert_to_type(obj, model, "V#{@api_version}")
227228
end

features/support/env.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,16 @@ def use_real_time?
5151
c.register_request_matcher :safe_headers do |r1, r2|
5252
r1.headers.slice(*filtered_headers) == r2.headers.slice(*filtered_headers)
5353
end
54+
c.register_request_matcher :ignore_query_param_ordering do |r1, r2|
55+
uri1 = URI(r1.uri)
56+
uri2 = URI(r2.uri)
57+
query1 = CGI.parse(uri1.query || '').transform_values(&:sort)
58+
query2 = CGI.parse(uri2.query || '').transform_values(&:sort)
59+
query1 == query2
60+
end
5461
c.default_cassette_options = {
5562
:record_on_error => false,
56-
:match_requests_on => [:method, :host, :safe_path, :query, :body_as_json, :safe_headers],
63+
:match_requests_on => [:method, :host, :safe_path, :ignore_query_param_ordering, :body_as_json, :safe_headers],
5764
}
5865
c.allow_http_connections_when_no_cassette = true
5966
RecordMode.send(ENV["RECORD"] || "false", c)

features/v2/security_monitoring.feature

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,14 @@ Feature: Security Monitoring
485485
When the request with pagination is sent
486486
Then the response status is 200 OK
487487

488+
@skip-terraform-config @team:DataDog/cloud-security-posture-management
489+
Scenario: List findings with detection_type query param returns "OK" response
490+
Given operation "ListFindings" enabled
491+
And new "ListFindings" request
492+
And request contains "filter[vulnerability_type]" parameter with value ["misconfiguration", "attack_path"]
493+
When the request is sent
494+
Then the response status is 200 OK
495+
488496
@generated @skip @team:DataDog/k9-cloud-security-platform
489497
Scenario: List rules returns "Bad Request" response
490498
Given new "ListSecurityMonitoringRules" request

lib/datadog_api_client/api_client.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ def build_request(http_method, path, opts = {})
199199

200200
req_opts[:pem] = File.read(@config.cert_file) if @config.cert_file
201201
req_opts[:pem_password] = File.read(@config.key_file) if @config.key_file
202+
req_opts[:query_string_normalizer] = opts[:query_string_normalizer] if opts[:query_string_normalizer]
202203

203204
opts[:stream_body] = true if opts[:return_type] == 'File'
204205

0 commit comments

Comments
 (0)