@@ -2348,13 +2348,18 @@ class Settings(BaseSettings):
2348
2348
2349
2349
2350
2350
def test_env_parse_enums (env ):
2351
- class Settings (BaseSettings ):
2351
+ class NestedEnum (BaseModel ):
2352
+ fruit : FruitsEnum
2353
+
2354
+ class Settings (BaseSettings , env_nested_delimiter = '__' ):
2352
2355
fruit : FruitsEnum
2353
2356
union_fruit : Optional [Union [int , FruitsEnum ]] = None
2357
+ nested : NestedEnum
2354
2358
2355
2359
with pytest .raises (ValidationError ) as exc_info :
2356
2360
env .set ('FRUIT' , 'kiwi' )
2357
2361
env .set ('UNION_FRUIT' , 'kiwi' )
2362
+ env .set ('NESTED__FRUIT' , 'kiwi' )
2358
2363
s = Settings ()
2359
2364
assert exc_info .value .errors (include_url = False ) == [
2360
2365
{
@@ -2385,22 +2390,43 @@ class Settings(BaseSettings):
2385
2390
'msg' : 'Input should be 0, 1 or 2' ,
2386
2391
'type' : 'enum' ,
2387
2392
},
2393
+ {
2394
+ 'ctx' : {
2395
+ 'expected' : '0, 1 or 2' ,
2396
+ },
2397
+ 'input' : 'kiwi' ,
2398
+ 'loc' : (
2399
+ 'nested' ,
2400
+ 'fruit' ,
2401
+ ),
2402
+ 'msg' : 'Input should be 0, 1 or 2' ,
2403
+ 'type' : 'enum' ,
2404
+ },
2388
2405
]
2389
2406
2390
2407
env .set ('FRUIT' , str (FruitsEnum .lime .value ))
2391
2408
env .set ('UNION_FRUIT' , str (FruitsEnum .lime .value ))
2409
+ env .set ('NESTED__FRUIT' , str (FruitsEnum .lime .value ))
2392
2410
s = Settings ()
2393
2411
assert s .fruit == FruitsEnum .lime
2412
+ assert s .union_fruit == FruitsEnum .lime
2413
+ assert s .nested .fruit == FruitsEnum .lime
2394
2414
2395
2415
env .set ('FRUIT' , 'kiwi' )
2396
2416
env .set ('UNION_FRUIT' , 'kiwi' )
2417
+ env .set ('NESTED__FRUIT' , 'kiwi' )
2397
2418
s = Settings (_env_parse_enums = True )
2398
2419
assert s .fruit == FruitsEnum .kiwi
2420
+ assert s .union_fruit == FruitsEnum .kiwi
2421
+ assert s .nested .fruit == FruitsEnum .kiwi
2399
2422
2400
2423
env .set ('FRUIT' , str (FruitsEnum .lime .value ))
2401
2424
env .set ('UNION_FRUIT' , str (FruitsEnum .lime .value ))
2425
+ env .set ('NESTED__FRUIT' , str (FruitsEnum .lime .value ))
2402
2426
s = Settings (_env_parse_enums = True )
2403
2427
assert s .fruit == FruitsEnum .lime
2428
+ assert s .union_fruit == FruitsEnum .lime
2429
+ assert s .nested .fruit == FruitsEnum .lime
2404
2430
2405
2431
2406
2432
def test_env_parse_none_str (env ):
0 commit comments