Skip to content

Commit de845fb

Browse files
authored
Implement additionalProperties on all models by default (#1532)
* implement additionalProperties * handle empty object being falsy
1 parent 6973f32 commit de845fb

File tree

1,660 files changed

+18315
-53
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,660 files changed

+18315
-53
lines changed

.generator/src/generator/openapi.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ def form_parameter(operation):
5555

5656
def type_to_typescript(schema, alternative_name=None, check_nullable=True):
5757
"""Return Typescript type name for the type."""
58+
if schema is True or schema is {}:
59+
return "any"
5860
name = get_name(schema)
5961
if name and "items" not in schema and not is_primitive(schema):
6062
if "enum" in schema:

.generator/src/generator/templates/model/ObjectSerializer.j2

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -127,22 +127,43 @@ export class ObjectSerializer {
127127
const attributesMap = typeMap[type].getAttributeTypeMap();
128128
const instance: {[index: string]: any} = {};
129129

130-
for (const attributeName in attributesMap) {
130+
for (const attributeName in data) {
131131
const attributeObj = attributesMap[attributeName];
132-
if (attributeName == "additionalProperties") {
133-
if (data.additionalProperties) {
134-
for (const key in data.additionalProperties) {
135-
instance[key] = ObjectSerializer.serialize(
136-
data.additionalProperties[key],
137-
attributeObj.type,
138-
attributeObj.format
139-
);
140-
}
141-
}
132+
if (
133+
attributeName === "_unparsed" ||
134+
attributeName === "additionalProperties"
135+
) {
142136
continue;
137+
} else if (
138+
attributeObj === undefined &&
139+
!("additionalProperties" in attributesMap)
140+
) {
141+
throw new Error(
142+
"unexpected attribute " + attributeName + " of type " + type
143+
);
144+
} else if (attributeObj) {
145+
instance[attributeObj.baseName] = ObjectSerializer.serialize(
146+
data[attributeName],
147+
attributeObj.type,
148+
attributeObj.format
149+
);
143150
}
144-
instance[attributeObj.baseName] = ObjectSerializer.serialize(data[attributeName], attributeObj.type, attributeObj.format);
145-
// check for required properties
151+
}
152+
153+
let additionalProperties = attributesMap["additionalProperties"]
154+
if (additionalProperties && data.additionalProperties) {
155+
for (const key in data.additionalProperties) {
156+
instance[key] = ObjectSerializer.serialize(
157+
data.additionalProperties[key],
158+
additionalProperties.type,
159+
additionalProperties.format
160+
);
161+
}
162+
}
163+
164+
// check for required properties
165+
for (const attributeName in attributesMap) {
166+
const attributeObj = attributesMap[attributeName];
146167
if (attributeObj?.required && instance[attributeObj.baseName] === undefined) {
147168
throw new Error(`missing required property '${attributeObj.baseName}'`);
148169
}

.generator/src/generator/templates/model/model.j2

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ export class {{ name }} {
3333
{%- endif %}
3434
"{{ attr|attribute_name }}"{%- if not isRequired %}?{%- endif %}: {{ type_to_typescript(schema) }}{%- if isRequired and isNullable %}|null{%- endif %};
3535
{%- endfor %}
36-
{%- if model.get("additionalProperties") %}
36+
{%- if model.additionalProperties is not false %}
3737

3838
/**
3939
* A container for additional, undeclared properties.
4040
* This is a holder for any undeclared properties as specified with
4141
* the 'additionalProperties' keyword in the OAS document.
4242
*/
43-
"additionalProperties"?: { [key: string]: {{ type_to_typescript(model["additionalProperties"]) }} };
43+
"additionalProperties"?: { [key: string]: {{ type_to_typescript(model.get("additionalProperties", {})) }} };
4444
{%- endif %}
4545

4646
/**
@@ -65,13 +65,13 @@ export class {{ name }} {
6565
{%- if format %}
6666
"format": "{{ format }}",
6767
{%- endif %}
68-
}{%- if loop.nextitem or model.get("additionalProperties") %},{%- endif %}
68+
}{%- if loop.nextitem or model.additionalProperties is not false %},{%- endif %}
6969
{%- endfor %}
70-
{%- if model.get("additionalProperties") %}
71-
{%- set format = get_format_for_schema(model["additionalProperties"]) %}
70+
{%- if model.additionalProperties is not false %}
71+
{%- set format = get_format_for_schema(model.get("additionalProperties", {})) %}
7272
"additionalProperties": {
7373
"baseName": "additionalProperties",
74-
"type": "{{ type_to_typescript(model["additionalProperties"], check_nullable=False) }}",
74+
"type": "{{ type_to_typescript(model.get("additionalProperties", {}), check_nullable=False) }}",
7575
{%- if format %}
7676
"format": "{{ format }}",
7777
{%- endif %}

packages/datadog-api-client-v1/models/APIErrorResponse.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ export class APIErrorResponse {
1515
*/
1616
"errors": Array<string>;
1717

18+
/**
19+
* A container for additional, undeclared properties.
20+
* This is a holder for any undeclared properties as specified with
21+
* the 'additionalProperties' keyword in the OAS document.
22+
*/
23+
"additionalProperties"?: { [key: string]: any };
24+
1825
/**
1926
* @ignore
2027
*/
@@ -29,6 +36,10 @@ export class APIErrorResponse {
2936
type: "Array<string>",
3037
required: true,
3138
},
39+
additionalProperties: {
40+
baseName: "additionalProperties",
41+
type: "any",
42+
},
3243
};
3344

3445
/**

packages/datadog-api-client-v1/models/AWSAccount.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ export class AWSAccount {
6464
*/
6565
"secretAccessKey"?: string;
6666

67+
/**
68+
* A container for additional, undeclared properties.
69+
* This is a holder for any undeclared properties as specified with
70+
* the 'additionalProperties' keyword in the OAS document.
71+
*/
72+
"additionalProperties"?: { [key: string]: any };
73+
6774
/**
6875
* @ignore
6976
*/
@@ -117,6 +124,10 @@ export class AWSAccount {
117124
baseName: "secret_access_key",
118125
type: "string",
119126
},
127+
additionalProperties: {
128+
baseName: "additionalProperties",
129+
type: "any",
130+
},
120131
};
121132

122133
/**

packages/datadog-api-client-v1/models/AWSAccountAndLambdaRequest.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ export class AWSAccountAndLambdaRequest {
1919
*/
2020
"lambdaArn": string;
2121

22+
/**
23+
* A container for additional, undeclared properties.
24+
* This is a holder for any undeclared properties as specified with
25+
* the 'additionalProperties' keyword in the OAS document.
26+
*/
27+
"additionalProperties"?: { [key: string]: any };
28+
2229
/**
2330
* @ignore
2431
*/
@@ -38,6 +45,10 @@ export class AWSAccountAndLambdaRequest {
3845
type: "string",
3946
required: true,
4047
},
48+
additionalProperties: {
49+
baseName: "additionalProperties",
50+
type: "any",
51+
},
4152
};
4253

4354
/**

packages/datadog-api-client-v1/models/AWSAccountCreateResponse.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ export class AWSAccountCreateResponse {
1515
*/
1616
"externalId"?: string;
1717

18+
/**
19+
* A container for additional, undeclared properties.
20+
* This is a holder for any undeclared properties as specified with
21+
* the 'additionalProperties' keyword in the OAS document.
22+
*/
23+
"additionalProperties"?: { [key: string]: any };
24+
1825
/**
1926
* @ignore
2027
*/
@@ -28,6 +35,10 @@ export class AWSAccountCreateResponse {
2835
baseName: "external_id",
2936
type: "string",
3037
},
38+
additionalProperties: {
39+
baseName: "additionalProperties",
40+
type: "any",
41+
},
3142
};
3243

3344
/**

packages/datadog-api-client-v1/models/AWSAccountDeleteRequest.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ export class AWSAccountDeleteRequest {
2323
*/
2424
"roleName"?: string;
2525

26+
/**
27+
* A container for additional, undeclared properties.
28+
* This is a holder for any undeclared properties as specified with
29+
* the 'additionalProperties' keyword in the OAS document.
30+
*/
31+
"additionalProperties"?: { [key: string]: any };
32+
2633
/**
2734
* @ignore
2835
*/
@@ -44,6 +51,10 @@ export class AWSAccountDeleteRequest {
4451
baseName: "role_name",
4552
type: "string",
4653
},
54+
additionalProperties: {
55+
baseName: "additionalProperties",
56+
type: "any",
57+
},
4758
};
4859

4960
/**

packages/datadog-api-client-v1/models/AWSAccountListResponse.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ export class AWSAccountListResponse {
1616
*/
1717
"accounts"?: Array<AWSAccount>;
1818

19+
/**
20+
* A container for additional, undeclared properties.
21+
* This is a holder for any undeclared properties as specified with
22+
* the 'additionalProperties' keyword in the OAS document.
23+
*/
24+
"additionalProperties"?: { [key: string]: any };
25+
1926
/**
2027
* @ignore
2128
*/
@@ -29,6 +36,10 @@ export class AWSAccountListResponse {
2936
baseName: "accounts",
3037
type: "Array<AWSAccount>",
3138
},
39+
additionalProperties: {
40+
baseName: "additionalProperties",
41+
type: "any",
42+
},
3243
};
3344

3445
/**

packages/datadog-api-client-v1/models/AWSEventBridgeAccountConfiguration.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@ export class AWSEventBridgeAccountConfiguration {
2525
*/
2626
"tags"?: Array<string>;
2727

28+
/**
29+
* A container for additional, undeclared properties.
30+
* This is a holder for any undeclared properties as specified with
31+
* the 'additionalProperties' keyword in the OAS document.
32+
*/
33+
"additionalProperties"?: { [key: string]: any };
34+
2835
/**
2936
* @ignore
3037
*/
@@ -46,6 +53,10 @@ export class AWSEventBridgeAccountConfiguration {
4653
baseName: "tags",
4754
type: "Array<string>",
4855
},
56+
additionalProperties: {
57+
baseName: "additionalProperties",
58+
type: "any",
59+
},
4960
};
5061

5162
/**

0 commit comments

Comments
 (0)