New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpo-14243: Optionally delete NamedTemporaryFile on content manager exit but not on file close #22431
base: main
Are you sure you want to change the base?
Conversation
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). Recognized GitHub usernameWe couldn't find a bugs.python.org (b.p.o) account corresponding to the following GitHub usernames: This might be simply due to a missing "GitHub Name" entry in one's b.p.o account settings. This is necessary for legal reasons before we can look at this contribution. Please follow the steps outlined in the CPython devguide to rectify this issue. You can check yourself to see if the CLA has been received. Thanks again for the contribution, we look forward to reviewing it! |
I just can't figure out why bedevere/issue-number check is failing. Where do I have to mention it? |
Hmm, I'm not sure I like the API in this solution. If I want to write portable code (Linux and Windows), I would then have to use delete=True and delete_on_close=False in every since call, right? This is going to look at bit convoluted. I'd much rather this was a distinct type of NamedTemporaryFile. |
@blais , yes, this PR assumes, you would need to use There were a lot of suggestions on how to fix this in the original issue14243 discussion with no clear conclusion on what is the best approach. I have chosen this one as it is backwards compatible and does not change philosophy of existing code. I will wait for code reviews to provide their feedback. There must be someone, who takes a final decision on this. |
It would be wiser to create an alternative interface for this that is safe to use between platforms by default, even if it is more constrained, even if that means providing a completely different context manager. |
OK. So I read the comments in the bug and the workaround here. |
@zooba Do you have time to take a look at this PR? |
@zooba , just checking whether you managed to look at this |
Can you re-target for 3.12 (Doc/whatsnew/3.10.rst) please? |
@MaxwellDupre this is incorrect. Double backticks are usually preferred over single backticks in Please read https://devguide.python.org/documenting/ for a full guide on ReST syntax. |
@@ -0,0 +1,16 @@ | |||
At the moment ``NamedTemporaryFile`` is too hard to use portably when you |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is way more details than we want here - this will end up in a list with 1000 other changes.
Most of this should move to specific documentation, and then this entry can link to it with :class:`NamedTemporaryFile`
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is fixed. The spesific documentation is updated and linked to with :class:
tempfile.NamedTemporaryFile``
Doc/whatsnew/3.10.rst
Outdated
@@ -93,6 +93,8 @@ Other Language Changes | |||
:meth:`~object.__index__` method). | |||
(Contributed by Serhiy Storchaka in :issue:`37999`.) | |||
|
|||
* XXX Describe changes to NamedTemporaryFile functionality. Re 2020-09-28-04-56-04.bpo-14243.YECnxv.rst |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Needs to move to 3.12.rst
, and can be about half the length of what's currently in the NEWS file
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implemented. Whats new is moved to 3.12.rst and only 2 lines now
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 |
Commiting changes, suggested by @zooba Co-authored-by: Steve Dower <steve.dower@microsoft.com>
I have made the requested changes; please review again |
Thanks for making the requested changes! @zooba: please review the changes made to this pull request. |
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
changing issue number to github issue number in documentation Co-authored-by: Steve Dower <steve.dower@microsoft.com>
…into fix-issue-14243
…d on the feedback from AA-Turner
@eryksun , @AA-Turner , I have implemented your comments, thank you! Can you please review the final version once again? |
Wrap lines at 70-80 chars in the Doc/whatsnew/3.12.rst Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
This fixes this issue: https://bugs.python.org/issue14243
tempfile.NamedTemporaryFile
is too hard to use portably when you need to open the file by name after writing it. To do that, you need to close the file first (on Windows), which means you have to passdelete=False
, which in turn means that you get no help in cleaning up the actual file resource,Hence at the moment there is no out of the box solution to use tempfile.NamedTemporaryFile on Windows in such scenario (which is often used in unit testing):
In this Pull Request the issue is solved by adding an additional optional argument to
NamedTemporaryFile() 'delete_on_close'
(default is True). It works in combination with already existing argument'delete'
, and determines whether created temporary file gets deleted on close (which until this change was the only functionality available and it remains default now).If
'delete' = True
and'delete_on_close' = False
then temporary file gets deleted on context manager exit only (which is a new functionality).If
'delete'
is not true, then value of 'delete_on_close'
is ignored.So, the change shall be fully backwards compatible.
In the bug discussion such option was discussed by r.david.murray but mainly by eryksun
I have also added several unit tests to test new functionality in different combinations
https://bugs.python.org/issue14243