diff --git a/.generator/src/generator/openapi.py b/.generator/src/generator/openapi.py index e385f0870b3d..25c7e964231c 100644 --- a/.generator/src/generator/openapi.py +++ b/.generator/src/generator/openapi.py @@ -123,7 +123,7 @@ def child_models(schema, alternative_name=None, seen=None): ) if (schema.get("type") == "object" or "properties" in schema or has_sub_models) and not ( - "additionalProperties" in schema and "properties" not in schema + schema.get("additionalProperties") not in (None, False) and "properties" not in schema ): if not has_sub_models and name is None: # this is a basic map object so we don't need a type diff --git a/lib/datadog_api_client/inflector.rb b/lib/datadog_api_client/inflector.rb index b5448a033d8c..285146450b5c 100644 --- a/lib/datadog_api_client/inflector.rb +++ b/lib/datadog_api_client/inflector.rb @@ -3064,6 +3064,7 @@ def overrides "v2.entity_v3_api_datadog" => "EntityV3APIDatadog", "v2.entity_v3_api_kind" => "EntityV3APIKind", "v2.entity_v3_api_spec" => "EntityV3APISpec", + "v2.entity_v3_api_spec_interface" => "EntityV3APISpecInterface", "v2.entity_v3_api_spec_interface_definition" => "EntityV3APISpecInterfaceDefinition", "v2.entity_v3_api_spec_interface_file_ref" => "EntityV3APISpecInterfaceFileRef", "v2.entity_v3_api_version" => "EntityV3APIVersion", diff --git a/lib/datadog_api_client/v2/models/entity_v3_api_spec_interface.rb b/lib/datadog_api_client/v2/models/entity_v3_api_spec_interface.rb new file mode 100644 index 000000000000..cbd2312c2b2d --- /dev/null +++ b/lib/datadog_api_client/v2/models/entity_v3_api_spec_interface.rb @@ -0,0 +1,63 @@ +=begin +#Datadog API V2 Collection + +#Collection of all Datadog Public endpoints. + +The version of the OpenAPI document: 1.0 +Contact: support@datadoghq.com +Generated by: https://github.com/DataDog/datadog-api-client-ruby/tree/master/.generator + + Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. + This product includes software developed at Datadog (https://www.datadoghq.com/). + Copyright 2020-Present Datadog, Inc. + +=end + +require 'date' +require 'time' + +module DatadogAPIClient::V2 + # The API definition. + module EntityV3APISpecInterface + class << self + include BaseOneOfModel + include BaseOneOfModelNoDiscriminator + + # List of class defined in oneOf (OpenAPI v3) + def openapi_one_of + [ + :'EntityV3APISpecInterfaceFileRef', + :'EntityV3APISpecInterfaceDefinition' + ] + end + # Builds the object + # @param data [Mixed] Data to be matched against the list of oneOf items + # @return [Object] Returns the model or the data itself + def build(data) + # Go through the list of oneOf items and attempt to identify the appropriate one. + # Note: + # - We do not attempt to check whether exactly one item matches. + # - No advanced validation of types in some cases (e.g. "x: { type: string }" will happily match { x: 123 }) + # due to the way the deserialization is made in the base_object template (it just casts without verifying). + # - TODO: scalar values are de facto behaving as if they were nullable. + # - TODO: logging when debugging is set. + openapi_one_of.each do |klass| + begin + next if klass == :AnyType # "nullable: true" + typed_data = find_and_cast_into_type(klass, data) + next if typed_data.respond_to?(:_unparsed) && typed_data._unparsed + return typed_data if typed_data + rescue # rescue all errors so we keep iterating even if the current item lookup raises + end + end + + if openapi_one_of.include?(:AnyType) + data + else + self._unparsed = true + DatadogAPIClient::UnparsedObject.new(data) + end + end + end + end +end