Skip to content

Commit 1df8e75

Browse files
HantingZhang2api-clients-generation-pipeline[bot]ci.datadog-api-spec
authored
Add UUID format support (#1606)
* Parsing uuid * update generator * update license * add uuid runtime dependency * pre-commit fixes --------- 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 <packages@datadoghq.com>
1 parent d004f34 commit 1df8e75

File tree

10 files changed

+28
-0
lines changed

10 files changed

+28
-0
lines changed

.generator/src/generator/formatter.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,11 +262,15 @@ def format_boolean(x):
262262
raise TypeError(f"{x} is not supported type {schema}")
263263
return "true" if x else "false"
264264

265+
def format_uuid(x):
266+
return f'UUIDTools::UUID.parse("{x}")'
267+
265268
formatter = {
266269
"number": format_number,
267270
"integer": format_number,
268271
"boolean": format_boolean,
269272
"string": format_string,
273+
"uuid": format_uuid,
270274
None: repr,
271275
}[schema.get("type")]
272276

.generator/src/generator/openapi.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ def type_to_ruby(schema, alternative_name=None):
5858
return "Time"
5959
elif format_ == "binary":
6060
return "File"
61+
elif format_ == "uuid":
62+
return "UUID"
6163
return "String"
6264
elif type_ == "boolean":
6365
return "Boolean"

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,9 @@ module {{ module_name }}
324324
when 'Object'
325325
# generic object (usually a Hash), return directly
326326
data
327+
when 'UUID'
328+
# parse uuid object
329+
data.to_s
327330
when /\AArray<(.+)>\z/
328331
# e.g. Array<Pet>
329332
sub_type = $1

.generator/src/generator/templates/model_base.j2

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ module {{ module_name }}::{{ version|upper }}
107107
when :Array
108108
# generic array, return directly
109109
value
110+
when :UUID
111+
value.to_s
110112
when /\AArray<(?<inner_type>.+)>\z/
111113
inner_type = Regexp.last_match[:inner_type]
112114
value.map { |v| _deserialize(inner_type, v) }
@@ -236,6 +238,8 @@ module {{ module_name }}::{{ version|upper }}
236238
return data if data.instance_of?(String)
237239
when 'Object' # "type: object"
238240
return data if data.instance_of?(Hash)
241+
when 'UUID'
242+
return UUIDTools::UUID.parse(data)
239243
when /\AArray<(?<sub_type>.+)>\z/ # "type: array"
240244
if data.instance_of?(Array)
241245
sub_type = Regexp.last_match[:sub_type]

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ group :development, :test do
1919
gem 'webmock'
2020
gem 'zstandard'
2121
gem 'pry'
22+
gem 'uuidtools'
2223
end
2324

2425
group :docs do

LICENSE-3rdparty.csv

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ tomlrb,MIT,Francois Bernier
7171
typhoeus,MIT,"David Balatero, Paul Dix, Hans Hasselberg"
7272
tzinfo,MIT,Philip Ross
7373
unicode-display_width,MIT,Jan Lelis
74+
uuidtools,Apache-2.0,Bob Aman
7475
vcr,"Hippocratic-2.1,MIT","Myron Marston, Kurtis Rainbolt-Greene, Olle Jonsson"
7576
webmock,MIT,Bartosz Blimke
7677
with_env,MIT,Zach Dennis

datadog_api_client.gemspec

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ Gem::Specification.new do |spec|
2626

2727
spec.add_runtime_dependency "zeitwerk", "~> 2.6", ">= 2.6.0"
2828

29+
spec.add_runtime_dependency "uuidtools", "~> 2.1.5", ">= 2.1.5"
30+
2931
spec.add_development_dependency "rspec", "~> 3.6", ">= 3.6.0"
3032

3133
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|cassettes)/}) }

lib/datadog_api_client/api_client.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,9 @@ def convert_to_type(data, return_type, api_version)
335335
when 'Object'
336336
# generic object (usually a Hash), return directly
337337
data
338+
when 'UUID'
339+
# parse uuid object
340+
data.to_s
338341
when /\AArray<(.+)>\z/
339342
# e.g. Array<Pet>
340343
sub_type = $1

lib/datadog_api_client/v1/model_base.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ def _deserialize(type, value)
118118
when :Array
119119
# generic array, return directly
120120
value
121+
when :UUID
122+
value.to_s
121123
when /\AArray<(?<inner_type>.+)>\z/
122124
inner_type = Regexp.last_match[:inner_type]
123125
value.map { |v| _deserialize(inner_type, v) }
@@ -247,6 +249,8 @@ def find_and_cast_into_type(klass, data)
247249
return data if data.instance_of?(String)
248250
when 'Object' # "type: object"
249251
return data if data.instance_of?(Hash)
252+
when 'UUID'
253+
return UUIDTools::UUID.parse(data)
250254
when /\AArray<(?<sub_type>.+)>\z/ # "type: array"
251255
if data.instance_of?(Array)
252256
sub_type = Regexp.last_match[:sub_type]

lib/datadog_api_client/v2/model_base.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ def _deserialize(type, value)
118118
when :Array
119119
# generic array, return directly
120120
value
121+
when :UUID
122+
value.to_s
121123
when /\AArray<(?<inner_type>.+)>\z/
122124
inner_type = Regexp.last_match[:inner_type]
123125
value.map { |v| _deserialize(inner_type, v) }
@@ -247,6 +249,8 @@ def find_and_cast_into_type(klass, data)
247249
return data if data.instance_of?(String)
248250
when 'Object' # "type: object"
249251
return data if data.instance_of?(Hash)
252+
when 'UUID'
253+
return UUIDTools::UUID.parse(data)
250254
when /\AArray<(?<sub_type>.+)>\z/ # "type: array"
251255
if data.instance_of?(Array)
252256
sub_type = Regexp.last_match[:sub_type]

0 commit comments

Comments
 (0)