Skip to content

Comments

bpo-34938: mimetypes.init() does not overwrite globals#16567

Closed
AWhetter wants to merge 6 commits intopython:mainfrom
AWhetter:fix-issue-34938
Closed

bpo-34938: mimetypes.init() does not overwrite globals#16567
AWhetter wants to merge 6 commits intopython:mainfrom
AWhetter:fix-issue-34938

Conversation

@AWhetter
Copy link
Contributor

@AWhetter AWhetter commented Oct 3, 2019

When importing mimetypes.init() into a module scope with
any of encodings_map, suffix_map, types_map, or common_types,
subsequent calls to init() would update the maps in
the local module scope and not in the mimetypes module.
This change makes the original maps always get updated.

This will break the undocumented behaviour of any changes to mimetypes.encodings_map, mimetypes.suffix_map, mimetypes.types_map, or mimetypes.common_types persisting after calling mimetypes.init() because the maps and their equivalent mimetypes._default<map> variable are now two separate dictionaries.

https://bugs.python.org/issue34938

@AWhetter AWhetter requested a review from a team as a code owner October 3, 2019 19:37
@the-knights-who-say-ni
Copy link

Hello, and thanks for your contribution!

I'm a bot set up to make sure that the project can legally accept this contribution by verifying everyone involved has signed the PSF contributor agreement (CLA).

CLA Missing

Our records indicate the following people have not signed the CLA:

@AWhetter

For legal reasons we need all the people listed to sign the CLA before we can look at your contribution. Please follow the steps outlined in the CPython devguide to rectify this issue.

If you have recently signed the CLA, please wait at least one business day
before our records are updated.

You can check yourself to see if the CLA has been received.

Thanks again for the contribution, we look forward to reviewing it!

@brandtbucher brandtbucher added the type-bug An unexpected behavior, bug, or error label Oct 3, 2019
@brandtbucher
Copy link
Member

Thanks for your time @AWhetter, and welcome to CPython! 😎

I assume you've seen the bot's message about the CLA?

Copy link
Member

@brandtbucher brandtbucher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like a good fix. I think it also needs a regression test in Lib/test/test_mimetypes.py.

Looking at the failed test, though, it seems that the current behavior of creating new objects rather than updating the existing ones is expected (though I think I agree with you that it's flawed).

Maybe someone from @python/email-team can shed some light on the desired behavior here?

@AWhetter
Copy link
Contributor Author

AWhetter commented Oct 3, 2019

I have seen the CLA notice. I've already signed up so I'm waiting for the approval to go through the system at the moment.

Thanks for the fast feedback! I'll get a test added!

When importing mimetypes.init() into a module scope with
any of encodings_map, suffix_map, types_map, or common_types,
subsequent calls to init() would update the maps in
the local module scope and not in the mimetypes module.
This change makes the original maps always get updated.
@zooba
Copy link
Member

zooba commented Oct 4, 2019

I posted on the bpo issue, as my comments ended up at a higher level than simple PR feedback.

Also, no need to force push changes. We'll squash merge at the end, and force pushing only breaks the review system.

Copy link
Contributor

@maxking maxking left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Mariatta
Copy link
Member

Mariatta commented Feb 9, 2020

@maxking is this PR ready to merge?

@zooba can you check the question in https://bugs.python.org/issue34938#msg359070, do you expect those to be worked on this PR, or separate?

Thanks.

@AWhetter
Copy link
Contributor Author

I've made the suggested documentation changes. The bit about importing inited into a local module might require more information. I'm tempted to add a section about it under /faq/programming.rst because it could have use elsewhere. What do we think?

Copy link
Contributor

@YoSTEALTH YoSTEALTH left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no need to have line: 388-392 and line: 571 in Lib/mimetypes.py is there? Like take out the _default_mime_types function and indent back the content. Thanks

@csabella csabella requested a review from maxking May 23, 2020 20:02
Lib/mimetypes.py Outdated
@@ -388,21 +391,23 @@ def _default_mime_types():
global types_map, _types_map_default
global common_types, _common_types_default
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These global statements and the function (and its call) can be removed.

Copy link
Contributor

@YoSTEALTH YoSTEALTH left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these change must be reverted back, you need to have it as:
suffix_map = _suffix_map_default.copy() not suffix_map = _suffix_map_default = {...} because they are suppose to be 2 separate variable. On

suffix_map.clear()
suffix_map.clear() is called and if they are same variable it will be bad.

Copy link
Member

@iritkatriel iritkatriel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR has merge conflicts now.

@bedevere-bot
Copy link

A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated.

Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

awaiting changes type-bug An unexpected behavior, bug, or error

Projects

None yet

Development

Successfully merging this pull request may close these issues.

10 participants