Check if a module name is in sys.stdlib_module_names. Takes the original __name__ object to preserve str subclass behavior. Propagates errors (e.g. TypeError for unhashable str subclass).
(name: &PyObjectRef, vm: &VirtualMachine)
| 350 | /// Takes the original __name__ object to preserve str subclass behavior. |
| 351 | /// Propagates errors (e.g. TypeError for unhashable str subclass). |
| 352 | pub(crate) fn is_stdlib_module_name(name: &PyObjectRef, vm: &VirtualMachine) -> PyResult<bool> { |
| 353 | let stdlib_names = match vm.sys_module.get_attr("stdlib_module_names", vm) { |
| 354 | Ok(names) => names, |
| 355 | Err(_) => return Ok(false), |
| 356 | }; |
| 357 | if !stdlib_names.class().fast_issubclass(vm.ctx.types.set_type) |
| 358 | && !stdlib_names |
| 359 | .class() |
| 360 | .fast_issubclass(vm.ctx.types.frozenset_type) |
| 361 | { |
| 362 | return Ok(false); |
| 363 | } |
| 364 | let result = vm.call_method(&stdlib_names, "__contains__", (name.clone(),))?; |
| 365 | result.try_to_bool(vm) |
| 366 | } |
| 367 | |
| 368 | /// PyImport_ImportModuleLevelObject |
| 369 | pub(crate) fn import_module_level( |
no test coverage detected