Join GitHub today
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Sign upbpo-39336: Allow packages to not let their child modules be set on them #18006
+386
−339
Conversation
feb58e2
to
6e45545
6e45545
to
862b536
Lib/importlib/_bootstrap.py
Outdated
try: | ||
setattr(parent_module, child, module) | ||
except AttributeError: | ||
msg = (f"Can't set child package '{child}' on " |
This comment has been minimized.
This comment has been minimized.
brettcannon
Jan 15, 2020
Member
Suggested change
msg = (f"Can't set child package '{child}' on " | |
msg = (f"Cannot set an attribute on {parent!r} for child module {child!r}" |
Lib/test/test_import/__init__.py
Outdated
@@ -1339,6 +1342,39 @@ def test_circular_from_import(self): | |||
str(cm.exception), | |||
) | |||
|
|||
def test_unwritable_module(self): | |||
package = inspect.cleandoc(''' |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
bedevere-bot
commented
Jan 15, 2020
When you're done making the requested changes, leave the comment: |
This comment has been minimized.
This comment has been minimized.
I have made the requested changes; please review again. |
This comment has been minimized.
This comment has been minimized.
bedevere-bot
commented
Jan 16, 2020
Thanks for making the requested changes! @brettcannon: please review the changes made to this pull request. |
with open(os.path.join(os.path.dirname(path), 'x.py'), 'w+'): | ||
pass | ||
|
||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'data')) |
This comment has been minimized.
This comment has been minimized.
brettcannon
Jan 17, 2020
Member
Why the path insertion instead of importing test.test_import.data.unwritable
?
finally: | ||
del sys.modules['spam.x'] | ||
|
||
sys.modules['unwritable.x'] |
This comment has been minimized.
This comment has been minimized.
brettcannon
Jan 17, 2020
Member
If this is delete the module then you can use a helper in test.support
and register it with addCleanup()
.
This comment has been minimized.
This comment has been minimized.
bedevere-bot
commented
Jan 17, 2020
When you're done making the requested changes, leave the comment: |
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.
DinoV commentedJan 14, 2020
•
edited by bedevere-bot
This allows an import to proceed if a module raises AttributeError when attempting to set a child module on the parent package. This can occur if a loader wants to make its modules immutable, in which case the module cannot be set. In this case an ImportWarning is still logged in case this behavior is unexpected.
https://bugs.python.org/issue39336