-
-
Notifications
You must be signed in to change notification settings - Fork 29.3k
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
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. |
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.
Code change looks good, but we need to get the docs in order.
@@ -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 |
…new/3.12.rst and in Lib/tempfile.py" This reverts commit 07076e8.
Yes, this was something with git. I merged master branch into my PR, but it marked lots of files as being changed. I reverted this meanwhile. But I need some guidelines how to move forward. |
Below is the the fixed up Improved Modules section, with each item in proper alphabetical order. I could not commit it because git requires all conflicts fixed in one merge, and I have no idea how to merge your tempfile change with what someone else did since your patch. Use git log or git blame to find the issue that made the alternative change and what it was meant to do. replacement textImproved Modules ================dis
os
pathlib
sqlite3
tempfileThe :class: threading
unicodedata
Note: a few months ago, you did a force push instead of a simple update merge and push. Force pushes sometimes result in the behavior experienced today and are seldom needed. Unclear exactly what you did today. I recommend you fix conflict in your local clone, then merge upstream/main, then push to fork. |
@terryjreedy , thanks for this information, but I am afraid I don't think I understand what to do with it and how exactly to move forward. What I want is to refresh my pull request with whatever is latest in the current main branch. so did merge with the current main, which obviousely introduced a lot of new files, but when I pushed it to github it looks like it made impression, that I tried to modify them, whilst I only transfered them fom the main. Also, the work on PR is not finished yet, as there were some more recent reviews from @eryksun |
There are still conflicts. I'd recommend closing this PR and starting over with the changes you want to make. |
Just for the record: back then I did rebasing from the master (rather than merge). And then I had to do force push, if I remember correctly |
Based on the suggestions of @gvanrossum and @JelleZijlstra I will close this PR and create a new one |
I new PR 97015 has been created to replace this one. |
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