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
Conversation
feb58e2
to
6e45545
6e45545
to
862b536
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
msg = (f"Can't set child package '{child}' on " | |
msg = (f"Cannot set an attribute on {parent!r} for child module {child!r}" |
@@ -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
?
This comment has been minimized.
This comment has been minimized.
DinoV
Jan 22, 2020
Author
Contributor
I was actually just following the pattern I saw in test_concurrency but this is certainly much cleaner!
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.
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: |
I have made the requested changes; please review again. |
This comment has been minimized.
This comment has been minimized.
Looks like Bedevere/GitHub hiccuped, so I manually updated the status for another review. |
Two minor things to clean up, but I trust you to do that before you hit the green button. |
Misc/NEWS.d/next/Core and Builtins/2020-01-15-01-39-29.bpo-39336.nJ7W9I.rst
Outdated
Show resolved
Hide resolved
This comment has been minimized.
This comment has been minimized.
Made one other small tweak to remove the change to _ready_to_import which was no longer necessary |
9b6fec4
into
python:master
This comment has been minimized.
This comment has been minimized.
bedevere-bot
commented
Jan 23, 2020
@DinoV: Please replace |
This comment has been minimized.
This comment has been minimized.
bedevere-bot
commented
Jan 23, 2020
|
This comment has been minimized.
This comment has been minimized.
Hummmm, seems that that buildbot failure is legitimate as this is the new test:
|
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