Repository navigation
Resolve lazy module exports in import_global - #66
Merged
Merged
Conversation
wolph
added a commit
that referenced
this pull request
Oct 29, 2026
#66 resolves every requested name through getattr. A lazy export whose __getattr__ raised, such as an optional dependency, made import_global raise where 4.x skipped it, a name in modules or __all__ that is not a str raised TypeError, and an explicit name on a module with a catch-all __getattr__ was fetched from it. A name that dir() does not list is now resolved only when __all__ declares it, and skipped when that fails.
Owner
|
Thanks for the fix :) I've made a few changes on top (65e44b7). A lazy export that fails to resolve, such as an optional dependency that isn't installed, is skipped again instead of raising, and names that aren't strings are ignored as before. A name that |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
import_global()silently drops exports supplied by a module's__getattr__when those names are absent fromdir(module). This happens even when the module declares them in__all__or the caller explicitly requests them.Resolve the selected names through
getattrinstead of intersecting them withdir(). Missing names and private names remain excluded, and a real exportedNoneis retained. Tests exercise declared and explicit lazy exports and verify each value is resolved once. The parameter documentation explains this behavior.Both new regressions fail before the fix. Full Python 3.10 and 3.12 suites: 371 passed, 5 optional timezone-data skips, 100% branch/statement coverage. Whole-project mypy, basedpyright and Pyrefly report no errors. Ruff lint and formatting of changed files, plus
git diff --check, pass. No matching open issue or PR found.AI assistance: OpenAI Codex (GPT-6). Original user request:
new 14ta koro aro(make 14 more new contributions). Diff inspection was automated; no human review or personal production usage is claimed.