Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/generators/java.md
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|Const|✗|OAS3
|Contains|✗|OAS3
|Default|✗|OAS2,OAS3
|DependentRequired|✗|OAS3
|Discriminator|✓|OAS2,OAS3
|Enum|✓|OAS2,OAS3
|ExclusiveMinimum|✓|OAS2,OAS3
Expand Down
1 change: 1 addition & 0 deletions docs/generators/jaxrs-jersey.md
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|Const|✗|OAS3
|Contains|✗|OAS3
|Default|✗|OAS2,OAS3
|DependentRequired|✗|OAS3
|Discriminator|✓|OAS2,OAS3
|Enum|✓|OAS2,OAS3
|ExclusiveMinimum|✓|OAS2,OAS3
Expand Down
1 change: 1 addition & 0 deletions docs/generators/jmeter.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|Const|✗|OAS3
|Contains|✗|OAS3
|Default|✗|OAS2,OAS3
|DependentRequired|✗|OAS3
|Discriminator|✓|OAS2,OAS3
|Enum|✓|OAS2,OAS3
|ExclusiveMinimum|✓|OAS2,OAS3
Expand Down
1 change: 1 addition & 0 deletions docs/generators/kotlin.md
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|Const|✗|OAS3
|Contains|✗|OAS3
|Default|✗|OAS2,OAS3
|DependentRequired|✗|OAS3
|Discriminator|✓|OAS2,OAS3
|Enum|✓|OAS2,OAS3
|ExclusiveMinimum|✓|OAS2,OAS3
Expand Down
1 change: 1 addition & 0 deletions docs/generators/python.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|Const|✓|OAS3
|Contains|✓|OAS3
|Default|✓|OAS2,OAS3
|DependentRequired|✓|OAS3
|Discriminator|✓|OAS2,OAS3
|Enum|✓|OAS2,OAS3
|ExclusiveMinimum|✓|OAS2,OAS3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
'any_of': 'anyOf',
'const_value_to_name': 'const',
'contains': 'contains',
'dependent_required': 'dependentRequired',
'discriminator': 'discriminator',
# default omitted because it has no validation impact
'enum_value_to_name': 'enum',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1061,6 +1061,26 @@ def validate_const(
return None


def validate_dependent_required(
arg: typing.Any,
dependent_required: typing.Mapping[str, typing.Set[str]],
cls: typing.Type,
validation_metadata: ValidationMetadata,
) -> None:
if not isinstance(arg, immutabledict):
return None
for key, keys_that_must_exist in dependent_required.items():
if key not in arg:
continue
missing_keys = keys_that_must_exist - arg.keys()
if missing_keys:
raise exceptions.ApiValueError(
f"Validation failed for dependentRequired because these_keys={missing_keys} are "
f"missing at path_to_item={validation_metadata.path_to_item} in class {cls}"
)
return None


validator_type = typing.Callable[[typing.Any, typing.Any, type, ValidationMetadata], typing.Optional[PathToSchemasType]]
json_schema_keyword_to_validator: typing.Mapping[str, validator_type] = {
'types': validate_types,
Expand Down Expand Up @@ -1092,4 +1112,5 @@ def validate_const(
'min_contains': validate_min_contains,
'max_contains': validate_max_contains,
'const_value_to_name': validate_const,
'dependent_required': validate_dependent_required,
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ README.md
docs/apis/tags/default_api.md
docs/components/schema/any_type_const_string.md
docs/components/schema/any_type_contains_value.md
docs/components/schema/any_type_dependent_required.md
docs/components/schema/any_type_max_contains_value.md
docs/components/schema/any_type_min_contains_value.md
docs/components/schema/array_contains_value.md
docs/components/schema/array_max_contains_value.md
docs/components/schema/array_min_contains_value.md
docs/components/schema/object_dependent_required.md
docs/components/schema/string_const_string.md
docs/paths/some_path/get.md
docs/paths/some_path/get/responses/response_200/content/application_json/schema.md
Expand All @@ -33,11 +35,13 @@ src/json_schema_api/components/__init__.py
src/json_schema_api/components/schema/__init__.py
src/json_schema_api/components/schema/any_type_const_string.py
src/json_schema_api/components/schema/any_type_contains_value.py
src/json_schema_api/components/schema/any_type_dependent_required.py
src/json_schema_api/components/schema/any_type_max_contains_value.py
src/json_schema_api/components/schema/any_type_min_contains_value.py
src/json_schema_api/components/schema/array_contains_value.py
src/json_schema_api/components/schema/array_max_contains_value.py
src/json_schema_api/components/schema/array_min_contains_value.py
src/json_schema_api/components/schema/object_dependent_required.py
src/json_schema_api/components/schema/string_const_string.py
src/json_schema_api/components/schemas/__init__.py
src/json_schema_api/configurations/__init__.py
Expand Down
2 changes: 2 additions & 0 deletions samples/client/3_1_0_json_schema/python/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,11 +175,13 @@ Class | Description
----- | ------------
[AnyTypeConstString](docs/components/schema/any_type_const_string.md) |
[AnyTypeContainsValue](docs/components/schema/any_type_contains_value.md) |
[AnyTypeDependentRequired](docs/components/schema/any_type_dependent_required.md) |
[AnyTypeMaxContainsValue](docs/components/schema/any_type_max_contains_value.md) |
[AnyTypeMinContainsValue](docs/components/schema/any_type_min_contains_value.md) |
[ArrayContainsValue](docs/components/schema/array_contains_value.md) |
[ArrayMaxContainsValue](docs/components/schema/array_max_contains_value.md) |
[ArrayMinContainsValue](docs/components/schema/array_min_contains_value.md) |
[ObjectDependentRequired](docs/components/schema/object_dependent_required.md) |
[StringConstString](docs/components/schema/string_const_string.md) |

## Notes for Large OpenAPI documents
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# AnyTypeDependentRequired
json_schema_api.components.schema.any_type_dependent_required
```
type: schemas.Schema
```

## validate method
Input Type | Return Type | Notes
------------ | ------------- | -------------
dict, schemas.immutabledict, str, datetime.date, datetime.datetime, uuid.UUID, int, float, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader | schemas.immutabledict, str, float, int, bool, None, tuple, bytes, io.FileIO |

[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# ObjectDependentRequired
json_schema_api.components.schema.object_dependent_required
```
type: schemas.Schema
```

## validate method
Input Type | Return Type | Notes
------------ | ------------- | -------------
dict, schemas.immutabledict | schemas.immutabledict |

[[Back to top]](#top) [[Back to Component Schemas]](../../../README.md#Component-Schemas) [[Back to README]](../../../README.md)
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# coding: utf-8

"""
Example
No description provided (generated by Openapi JSON Schema Generator https://github.com/openapi-json-schema-tools/openapi-json-schema-generator) # noqa: E501
The version of the OpenAPI document: 1.0.0
Generated by: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator
"""

from __future__ import annotations
from json_schema_api.shared_imports.schema_imports import * # pyright: ignore [reportWildcardImportFromLibrary]



@dataclasses.dataclass(frozen=True)
class AnyTypeDependentRequired(
schemas.AnyTypeSchema[schemas.immutabledict[str, schemas.OUTPUT_BASE_TYPES], typing.Tuple[schemas.OUTPUT_BASE_TYPES, ...]],
):
"""NOTE: This class is auto generated by OpenAPI JSON Schema Generator.
Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator

Do not edit the class manually.
"""
# any type
dependent_required: typing.Mapping[str, typing.Set[str]] = dataclasses.field(
default_factory=lambda: {
"a": {
"b",
},
}
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# coding: utf-8

"""
Example
No description provided (generated by Openapi JSON Schema Generator https://github.com/openapi-json-schema-tools/openapi-json-schema-generator) # noqa: E501
The version of the OpenAPI document: 1.0.0
Generated by: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator
"""

from __future__ import annotations
from json_schema_api.shared_imports.schema_imports import * # pyright: ignore [reportWildcardImportFromLibrary]



@dataclasses.dataclass(frozen=True)
class ObjectDependentRequired(
schemas.Schema[schemas.immutabledict[str, schemas.OUTPUT_BASE_TYPES], tuple]
):
"""NOTE: This class is auto generated by OpenAPI JSON Schema Generator.
Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator

Do not edit the class manually.
"""
types: typing.FrozenSet[typing.Type] = frozenset({schemas.immutabledict})
dependent_required: typing.Mapping[str, typing.Set[str]] = dataclasses.field(
default_factory=lambda: {
"a": {
"b",
},
}
)
@classmethod
def validate(
cls,
arg: typing.Mapping[str, schemas.INPUT_TYPES_ALL],
configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
) -> schemas.immutabledict[str, schemas.OUTPUT_BASE_TYPES]:
return super().validate_base(
arg,
configuration=configuration,
)

Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@

from json_schema_api.components.schema.any_type_const_string import AnyTypeConstString
from json_schema_api.components.schema.any_type_contains_value import AnyTypeContainsValue
from json_schema_api.components.schema.any_type_dependent_required import AnyTypeDependentRequired
from json_schema_api.components.schema.any_type_max_contains_value import AnyTypeMaxContainsValue
from json_schema_api.components.schema.any_type_min_contains_value import AnyTypeMinContainsValue
from json_schema_api.components.schema.array_contains_value import ArrayContainsValue
from json_schema_api.components.schema.array_max_contains_value import ArrayMaxContainsValue
from json_schema_api.components.schema.array_min_contains_value import ArrayMinContainsValue
from json_schema_api.components.schema.object_dependent_required import ObjectDependentRequired
from json_schema_api.components.schema.string_const_string import StringConstString
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
'any_of': 'anyOf',
'const_value_to_name': 'const',
'contains': 'contains',
'dependent_required': 'dependentRequired',
'discriminator': 'discriminator',
# default omitted because it has no validation impact
'enum_value_to_name': 'enum',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1061,6 +1061,26 @@ def validate_const(
return None


def validate_dependent_required(
arg: typing.Any,
dependent_required: typing.Mapping[str, typing.Set[str]],
cls: typing.Type,
validation_metadata: ValidationMetadata,
) -> None:
if not isinstance(arg, immutabledict):
return None
for key, keys_that_must_exist in dependent_required.items():
if key not in arg:
continue
missing_keys = keys_that_must_exist - arg.keys()
if missing_keys:
raise exceptions.ApiValueError(
f"Validation failed for dependentRequired because these_keys={missing_keys} are "
f"missing at path_to_item={validation_metadata.path_to_item} in class {cls}"
)
return None


validator_type = typing.Callable[[typing.Any, typing.Any, type, ValidationMetadata], typing.Optional[PathToSchemasType]]
json_schema_keyword_to_validator: typing.Mapping[str, validator_type] = {
'types': validate_types,
Expand Down Expand Up @@ -1092,4 +1112,5 @@ def validate_const(
'min_contains': validate_min_contains,
'max_contains': validate_max_contains,
'const_value_to_name': validate_const,
'dependent_required': validate_dependent_required,
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# coding: utf-8

"""
Example
No description provided (generated by Openapi JSON Schema Generator https://github.com/openapi-json-schema-tools/openapi-json-schema-generator) # noqa: E501
The version of the OpenAPI document: 1.0.0
Generated by: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator
"""

import unittest

import json_schema_api
from json_schema_api.components.schema.any_type_dependent_required import AnyTypeDependentRequired


class TestAnyTypeDependentRequired(unittest.TestCase):
"""AnyTypeDependentRequired unit test stubs"""

def test_success_with_key_and_conditionally_required_keys(self):
inst = AnyTypeDependentRequired.validate({'a': 1, 'b': 2})
assert inst == {'a': 1, 'b': 2}

def test_success_without_key(self):
inst = AnyTypeDependentRequired.validate({'b': 2})
assert inst == {'b': 2}

def test_success_non_object_type(self):
inst = AnyTypeDependentRequired.validate(0)
assert inst == 0

def test_failure(self):
with self.assertRaises(json_schema_api.ApiValueError):
AnyTypeDependentRequired.validate({'a': 1, 'c': 2})

if __name__ == '__main__':
unittest.main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# coding: utf-8

"""
Example
No description provided (generated by Openapi JSON Schema Generator https://github.com/openapi-json-schema-tools/openapi-json-schema-generator) # noqa: E501
The version of the OpenAPI document: 1.0.0
Generated by: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator
"""

import unittest

import json_schema_api
from json_schema_api.components.schema.object_dependent_required import ObjectDependentRequired


class TestObjectDependentRequired(unittest.TestCase):
"""ObjectDependentRequired unit test stubs"""

def test_success_with_key_and_conditionally_required_keys(self):
inst = ObjectDependentRequired.validate({'a': 1, 'b': 2})
assert inst == {'a': 1, 'b': 2}

def test_success_without_key(self):
inst = ObjectDependentRequired.validate({'b': 2})
assert inst == {'b': 2}

def test_failure(self):
with self.assertRaises(json_schema_api.ApiValueError):
ObjectDependentRequired.validate({'a': 1, 'c': 2})

if __name__ == '__main__':
unittest.main()
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
'any_of': 'anyOf',
'const_value_to_name': 'const',
'contains': 'contains',
'dependent_required': 'dependentRequired',
'discriminator': 'discriminator',
# default omitted because it has no validation impact
'enum_value_to_name': 'enum',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1142,6 +1142,27 @@ def validate_const(
return None


def validate_dependent_required(
arg: typing.Any,
dependent_required: typing.Mapping[str, typing.Set[str]],
cls: typing.Type,
validation_metadata: ValidationMetadata,
**kwargs
) -> None:
if not isinstance(arg, immutabledict):
return None
for key, keys_that_must_exist in dependent_required.items():
if key not in arg:
continue
missing_keys = keys_that_must_exist - arg.keys()
if missing_keys:
raise exceptions.ApiValueError(
f"Validation failed for dependentRequired because these_keys={missing_keys} are "
f"missing at path_to_item={validation_metadata.path_to_item} in class {cls}"
)
return None


validator_type = typing.Callable[[typing.Any, typing.Any, type, ValidationMetadata], typing.Optional[PathToSchemasType]]
json_schema_keyword_to_validator: typing.Mapping[str, validator_type] = {
'types': validate_types,
Expand Down Expand Up @@ -1173,4 +1194,5 @@ def validate_const(
'min_contains': validate_min_contains,
'max_contains': validate_max_contains,
'const_value_to_name': validate_const,
'dependent_required': validate_dependent_required,
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
'any_of': 'anyOf',
'const_value_to_name': 'const',
'contains': 'contains',
'dependent_required': 'dependentRequired',
'discriminator': 'discriminator',
# default omitted because it has no validation impact
'enum_value_to_name': 'enum',
Expand Down
Loading