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 @@ -316,6 +316,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|AdditionalProperties|✗|OAS2,OAS3
|AllOf|✗|OAS2,OAS3
|AnyOf|✗|OAS3
|Const|✗|OAS3
|Contains|✗|OAS3
|Default|✗|OAS2,OAS3
|Discriminator|✓|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 @@ -299,6 +299,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|AdditionalProperties|✗|OAS2,OAS3
|AllOf|✗|OAS2,OAS3
|AnyOf|✗|OAS3
|Const|✗|OAS3
|Contains|✗|OAS3
|Default|✗|OAS2,OAS3
|Discriminator|✓|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 @@ -158,6 +158,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|AdditionalProperties|✗|OAS2,OAS3
|AllOf|✗|OAS2,OAS3
|AnyOf|✗|OAS3
|Const|✗|OAS3
|Contains|✗|OAS3
|Default|✗|OAS2,OAS3
|Discriminator|✓|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 @@ -268,6 +268,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|AdditionalProperties|✗|OAS2,OAS3
|AllOf|✗|OAS2,OAS3
|AnyOf|✗|OAS3
|Const|✗|OAS3
|Contains|✗|OAS3
|Default|✗|OAS2,OAS3
|Discriminator|✓|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 @@ -227,6 +227,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|AdditionalProperties|✓|OAS2,OAS3
|AllOf|✓|OAS2,OAS3
|AnyOf|✓|OAS3
|Const|✓|OAS3
|Contains|✓|OAS3
|Default|✓|OAS2,OAS3
|Discriminator|✓|OAS2,OAS3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def FOO_CARRIAGE_RETURN_CR_BAR(cls) -> typing.Literal["foo\rbar"]:

@dataclasses.dataclass(frozen=True)
class EnumWithEscapedCharacters(
schemas.Schema[schemas.immutabledict, str]
schemas.Schema
):
"""NOTE: This class is auto generated by OpenAPI JSON Schema Generator.
Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def FOO(cls) -> typing.Literal["foo"]:

@dataclasses.dataclass(frozen=True)
class Foo(
schemas.Schema[schemas.immutabledict, str]
schemas.Schema
):
types: typing.FrozenSet[typing.Type] = frozenset({
str,
Expand Down Expand Up @@ -75,7 +75,7 @@ def BAR(cls) -> typing.Literal["bar"]:

@dataclasses.dataclass(frozen=True)
class Bar(
schemas.Schema[schemas.immutabledict, str]
schemas.Schema
):
types: typing.FrozenSet[typing.Type] = frozenset({
str,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def HELLO_NULL_THERE(cls) -> typing.Literal["hello\x00there"]:

@dataclasses.dataclass(frozen=True)
class NulCharactersInStrings(
schemas.Schema[schemas.immutabledict, str]
schemas.Schema
):
"""NOTE: This class is auto generated by OpenAPI JSON Schema Generator.
Ref: https://github.com/openapi-json-schema-tools/openapi-json-schema-generator
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
'additional_properties': 'additionalProperties',
'all_of': 'allOf',
'any_of': 'anyOf',
'const_value_to_name': 'const',
'contains': 'contains',
'discriminator': 'discriminator',
# default omitted because it has no validation impact
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,33 @@

from . import validation

_T_co = typing.TypeVar("_T_co", covariant=True)


class SequenceNotStr(typing.Protocol[_T_co]):
"""
if a Protocol would define the interface of Sequence, this protocol
would NOT allow str/bytes as their __contains__ methods are incompatible with the definition in Sequence
methods from: https://docs.python.org/3/library/collections.abc.html#collections.abc.Collection
"""
def __contains__(self, value: object, /) -> bool:
raise NotImplementedError

def __getitem__(self, index, /):
raise NotImplementedError

def __len__(self) -> int:
raise NotImplementedError

def __iter__(self) -> typing.Iterator[_T_co]:
raise NotImplementedError

def __reversed__(self, /) -> typing.Iterator[_T_co]:
raise NotImplementedError

none_type_ = type(None)
T = typing.TypeVar('T', bound=typing.Mapping)
U = typing.TypeVar('U', bound=typing.Sequence)
U = typing.TypeVar('U', bound=SequenceNotStr)
W = typing.TypeVar('W')


Expand Down Expand Up @@ -439,15 +463,15 @@ def validate_base(
@classmethod
def validate_base(
cls,
arg: typing.Union[datetime.date, datetime.datetime, uuid.UUID],
arg: typing.Union[str, datetime.date, datetime.datetime, uuid.UUID],
configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
) -> str: ...

@typing.overload
@classmethod
def validate_base(
cls,
arg: typing.Sequence[INPUT_TYPES_ALL], # also covers str, tuple, list, bytes
arg: SequenceNotStr[INPUT_TYPES_ALL],
configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
) -> U: ...

Expand Down Expand Up @@ -486,6 +510,14 @@ def validate_base(
configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
) -> FileIO: ...

@typing.overload
@classmethod
def validate_base(
cls,
arg: bytes,
configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
) -> bytes: ...

@classmethod
def validate_base(
cls,
Expand Down Expand Up @@ -614,15 +646,15 @@ def validate(
@classmethod
def validate(
cls,
arg: typing.Union[datetime.date, datetime.datetime, uuid.UUID],
arg: typing.Union[str, datetime.date, datetime.datetime, uuid.UUID],
configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
) -> str: ...

@typing.overload
@classmethod
def validate(
cls,
arg: typing.Sequence[INPUT_TYPES_ALL], # also covers str, tuple, list, bytes
arg: SequenceNotStr[INPUT_TYPES_ALL],
configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
) -> U: ...

Expand Down Expand Up @@ -653,6 +685,14 @@ def validate(
configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
) -> FileIO: ...

@typing.overload
@classmethod
def validate(
cls,
arg: bytes,
configuration: typing.Optional[schema_configuration.SchemaConfiguration] = None
) -> bytes: ...

@classmethod
def validate(
cls,
Expand All @@ -668,20 +708,6 @@ class UnsetAnyTypeSchema(AnyTypeSchema[T, U]):
# Used when additionalProperties/items was not explicitly defined and a defining schema is needed
pass

INPUT_TYPES_NOT_STR_BYTES_FILE = typing.Union[
dict,
validation.immutabledict,
list,
tuple,
float,
int,
datetime.date,
datetime.datetime,
uuid.UUID,
bool,
None,
]

INPUT_TYPES_ALL = typing.Union[
dict,
validation.immutabledict,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ class Float64Schema(NumberSchema):


@dataclasses.dataclass(frozen=True)
class StrSchema(schema.Schema[validation.immutabledict, str]):
class StrSchema(schema.Schema):
"""
date + datetime string types must inherit from this class
That is because one can validate a str payload as both:
Expand Down Expand Up @@ -216,7 +216,7 @@ def validate(


@dataclasses.dataclass(frozen=True)
class BytesSchema(schema.Schema[validation.immutabledict, bytes]):
class BytesSchema(schema.Schema):
"""
this class will subclass bytes and is immutable
"""
Expand Down Expand Up @@ -261,7 +261,7 @@ def validate(


@dataclasses.dataclass(frozen=True)
class BinarySchema(schema.Schema[validation.immutabledict, bytes]):
class BinarySchema(schema.Schema):
types: typing.FrozenSet[typing.Type] = frozenset({schema.FileIO, bytes})
format: str = 'binary'

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1050,6 +1050,17 @@ def validate_max_contains(
return None


def validate_const(
arg: typing.Any,
const_value_to_name: typing.Dict[typing.Any, str],
cls: typing.Type,
validation_metadata: ValidationMetadata,
) -> None:
if arg not in const_value_to_name:
raise exceptions.ApiValueError("Invalid value {} passed in to {}, allowed_values={}".format(arg, cls, const_value_to_name.keys()))
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 @@ -1079,5 +1090,6 @@ def validate_max_contains(
'discriminator': validate_discriminator,
'contains': validate_contains,
'min_contains': validate_min_contains,
'max_contains': validate_max_contains
'max_contains': validate_max_contains,
'const_value_to_name': validate_const,
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
.travis.yml
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_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/string_const_string.md
docs/paths/some_path/get.md
docs/paths/some_path/get/responses/response_200/content/application_json/schema.md
docs/servers/server_0.md
Expand All @@ -29,12 +31,14 @@ src/json_schema_api/apis/tags/__init__.py
src/json_schema_api/apis/tags/default_api.py
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_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/string_const_string.py
src/json_schema_api/components/schemas/__init__.py
src/json_schema_api/configurations/__init__.py
src/json_schema_api/configurations/api_configuration.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 @@ -173,12 +173,14 @@ HTTP request | Method | Description

Class | Description
----- | ------------
[AnyTypeConstString](docs/components/schema/any_type_const_string.md) |
[AnyTypeContainsValue](docs/components/schema/any_type_contains_value.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) |
[StringConstString](docs/components/schema/string_const_string.md) |

## Notes for Large OpenAPI documents
If the OpenAPI document is large, imports in json_schema_api.apis.tags.tag_to_api and json_schema_api.components.schemas may fail with a
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# AnyTypeConstString
json_schema_api.components.schema.any_type_const_string
```
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 @@
# StringConstString
json_schema_api.components.schema.string_const_string
```
type: schemas.Schema
```

## validate method
Input Type | Return Type | Notes
------------ | ------------- | -------------
str | str |

[[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,38 @@
# 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]



class AnyTypeConstStringConst:

@schemas.classproperty
def SOME_VAL(cls) -> typing.Literal["someVal"]:
return AnyTypeConstString.validate("someVal")


@dataclasses.dataclass(frozen=True)
class AnyTypeConstString(
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
const_value_to_name: typing.Mapping[typing.Union[int, float, str, schemas.Bool, None], str] = dataclasses.field(
default_factory=lambda: {
"someVal": "SOME_VAL",
}
)
const = AnyTypeConstStringConst

Loading