# Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved.
# OpenOLC is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
# `http://license.coscl.org.cn/MulanPSL2`
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
import logging
import os
from typing import TypeVar, Optional, Type
logger = logging.getLogger(__name__)
T = TypeVar("T")
class EnvConfig:
"""
通过环境变量获取配置值的工具类
支持
- 制定默认值
- 类型转换(str, int, float, bool 等
"""
@staticmethod
def get(
key: str, default: Optional[T] = None, cast: Optional[Type[T]] = None
) -> Optional[T]:
"""
获取环境变量值
:param key: 环境变量名称
:param default: 默认值
:param cast: 可选的类型转换函数,例如 int float
:return:
"""
value = os.getenv(key, default)
if value is None:
return default
if cast is not None:
try:
# 特殊处理bool 类型
if cast is bool:
return str(value).lower() in ("true", "1", "yes", "on")
# 其他类型的转换
return cast(value)
except (TypeError, ValueError) as e:
logging.warning("环境变量 %s 无法转换为 %s: %s", key, cast, e)
return None
return value