MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / eval_name_only

Function eval_name_only

lib/sqlalchemy/util/typing.py:276–307  ·  view source on GitHub ↗
(
    name: str,
    module_name: str,
    *,
    locals_: Optional[Mapping[str, Any]] = None,
)

Source from the content-addressed store, hash-verified

274
275
276def eval_name_only(
277 name: str,
278 module_name: str,
279 *,
280 locals_: Optional[Mapping[str, Any]] = None,
281) -> Any:
282 if "." in name:
283 return eval_expression(name, module_name, locals_=locals_)
284
285 try:
286 base_globals: Dict[str, Any] = sys.modules[module_name].__dict__
287 except KeyError as ke:
288 raise NameError(
289 f"Module {module_name} isn't present in sys.modules; can't "
290 f"resolve name {name}"
291 ) from ke
292
293 # name only, just look in globals. eval() works perfectly fine here,
294 # however we are seeking to have this be faster, as this occurs for
295 # every Mapper[] keyword, etc. depending on configuration
296 try:
297 return base_globals[name]
298 except KeyError as ke:
299 # check in builtins as well to handle `list`, `set` or `dict`, etc.
300 try:
301 return builtins.__dict__[name]
302 except KeyError:
303 pass
304
305 raise NameError(
306 f"Could not locate name {name} in module {module_name}"
307 ) from ke
308
309
310def resolve_name_to_real_class_name(name: str, module_name: str) -> str:

Callers 2

Calls 1

eval_expressionFunction · 0.85

Tested by

no test coverage detected