From 2cbd32c73559eae8bc39e3b113a5abb3cf20529b Mon Sep 17 00:00:00 2001 From: Benedikt Bartscher Date: Mon, 28 Oct 2024 11:46:39 +0100 Subject: [PATCH] port enum env var support from #4248 --- reflex/config.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/reflex/config.py b/reflex/config.py index ba86d911d..22a04c50c 100644 --- a/reflex/config.py +++ b/reflex/config.py @@ -3,7 +3,9 @@ from __future__ import annotations import dataclasses +import enum import importlib +import inspect import os import sys import urllib.parse @@ -221,6 +223,28 @@ def interpret_path_env(value: str, field_name: str) -> Path: return path +def interpret_enum_env(value: str, field_type: GenericType, field_name: str) -> Any: + """Interpret an enum environment variable value. + + Args: + value: The environment variable value. + field_type: The field type. + field_name: The field name. + + Returns: + The interpreted value. + + Raises: + EnvironmentVarValueError: If the value is invalid. + """ + try: + return field_type(value) + except ValueError as ve: + raise EnvironmentVarValueError( + f"Invalid enum value: {value} for {field_name}" + ) from ve + + def interpret_env_var_value( value: str, field_type: GenericType, field_name: str ) -> Any: @@ -252,6 +276,8 @@ def interpret_env_var_value( return interpret_int_env(value, field_name) elif field_type is Path: return interpret_path_env(value, field_name) + elif inspect.isclass(field_type) and issubclass(field_type, enum.Enum): + return interpret_enum_env(value, field_type, field_name) else: raise ValueError(