1616
1717from collections .abc import Callable
1818import functools
19- import os
2019from typing import Any
2120from typing import cast
22- from typing import Optional
2321from typing import TypeVar
2422import warnings
2523
24+ from .env_utils import is_env_truthy
25+
2626T = TypeVar ("T" )
2727
2828
29- def _is_truthy_env (var_name : str ) -> bool :
30- value = os .environ .get (var_name )
31- if value is None :
29+ def _should_bypass_warning (
30+ bypass_env_var : str | tuple [str , ...] | None ,
31+ ) -> bool :
32+ if bypass_env_var is None :
3233 return False
33- return value .strip ().lower () in ("1" , "true" , "yes" , "on" )
34+
35+ env_var_names = (
36+ (bypass_env_var ,) if isinstance (bypass_env_var , str ) else bypass_env_var
37+ )
38+ return any (is_env_truthy (env_var_name ) for env_var_name in env_var_names )
3439
3540
3641def _make_feature_decorator (
3742 * ,
3843 label : str ,
3944 default_message : str ,
4045 block_usage : bool = False ,
41- bypass_env_var : Optional [str ] = None ,
46+ bypass_env_var : str | tuple [str , ...] | None = None ,
4247) -> Callable [..., Any ]:
4348 def decorator_factory (message_or_obj : Any = None ) -> Any :
4449 # Case 1: Used as @decorator without parentheses
@@ -61,7 +66,10 @@ def decorator_factory(message_or_obj: Any = None) -> Any:
6166
6267
6368def _create_decorator (
64- message : str , label : str , block_usage : bool , bypass_env_var : Optional [str ]
69+ message : str ,
70+ label : str ,
71+ block_usage : bool ,
72+ bypass_env_var : str | tuple [str , ...] | None ,
6573) -> Callable [[T ], T ]:
6674 def decorator (obj : T ) -> T :
6775 obj_name = getattr (obj , "__name__" , type (obj ).__name__ )
@@ -74,9 +82,7 @@ def decorator(obj: T) -> T:
7482 @functools .wraps (orig_init )
7583 def new_init (self : Any , * args : Any , ** kwargs : Any ) -> Any :
7684 # Check if usage should be bypassed via environment variable at call time
77- should_bypass = bypass_env_var is not None and _is_truthy_env (
78- bypass_env_var
79- )
85+ should_bypass = _should_bypass_warning (bypass_env_var )
8086
8187 if should_bypass :
8288 # Bypass completely - no warning, no error
@@ -96,9 +102,7 @@ def new_init(self: Any, *args: Any, **kwargs: Any) -> Any:
96102 @functools .wraps (func )
97103 def wrapper (* args : Any , ** kwargs : Any ) -> Any :
98104 # Check if usage should be bypassed via environment variable at call time
99- should_bypass = bypass_env_var is not None and _is_truthy_env (
100- bypass_env_var
101- )
105+ should_bypass = _should_bypass_warning (bypass_env_var )
102106
103107 if should_bypass :
104108 # Bypass completely - no warning, no error
0 commit comments