ZipFile.writestr doesn't behave like Path.write_*
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 35.9k
- PR merge metrics
- PR metrics pending
Description
Feature or enhancement
Proposal:
Given that ZipPath doesn't provide a write_text or write_bytes, I'm trying to use ZipFile.writestr and noticed that when the data you're trying to write isn't the right type it still stores an empty entry. I didn't expect side effects when it failed this fundamentally to get the data.
import zipfile
with zipfile.ZipFile("foo.zip", "w") as z:
z.writestr("x", ())
print(z.namelist()) # -> "x"
Notably, Path.write_text behaves the way I'd expect -- it has to construct a memoryview successfully first before opening the file.
from pathlib import Path
Path("x").write_bytes(()) # -> neither creates nor truncates
@jaraco I assume ZipPath not supporting writes is intentional?
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The issue names no implementation file or test. Start by reproducing the zipfile.ZipFile.writestr example and comparing it with pathlib.Path.write_bytes for invalid data; inspect the relevant standard-library implementation and tests. Done means invalid input raises without creating or truncating the archive entry.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100