python-pydantic-v1: Keep trailing commas for enum validation tuples (#19985)

* python-pydantic-v1: Keep trailing commas for tuples when enum has just single member

* Update samples

* Add test for single member enums

* Refactor test name
This commit is contained in:
Chirag Jain
2024-11-02 12:56:19 +05:30
committed by GitHub
parent 66c7b2f8cc
commit 67af02ccc8
35 changed files with 188 additions and 54 deletions

View File

@@ -11,6 +11,8 @@ Name | Type | Description | Notes
**enum_number** | **float** | | [optional]
**enum_number_vendor_ext** | **int** | | [optional]
**enum_string_vendor_ext** | **str** | | [optional]
**enum_string_single_member** | **str** | | [optional]
**enum_integer_single_member** | **int** | | [optional]
**outer_enum** | [**OuterEnum**](OuterEnum.md) | | [optional]
**outer_enum_integer** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional]
**outer_enum_default_value** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional]

View File

@@ -33,14 +33,14 @@ class Bathing(BaseModel):
@validator('task_name')
def task_name_validate_enum(cls, value):
"""Validates the enum"""
if value not in ('cleaning_deep'):
if value not in ('cleaning_deep',):
raise ValueError("must be one of enum values ('cleaning_deep')")
return value
@validator('function_name')
def function_name_validate_enum(cls, value):
"""Validates the enum"""
if value not in ('care_nourish'):
if value not in ('care_nourish',):
raise ValueError("must be one of enum values ('care_nourish')")
return value

View File

@@ -35,7 +35,7 @@ class EnumArrays(BaseModel):
if value is None:
return value
if value not in ('>=', '$'):
if value not in ('>=', '$',):
raise ValueError("must be one of enum values ('>=', '$')")
return value
@@ -46,7 +46,7 @@ class EnumArrays(BaseModel):
return value
for i in value:
if i not in ('fish', 'crab'):
if i not in ('fish', 'crab',):
raise ValueError("each list item must be one of ('fish', 'crab')")
return value

View File

@@ -36,11 +36,13 @@ class EnumTest(BaseModel):
enum_number: Optional[float] = None
enum_number_vendor_ext: Optional[StrictInt] = None
enum_string_vendor_ext: Optional[StrictStr] = None
enum_string_single_member: Optional[StrictStr] = None
enum_integer_single_member: Optional[StrictInt] = None
outer_enum: Optional[OuterEnum] = Field(default=None, alias="outerEnum")
outer_enum_integer: Optional[OuterEnumInteger] = Field(default=None, alias="outerEnumInteger")
outer_enum_default_value: Optional[OuterEnumDefaultValue] = Field(default=None, alias="outerEnumDefaultValue")
outer_enum_integer_default_value: Optional[OuterEnumIntegerDefaultValue] = Field(default=None, alias="outerEnumIntegerDefaultValue")
__properties = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "enum_number_vendor_ext", "enum_string_vendor_ext", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"]
__properties = ["enum_string", "enum_string_required", "enum_integer_default", "enum_integer", "enum_number", "enum_number_vendor_ext", "enum_string_vendor_ext", "enum_string_single_member", "enum_integer_single_member", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue"]
@validator('enum_string')
def enum_string_validate_enum(cls, value):
@@ -48,14 +50,14 @@ class EnumTest(BaseModel):
if value is None:
return value
if value not in ('UPPER', 'lower', ''):
if value not in ('UPPER', 'lower', '',):
raise ValueError("must be one of enum values ('UPPER', 'lower', '')")
return value
@validator('enum_string_required')
def enum_string_required_validate_enum(cls, value):
"""Validates the enum"""
if value not in ('UPPER', 'lower', ''):
if value not in ('UPPER', 'lower', '',):
raise ValueError("must be one of enum values ('UPPER', 'lower', '')")
return value
@@ -65,7 +67,7 @@ class EnumTest(BaseModel):
if value is None:
return value
if value not in (1, 5, 14):
if value not in (1, 5, 14,):
raise ValueError("must be one of enum values (1, 5, 14)")
return value
@@ -75,7 +77,7 @@ class EnumTest(BaseModel):
if value is None:
return value
if value not in (1, -1):
if value not in (1, -1,):
raise ValueError("must be one of enum values (1, -1)")
return value
@@ -85,7 +87,7 @@ class EnumTest(BaseModel):
if value is None:
return value
if value not in (1.1, -1.2):
if value not in (1.1, -1.2,):
raise ValueError("must be one of enum values (1.1, -1.2)")
return value
@@ -95,7 +97,7 @@ class EnumTest(BaseModel):
if value is None:
return value
if value not in (42, 18, 56):
if value not in (42, 18, 56,):
raise ValueError("must be one of enum values (42, 18, 56)")
return value
@@ -105,10 +107,30 @@ class EnumTest(BaseModel):
if value is None:
return value
if value not in ('FOO', 'Bar', 'baz'):
if value not in ('FOO', 'Bar', 'baz',):
raise ValueError("must be one of enum values ('FOO', 'Bar', 'baz')")
return value
@validator('enum_string_single_member')
def enum_string_single_member_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in ('abc',):
raise ValueError("must be one of enum values ('abc')")
return value
@validator('enum_integer_single_member')
def enum_integer_single_member_validate_enum(cls, value):
"""Validates the enum"""
if value is None:
return value
if value not in (100,):
raise ValueError("must be one of enum values (100)")
return value
class Config:
"""Pydantic configuration"""
allow_population_by_field_name = True
@@ -157,6 +179,8 @@ class EnumTest(BaseModel):
"enum_number": obj.get("enum_number"),
"enum_number_vendor_ext": obj.get("enum_number_vendor_ext"),
"enum_string_vendor_ext": obj.get("enum_string_vendor_ext"),
"enum_string_single_member": obj.get("enum_string_single_member"),
"enum_integer_single_member": obj.get("enum_integer_single_member"),
"outer_enum": obj.get("outerEnum"),
"outer_enum_integer": obj.get("outerEnumInteger"),
"outer_enum_default_value": obj.get("outerEnumDefaultValue"),

View File

@@ -33,14 +33,14 @@ class Feeding(BaseModel):
@validator('task_name')
def task_name_validate_enum(cls, value):
"""Validates the enum"""
if value not in ('cleaning'):
if value not in ('cleaning',):
raise ValueError("must be one of enum values ('cleaning')")
return value
@validator('function_name')
def function_name_validate_enum(cls, value):
"""Validates the enum"""
if value not in ('care_nourish'):
if value not in ('care_nourish',):
raise ValueError("must be one of enum values ('care_nourish')")
return value

View File

@@ -37,7 +37,7 @@ class MapTest(BaseModel):
if value is None:
return value
if value not in ('UPPER', 'lower'):
if value not in ('UPPER', 'lower',):
raise ValueError("must be one of enum values ('UPPER', 'lower')")
return value

View File

@@ -39,7 +39,7 @@ class Order(BaseModel):
if value is None:
return value
if value not in ('placed', 'approved', 'delivered'):
if value not in ('placed', 'approved', 'delivered',):
raise ValueError("must be one of enum values ('placed', 'approved', 'delivered')")
return value

View File

@@ -41,7 +41,7 @@ class Pet(BaseModel):
if value is None:
return value
if value not in ('available', 'pending', 'sold'):
if value not in ('available', 'pending', 'sold',):
raise ValueError("must be one of enum values ('available', 'pending', 'sold')")
return value

View File

@@ -33,14 +33,14 @@ class PoopCleaning(BaseModel):
@validator('task_name')
def task_name_validate_enum(cls, value):
"""Validates the enum"""
if value not in ('cleaning'):
if value not in ('cleaning',):
raise ValueError("must be one of enum values ('cleaning')")
return value
@validator('function_name')
def function_name_validate_enum(cls, value):
"""Validates the enum"""
if value not in ('care'):
if value not in ('care',):
raise ValueError("must be one of enum values ('care')")
return value

View File

@@ -37,7 +37,7 @@ class SpecialName(BaseModel):
if value is None:
return value
if value not in ('available', 'pending', 'sold'):
if value not in ('available', 'pending', 'sold',):
raise ValueError("must be one of enum values ('available', 'pending', 'sold')")
return value

View File

@@ -40,7 +40,7 @@ class TestModelWithEnumDefault(BaseModel):
if value is None:
return value
if value not in ('A', 'B', 'C'):
if value not in ('A', 'B', 'C',):
raise ValueError("must be one of enum values ('A', 'B', 'C')")
return value