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

Commit 9883435

Browse files
committed
Adds generic to schema class
1 parent 9763ac9 commit 9883435

2 files changed

Lines changed: 146 additions & 50 deletions

File tree

  • modules/openapi-json-schema-generator/src/main/resources/python
  • samples/openapi3/client/petstore/python/src/petstore_api

modules/openapi-json-schema-generator/src/main/resources/python/schemas.hbs

Lines changed: 58 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
{{> _helper_header }}
44

5+
from __future__ import annotations
56
import collections
67
import datetime
78
import functools
@@ -2155,7 +2156,7 @@ class ListSchema(
21552156
def from_openapi_data_(cls, arg: typing.List[typing.Any], configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None):
21562157
return super().from_openapi_data_(arg, configuration_=configuration_)
21572158

2158-
def __new__(cls, arg_: typing.Union[typing.List[typing.Any], typing.Tuple[typing.Any]], **kwargs: schema_configuration.SchemaConfiguration):
2159+
def __new__(cls, arg_: typing.Union[typing.List[typing.Any], typing.Tuple[typing.Any]], **kwargs: schema_configuration.SchemaConfiguration) -> ListSchema[tuple]:
21592160
return super().__new__(cls, arg_, **kwargs)
21602161

21612162

@@ -2171,7 +2172,7 @@ class NoneSchema(
21712172
def from_openapi_data_(cls, arg: None, configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None):
21722173
return super().from_openapi_data_(arg, configuration_=configuration_)
21732174

2174-
def __new__(cls, arg_: None, **kwargs: schema_configuration.SchemaConfiguration):
2175+
def __new__(cls, arg_: None, **kwargs: schema_configuration.SchemaConfiguration) -> NoneSchema[NoneClass]:
21752176
return super().__new__(cls, arg_, **kwargs)
21762177

21772178

@@ -2191,7 +2192,7 @@ class NumberSchema(
21912192
def from_openapi_data_(cls, arg: typing.Union[int, float], configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None):
21922193
return super().from_openapi_data_(arg, configuration_=configuration_)
21932194

2194-
def __new__(cls, arg_: typing.Union[decimal.Decimal, int, float], **kwargs: schema_configuration.SchemaConfiguration):
2195+
def __new__(cls, arg_: typing.Union[decimal.Decimal, int, float], **kwargs: schema_configuration.SchemaConfiguration) -> NumberSchema[decimal.Decimal]:
21952196
return super().__new__(cls, arg_, **kwargs)
21962197

21972198

@@ -2205,7 +2206,7 @@ class IntBase:
22052206
return self._as_int
22062207

22072208

2208-
class IntSchema(IntBase, NumberSchema):
2209+
class IntSchema(IntBase, NumberSchema[T]):
22092210
class Schema_:
22102211
types = {decimal.Decimal}
22112212
format = 'int'
@@ -2214,28 +2215,34 @@ class IntSchema(IntBase, NumberSchema):
22142215
def from_openapi_data_(cls, arg: int, configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None):
22152216
return super().from_openapi_data_(arg, configuration_=configuration_)
22162217

2217-
def __new__(cls, arg_: typing.Union[decimal.Decimal, int], **kwargs: schema_configuration.SchemaConfiguration):
2218+
def __new__(cls, arg_: typing.Union[decimal.Decimal, int], **kwargs: schema_configuration.SchemaConfiguration) -> IntSchema[decimal.Decimal]:
22182219
return super().__new__(cls, arg_, **kwargs)
22192220

22202221

22212222
class Int32Schema(
2222-
IntSchema
2223+
IntSchema[T]
22232224
):
22242225
class Schema_:
22252226
types = {decimal.Decimal}
22262227
format = 'int32'
22272228

2229+
def __new__(cls, arg_: typing.Union[decimal.Decimal, int], **kwargs: schema_configuration.SchemaConfiguration) -> Int32Schema[decimal.Decimal]:
2230+
return super().__new__(cls, arg_, **kwargs)
2231+
22282232

22292233
class Int64Schema(
2230-
IntSchema
2234+
IntSchema[T]
22312235
):
22322236
class Schema_:
22332237
types = {decimal.Decimal}
22342238
format = 'int64'
22352239

2240+
def __new__(cls, arg_: typing.Union[decimal.Decimal, int], **kwargs: schema_configuration.SchemaConfiguration) -> Int64Schema[decimal.Decimal]:
2241+
return super().__new__(cls, arg_, **kwargs)
2242+
22362243

22372244
class Float32Schema(
2238-
NumberSchema
2245+
NumberSchema[T]
22392246
):
22402247
class Schema_:
22412248
types = {decimal.Decimal}
@@ -2245,9 +2252,12 @@ class Float32Schema(
22452252
def from_openapi_data_(cls, arg: float, configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None):
22462253
return super().from_openapi_data_(arg, configuration_=configuration_)
22472254

2255+
def __new__(cls, arg_: typing.Union[decimal.Decimal, int, float], **kwargs: schema_configuration.SchemaConfiguration) -> Float32Schema[decimal.Decimal]:
2256+
return super().__new__(cls, arg_, **kwargs)
2257+
22482258

22492259
class Float64Schema(
2250-
NumberSchema
2260+
NumberSchema[T]
22512261
):
22522262
class Schema_:
22532263
types = {decimal.Decimal}
@@ -2257,6 +2267,9 @@ class Float64Schema(
22572267
def from_openapi_data_(cls, arg: float, configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None):
22582268
return super().from_openapi_data_(arg, configuration_=configuration_)
22592269

2270+
def __new__(cls, arg_: typing.Union[decimal.Decimal, int, float], **kwargs: schema_configuration.SchemaConfiguration) -> Float64Schema[decimal.Decimal]:
2271+
return super().__new__(cls, arg_, **kwargs)
2272+
22602273

22612274
class StrSchema(
22622275
StrBase,
@@ -2273,46 +2286,46 @@ class StrSchema(
22732286
types = {str}
22742287

22752288
@classmethod
2276-
def from_openapi_data_(cls, arg: str, configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None) -> 'StrSchema':
2289+
def from_openapi_data_(cls, arg: str, configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None) -> StrSchema[str]:
22772290
return super().from_openapi_data_(arg, configuration_=configuration_)
22782291

2279-
def __new__(cls, arg_: typing.Union[str, datetime.date, datetime.datetime, uuid.UUID], **kwargs: schema_configuration.SchemaConfiguration):
2292+
def __new__(cls, arg_: typing.Union[str, datetime.date, datetime.datetime, uuid.UUID], **kwargs: schema_configuration.SchemaConfiguration) -> StrSchema[str]:
22802293
return super().__new__(cls, arg_, **kwargs)
22812294

22822295

2283-
class UUIDSchema(UUIDBase, StrSchema):
2296+
class UUIDSchema(UUIDBase, StrSchema[T]):
22842297
class Schema_:
22852298
types = {str}
22862299
format = 'uuid'
22872300

2288-
def __new__(cls, arg_: typing.Union[str, uuid.UUID], **kwargs: schema_configuration.SchemaConfiguration):
2301+
def __new__(cls, arg_: typing.Union[str, uuid.UUID], **kwargs: schema_configuration.SchemaConfiguration) -> StrSchema[str]:
22892302
return super().__new__(cls, arg_, **kwargs)
22902303

22912304

2292-
class DateSchema(DateBase, StrSchema):
2305+
class DateSchema(DateBase, StrSchema[T]):
22932306
class Schema_:
22942307
types = {str}
22952308
format = 'date'
22962309

2297-
def __new__(cls, arg_: typing.Union[str, datetime.date], **kwargs: schema_configuration.SchemaConfiguration):
2310+
def __new__(cls, arg_: typing.Union[str, datetime.date], **kwargs: schema_configuration.SchemaConfiguration) -> DateSchema[str]:
22982311
return super().__new__(cls, arg_, **kwargs)
22992312

23002313

2301-
class DateTimeSchema(DateTimeBase, StrSchema):
2314+
class DateTimeSchema(DateTimeBase, StrSchema[T]):
23022315
class Schema_:
23032316
types = {str}
23042317
format = 'date-time'
23052318

2306-
def __new__(cls, arg_: typing.Union[str, datetime.datetime], **kwargs: schema_configuration.SchemaConfiguration):
2319+
def __new__(cls, arg_: typing.Union[str, datetime.datetime], **kwargs: schema_configuration.SchemaConfiguration) -> DateTimeSchema[str]:
23072320
return super().__new__(cls, arg_, **kwargs)
23082321

23092322

2310-
class DecimalSchema(DecimalBase, StrSchema):
2323+
class DecimalSchema(DecimalBase, StrSchema[T]):
23112324
class Schema_:
23122325
types = {str}
23132326
format = 'number'
23142327

2315-
def __new__(cls, arg_: str, **kwargs: schema_configuration.SchemaConfiguration):
2328+
def __new__(cls, arg_: str, **kwargs: schema_configuration.SchemaConfiguration) -> DecimalSchema[str]:
23162329
"""
23172330
Note: Decimals may not be passed in because cast_to_allowed_types is only invoked once for payloads
23182331
which can be simple (str) or complex (dicts or lists with nested values)
@@ -2334,7 +2347,7 @@ class BytesSchema(
23342347
class Schema_:
23352348
types = {bytes}
23362349

2337-
def __new__(cls, arg_: bytes, **kwargs: schema_configuration.SchemaConfiguration):
2350+
def __new__(cls, arg_: bytes, **kwargs: schema_configuration.SchemaConfiguration) -> BytesSchema[bytes]:
23382351
return super(Schema, cls).__new__(cls, arg_)
23392352

23402353

@@ -2361,7 +2374,7 @@ class FileSchema(
23612374
class Schema_:
23622375
types = {FileIO}
23632376

2364-
def __new__(cls, arg_: typing.Union[io.FileIO, io.BufferedReader], **kwargs: schema_configuration.SchemaConfiguration):
2377+
def __new__(cls, arg_: typing.Union[io.FileIO, io.BufferedReader], **kwargs: schema_configuration.SchemaConfiguration) -> -> FileSchema[FileIO]:
23652378
return super(Schema, cls).__new__(cls, arg_)
23662379

23672380

@@ -2379,7 +2392,7 @@ class BinarySchema(
23792392
FileSchema,
23802393
]
23812394

2382-
def __new__(cls, arg_: typing.Union[io.FileIO, io.BufferedReader, bytes], **kwargs: schema_configuration.SchemaConfiguration):
2395+
def __new__(cls, arg_: typing.Union[io.FileIO, io.BufferedReader, bytes], **kwargs: schema_configuration.SchemaConfiguration) -> BinarySchema[typing.Union[FileIO, bytes]]:
23832396
return super().__new__(cls, arg_)
23842397

23852398

@@ -2395,7 +2408,7 @@ class BoolSchema(
23952408
def from_openapi_data_(cls, arg: bool, configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None):
23962409
return super().from_openapi_data_(arg, configuration_=configuration_)
23972410

2398-
def __new__(cls, arg_: bool, **kwargs: ValidationMetadata):
2411+
def __new__(cls, arg_: bool, **kwargs: ValidationMetadata) -> BoolSchema[bool]:
23992412
return super().__new__(cls, arg_, **kwargs)
24002413

24012414

@@ -2413,8 +2426,28 @@ class AnyTypeSchema(
24132426
class Schema_:
24142427
pass
24152428

2429+
def __new__(
2430+
cls,
2431+
*args_: typing.Union[
2432+
{{> _helper_types_all_incl_schema }}
2433+
],
2434+
configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None,
2435+
**kwargs: typing.Union[
2436+
{{> _helper_types_all_incl_schema }}
2437+
Unset
2438+
]
2439+
) -> AnyTypeSchema[typing.Union[
2440+
NoneClass,
2441+
frozendict.frozendict,
2442+
tuple,
2443+
str,
2444+
decimal.Decimal,
2445+
BoolClass
2446+
]:
2447+
return super().__new__(cls, arg_, **kwargs)
2448+
24162449

2417-
class UnsetAnyTypeSchema(AnyTypeSchema):
2450+
class UnsetAnyTypeSchema(AnyTypeSchema[T]):
24182451
# Used when additionalProperties/items was not explicitly defined and a defining schema is needed
24192452
pass
24202453

@@ -2453,7 +2486,7 @@ class DictSchema(
24532486
def from_openapi_data_(cls, arg: typing.Dict[str, typing.Any], configuration_: typing.Optional[schema_configuration.SchemaConfiguration] = None):
24542487
return super().from_openapi_data_(arg, configuration_=configuration_)
24552488

2456-
def __new__(cls, *args_: typing.Union[dict, frozendict.frozendict], **kwargs: typing.Union[dict, frozendict.frozendict, list, tuple, decimal.Decimal, float, int, str, datetime.date, datetime.datetime, bool, None, bytes, Schema, Unset, ValidationMetadata]):
2489+
def __new__(cls, *args_: typing.Union[dict, frozendict.frozendict], **kwargs: typing.Union[dict, frozendict.frozendict, list, tuple, decimal.Decimal, float, int, str, datetime.date, datetime.datetime, bool, None, bytes, Schema, Unset, ValidationMetadata]) -> DictSchema[frozendict.frozendict]:
24572490
return super().__new__(cls, *args_, **kwargs)
24582491

24592492

0 commit comments

Comments
 (0)