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

Method __call__

nonebot/config.py:183–285  ·  view source on GitHub ↗

从环境变量和 dotenv 配置文件中读取配置项。

(self)

Source from the content-addressed store, hash-verified

181 return result
182
183 def __call__(self) -> dict[str, Any]:
184 """从环境变量和 dotenv 配置文件中读取配置项。"""
185
186 d: dict[str, Any] = {}
187
188 env_vars = self._parse_env_vars(os.environ)
189 env_file_vars = self._read_env_files()
190 env_vars = {**env_file_vars, **env_vars}
191
192 for field in model_fields(self.settings_cls):
193 field_name = field.name
194 env_name = self._apply_case_sensitive(field_name)
195 alias_name = field.field_info.alias
196 alias_env_name = (
197 None if alias_name is None else self._apply_case_sensitive(alias_name)
198 )
199
200 # pydantic use alias name to validate if exist
201 if alias_name is not None:
202 field_name = alias_name
203
204 # try get values from env vars
205 env_val = env_vars.get(env_name, PydanticUndefined)
206 alias_env_val = (
207 PydanticUndefined
208 if alias_env_name is None
209 else env_vars.get(alias_env_name, PydanticUndefined)
210 )
211 # alias env value has higher priority
212 env_val = (
213 env_val
214 if isinstance(alias_env_val, PydanticUndefinedType)
215 else alias_env_val
216 )
217 # delete from file vars when used
218 if env_name in env_file_vars:
219 del env_file_vars[env_name]
220 if alias_env_name is not None and alias_env_name in env_file_vars:
221 del env_file_vars[alias_env_name]
222
223 is_complex, allow_parse_failure = self._field_is_complex(field)
224 if is_complex:
225 if isinstance(env_val, PydanticUndefinedType):
226 # field is complex but no value found so far, try explode_env_vars
227 if env_val_built := self._explode_env_vars(
228 field, env_vars, env_file_vars
229 ):
230 d[field_name] = env_val_built
231 elif env_val is None:
232 d[field_name] = env_val
233 else:
234 # field is complex and there's a value
235 # decode that as JSON, then add explode_env_vars
236 try:
237 env_val = json.loads(env_val)
238 except ValueError as e:
239 if not allow_parse_failure:
240 raise SettingsError(

Callers

nothing calls this directly

Calls 10

_parse_env_varsMethod · 0.95
_read_env_filesMethod · 0.95
_apply_case_sensitiveMethod · 0.95
_field_is_complexMethod · 0.95
_explode_env_varsMethod · 0.95
model_fieldsFunction · 0.90
deep_updateFunction · 0.90
SettingsErrorClass · 0.85
setdefaultMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected