[python-experimental] Fixes enum is comparison (#12176)

* Fixes enum is comparison

* Reverts file
This commit is contained in:
Justin Black 2022-04-19 21:28:42 -07:00 committed by GitHub
parent 35d6fd4a0a
commit fbdd3c3e22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
32 changed files with 88 additions and 89 deletions

View File

@ -11,6 +11,6 @@ def NONE(cls):
@classmethod
@property
def {{name}}(cls):
return cls._enum_by_value[{{{value}}}]({{{value}}})
return cls({{{value}}})
{{/each}}
{{/with}}

View File

@ -1389,6 +1389,7 @@ class Schema:
# Use case: value is None, True, False, or an enum value
value = arg
for key in path[1:]:
# if path is bigger than one, get the value that mfg_cls validated
value = value[key]
if hasattr(mfg_cls, '_enum_by_value'):
mfg_cls = mfg_cls._enum_by_value[value]

View File

@ -84,12 +84,12 @@ class EnumQueryStringArraySchema(
@classmethod
@property
def GREATER_THAN(cls):
return cls._enum_by_value[">"](">")
return cls(">")
@classmethod
@property
def DOLLAR(cls):
return cls._enum_by_value["$"]("$")
return cls("$")
class EnumQueryStringSchema(
@ -106,17 +106,17 @@ class EnumQueryStringSchema(
@classmethod
@property
def _ABC(cls):
return cls._enum_by_value["_abc"]("_abc")
return cls("_abc")
@classmethod
@property
def EFG(cls):
return cls._enum_by_value["-efg"]("-efg")
return cls("-efg")
@classmethod
@property
def XYZ(cls):
return cls._enum_by_value["(xyz)"]("(xyz)")
return cls("(xyz)")
class EnumQueryIntegerSchema(
@ -132,12 +132,12 @@ class EnumQueryIntegerSchema(
@classmethod
@property
def POSITIVE_1(cls):
return cls._enum_by_value[1](1)
return cls(1)
@classmethod
@property
def NEGATIVE_2(cls):
return cls._enum_by_value[-2](-2)
return cls(-2)
class EnumQueryDoubleSchema(
@ -153,12 +153,12 @@ class EnumQueryDoubleSchema(
@classmethod
@property
def POSITIVE_1_PT_1(cls):
return cls._enum_by_value[1.1](1.1)
return cls(1.1)
@classmethod
@property
def NEGATIVE_1_PT_2(cls):
return cls._enum_by_value[-1.2](-1.2)
return cls(-1.2)
RequestRequiredQueryParams = typing.TypedDict(
'RequestRequiredQueryParams',
{
@ -225,12 +225,12 @@ class EnumHeaderStringArraySchema(
@classmethod
@property
def GREATER_THAN(cls):
return cls._enum_by_value[">"](">")
return cls(">")
@classmethod
@property
def DOLLAR(cls):
return cls._enum_by_value["$"]("$")
return cls("$")
class EnumHeaderStringSchema(
@ -247,17 +247,17 @@ class EnumHeaderStringSchema(
@classmethod
@property
def _ABC(cls):
return cls._enum_by_value["_abc"]("_abc")
return cls("_abc")
@classmethod
@property
def EFG(cls):
return cls._enum_by_value["-efg"]("-efg")
return cls("-efg")
@classmethod
@property
def XYZ(cls):
return cls._enum_by_value["(xyz)"]("(xyz)")
return cls("(xyz)")
RequestRequiredHeaderParams = typing.TypedDict(
'RequestRequiredHeaderParams',
{
@ -313,12 +313,12 @@ class SchemaForRequestBodyApplicationXWwwFormUrlencoded(
@classmethod
@property
def GREATER_THAN(cls):
return cls._enum_by_value[">"](">")
return cls(">")
@classmethod
@property
def DOLLAR(cls):
return cls._enum_by_value["$"]("$")
return cls("$")
class enum_form_string(
@ -335,17 +335,17 @@ class SchemaForRequestBodyApplicationXWwwFormUrlencoded(
@classmethod
@property
def _ABC(cls):
return cls._enum_by_value["_abc"]("_abc")
return cls("_abc")
@classmethod
@property
def EFG(cls):
return cls._enum_by_value["-efg"]("-efg")
return cls("-efg")
@classmethod
@property
def XYZ(cls):
return cls._enum_by_value["(xyz)"]("(xyz)")
return cls("(xyz)")
def __new__(

View File

@ -87,17 +87,17 @@ class StatusSchema(
@classmethod
@property
def AVAILABLE(cls):
return cls._enum_by_value["available"]("available")
return cls("available")
@classmethod
@property
def PENDING(cls):
return cls._enum_by_value["pending"]("pending")
return cls("pending")
@classmethod
@property
def SOLD(cls):
return cls._enum_by_value["sold"]("sold")
return cls("sold")
RequestRequiredQueryParams = typing.TypedDict(
'RequestRequiredQueryParams',
{

View File

@ -90,7 +90,7 @@ class BasquePig(
@classmethod
@property
def BASQUEPIG(cls):
return cls._enum_by_value["BasquePig"]("BasquePig")
return cls("BasquePig")
def __new__(

View File

@ -82,4 +82,4 @@ class BooleanEnum(
@classmethod
@property
def TRUE(cls):
return cls._enum_by_value[True](True)
return cls(True)

View File

@ -87,7 +87,7 @@ class ComplexQuadrilateralAllOf(
@classmethod
@property
def COMPLEXQUADRILATERAL(cls):
return cls._enum_by_value["ComplexQuadrilateral"]("ComplexQuadrilateral")
return cls("ComplexQuadrilateral")
def __new__(

View File

@ -83,9 +83,9 @@ class Currency(
@classmethod
@property
def EUR(cls):
return cls._enum_by_value["eur"]("eur")
return cls("eur")
@classmethod
@property
def USD(cls):
return cls._enum_by_value["usd"]("usd")
return cls("usd")

View File

@ -90,7 +90,7 @@ class DanishPig(
@classmethod
@property
def DANISHPIG(cls):
return cls._enum_by_value["DanishPig"]("DanishPig")
return cls("DanishPig")
def __new__(

View File

@ -88,12 +88,12 @@ class EnumArrays(
@classmethod
@property
def GREATER_THAN_EQUALS(cls):
return cls._enum_by_value[">="](">=")
return cls(">=")
@classmethod
@property
def DOLLAR(cls):
return cls._enum_by_value["$"]("$")
return cls("$")
class array_enum(
@ -114,12 +114,12 @@ class EnumArrays(
@classmethod
@property
def FISH(cls):
return cls._enum_by_value["fish"]("fish")
return cls("fish")
@classmethod
@property
def CRAB(cls):
return cls._enum_by_value["crab"]("crab")
return cls("crab")
def __new__(

View File

@ -84,14 +84,14 @@ class EnumClass(
@classmethod
@property
def _ABC(cls):
return cls._enum_by_value["_abc"]("_abc")
return cls("_abc")
@classmethod
@property
def EFG(cls):
return cls._enum_by_value["-efg"]("-efg")
return cls("-efg")
@classmethod
@property
def XYZ(cls):
return cls._enum_by_value["(xyz)"]("(xyz)")
return cls("(xyz)")

View File

@ -92,17 +92,17 @@ class EnumTest(
@classmethod
@property
def UPPER(cls):
return cls._enum_by_value["UPPER"]("UPPER")
return cls("UPPER")
@classmethod
@property
def LOWER(cls):
return cls._enum_by_value["lower"]("lower")
return cls("lower")
@classmethod
@property
def EMPTY(cls):
return cls._enum_by_value[""]("")
return cls("")
class enum_string_required(
@ -119,17 +119,17 @@ class EnumTest(
@classmethod
@property
def UPPER(cls):
return cls._enum_by_value["UPPER"]("UPPER")
return cls("UPPER")
@classmethod
@property
def LOWER(cls):
return cls._enum_by_value["lower"]("lower")
return cls("lower")
@classmethod
@property
def EMPTY(cls):
return cls._enum_by_value[""]("")
return cls("")
class enum_integer(
@ -145,12 +145,12 @@ class EnumTest(
@classmethod
@property
def POSITIVE_1(cls):
return cls._enum_by_value[1](1)
return cls(1)
@classmethod
@property
def NEGATIVE_1(cls):
return cls._enum_by_value[-1](-1)
return cls(-1)
class enum_number(
@ -166,12 +166,12 @@ class EnumTest(
@classmethod
@property
def POSITIVE_1_PT_1(cls):
return cls._enum_by_value[1.1](1.1)
return cls(1.1)
@classmethod
@property
def NEGATIVE_1_PT_2(cls):
return cls._enum_by_value[-1.2](-1.2)
return cls(-1.2)
@classmethod
@property

View File

@ -87,7 +87,7 @@ class EquilateralTriangleAllOf(
@classmethod
@property
def EQUILATERALTRIANGLE(cls):
return cls._enum_by_value["EquilateralTriangle"]("EquilateralTriangle")
return cls("EquilateralTriangle")
def __new__(

View File

@ -84,14 +84,14 @@ class IntegerEnum(
@classmethod
@property
def POSITIVE_0(cls):
return cls._enum_by_value[0](0)
return cls(0)
@classmethod
@property
def POSITIVE_1(cls):
return cls._enum_by_value[1](1)
return cls(1)
@classmethod
@property
def POSITIVE_2(cls):
return cls._enum_by_value[2](2)
return cls(2)

View File

@ -84,14 +84,14 @@ class IntegerEnumBig(
@classmethod
@property
def POSITIVE_10(cls):
return cls._enum_by_value[10](10)
return cls(10)
@classmethod
@property
def POSITIVE_11(cls):
return cls._enum_by_value[11](11)
return cls(11)
@classmethod
@property
def POSITIVE_12(cls):
return cls._enum_by_value[12](12)
return cls(12)

View File

@ -82,4 +82,4 @@ class IntegerEnumOneValue(
@classmethod
@property
def POSITIVE_0(cls):
return cls._enum_by_value[0](0)
return cls(0)

View File

@ -84,14 +84,14 @@ class IntegerEnumWithDefaultValue(
@classmethod
@property
def POSITIVE_0(cls):
return cls._enum_by_value[0](0)
return cls(0)
@classmethod
@property
def POSITIVE_1(cls):
return cls._enum_by_value[1](1)
return cls(1)
@classmethod
@property
def POSITIVE_2(cls):
return cls._enum_by_value[2](2)
return cls(2)

View File

@ -87,7 +87,7 @@ class IsoscelesTriangleAllOf(
@classmethod
@property
def ISOSCELESTRIANGLE(cls):
return cls._enum_by_value["IsoscelesTriangle"]("IsoscelesTriangle")
return cls("IsoscelesTriangle")
def __new__(

View File

@ -132,12 +132,12 @@ class MapTest(
@classmethod
@property
def UPPER(cls):
return cls._enum_by_value["UPPER"]("UPPER")
return cls("UPPER")
@classmethod
@property
def LOWER(cls):
return cls._enum_by_value["lower"]("lower")
return cls("lower")
def __new__(

View File

@ -93,17 +93,17 @@ class Order(
@classmethod
@property
def PLACED(cls):
return cls._enum_by_value["placed"]("placed")
return cls("placed")
@classmethod
@property
def APPROVED(cls):
return cls._enum_by_value["approved"]("approved")
return cls("approved")
@classmethod
@property
def DELIVERED(cls):
return cls._enum_by_value["delivered"]("delivered")
return cls("delivered")
complete = BoolSchema

View File

@ -118,17 +118,17 @@ class Pet(
@classmethod
@property
def AVAILABLE(cls):
return cls._enum_by_value["available"]("available")
return cls("available")
@classmethod
@property
def PENDING(cls):
return cls._enum_by_value["pending"]("pending")
return cls("pending")
@classmethod
@property
def SOLD(cls):
return cls._enum_by_value["sold"]("sold")
return cls("sold")
def __new__(

View File

@ -91,7 +91,7 @@ class QuadrilateralInterface(
@classmethod
@property
def QUADRILATERAL(cls):
return cls._enum_by_value["Quadrilateral"]("Quadrilateral")
return cls("Quadrilateral")
quadrilateralType = StrSchema
def __new__(

View File

@ -87,7 +87,7 @@ class ScaleneTriangleAllOf(
@classmethod
@property
def SCALENETRIANGLE(cls):
return cls._enum_by_value["ScaleneTriangle"]("ScaleneTriangle")
return cls("ScaleneTriangle")
def __new__(

View File

@ -87,7 +87,7 @@ class SimpleQuadrilateralAllOf(
@classmethod
@property
def SIMPLEQUADRILATERAL(cls):
return cls._enum_by_value["SimpleQuadrilateral"]("SimpleQuadrilateral")
return cls("SimpleQuadrilateral")
def __new__(

View File

@ -98,35 +98,33 @@ lines''': "MULTIPLE_LINES",
@classmethod
@property
def PLACED(cls):
return cls._enum_by_value["placed"]("placed")
return cls("placed")
@classmethod
@property
def APPROVED(cls):
return cls._enum_by_value["approved"]("approved")
return cls("approved")
@classmethod
@property
def DELIVERED(cls):
return cls._enum_by_value["delivered"]("delivered")
return cls("delivered")
@classmethod
@property
def SINGLE_QUOTED(cls):
return cls._enum_by_value["single quoted"]("single quoted")
return cls("single quoted")
@classmethod
@property
def MULTIPLE_LINES(cls):
return cls._enum_by_value['''multiple
lines''']('''multiple
return cls('''multiple
lines''')
@classmethod
@property
def DOUBLE_QUOTE_WITH_NEWLINE(cls):
return cls._enum_by_value['''double quote
with newline''']('''double quote
return cls('''double quote
with newline''')
def __new__(

View File

@ -84,14 +84,14 @@ class StringEnumWithDefaultValue(
@classmethod
@property
def PLACED(cls):
return cls._enum_by_value["placed"]("placed")
return cls("placed")
@classmethod
@property
def APPROVED(cls):
return cls._enum_by_value["approved"]("approved")
return cls("approved")
@classmethod
@property
def DELIVERED(cls):
return cls._enum_by_value["delivered"]("delivered")
return cls("delivered")

View File

@ -91,7 +91,7 @@ class TriangleInterface(
@classmethod
@property
def TRIANGLE(cls):
return cls._enum_by_value["Triangle"]("Triangle")
return cls("Triangle")
triangleType = StrSchema
def __new__(

View File

@ -92,7 +92,7 @@ class Whale(
@classmethod
@property
def WHALE(cls):
return cls._enum_by_value["whale"]("whale")
return cls("whale")
def __new__(

View File

@ -92,17 +92,17 @@ class Zebra(
@classmethod
@property
def PLAINS(cls):
return cls._enum_by_value["plains"]("plains")
return cls("plains")
@classmethod
@property
def MOUNTAIN(cls):
return cls._enum_by_value["mountain"]("mountain")
return cls("mountain")
@classmethod
@property
def GREVYS(cls):
return cls._enum_by_value["grevys"]("grevys")
return cls("grevys")
class className(
@ -117,7 +117,7 @@ class Zebra(
@classmethod
@property
def ZEBRA(cls):
return cls._enum_by_value["zebra"]("zebra")
return cls("zebra")
def __new__(

View File

@ -1396,6 +1396,7 @@ class Schema:
# Use case: value is None, True, False, or an enum value
value = arg
for key in path[1:]:
# if path is bigger than one, get the value that mfg_cls validated
value = value[key]
if hasattr(mfg_cls, '_enum_by_value'):
mfg_cls = mfg_cls._enum_by_value[value]

View File

@ -28,8 +28,7 @@ class TestBooleanEnum(unittest.TestCase):
def test_BooleanEnum(self):
"""Test BooleanEnum"""
model = BooleanEnum(True)
# TODO why is BooleanEnum.TRUE.__class__ DynamicDynamicBooleanEnum? It should only have one Dynamic
# assert model is BooleanEnum.TRUE
assert model is BooleanEnum.TRUE
assert repr(model) == '<DynamicBooleanEnum: True>'
with self.assertRaises(petstore_api.ApiValueError):
BooleanEnum(False)

View File

@ -96,7 +96,7 @@ class TestCombineNonObjectSchemas(unittest.TestCase):
# accessing invalid enum throws an exception
invalid_enums = ['POSITIVE_1', 'POSITIVE_2']
for invalid_enum in invalid_enums:
with self.assertRaises(KeyError):
with self.assertRaises(petstore_api.ApiValueError):
getattr(IntegerOneEnum, invalid_enum)