MCPcopy
hub / github.com/nonebot/nonebot2 / _explode_env_vars

Method _explode_env_vars

nonebot/config.py:142–181  ·  view source on GitHub ↗
(
        self,
        field: ModelField,
        env_vars: dict[str, str | None],
        env_file_vars: dict[str, str | None],
    )

Source from the content-addressed store, hash-verified

140 return None
141
142 def _explode_env_vars(
143 self,
144 field: ModelField,
145 env_vars: dict[str, str | None],
146 env_file_vars: dict[str, str | None],
147 ) -> dict[str, Any]:
148 if self.env_nested_delimiter is None:
149 return {}
150
151 prefix = f"{field.name}{self.env_nested_delimiter}"
152 result: dict[str, Any] = {}
153 for env_name, env_val in env_vars.items():
154 if not env_name.startswith(prefix):
155 continue
156
157 # delete from file vars when used
158 env_file_vars.pop(env_name, None)
159
160 _, *keys, last_key = env_name.split(self.env_nested_delimiter)
161 env_var = result
162 target_field: ModelField | None = field
163 for key in keys:
164 target_field = self._next_field(target_field, key)
165 env_var = env_var.setdefault(key, {})
166
167 target_field = self._next_field(target_field, last_key)
168 if target_field and env_val:
169 is_complex, allow_parse_failure = self._field_is_complex(target_field)
170 if is_complex:
171 try:
172 env_val = json.loads(env_val)
173 except ValueError as e:
174 if not allow_parse_failure:
175 raise SettingsError(
176 f'error parsing env var "{env_name}"'
177 ) from e
178
179 env_var[last_key] = env_val
180
181 return result
182
183 def __call__(self) -> dict[str, Any]:
184 """从环境变量和 dotenv 配置文件中读取配置项。"""

Callers 1

__call__Method · 0.95

Calls 6

_next_fieldMethod · 0.95
_field_is_complexMethod · 0.95
SettingsErrorClass · 0.85
popMethod · 0.80
setdefaultMethod · 0.80
itemsMethod · 0.45

Tested by

no test coverage detected