@@ -484,17 +484,31 @@ class Schema:
484
484
"""
485
485
import itertools
486
486
data_types = ('None', 'FrozenDict', 'Tuple', 'Str', 'Decimal', 'Bool')
487
- [v for v in itertools.combinations(data_types, 2)]
487
+ type_to_cls = {
488
+ 'None': 'NoneClass',
489
+ 'FrozenDict': 'frozendict.frozendict',
490
+ 'Tuple': 'tuple',
491
+ 'Str': 'str',
492
+ 'Decimal': 'decimal.Decimal',
493
+ 'Bool': 'BoolClass'
494
+ }
495
+ cls_tuples = [v for v in itertools.combinations(data_types, 5)]
496
+ typed_classes = [f"class {''.join(cls_tuple)}Mixin({', '.join(type_to_cls[typ] for typ in cls_tuple)}):\n pass" for cls_tuple in cls_tuples]
497
+ for cls in typed_classes:
498
+ print(cls)
499
+ object_classes = [f"{''.join(cls_tuple)}Mixin = object" for cls_tuple in cls_tuples]
500
+ for cls in object_classes:
501
+ print(cls)
488
502
"""
489
503
if typing.TYPE_CHECKING:
490
- # qty 1 mixin
504
+ # qty 1
491
505
NoneMixin = NoneClass
492
506
FrozenDictMixin = frozendict.frozendict
493
507
TupleMixin = tuple
494
508
StrMixin = str
495
509
DecimalMixin = decimal.Decimal
496
510
BoolMixin = BoolClass
497
- # qty 2 mixin
511
+ # qty 2
498
512
class BinaryMixin(bytes, FileIO):
499
513
pass
500
514
class NoneFrozenDictMixin(NoneClass, frozendict.frozendict):
@@ -527,18 +541,103 @@ if typing.TYPE_CHECKING:
527
541
pass
528
542
class DecimalBoolMixin(decimal.Decimal, BoolClass):
529
543
pass
544
+ # qty 3
545
+ class NoneFrozenDictTupleMixin(NoneClass, frozendict.frozendict, tuple):
546
+ pass
547
+ class NoneFrozenDictStrMixin(NoneClass, frozendict.frozendict, str):
548
+ pass
549
+ class NoneFrozenDictDecimalMixin(NoneClass, frozendict.frozendict, decimal.Decimal):
550
+ pass
551
+ class NoneFrozenDictBoolMixin(NoneClass, frozendict.frozendict, BoolClass):
552
+ pass
553
+ class NoneTupleStrMixin(NoneClass, tuple, str):
554
+ pass
555
+ class NoneTupleDecimalMixin(NoneClass, tuple, decimal.Decimal):
556
+ pass
557
+ class NoneTupleBoolMixin(NoneClass, tuple, BoolClass):
558
+ pass
559
+ class NoneStrDecimalMixin(NoneClass, str, decimal.Decimal):
560
+ pass
561
+ class NoneStrBoolMixin(NoneClass, str, BoolClass):
562
+ pass
563
+ class NoneDecimalBoolMixin(NoneClass, decimal.Decimal, BoolClass):
564
+ pass
565
+ class FrozenDictTupleStrMixin(frozendict.frozendict, tuple, str):
566
+ pass
567
+ class FrozenDictTupleDecimalMixin(frozendict.frozendict, tuple, decimal.Decimal):
568
+ pass
569
+ class FrozenDictTupleBoolMixin(frozendict.frozendict, tuple, BoolClass):
570
+ pass
571
+ class FrozenDictStrDecimalMixin(frozendict.frozendict, str, decimal.Decimal):
572
+ pass
573
+ class FrozenDictStrBoolMixin(frozendict.frozendict, str, BoolClass):
574
+ pass
575
+ class FrozenDictDecimalBoolMixin(frozendict.frozendict, decimal.Decimal, BoolClass):
576
+ pass
577
+ class TupleStrDecimalMixin(tuple, str, decimal.Decimal):
578
+ pass
579
+ class TupleStrBoolMixin(tuple, str, BoolClass):
580
+ pass
581
+ class TupleDecimalBoolMixin(tuple, decimal.Decimal, BoolClass):
582
+ pass
583
+ class StrDecimalBoolMixin(str, decimal.Decimal, BoolClass):
584
+ pass
585
+ # qty 4
586
+ class NoneFrozenDictTupleStrMixin(NoneClass, frozendict.frozendict, tuple, str):
587
+ pass
588
+ class NoneFrozenDictTupleDecimalMixin(NoneClass, frozendict.frozendict, tuple, decimal.Decimal):
589
+ pass
590
+ class NoneFrozenDictTupleBoolMixin(NoneClass, frozendict.frozendict, tuple, BoolClass):
591
+ pass
592
+ class NoneFrozenDictStrDecimalMixin(NoneClass, frozendict.frozendict, str, decimal.Decimal):
593
+ pass
594
+ class NoneFrozenDictStrBoolMixin(NoneClass, frozendict.frozendict, str, BoolClass):
595
+ pass
596
+ class NoneFrozenDictDecimalBoolMixin(NoneClass, frozendict.frozendict, decimal.Decimal, BoolClass):
597
+ pass
598
+ class NoneTupleStrDecimalMixin(NoneClass, tuple, str, decimal.Decimal):
599
+ pass
600
+ class NoneTupleStrBoolMixin(NoneClass, tuple, str, BoolClass):
601
+ pass
602
+ class NoneTupleDecimalBoolMixin(NoneClass, tuple, decimal.Decimal, BoolClass):
603
+ pass
604
+ class NoneStrDecimalBoolMixin(NoneClass, str, decimal.Decimal, BoolClass):
605
+ pass
606
+ class FrozenDictTupleStrDecimalMixin(frozendict.frozendict, tuple, str, decimal.Decimal):
607
+ pass
608
+ class FrozenDictTupleStrBoolMixin(frozendict.frozendict, tuple, str, BoolClass):
609
+ pass
610
+ class FrozenDictTupleDecimalBoolMixin(frozendict.frozendict, tuple, decimal.Decimal, BoolClass):
611
+ pass
612
+ class FrozenDictStrDecimalBoolMixin(frozendict.frozendict, str, decimal.Decimal, BoolClass):
613
+ pass
614
+ class TupleStrDecimalBoolMixin(tuple, str, decimal.Decimal, BoolClass):
615
+ pass
616
+ # qty 5
617
+ class NoneFrozenDictTupleStrDecimalMixin(NoneClass, frozendict.frozendict, tuple, str, decimal.Decimal):
618
+ pass
619
+ class NoneFrozenDictTupleStrBoolMixin(NoneClass, frozendict.frozendict, tuple, str, BoolClass):
620
+ pass
621
+ class NoneFrozenDictTupleDecimalBoolMixin(NoneClass, frozendict.frozendict, tuple, decimal.Decimal, BoolClass):
622
+ pass
623
+ class NoneFrozenDictStrDecimalBoolMixin(NoneClass, frozendict.frozendict, str, decimal.Decimal, BoolClass):
624
+ pass
625
+ class NoneTupleStrDecimalBoolMixin(NoneClass, tuple, str, decimal.Decimal, BoolClass):
626
+ pass
627
+ class FrozenDictTupleStrDecimalBoolMixin(frozendict.frozendict, tuple, str, decimal.Decimal, BoolClass):
628
+ pass
530
629
# qty 6
531
630
class NoneFrozenDictTupleStrDecimalBoolMixin(NoneClass, frozendict.frozendict, tuple, str, decimal.Decimal, BoolClass):
532
631
pass
533
632
else:
534
- # qty 1 mixin
633
+ # qty 1
535
634
NoneMixin = object
536
635
FrozenDictMixin = object
537
636
TupleMixin = object
538
637
StrMixin = object
539
638
DecimalMixin = object
540
639
BoolMixin = object
541
- # qty 2 mixin
640
+ # qty 2
542
641
BinaryMixin = object
543
642
NoneFrozenDictMixin = object
544
643
NoneTupleMixin = object
@@ -555,6 +654,51 @@ else:
555
654
StrDecimalMixin = object
556
655
StrBoolMixin = object
557
656
DecimalBoolMixin = object
657
+ # qty 3
658
+ NoneFrozenDictTupleMixin = object
659
+ NoneFrozenDictStrMixin = object
660
+ NoneFrozenDictDecimalMixin = object
661
+ NoneFrozenDictBoolMixin = object
662
+ NoneTupleStrMixin = object
663
+ NoneTupleDecimalMixin = object
664
+ NoneTupleBoolMixin = object
665
+ NoneStrDecimalMixin = object
666
+ NoneStrBoolMixin = object
667
+ NoneDecimalBoolMixin = object
668
+ FrozenDictTupleStrMixin = object
669
+ FrozenDictTupleDecimalMixin = object
670
+ FrozenDictTupleBoolMixin = object
671
+ FrozenDictStrDecimalMixin = object
672
+ FrozenDictStrBoolMixin = object
673
+ FrozenDictDecimalBoolMixin = object
674
+ TupleStrDecimalMixin = object
675
+ TupleStrBoolMixin = object
676
+ TupleDecimalBoolMixin = object
677
+ StrDecimalBoolMixin = object
678
+ # qty 4
679
+ NoneFrozenDictTupleStrMixin = object
680
+ NoneFrozenDictTupleDecimalMixin = object
681
+ NoneFrozenDictTupleBoolMixin = object
682
+ NoneFrozenDictStrDecimalMixin = object
683
+ NoneFrozenDictStrBoolMixin = object
684
+ NoneFrozenDictDecimalBoolMixin = object
685
+ NoneTupleStrDecimalMixin = object
686
+ NoneTupleStrBoolMixin = object
687
+ NoneTupleDecimalBoolMixin = object
688
+ NoneStrDecimalBoolMixin = object
689
+ FrozenDictTupleStrDecimalMixin = object
690
+ FrozenDictTupleStrBoolMixin = object
691
+ FrozenDictTupleDecimalBoolMixin = object
692
+ FrozenDictStrDecimalBoolMixin = object
693
+ TupleStrDecimalBoolMixin = object
694
+ # qty 5
695
+ NoneFrozenDictTupleStrDecimalMixin = object
696
+ NoneFrozenDictTupleStrBoolMixin = object
697
+ NoneFrozenDictTupleDecimalBoolMixin = object
698
+ NoneFrozenDictStrDecimalBoolMixin = object
699
+ NoneTupleStrDecimalBoolMixin = object
700
+ FrozenDictTupleStrDecimalBoolMixin = object
701
+ # qty 6
558
702
NoneFrozenDictTupleStrDecimalBoolMixin = object
559
703
560
704
@@ -599,7 +743,7 @@ class Validator(typing.Protocol):
599
743
pass
600
744
601
745
602
- def SchemaTypeCheckerClsFactory(union_type_cls: typing.Union[typing. Any] ) -> Validator:
746
+ def SchemaTypeCheckerClsFactory(union_type_cls: typing.Any) -> Validator:
603
747
if typing.get_origin(union_type_cls) is typing.Union:
604
748
union_classes = typing.get_args(union_type_cls)
605
749
else:
@@ -1866,7 +2010,7 @@ class ComposedSchema(
1866
2010
1867
2011
1868
2012
class ListSchema(
1869
- SchemaTypeCheckerClsFactory(typing.Union[ tuple] ),
2013
+ SchemaTypeCheckerClsFactory(tuple),
1870
2014
ListBase,
1871
2015
Schema,
1872
2016
TupleMixin
@@ -1881,7 +2025,7 @@ class ListSchema(
1881
2025
1882
2026
1883
2027
class NoneSchema(
1884
- SchemaTypeCheckerClsFactory(typing.Union[ NoneClass] ),
2028
+ SchemaTypeCheckerClsFactory(NoneClass),
1885
2029
NoneBase,
1886
2030
Schema,
1887
2031
NoneMixin
@@ -1896,7 +2040,7 @@ class NoneSchema(
1896
2040
1897
2041
1898
2042
class NumberSchema(
1899
- SchemaTypeCheckerClsFactory(typing.Union[ decimal.Decimal] ),
2043
+ SchemaTypeCheckerClsFactory(decimal.Decimal),
1900
2044
NumberBase,
1901
2045
Schema,
1902
2046
DecimalMixin
@@ -1907,7 +2051,7 @@ class NumberSchema(
1907
2051
"""
1908
2052
1909
2053
@classmethod
1910
- def from_openapi_data_oapg(cls, arg: typing.Union[int, float, decimal.Decimal ], _configuration: typing.Optional[Configuration] = None):
2054
+ def from_openapi_data_oapg(cls, arg: typing.Union[int, float], _configuration: typing.Optional[Configuration] = None):
1911
2055
return super().from_openapi_data_oapg(arg, _configuration=_configuration)
1912
2056
1913
2057
def __new__(cls, arg: typing.Union[decimal.Decimal, int, float], **kwargs: Configuration):
@@ -2052,7 +2196,7 @@ class Float32Schema(
2052
2196
):
2053
2197
2054
2198
@classmethod
2055
- def from_openapi_data_oapg(cls, arg: typing.Union[ float, decimal.Decimal] , _configuration: typing.Optional[Configuration] = None):
2199
+ def from_openapi_data_oapg(cls, arg: float, _configuration: typing.Optional[Configuration] = None):
2056
2200
return super().from_openapi_data_oapg(arg, _configuration=_configuration)
2057
2201
2058
2202
@@ -2086,13 +2230,13 @@ class Float64Schema(
2086
2230
):
2087
2231
2088
2232
@classmethod
2089
- def from_openapi_data_oapg(cls, arg: typing.Union[ float, decimal.Decimal] , _configuration: typing.Optional[Configuration] = None):
2233
+ def from_openapi_data_oapg(cls, arg: float, _configuration: typing.Optional[Configuration] = None):
2090
2234
# todo check format
2091
2235
return super().from_openapi_data_oapg(arg, _configuration=_configuration)
2092
2236
2093
2237
2094
2238
class StrSchema(
2095
- SchemaTypeCheckerClsFactory(typing.Union[ str] ),
2239
+ SchemaTypeCheckerClsFactory(str),
2096
2240
StrBase,
2097
2241
Schema,
2098
2242
StrMixin
@@ -2105,7 +2249,7 @@ class StrSchema(
2105
2249
"""
2106
2250
2107
2251
@classmethod
2108
- def from_openapi_data_oapg(cls, arg: typing.Union[ str] , _configuration: typing.Optional[Configuration] = None) -> 'StrSchema':
2252
+ def from_openapi_data_oapg(cls, arg: str, _configuration: typing.Optional[Configuration] = None) -> 'StrSchema':
2109
2253
return super().from_openapi_data_oapg(arg, _configuration=_configuration)
2110
2254
2111
2255
def __new__(cls, arg: typing.Union[str, date, datetime, uuid.UUID], **kwargs: Configuration):
@@ -2132,7 +2276,7 @@ class DateTimeSchema(DateTimeBase, StrSchema):
2132
2276
2133
2277
class DecimalSchema(DecimalBase, StrSchema):
2134
2278
2135
- def __new__(cls, arg: typing.Union[ str] , **kwargs: Configuration):
2279
+ def __new__(cls, arg: str, **kwargs: Configuration):
2136
2280
"""
2137
2281
Note: Decimals may not be passed in because cast_to_allowed_types is only invoked once for payloads
2138
2282
which can be simple (str) or complex (dicts or lists with nested values)
@@ -2145,18 +2289,18 @@ class DecimalSchema(DecimalBase, StrSchema):
2145
2289
2146
2290
2147
2291
class BytesSchema(
2148
- SchemaTypeCheckerClsFactory(typing.Union[ bytes] ),
2292
+ SchemaTypeCheckerClsFactory(bytes),
2149
2293
Schema,
2150
2294
):
2151
2295
"""
2152
2296
this class will subclass bytes and is immutable
2153
2297
"""
2154
- def __new__(cls, arg: typing.Union[ bytes] , **kwargs: Configuration):
2298
+ def __new__(cls, arg: bytes, **kwargs: Configuration):
2155
2299
return super(Schema, cls).__new__(cls, arg)
2156
2300
2157
2301
2158
2302
class FileSchema(
2159
- SchemaTypeCheckerClsFactory(typing.Union[ FileIO] ),
2303
+ SchemaTypeCheckerClsFactory(FileIO),
2160
2304
Schema,
2161
2305
):
2162
2306
"""
@@ -2202,7 +2346,7 @@ class BinarySchema(
2202
2346
2203
2347
2204
2348
class BoolSchema(
2205
- SchemaTypeCheckerClsFactory(typing.Union[ BoolClass] ),
2349
+ SchemaTypeCheckerClsFactory(BoolClass),
2206
2350
BoolBase,
2207
2351
Schema,
2208
2352
BoolMixin
@@ -2263,7 +2407,7 @@ class NotAnyTypeSchema(
2263
2407
2264
2408
2265
2409
class DictSchema(
2266
- SchemaTypeCheckerClsFactory(typing.Union[ frozendict.frozendict] ),
2410
+ SchemaTypeCheckerClsFactory(frozendict.frozendict),
2267
2411
DictBase,
2268
2412
Schema,
2269
2413
FrozenDictMixin
0 commit comments