Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit 6ab64ee

Browse files
authored
Adds 3.1.0 contains feature (#205)
* Adds sample that contains contains schemas * Adds writes contains data in codegenschema * Writes schema class if it has contains info * Writes contains info in schema_cls * Writes contains schemas for anyType and array type * Adds contains validator * Sample regen * Adds sample testing 310 contains * Docs regen
1 parent 4ddd370 commit 6ab64ee

File tree

108 files changed

+6964
-39
lines changed

Some content is hidden

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

108 files changed

+6964
-39
lines changed

.circleci/parallel.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ elif [ "$JOB_ID" = "testPythonClientSamples" ]; then
2323
(cd samples/client/3_0_3_unit_test/python && make test)
2424
(cd samples/client/openapi_features/nonCompliantUseDiscriminatorIfCompositionFails/python && make test)
2525
(cd samples/client/openapi_features/security/python && make test)
26+
(cd samples/client/3_1_0_json_schema/python && make test)
2627

2728
else
2829
echo "Running job $JOB_ID"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
generatorName: python
2+
outputDir: samples/client/3_1_0_json_schema/python
3+
inputSpec: src/test/resources/3_1/json_schema.yaml
4+
additionalProperties:
5+
packageName: json_schema_api

docs/generators/java.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
316316
|AdditionalProperties|✗|OAS2,OAS3
317317
|AllOf|✗|OAS2,OAS3
318318
|AnyOf|✗|OAS3
319+
|Contains|✗|OAS3
319320
|Default|✗|OAS2,OAS3
320321
|Discriminator|✓|OAS2,OAS3
321322
|Enum|✓|OAS2,OAS3

docs/generators/jaxrs-jersey.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
299299
|AdditionalProperties|✗|OAS2,OAS3
300300
|AllOf|✗|OAS2,OAS3
301301
|AnyOf|✗|OAS3
302+
|Contains|✗|OAS3
302303
|Default|✗|OAS2,OAS3
303304
|Discriminator|✓|OAS2,OAS3
304305
|Enum|✓|OAS2,OAS3

docs/generators/jmeter.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
158158
|AdditionalProperties|✗|OAS2,OAS3
159159
|AllOf|✗|OAS2,OAS3
160160
|AnyOf|✗|OAS3
161+
|Contains|✗|OAS3
161162
|Default|✗|OAS2,OAS3
162163
|Discriminator|✓|OAS2,OAS3
163164
|Enum|✓|OAS2,OAS3

docs/generators/kotlin.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
268268
|AdditionalProperties|✗|OAS2,OAS3
269269
|AllOf|✗|OAS2,OAS3
270270
|AnyOf|✗|OAS3
271+
|Contains|✗|OAS3
271272
|Default|✗|OAS2,OAS3
272273
|Discriminator|✓|OAS2,OAS3
273274
|Enum|✓|OAS2,OAS3

docs/generators/python.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
227227
|AdditionalProperties|✓|OAS2,OAS3
228228
|AllOf|✓|OAS2,OAS3
229229
|AnyOf|✓|OAS3
230+
|Contains|✓|OAS3
230231
|Default|✓|OAS2,OAS3
231232
|Discriminator|✓|OAS2,OAS3
232233
|Enum|✓|OAS2,OAS3

samples/client/3_0_3_unit_test/python/src/unit_test_api/configurations/api_configuration.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def __init__(
6666
"""Constructor
6767
"""
6868
# Authentication Settings
69-
self.security_scheme_info = {}
69+
self.security_scheme_info: typing.Dict[str, typing.Any] = {}
7070
self.security_index_info = {'security': 0}
7171
# Server Info
7272
self.server_info: ServerInfo = server_info or {

samples/client/3_0_3_unit_test/python/src/unit_test_api/configurations/schema_configuration.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
'additional_properties': 'additionalProperties',
1717
'all_of': 'allOf',
1818
'any_of': 'anyOf',
19+
'contains': 'contains',
1920
'discriminator': 'discriminator',
2021
# default omitted because it has no validation impact
2122
'enum_value_to_name': 'enum',

samples/client/3_0_3_unit_test/python/src/unit_test_api/schemas/validation.py

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -956,6 +956,41 @@ def validate_discriminator(
956956
return discriminated_cls._validate(arg, validation_metadata=updated_vm)
957957

958958

959+
def validate_contains(
960+
arg: typing.Any,
961+
contains_cls: typing.Type[SchemaValidator],
962+
cls: typing.Type,
963+
validation_metadata: ValidationMetadata,
964+
) -> typing.Optional[PathToSchemasType]:
965+
if not isinstance(arg, tuple):
966+
return None
967+
contains_cls = _get_class(contains_cls)
968+
path_to_schemas: PathToSchemasType = {}
969+
array_contains_item = False
970+
for i, value in enumerate(arg):
971+
item_validation_metadata = ValidationMetadata(
972+
path_to_item=validation_metadata.path_to_item+(i,),
973+
configuration=validation_metadata.configuration,
974+
validated_path_to_schemas=validation_metadata.validated_path_to_schemas
975+
)
976+
if item_validation_metadata.validation_ran_earlier(contains_cls):
977+
add_deeper_validated_schemas(item_validation_metadata, path_to_schemas)
978+
return path_to_schemas
979+
try:
980+
other_path_to_schemas = contains_cls._validate(
981+
value, validation_metadata=item_validation_metadata)
982+
update(path_to_schemas, other_path_to_schemas)
983+
return path_to_schemas
984+
except exceptions.OpenApiException:
985+
pass
986+
if not array_contains_item:
987+
raise exceptions.ApiValueError(
988+
"Validation failed for contains keyword in class={} at path_to_item={}. No "
989+
"items validated to the contains schema.".format(cls, validation_metadata.path_to_item)
990+
)
991+
return path_to_schemas
992+
993+
959994
validator_type = typing.Callable[[typing.Any, typing.Any, type, ValidationMetadata], typing.Optional[PathToSchemasType]]
960995
json_schema_keyword_to_validator: typing.Mapping[str, validator_type] = {
961996
'types': validate_types,
@@ -982,5 +1017,6 @@ def validate_discriminator(
9821017
'any_of': validate_any_of,
9831018
'all_of': validate_all_of,
9841019
'not_': validate_not,
985-
'discriminator': validate_discriminator
1020+
'discriminator': validate_discriminator,
1021+
'contains': validate_contains
9861022
}

0 commit comments

Comments
 (0)